a
    òñ"h¸ç ã                   @   s°  d dl Z d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZzd dlZW n e y   dZY n0 zd dl!Z!W n e y.   dZ!Y n0 ej"Z"d #d¡Z$dZ%e &¡ d	kZ'zd dl(Z(W n e yt   dZ(Y n0 d
d„ Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1ej2dd„ ƒZ3e*ƒ Z4e+ƒ Z5e,ƒ Z6e-ƒ Z7e.ƒ Z8e/ƒ Z9e0ƒ Z:e;edƒZ<e1ƒ Z=e d¡j>Z?G d d!„ d!e j@ƒZAG d"d#„ d#e j@ƒZBG d$d%„ d%eBƒZCG d&d'„ d'ƒZDG d(d)„ d)e j@ƒZEG d*d+„ d+e j@ƒZFG d,d-„ d-ƒZGG d.d/„ d/eAeGƒZHG d0d1„ d1eBeGƒZIe  Je<d2¡G d3d4„ d4eCeGƒƒZKG d5d6„ d6eEeGƒZLG d7d8„ d8eFeGƒZMe  Ne!du d9¡e  Je:d:¡e  Je)ƒ d;kd<¡G d=d>„ d>e j@eGƒƒƒƒZOG d?d@„ d@eHƒZPG dAdB„ dBe j@eGƒZQG dCdD„ dDe j@ƒZRG dEdF„ dFeRƒZSG dGdH„ dHeDeReGƒZTG dIdJ„ dJeSeTƒZUG dKdL„ dLeRƒZVG dMdN„ dNeVƒZWG dOdP„ dPeRƒZXG dQdR„ dReXƒZYG dSdT„ dTeXƒZZG dUdV„ dVeXƒZ[G dWdX„ dXeXƒZ\G dYdZ„ dZeXƒZ]G d[d\„ d\e]ƒZ^G d]d^„ d^e]ƒZ_d_d`„ Z`dadb„ Zadcdd„ ZbG dedf„ dfe j@ƒZce  Je4dg¡G dhdi„ die j@ƒƒZde  Je4dg¡G djdk„ dkeLƒƒZee  Je5dl¡G dmdn„ dne j@ƒƒZfe  Je6do¡G dpdq„ dqe j@ƒƒZge  Je7dr¡G dsdt„ dte j@ƒƒZhe  Je7dr¡G dudv„ dveMƒƒZie  Je9dw¡G dxdy„ dye j@ƒƒZje  Ne!du d9¡e  Je:d:¡G dzd{„ d{e j@ƒƒƒZke  Je=d|¡G d}d~„ d~e j@ƒƒZlG dd€„ d€ePƒZmG dd‚„ d‚eIƒZne  Je<d2¡G dƒd„„ d„eKƒƒZoG d…d†„ d†eDƒZpG d‡dˆ„ dˆepƒZqG d‰dŠ„ dŠepƒZrG d‹dŒ„ dŒepƒZsG ddŽ„ dŽepƒZtG dd„ depƒZuG d‘d’„ d’epƒZvG d“d”„ d”evƒZwG d•d–„ d–ewƒZxG d—d˜„ d˜ewƒZyG d™dš„ dšepƒZzG d›dœ„ dœezƒZ{G ddž„ džezƒZ|G dŸd „ d eqezƒZ}G d¡d¢„ d¢e j@ƒZ~G d£d¤„ d¤evƒZG d¥d¦„ d¦evƒZ€G d§d¨„ d¨ereteTeZƒZeaejd©ƒG dªd«„ d«eyeƒƒZ‚eaejd¬ƒG d­d®„ d®e|eƒƒZƒeaejd¯ƒG d°d±„ d±e}eƒƒZ„G d²d³„ d³ereteTe^ƒZ…eaejd©ƒe  Jej†d´¡ebdµd¶ƒG d·d¸„ d¸eye…ƒƒƒƒZ‡eaejd¬ƒe  Jej†d´¡ebdµd¶ƒG d¹dº„ dºe|e…ƒƒƒƒZˆeaejd¯ƒe  Jej†d´¡ebdµd¶ƒG d»d¼„ d¼e}e…ƒƒƒƒZ‰eaejd¬ƒe  Jej†d´¡eaed½ƒebdµd¶ƒG d¾d¿„ d¿e€e…ƒƒƒƒƒZŠeaejd¯ƒe  Jej†d´¡eaed½ƒebdµd¶ƒG dÀdÁ„ dÁeqe€e…ƒƒƒƒƒZ‹e  Je<d2¡G dÂdÃ„ dÃereteTe[ƒƒZŒe  Je<d2¡eaejd©ƒG dÄdÅ„ dÅeyeŒƒƒƒZe  Je<d2¡eaejd¬ƒG dÆdÇ„ dÇe|eŒƒƒƒZŽe  Je<d2¡eaejd¯ƒG dÈdÉ„ dÉe}eŒƒƒƒZe  Je<d2¡G dÊdË„ dËereteTe_ƒƒZeaejd©ƒe  Jej†d´¡e  Je<d2¡ebdµd¶ƒG dÌdÍ„ dÍeyeƒƒƒƒƒZ‘eaejd¬ƒe  Jej†d´¡e  Je<d2¡ebdµd¶ƒG dÎdÏ„ dÏe|eƒƒƒƒƒZ’eaejd¯ƒe  Jej†d´¡e  Je<d2¡ebdµd¶ƒG dÐdÑ„ dÑe}eƒƒƒƒƒZ“eaejd¬ƒe  Jej†d´¡e  Je<d2¡eaed½ƒebdµd¶ƒG dÒdÓ„ dÓe€eƒƒƒƒƒƒZ”eaejd¯ƒe  Jej†d´¡e  Je<d2¡eaed½ƒebdµd¶ƒG dÔdÕ„ dÕeqe€eƒƒƒƒƒƒZ•G dÖd×„ d×eueUeYƒZ–eaejd©ƒG dØdÙ„ dÙexe–ƒƒZ—eaejd¬ƒG dÚdÛ„ dÛe|e{e–ƒƒZ˜eaejd¯ƒG dÜdÝ„ dÝe}e{e–ƒƒZ™G dÞdß„ dßeseueUe\ƒZšeaejd©ƒe  Ne'dà¡ebdádâdãƒG dädå„ dåexešƒƒƒƒZ›eaejd¬ƒe  Ne'dà¡ebdádâdãƒG dædç„ dçe|e{ešƒƒƒƒZœeaejd¯ƒe  Ne'dà¡ebdádâdãƒG dèdé„ dée}e{ešƒƒƒƒZG dêdë„ dëeueUeWƒZžeaejd©ƒeaedìƒG dídî„ dîexežƒƒƒZŸeaejd¬ƒeaedìƒG dïdð„ dðe|e{ežƒƒƒZ eaejd¯ƒeaedìƒG dñdò„ dòe}e{ežƒƒƒZ¡eaejd©d¬ƒeaedìdódôƒG dõdö„ döeežƒƒƒZ¢eaejd©d¯ƒeaedìdódôƒG d÷dø„ døeqeežƒƒƒZ£G dùdú„ dúƒZ¤eaedûƒe  Je;edüƒpäe;edýƒdþ¡G dÿd „ d e¤eZƒƒƒZ¥eaedûƒe  Je;edüƒp"e;edýƒdþ¡G dd„ de¤eDeSeYƒƒƒZ¦G dd„ deHƒZ§G dd„ deQƒZ¨G dd„ deQƒZ©G d	d
„ d
eHƒZªG dd„ dePƒZ«G dd„ de«ƒZ¬G dd„ de«ƒZ­G dd„ de«ƒZ®G dd„ de«ƒZ¯G dd„ de«ƒZ°G dd„ de«ƒZ±G dd„ de²ƒZ³G dd„ de³emƒZ´G dd„ de j@ƒZµG dd „ d eAeGƒZ¶G d!d"„ d"eAeGƒZ·G d#d$„ d$eAƒZ¸G d%d&„ d&eBƒZ¹e  Je<d2¡G d'd(„ d(eCƒƒZºG d)d*„ d*e j@ƒZ»e  Jejd+kd,¡G d-d.„ d.e j@ƒƒZ¼e  Je;edìƒd/¡G d0d1„ d1e j@ƒƒZ½G d2d3„ d3ePƒZ¾d4Z¿d5ZÀd6ZÁd7d8„ ZÂe  JeÂƒ d9¡G d:d;„ d;e j@ƒƒZÃe  JeÂƒ d9¡G d<d=„ d=e j@eGƒƒZÄG d>d?„ d?eHƒZÅG d@dA„ dAe j@ƒZÆe  Je;edBƒdC¡G dDdE„ dEe j@ƒƒZÇe  JejÈdFkdG¡e  JedH¡G dIdJ„ dJeAƒƒƒZÉG dKdL„ dLeHƒZÊe  Je;edMƒdN¡G dOdP„ dPeÊƒƒZËe  Je8dQ¡G dRdS„ dSe j@ƒƒZÌe  Jej ÍdT¡dU¡G dVdW„ dWe j@ƒƒZÎG dXdY„ dYe j@ƒZÏG dZd[„ d[e j@ƒZÐeaed\ƒeaed]ƒeaedìƒG d^d_„ d_e j@ƒƒƒƒZÑd`da„ ZÒeÓdbkr¬e  Ô¡  dS (c  é    N)Úsupport)Úsocket_helper)ÚproxyFu   Michael Gilfix was hereáˆ´
úutf-8éÒ  ÚAIXc                  C   s‚   t d u rd S ttdƒsd S z>tddƒ } t  | tjd¡}W d   ƒ n1 sL0    Y  W n tyl   Y d S 0 t d|¡d S d S )NÚIOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsockÚrbz    ÚIr   )	ÚfcntlÚhasattrÚsocketÚopenÚioctlr   ÚOSErrorÚstructÚunpack)ÚfÚr© r   ú8/opt/python-3.9.21/usr/lib/python3.9/test/test_socket.pyÚget_cid2   s    
2r   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS )z5Check whether CAN sockets are supported on this host.FT)r   ÚPF_CANÚSOCK_RAWÚCAN_RAWÚAttributeErrorr   Úclose©Úsr   r   r   Ú_have_socket_can?   s    r   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS )z;Check whether CAN ISOTP sockets are supported on this host.FT)r   r   Ú
SOCK_DGRAMÚ	CAN_ISOTPr   r   r   r   r   r   r   Ú_have_socket_can_isotpI   s    r"   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS )z;Check whether CAN J1939 sockets are supported on this host.FT)r   r   r    Ú	CAN_J1939r   r   r   r   r   r   r   Ú_have_socket_can_j1939S   s    r$   c               	   C   s<   zt   t jt jd¡} W n ttfy.   Y dS 0 |  ¡  dS )z5Check whether RDS sockets are supported on this host.r   FT)r   ÚPF_RDSÚSOCK_SEQPACKETr   r   r   r   r   r   r   Ú_have_socket_rds]   s    r'   c               	   C   s<   zt   t jt jd¡} W n ttfy.   Y dS 0 |  ¡  dS )z8Check whether AF_ALG sockets are supported on this host.r   FT)r   ÚAF_ALGr&   r   r   r   r   r   r   r   Ú_have_socket_algg   s    r)   c               	   C   s<   zt   t jt jd¡} W n ttfy.   Y dS 0 |  ¡  dS )z<Check whether AF_QIPCRTR sockets are supported on this host.r   FT)r   Ú
AF_QIPCRTRr    r   r   r   r   r   r   r   Ú_have_socket_qipcrtrq   s    r+   c                  C   s   t ƒ du} | S )z:Check whether AF_VSOCK sockets are supported on this host.N)r   )Úretr   r   r   Ú_have_socket_vsock{   s    
r-   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS )z>Check whether AF_BLUETOOTH sockets are supported on this host.FT)r   ÚAF_BLUETOOTHÚSOCK_STREAMÚBTPROTO_RFCOMMr   r   r   r   r   r   r   Ú_have_socket_bluetooth   s    r1   c              	   c   s8   t  ¡ }zt  | ¡ d V  W t  |¡ nt  |¡ 0 d S ©N)r   ÚgetdefaulttimeoutÚsetdefaulttimeout)ÚtimeoutZold_timeoutr   r   r   Úsocket_setdefaulttimeoutŽ   s
    
r6   ÚIPPROTO_UDPLITEÚic                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSocketTCPTestc                 C   s.   t   t jt j¡| _t | j¡| _| j ¡  d S r2   )r   ÚAF_INETr/   Úservr   Ú	bind_portÚportÚlisten©Úselfr   r   r   ÚsetUp¯   s    zSocketTCPTest.setUpc                 C   s   | j  ¡  d | _ d S r2   ©r;   r   r?   r   r   r   ÚtearDown´   s    
zSocketTCPTest.tearDownN©Ú__name__Ú
__module__Ú__qualname__rA   rC   r   r   r   r   r9   ­   s   r9   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSocketUDPTestc                 C   s$   t   t jt j¡| _t | j¡| _d S r2   )r   r:   r    r;   r   r<   r=   r?   r   r   r   rA   º   s    zSocketUDPTest.setUpc                 C   s   | j  ¡  d | _ d S r2   rB   r?   r   r   r   rC   ¾   s    
zSocketUDPTest.tearDownNrD   r   r   r   r   rH   ¸   s   rH   c                   @   s   e Zd Zdd„ ZdS )ÚSocketUDPLITETestc                 C   s(   t   t jt jt j¡| _t | j¡| _d S r2   )r   r:   r    r7   r;   r   r<   r=   r?   r   r   r   rA   Ä   s    zSocketUDPLITETest.setUpN)rE   rF   rG   rA   r   r   r   r   rI   Â   s   rI   c                       s8   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚThreadSafeCleanupTestCasez¥Subclass of unittest.TestCase with thread-safe cleanup methods.

    This subclass protects the addCleanup() and doCleanups() methods
    with a recursive lock.
    c                    s    t ƒ j|i |¤Ž t ¡ | _d S r2   )ÚsuperÚ__init__Ú	threadingÚRLockÚ_cleanup_lock©r@   ÚargsÚkwargs©Ú	__class__r   r   rL   Ï   s    z"ThreadSafeCleanupTestCase.__init__c                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r2   )rO   rK   Ú
addCleanuprP   rS   r   r   rU   Ó   s    z$ThreadSafeCleanupTestCase.addCleanupc                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r2   )rO   rK   Ú
doCleanupsrP   rS   r   r   rV   ×   s    z$ThreadSafeCleanupTestCase.doCleanups)rE   rF   rG   Ú__doc__rL   rU   rV   Ú__classcell__r   r   rS   r   rJ   È   s   rJ   c                   @   sH   e Zd ZdZdZdZdZe e¡Z	dZ
e
de e
¡d  7 Z
dd	„ Zd
S )ÚSocketCANTestz¾To be able to run this test, a `vcan0` CAN interface can be created with
    the following commands:
    # modprobe vcan
    # ip link add dev vcan0 type vcan
    # ip link set up vcan0
    Úvcan0é€   z=IB3x8sz@3I4l2IÚxé   c                 C   s`   t   t jt jt j¡| _|  | jj¡ z| j | jf¡ W n" t	yZ   |  
d| j ¡ Y n0 d S ©Nú%network interface `%s` does not exist)r   r   r   r   r   rU   r   ÚbindÚ	interfacer   ÚskipTestr?   r   r   r   rA     s    ÿzSocketCANTest.setUpN)rE   rF   rG   rW   ra   ÚbufsizeÚcan_frame_fmtr   ÚcalcsizeZcan_frame_sizeÚbcm_cmd_msg_fmtrA   r   r   r   r   rY   Û   s   

rY   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚSocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
    é    c                 C   sV   t   t jt jd¡| _|  | jj¡ zt | j¡| _W n t	yP   |  
d¡ Y n0 d S )Nr   zunable to bind RDS socket)r   r%   r&   r;   rU   r   r   r<   r=   r   rb   r?   r   r   r   rA     s    zSocketRDSTest.setUpN)rE   rF   rG   rW   rc   rA   r   r   r   r   rg     s   rg   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚThreadableTesta™  Threadable Test class

    The ThreadableTest class makes it easy to create a threaded
    client/server pair from an existing unit test. To create a
    new threaded class from an existing unit test, use multiple
    inheritance:

        class NewClass (OldClass, ThreadableTest):
            pass

    This class defines two new fixture functions with obvious
    purposes for overriding:

        clientSetUp ()
        clientTearDown ()

    Any new test functions within the class must then define
    tests in pairs, where the test name is preceded with a
    '_' to indicate the client portion of the test. Ex:

        def testFoo(self):
            # Server portion

        def _testFoo(self):
            # Client portion

    Any exceptions raised by the clients during their tests
    are caught and transferred to the main thread to alert
    the testing framework.

    Note, the server setup function cannot call any blocking
    functions that rely on the client thread during setup,
    unless serverExplicitReady() is called just before
    the blocking call (such as in setting up a client/server
    connection and performing the accept() in setUp().
    c                 C   s   | j | _| j| _ d S r2   )rA   Ú_ThreadableTest__setUpÚ_setUpr?   r   r   r   rL   D  s    zThreadableTest.__init__c                 C   s   | j  ¡  dS )zÿThis method allows the server to explicitly indicate that
        it wants the client thread to proceed. This is useful if the
        server is about to execute a blocking routine that is
        dependent upon the client thread during its setup routine.N)Úserver_readyÚsetr?   r   r   r   ÚserverExplicitReadyI  s    z"ThreadableTest.serverExplicitReadyc                    s
  t  ¡ ˆ _ˆ j ¡  ˆ  ˆ jjd d d ¡ t ¡ ˆ _t ¡ ˆ _	t ¡ ˆ _
t d¡ˆ _dˆ _‡ fdd„}ˆ  |¡ ˆ  ¡ }| d¡}||d d … }tˆ d| ƒ}t ˆ j|f¡ˆ _z0zˆ  ¡  W n   dˆ _‚ Y n0 W ˆ j ¡  nˆ j ¡  0 ˆ j	 ¡  ˆ  ˆ j
j¡ d S )Né   Fc                      s   ˆ j  ¡ rˆ j  ¡ ‚d S r2   )ÚqueueÚqsizeÚgetr   r?   r   r   Úraise_queued_exception[  s    
z5ThreadableTest._setUp.<locals>.raise_queued_exceptionÚ.Ú_T)r   Zwait_threads_exitZwait_threadsÚ	__enter__rU   Ú__exit__rM   ÚEventrl   Úclient_readyÚdonerp   ÚQueueÚserver_crashedÚidÚrfindÚgetattrÚthreadÚstart_new_threadÚ	clientRunZclient_threadrj   rm   Úwait)r@   rs   Z
methodnamer8   Ztest_methodr   r?   r   rk   P  s2    






ÿ

zThreadableTest._setUpc              
   C   sö   | j  ¡  zbz|  ¡  W nF ty^ } z.| j |¡ |  ¡  W Y d }~W | j ¡  d S d }~0 0 W | j ¡  n| j ¡  0 | j	rŒ|  ¡  d S t
|dƒsžtdƒ‚zHz
|ƒ  W n0 tyÚ } z| j |¡ W Y d }~n
d }~0 0 W |  ¡  n
|  ¡  0 d S )NÚ__call__z%test_func must be a callable function)rl   rƒ   ÚclientSetUpÚBaseExceptionrp   ÚputÚclientTearDownry   rm   r|   r   Ú	TypeError)r@   Z	test_funcÚer   r   r   r‚   r  s(    

þ

$zThreadableTest.clientRunc                 C   s   t dƒ‚d S )Nz clientSetUp must be implemented.)ÚNotImplementedErrorr?   r   r   r   r…   ˆ  s    zThreadableTest.clientSetUpc                 C   s   | j  ¡  t ¡  d S r2   )rz   rm   r€   Úexitr?   r   r   r   rˆ   ‹  s    
zThreadableTest.clientTearDownN)
rE   rF   rG   rW   rL   rn   rk   r‚   r…   rˆ   r   r   r   r   ri     s   %"ri   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedTCPSocketTestÚrunTestc                 C   s   t j| |d t | ¡ d S ©N)Ú
methodName©r9   rL   ri   ©r@   r   r   r   r   rL   ‘  s    zThreadedTCPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r2   )r   r:   r/   Úclir?   r   r   r   r…   •  s    z!ThreadedTCPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   ©r“   r   ri   rˆ   r?   r   r   r   rˆ   ˜  s    
z$ThreadedTCPSocketTest.clientTearDownN)rŽ   ©rE   rF   rG   rL   r…   rˆ   r   r   r   r   r     s   
r   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedUDPSocketTestrŽ   c                 C   s   t j| |d t | ¡ d S r   )rH   rL   ri   r’   r   r   r   rL   Ÿ  s    zThreadedUDPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r2   )r   r:   r    r“   r?   r   r   r   r…   £  s    z!ThreadedUDPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   ¦  s    
z$ThreadedUDPSocketTest.clientTearDownN)rŽ   r•   r   r   r   r   r–     s   
r–   z'UDPLITE sockets required for this test.c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedUDPLITESocketTestrŽ   c                 C   s   t j| |d t | ¡ d S r   )rI   rL   ri   r’   r   r   r   rL   ¯  s    z"ThreadedUDPLITESocketTest.__init__c                 C   s   t   t jt jt j¡| _d S r2   )r   r:   r    r7   r“   r?   r   r   r   r…   ³  s    z%ThreadedUDPLITESocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   ¶  s    
z(ThreadedUDPLITESocketTest.clientTearDownN)rŽ   r•   r   r   r   r   r—   «  s   
r—   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedCANSocketTestrŽ   c                 C   s   t j| |d t | ¡ d S r   )rY   rL   ri   r’   r   r   r   rL   ½  s    zThreadedCANSocketTest.__init__c                 C   sB   t   t jt jt j¡| _z| j | jf¡ W n ty<   Y n0 d S r2   )r   r   r   r   r“   r`   ra   r   r?   r   r   r   r…   Á  s
    z!ThreadedCANSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   Ê  s    
z$ThreadedCANSocketTest.clientTearDownN)rŽ   r•   r   r   r   r   r˜   »  s   
	r˜   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedRDSSocketTestrŽ   c                 C   s   t j| |d t | ¡ d S r   )rg   rL   ri   r’   r   r   r   rL   Ñ  s    zThreadedRDSSocketTest.__init__c                 C   sL   t   t jt jd¡| _z | j tdf¡ | j ¡ | _W n tyF   Y n0 d S ©Nr   )	r   r%   r&   r“   r`   ÚHOSTÚgetsocknameÚcli_addrr   r?   r   r   r   r…   Õ  s    z!ThreadedRDSSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   à  s    
z$ThreadedRDSSocketTest.clientTearDownN)rŽ   r•   r   r   r   r   r™   Ï  s   
r™   ú
need fcntlz%VSOCK sockets required for this test.é   z-This test can only be run on a virtual guest.c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚThreadedVSOCKSocketStreamTestrŽ   c                 C   s   t jj| |d t | ¡ d S r   ©ÚunittestÚTestCaserL   ri   r’   r   r   r   rL   ì  s    z&ThreadedVSOCKSocketStreamTest.__init__c                 C   sh   t   t jt j¡| _|  | jj¡ | j t jtf¡ | j 	¡  |  
¡  | j ¡ \| _| _|  | jj¡ d S r2   )r   ÚAF_VSOCKr/   r;   rU   r   r`   ÚVMADDR_CID_ANYÚ	VSOCKPORTr>   rn   ÚacceptÚconnÚconnaddrr?   r   r   r   rA   ð  s    
z#ThreadedVSOCKSocketStreamTest.setUpc                 C   sD   t  d¡ t tjtj¡| _|  | jj¡ tƒ }| j 	|t
f¡ d S )Nçš™™™™™¹?)ÚtimeÚsleepr   r¤   r/   r“   rU   r   r   Úconnectr¦   )r@   Zcidr   r   r   r…   ù  s
    
z)ThreadedVSOCKSocketStreamTest.clientSetUpc                 C   s   | j  d¡}|  |t¡ d S ©Né   )r¨   ÚrecvÚassertEqualÚMSG©r@   Úmsgr   r   r   Ú
testStream   s    z(ThreadedVSOCKSocketStreamTest.testStreamc                 C   s   | j  t¡ | j  ¡  d S r2   ©r“   Úsendr²   r   r?   r   r   r   Ú_testStream  s    z)ThreadedVSOCKSocketStreamTest._testStreamN)rŽ   ©rE   rF   rG   rL   rA   r…   rµ   r¸   r   r   r   r   r    å  s
   
	r    c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚSocketConnectedTestzµSocket tests for client-server connection.

    self.cli_conn is a client socket connected to the server.  The
    setUp() method guarantees that it is connected to the server.
    rŽ   c                 C   s   t j| |d d S r   )r   rL   r’   r   r   r   rL     s    zSocketConnectedTest.__init__c                 C   s*   t  | ¡ |  ¡  | j ¡ \}}|| _d S r2   )r   rA   rn   r;   r§   Úcli_conn©r@   r¨   Úaddrr   r   r   rA     s    
zSocketConnectedTest.setUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   )r»   r   r   rC   r?   r   r   r   rC     s    
zSocketConnectedTest.tearDownc                 C   s(   t  | ¡ | j t| jf¡ | j| _d S r2   )r   r…   r“   r­   r›   r=   Ú	serv_connr?   r   r   r   r…     s    
zSocketConnectedTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   )r¾   r   r   rˆ   r?   r   r   r   rˆ   $  s    
z"SocketConnectedTest.clientTearDownN)rŽ   )	rE   rF   rG   rW   rL   rA   rC   r…   rˆ   r   r   r   r   rº     s   
rº   c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚSocketPairTestrŽ   c                 C   s*   t jj| |d t | ¡ d | _d | _d S r   )r¢   r£   rL   ri   r“   r;   r’   r   r   r   rL   +  s    
zSocketPairTest.__init__c                 C   s   t  ¡ S r2   )r   Ú
socketpairr?   r   r   r   rÀ   1  s    zSocketPairTest.socketpairc                 C   s   |   ¡ \| _| _d S r2   )rÀ   r;   r“   r?   r   r   r   rA   5  s    zSocketPairTest.setUpc                 C   s   | j r| j  ¡  d | _ d S r2   rB   r?   r   r   r   rC   8  s    
zSocketPairTest.tearDownc                 C   s   d S r2   r   r?   r   r   r   r…   =  s    zSocketPairTest.clientSetUpc                 C   s$   | j r| j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   @  s    
zSocketPairTest.clientTearDownN)rŽ   )	rE   rF   rG   rL   rÀ   rA   rC   r…   rˆ   r   r   r   r   r¿   )  s   
r¿   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚSocketTestBasezëA base class for socket tests.

    Subclasses must provide methods newSocket() to return a new socket
    and bindSock(sock) to bind it to an unused address.

    Creates a socket self.serv and sets self.serv_addr to its address.
    c                 C   s   |   ¡ | _|  ¡  d S r2   )Ú	newSocketr;   Ú
bindServerr?   r   r   r   rA   V  s    
zSocketTestBase.setUpc                 C   s   |   | j¡ | j ¡ | _dS )z9Bind server socket and set self.serv_addr to its address.N)ÚbindSockr;   rœ   Ú	serv_addrr?   r   r   r   rÃ   Z  s    zSocketTestBase.bindServerc                 C   s   | j  ¡  d | _ d S r2   rB   r?   r   r   r   rC   _  s    
zSocketTestBase.tearDownN)rE   rF   rG   rW   rA   rÃ   rC   r   r   r   r   rÁ   M  s   rÁ   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚSocketListeningTestMixinz%Mixin to listen on the server socket.c                    s   t ƒ  ¡  | j ¡  d S r2   )rK   rA   r;   r>   r?   rS   r   r   rA   g  s    
zSocketListeningTestMixin.setUp)rE   rF   rG   rW   rA   rX   r   r   rS   r   rÆ   d  s   rÆ   c                       s@   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z‡  Z	S )ÚThreadedSocketTestMixinz®Mixin to add client socket and allow client/server tests.

    Client socket is self.cli and its address is self.cli_addr.  See
    ThreadableTest for usage information.
    c                    s    t ƒ j|i |¤Ž t | ¡ d S r2   )rK   rL   ri   rP   rS   r   r   rL   t  s    z ThreadedSocketTestMixin.__init__c                 C   s   |   ¡ | _|  ¡  d S r2   )ÚnewClientSocketr“   Ú
bindClientr?   r   r   r   r…   x  s    
z#ThreadedSocketTestMixin.clientSetUpc                 C   s   |   ¡ S )z&Return a new socket for use as client.)rÂ   r?   r   r   r   rÈ   |  s    z'ThreadedSocketTestMixin.newClientSocketc                 C   s   |   | j¡ | j ¡ | _dS )z8Bind client socket and set self.cli_addr to its address.N)rÄ   r“   rœ   r   r?   r   r   r   rÉ   €  s    z"ThreadedSocketTestMixin.bindClientc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   …  s    
z&ThreadedSocketTestMixin.clientTearDown)
rE   rF   rG   rW   rL   r…   rÈ   rÉ   rˆ   rX   r   r   rS   r   rÇ   l  s   rÇ   c                       sD   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd	„Z‡  ZS )
ÚConnectedStreamTestMixinzëMixin to allow client/server stream tests with connected client.

    Server's socket representing connection to client is self.cli_conn
    and client's connection to server is self.serv_conn.  (Based on
    SocketConnectedTest.)
    c                    s*   t ƒ  ¡  |  ¡  | j ¡ \}}|| _d S r2   )rK   rA   rn   r;   r§   r»   r¼   rS   r   r   rA   ”  s    
zConnectedStreamTestMixin.setUpc                    s   | j  ¡  d | _ tƒ  ¡  d S r2   )r»   r   rK   rC   r?   rS   r   r   rC   œ  s    
z!ConnectedStreamTestMixin.tearDownc                    s$   t ƒ  ¡  | j | j¡ | j| _d S r2   )rK   r…   r“   r­   rÅ   r¾   r?   rS   r   r   r…   ¡  s    
z$ConnectedStreamTestMixin.clientSetUpc                    s6   z| j  ¡  d | _ W n ty&   Y n0 tƒ  ¡  d S r2   )r¾   r   r   rK   rˆ   r?   rS   r   r   rˆ   ¦  s    

z'ConnectedStreamTestMixin.clientTearDown)	rE   rF   rG   rW   rA   rC   r…   rˆ   rX   r   r   rS   r   rÊ   ‹  s
   rÊ   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚUnixSocketTestBasez(Base class for Unix-domain socket tests.c                    s(   t  ¡ | _|  tj| j¡ tƒ  ¡  d S r2   )ÚtempfileÚmkdtempÚdir_pathrU   ÚosÚrmdirrK   rA   r?   rS   r   r   rA   ·  s    
zUnixSocketTestBase.setUpc                 C   s,   t j| jd}t ||¡ |  tj|¡ d S )N)Údir)rÌ   ÚmktemprÎ   r   Úbind_unix_socketrU   r   Úunlink)r@   ÚsockÚpathr   r   r   rÄ   ¼  s    zUnixSocketTestBase.bindSock)rE   rF   rG   rW   rA   rÄ   rX   r   r   rS   r   rË   ¯  s   rË   c                   @   s   e Zd ZdZdd„ ZdS )ÚUnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.c                 C   s   t   t jt j¡S r2   )r   ÚAF_UNIXr/   r?   r   r   r   rÂ   Ä  s    zUnixStreamBase.newSocketN©rE   rF   rG   rW   rÂ   r   r   r   r   r×   Á  s   r×   c                       s,   e Zd ZdZeZ‡ fdd„Zdd„ Z‡  ZS )ÚInetTestBasez!Base class for IPv4 socket tests.c                    s   t ƒ  ¡  | jd | _d S ©Nro   )rK   rA   rÅ   r=   r?   rS   r   r   rA   Í  s    
zInetTestBase.setUpc                 C   s   t j|| jd d S )N©Úhost)r   r<   rÝ   ©r@   rÕ   r   r   r   rÄ   Ñ  s    zInetTestBase.bindSock)	rE   rF   rG   rW   r›   rÝ   rA   rÄ   rX   r   r   rS   r   rÚ   È  s   rÚ   c                   @   s   e Zd ZdZdd„ ZdS )ÚTCPTestBasez#Base class for TCP-over-IPv4 tests.c                 C   s   t   t jt j¡S r2   )r   r:   r/   r?   r   r   r   rÂ   ×  s    zTCPTestBase.newSocketNrÙ   r   r   r   r   rß   Ô  s   rß   c                   @   s   e Zd ZdZdd„ ZdS )ÚUDPTestBasez#Base class for UDP-over-IPv4 tests.c                 C   s   t   t jt j¡S r2   )r   r:   r    r?   r   r   r   rÂ   Ý  s    zUDPTestBase.newSocketNrÙ   r   r   r   r   rà   Ú  s   rà   c                   @   s   e Zd ZdZdd„ ZdS )ÚUDPLITETestBasez'Base class for UDPLITE-over-IPv4 tests.c                 C   s   t   t jt jt j¡S r2   )r   r:   r    r7   r?   r   r   r   rÂ   ã  s    zUDPLITETestBase.newSocketNrÙ   r   r   r   r   rá   à  s   rá   c                   @   s   e Zd ZdZdd„ ZdS )ÚSCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.c                 C   s   t   t jt jt j¡S r2   )r   r:   r/   ÚIPPROTO_SCTPr?   r   r   r   rÂ   é  s    ÿzSCTPStreamBase.newSocketNrÙ   r   r   r   r   râ   æ  s   râ   c                   @   s   e Zd ZdZejZdS )ÚInet6TestBasez!Base class for IPv6 socket tests.N)rE   rF   rG   rW   r   ÚHOSTv6rÝ   r   r   r   r   rä   î  s   rä   c                   @   s   e Zd ZdZdd„ ZdS )ÚUDP6TestBasez#Base class for UDP-over-IPv6 tests.c                 C   s   t   t jt j¡S r2   )r   ÚAF_INET6r    r?   r   r   r   rÂ   ö  s    zUDP6TestBase.newSocketNrÙ   r   r   r   r   ræ   ó  s   ræ   c                   @   s   e Zd ZdZdd„ ZdS )ÚUDPLITE6TestBasez'Base class for UDPLITE-over-IPv6 tests.c                 C   s   t   t jt jt j¡S r2   )r   rç   r    r7   r?   r   r   r   rÂ   ü  s    zUDPLITE6TestBase.newSocketNrÙ   r   r   r   r   rè   ù  s   rè   c                    s*   dd„ ‰ ‡ ‡fdd„}dd„ }| r&|S |S )a  Skip decorated test if condition is true, add client_skip decorator.

    If the decorated object is not a class, sets its attribute
    "client_skip" to a decorator which will return an empty function
    if the test is to be skipped, or the original function if it is
    not.  This can be used to avoid running the client part of a
    skipped test when using ThreadableTest.
    c                  _   s   d S r2   r   ©rQ   rR   r   r   r   Úclient_pass  s    z%skipWithClientIf.<locals>.client_passc                    s*   t  ˆ¡| ƒ}t| tƒs&‡ fdd„|_|S )Nc                    s   ˆ S r2   r   ©r   )rê   r   r   Ú<lambda>  ó    z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)r¢   ÚskipÚ
isinstanceÚtypeÚclient_skip)ÚobjZretval©rê   Úreasonr   r   Úskipdec  s    
z!skipWithClientIf.<locals>.skipdecc                 S   s"   t | tƒst| dƒsdd„ | _| S )Nrñ   c                 S   s   | S r2   r   rë   r   r   r   rì     rí   z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)rï   rð   r   rñ   ©rò   r   r   r   Ú	noskipdec  s    
z#skipWithClientIf.<locals>.noskipdecr   )Z	conditionrô   rõ   r÷   r   ró   r   ÚskipWithClientIf  s    	rø   c                    s0   ‡ fdd„|D ƒ}t |dd dd„ |D ƒ¡ ƒS )zƒSkip decorated test if obj is missing any of the given attributes.

    Sets client_skip attribute as skipWithClientIf() does.
    c                    s   g | ]}t ˆ |ƒs|‘qS r   )r   ©Ú.0Únamerö   r   r   Ú
<listcomp>  rí   z requireAttrs.<locals>.<listcomp>údon't have ú, c                 s   s   | ]
}|V  qd S r2   r   rù   r   r   r   Ú	<genexpr>   rí   zrequireAttrs.<locals>.<genexpr>)rø   Újoin)rò   Z
attributesÚmissingr   rö   r   ÚrequireAttrs  s    ÿr  c               
   G   s¨   d}dd„ | D ƒ}|r0dd  dd„ |D ƒ¡ }nRdd„ | D ƒ}ztj|Ž }W n, tyx } zt|ƒ}W Y d}~nd}~0 0 | ¡  t|dud	 d  d
d„ | D ƒ¡|¡ƒS )a  Skip decorated test if a socket cannot be created with given arguments.

    When an argument is given as a string, will use the value of that
    attribute of the socket module, or skip the test if it doesn't
    exist.  Sets client_skip attribute as skipWithClientIf() does.
    Nc                 S   s$   g | ]}t |tƒrtt|ƒs|‘qS r   )rï   Ústrr   r   ©rú   rò   r   r   r   rü   +  s   ÿz!requireSocket.<locals>.<listcomp>rý   rþ   c                 s   s   | ]
}|V  qd S r2   r   rù   r   r   r   rÿ   .  rí   z requireSocket.<locals>.<genexpr>c                 S   s$   g | ]}t |tƒrtt|ƒn|‘qS r   )rï   r  r   r   r  r   r   r   rü   0  s   ÿzcan't create socket({0}): {1}c                 s   s   | ]}t |ƒV  qd S r2   )r  ©rú   Úor   r   r   rÿ   <  rí   )r   r   r   r  r   rø   Úformat)rQ   Úerrr  Zcallargsr   rŠ   r   r   r   ÚrequireSocket#  s$    ÿÿþr	  c                   @   sp  e Zd Zdd„ Zdd„ Ze edud¡dd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Ze ejdkd¡dd„ ƒZe ejdkd¡e ejd¡dd„ ƒƒZdd„ Zdd„ Zd d!„ Ze eed"ƒd#¡e eed$ƒd%¡d&d'„ ƒƒZe eed(ƒd)¡d*d+„ ƒZe eed,ƒd-¡d.d/„ ƒZe eed0ƒd1¡d2d3„ ƒZe eed4ƒd5¡d6d7„ ƒZd8d9„ Z d:d;„ Z!e"j#d<d=„ ƒZ$d>d?„ Z%d@dA„ Z&e eedBƒdC¡dDdE„ ƒZ'e eedFƒdG¡dHdI„ ƒZ(e eedFƒdG¡dJdK„ ƒZ)e eedLƒdM¡dNdO„ ƒZ*e eedLƒdM¡dPdQ„ ƒZ+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2e ejdkd¡d`da„ ƒZ3e ejdkd¡e eedbƒdc¡ddde„ ƒƒZ4dfdg„ Z5dhdi„ Z6e e" 7dj¡dk¡dldm„ ƒZ8dndo„ Z9dpdq„ Z:drds„ Z;dtdu„ Z<dvdw„ Z=dxdy„ Z>dzd{„ Z?d|d}„ Z@d~d„ ZAd€d„ ZBd‚dƒ„ ZCe"j#d„d…„ ƒZDe ejd†¡d‡dˆ„ ƒZEe ejd†¡d‰dŠ„ ƒZFe ejd†¡e Gejd‹kdŒ¡e GeHd¡dŽd„ ƒƒƒZIe ejd†¡e ejd‹kd¡d‘d’„ ƒƒZJe ejd†¡e Gejd‹kdŒ¡e GeHd¡d“d”„ ƒƒƒZKe ejd†¡e ejd‹kd¡d•d–„ ƒƒZLd—d˜„ ZMd™dš„ ZNd›dœ„ ZOe eedƒdž¡dŸd „ ƒZPd¡d¢„ ZQd£d¤„ ZRd¥d¦„ ZSd§d¨„ ZTd©dª„ ZUe Gejdkd«¡d¬d­„ ƒZVd®d¯„ ZWd°d±„ ZXdS )²ÚGeneralModuleTestsc                 C   s<   dd l }|  tj|ju ¡ t ¡ }|  |tj¡ | ¡  d S rš   )Ú_socketÚ
assertTruer   Ú
SocketTypeÚassertIsInstancer   )r@   r  r   r   r   r   Útest_SocketType_is_socketobjectD  s
    z2GeneralModuleTests.test_SocketType_is_socketobjectc                 C   sî   t   t jt j¡}|¦ |  d| ¡  t|ƒ¡ |  dt j t|ƒ¡ |  dt j t|ƒ¡ |  dt|ƒ¡ |  dt|ƒ¡ | d¡ |  dt|ƒ¡ |  t| 	¡ ƒt|ƒ¡ W d   ƒ n1 sÀ0    Y  |  dt|ƒ¡ |  dt|ƒ¡ d S )	Nzfd=%iz	family=%sztype=%szproto=0Úraddr©ú	127.0.0.1r   Úladdrz[closed])
r   r:   r/   ÚassertInÚfilenoÚreprÚassertNotInr`   r  rœ   ©r@   r   r   r   r   Ú	test_reprK  s    
6zGeneralModuleTests.test_reprNzneed _socket modulec                 C   sz   t  t jt j¡}z6d| ¡ |j|j|jf }|  t	|ƒ|¡ W | 
¡  n
| 
¡  0 d|j|j|jf }|  t	|ƒ|¡ d S )Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)r  r   r:   r/   r  Úfamilyrð   Úprotor±   r  r   )r@   r   Úexpectedr   r   r   Útest_csocket_reprY  s    ÿÿz$GeneralModuleTests.test_csocket_reprc                 C   s†   t   t jt j¡,}t|ƒ}|  | ¡ | ¡ ¡ W d   ƒ n1 sB0    Y  d }t ¡  z| ¡  W n tyv   Y n0 |  	d¡ d S )NzSocket proxy still exists)
r   r:   r/   r   r±   r  r   Ú
gc_collectÚReferenceErrorÚfail)r@   r   Úpr   r   r   Útest_weakreff  s    2zGeneralModuleTests.test_weakrefc                 C   s®   d}| j t|d d t‚W d   ƒ n1 s00    Y  | j t|d d tj‚W d   ƒ n1 sh0    Y  | j t|d d tj‚W d   ƒ n1 s 0    Y  d S )Nz$Error raising socket exception (%s).r   ©r´   zsocket.herrorzsocket.gaierror)ÚassertRaisesr   r   ÚherrorÚgaierrorr³   r   r   r   ÚtestSocketErrors  s    "$z"GeneralModuleTests.testSocketErrorc                 C   s  t   t jt j¡}|  |j¡ | d¡ | ¡ }|  t¡}| 	d|¡ W d   ƒ n1 sZ0    Y  |  
t|jƒd¡ |  t¡}| 	d|¡ W d   ƒ n1 s¢0    Y  |  
t|jƒd¡ |  t¡}| 	dd ¡ W d   ƒ n1 sê0    Y  |  dt|jƒ¡ |  t¡}| 	dd|¡ W d   ƒ n1 s60    Y  |  
t|jƒd¡ |  t¡}| 	dd|¡ W d   ƒ n1 s‚0    Y  |  
t|jƒd¡ |  t¡}| 	ddd ¡ W d   ƒ n1 sÎ0    Y  |  dt|jƒ¡ |  t¡}| 	dd	|¡ W d   ƒ n1 s0    Y  |  d
t|jƒ¡ |  t¡}| 	dd d ¡ W d   ƒ n1 sf0    Y  |  d
t|jƒ¡ |  t¡}| 	d¡ W d   ƒ n1 s®0    Y  |  dt|jƒ¡ |  t¡ }| 	dd|d¡ W d   ƒ n1 sü0    Y  |  dt|jƒ¡ d S )N)Ú r   u   â˜ z*a bytes-like object is required, not 'str'y              @z.a bytes-like object is required, not 'complex'ó   fooznot NoneTyper   Úbarzan integer is requiredz	(1 given)é   z	(4 given))r   r:   r    rU   r   r`   rœ   r$  r‰   Úsendtor±   r  Ú	exceptionr  )r@   r   ÚsocknameÚcmr   r   r   ÚtestSendtoErrors}  sT    
*ÿ*ÿ*.ÿ.ÿ...*0z#GeneralModuleTests.testSendtoErrorsc                 C   s@   t j t jrt j t j t j t j t j t j t j	 t j
 d S r2   )r   r:   Úhas_ipv6rç   r/   r    r   ÚSOCK_RDMr&   Ú
SOL_SOCKETÚSO_REUSEADDRr?   r   r   r   ÚtestCrucialConstants©  s    z'GeneralModuleTests.testCrucialConstantsc                 C   s   t j t j t jrt j d S r2   )r   ÚIPPROTO_TCPÚIPPROTO_UDPr1  ÚIPPROTO_IPV6r?   r   r   r   ÚtestCrucialIpProtoConstants¶  s    z.GeneralModuleTests.testCrucialIpProtoConstantsÚntúWindows specificc                 C   s4   t j t j t j t j t j t j t j t j d S r2   )	r   ZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPrã   r?   r   r   r   ÚtestWindowsSpecificConstants¼  s    z/GeneralModuleTests.testWindowsSpecificConstantsÚdarwinzmacOS specific testúIPv6 required for this testc                 C   s0   h d£}|D ]}|   tt|ƒd|› d¡ qd S )N>   ÚIPV6_NEXTHOPÚIPV6_RECVHOPLIMITÚIPV6_HOPLIMITÚIPV6_DSTOPTSÚ
IPV6_RTHDRÚIPV6_PATHMTUZIPV6_USE_MIN_MTUÚIPV6_RECVDSTOPTSÚIPV6_HOPOPTSÚIPV6_CHECKSUMÚIPV6_RECVTCLASSÚIPV6_RECVRTHDRÚIPV6_DONTFRAGÚIPV6_PKTINFOÚIPV6_RTHDR_TYPE_0ÚIPV6_RECVPATHMTUÚIPV6_RECVPKTINFOÚIPV6_RTHDRDSTOPTSÚIPV6_TCLASSÚIPV6_RECVHOPOPTSzMissing RFC3542 socket option 'ú')r  r   r   )r@   ZoptsÚoptr   r   r   Útest3542SocketOptionsÇ  s
    ÿz(GeneralModuleTests.test3542SocketOptionsc                 C   s´   t  ¡ }zt  |¡}W n ty2   |  d¡ Y n0 |  | d¡dkd¡ zt  |¡\}}}W n tyz   |  d¡ Y n0 ||g| }t  |¡}||vr°|  	d|t
|ƒf ¡ d S )Núname lookup failurert   r   zError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r   ÚgethostnameÚgethostbynamer   rb   r  ÚfindÚgethostbyaddrÚgetfqdnr   r  )r@   ÚhostnameÚipZhnameÚaliasesÚipaddrsZall_host_namesZfqhnr   r   r   ÚtestHostnameResæ  s    
z"GeneralModuleTests.testHostnameResc                 C   sL   t jddfD ]}|  t |¡|¡ qt jfD ]}|  |t |¡d ¡ q,d S )Nz10.0.0.1ú255.255.255.255rŸ   )r   ZHOSTv4r±   r   rW  r  rY  )r@   r½   rÝ   r   r   r   Útest_host_resolutionù  s    z'GeneralModuleTests.test_host_resolutionc              	   C   s‚   d}dD ]t}| j t|d t |¡ W d   ƒ n1 s:0    Y  | j t|d t |¡ W d   ƒ q1 sr0    Y  qd S )Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r#  )r$  r   r   rW  rY  )r@   Zexplanationr½   r   r   r   Ú test_host_resolution_bad_address  s    ÿ(z3GeneralModuleTests.test_host_resolution_bad_addressÚsethostnameztest needs socket.sethostname()rV  ztest needs socket.gethostname()c              
   C   s    t  ¡ }zt  d¡ W n> tyT } z&|jtjkr>|  d¡ n‚ W Y d }~n
d }~0 0 z8|  t  ¡ d¡ t  d¡ |  t  ¡ d¡ W t  |¡ nt  |¡ 0 d S )NÚnewztest should be run as roots   barr*  )r   rV  rc  r   ÚerrnoÚEPERMrb   r±   )r@   ZoldhnrŠ   r   r   r   Útest_sethostname  s    
z#GeneralModuleTests.test_sethostnameÚif_nameindexz$socket.if_nameindex() not available.c                 C   s‚   t  ¡ }|D ]p\}}|  |t¡ |  |t¡ |  |d¡ t  |¡}|  |t¡ |  ||¡ t  |¡}|  |t¡ |  ||¡ qd S rš   )	r   rh  r  Úintr  ÚassertGreaterÚif_nametoindexr±   Úif_indextoname)r@   Z
interfacesÚindexrû   Z_indexÚ_namer   r   r   ÚtestInterfaceNameIndex%  s    

z)GeneralModuleTests.testInterfaceNameIndexrl  z&socket.if_indextoname() not available.c              	   C   sú   |   ttjd¡ |   ttjd¡ |   ttjdd ¡ |   ttjd¡ ttdƒrött ¡ ƒ}|D ]L}|d }||vr^|   ttf¡ t |¡ W d   ƒ q^1 s 0    Y  q^dD ]D}||vr°|   ttf¡ t |¡ W d   ƒ q°1 sê0    Y  q°d S )	Nr   éÿÿÿÿrŸ   éè  Ú	_DEADBEEFrh  ì        )ì   ÿÿ l   ÿÿÿÿ )	r$  r   r   rl  ÚOverflowErrorr‰   r   Údictrh  )r@   Úindicesrm  Úindex2r   r   r   ÚtestInvalidInterfaceIndexToName5  s    
*z2GeneralModuleTests.testInvalidInterfaceIndexToNamerk  z&socket.if_nametoindex() not available.c                 C   s$   |   ttjd¡ |   ttjd¡ d S )Nr   rr  )r$  r‰   r   rk  r   r?   r   r   r   ÚtestInvalidInterfaceNameToIndexH  s    z2GeneralModuleTests.testInvalidInterfaceNameToIndexÚgetrefcountztest needs sys.getrefcount()c                 C   sJ   zt  t¡}t td¡ W n* tyD   t  t¡|kr@|  d¡ Y n0 d S )Nr   z$socket.getnameinfo loses a reference)Úsysr{  rE   r   Úgetnameinfor‰   r   )r@   Úorigr   r   r   ÚtestRefCountGetNameInfoN  s    
z*GeneralModuleTests.testRefCountGetNameInfoc                 C   s(   zt  dd¡ W n ty"   Y n0 d S )N)r\   r   r   r   r   )r   r}  r   r?   r   r   r   ÚtestInterpreterCrashZ  s    z'GeneralModuleTests.testInterpreterCrashc              	   C   sŽ   t jdt jdt jdt jdi}| ¡ D ]d\}}d|> d }dD ]$}|  ||@ ||||@ ƒƒ|@ ¡ q<||ƒ}|  ||@ |¡ |  t|d¡ q$d S )Né    é   ro   )r   ro   éÿÿ  i  ÿÿrŸ   igE#i2Tvl        )	r   ÚhtonlÚntohlÚhtonsÚntohsÚitemsr±   r$  ru  )r@   ZsizesÚfuncÚsizeÚmaskr8   Zswappedr   r   r   ÚtestNtoHb  s    ÿ"zGeneralModuleTests.testNtoHc                 C   s
  dd l }g d¢}|dg }ddddd> g}||jd |jd g }d	|jg}|D ]}t |¡ t |¡ qP|D ]}t |¡ t |¡ qn|D ]$}|  t	tj|¡ |  t	tj|¡ qŒ|D ]$}|  t	tj|¡ |  t	tj|¡ q¶|D ]$}|  
ttj|¡ |  
ttj|¡ qàd S )
Nr   )r   ro   rŸ   rƒ  rt  rp  éþÿÿÿrs  ro   rq  é   )Ú	_testcapiZINT_MINÚINT_MAXr   r‡  r†  r…  r„  r$  ru  ÚassertWarnsÚDeprecationWarning)r@   r  Zs_good_valuesZl_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_valuesÚkr   r   r   ÚtestNtoHErrorsp  s.    

ÿ


z!GeneralModuleTests.testNtoHErrorsc              	   C   s   | j }tj d¡stjdv r"d}nd}|D ].}zt |d¡}W  q^W q* tyV   Y q*0 q*t‚ttdƒrtt ¡ dkrˆt |¡}|||ƒ zt |d¡}W n ty®   d }Y n0 |||ƒ t	j
sÐ|t |¡|ƒ |t |d¡|ƒ |d urü|t |d¡|ƒ |  ttjd	¡ |  ttjd
¡ d S )N)ÚfreebsdZnetbsdZgnukfreebsd)Úlinuxr=  )ÚdaytimeZqotdÚdomain)Zechor—  r˜  ZtcpÚgetandroidapilevelé   Zudprp  rŽ  )r±   r|  ÚplatformÚ
startswithr   Úgetservbynamer   r   r™  r   Z
is_androidÚgetservbyportr$  ru  )r@   ÚeqZservicesZservicer=   Zport2Zudpportr   r   r   ÚtestGetServBy‰  s<    ÿ


ÿ



z GeneralModuleTests.testGetServByc              	   C   s0  |   t ¡ d ¡ t ¡  }|   | ¡ d ¡ W d   ƒ n1 s>0    Y  tdƒª |   t ¡ d¡ t ¡  }|   | ¡ d¡ W d   ƒ n1 s0    Y  t d ¡ |   t ¡ d ¡ t ¡  }|   | ¡ d ¡ W d   ƒ n1 sâ0    Y  W d   ƒ n1 s0    Y  |  ttjd¡ |  ttjd¡ d S )Né
   rp  Zspam)	r±   r   r3   Ú
gettimeoutr6   r4   r$  Ú
ValueErrorr‰   )r@   r   rÕ   r   r   r   ÚtestDefaultTimeoutµ  s    
.

.

Nz%GeneralModuleTests.testDefaultTimeoutÚ	inet_atonztest needs socket.inet_aton()c                 C   s(   |   dt d¡¡ |   dt d¡¡ d S )Nó       ú0.0.0.0ó   ÿÿÿÿr`  )r±   r   r¥  r?   r   r   r   ÚtestIPv4_inet_aton_fourbytesÎ  s    z/GeneralModuleTests.testIPv4_inet_aton_fourbytesÚ	inet_ptonztest needs socket.inet_pton()c                    s*  ddl m}m‰m‰  ‡ ‡fdd„}‡fdd„}ˆ d|dƒ¡ ˆ d|d	ƒ¡ ˆ d
|dƒ¡ ˆ d|dƒ¡ ˆ d|dƒ¡ tsŒ||dƒ ||dƒ ||dƒ ||dƒ ||dƒ ˆ d|dƒ¡ ˆ d|d	ƒ¡ ˆ d
|dƒ¡ ˆ d|dƒ¡ ||dƒ ||dƒ ||dƒ ||dƒ ||dƒ d S )Nr   )r¥  rª  r:   c                    s
   ˆˆ | ƒS r2   r   ©Úa)r:   rª  r   r   rì   Ú  rí   z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r2   ©r$  r   r£  ©r‰  r¬  r?   r   r   rì   Ü  s   
ÿr¦  r§  s   ÿ ÿ z255.0.255.0s   ªªªªz170.170.170.170ó   ú1.2.3.4r¨  r`  z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5ú::1)r   r¥  rª  r:   r±   r   ©r@   r   ÚgÚassertInvalidr   )r:   rª  r@   r   ÚtestIPv4toStringÖ  s.    








z#GeneralModuleTests.testIPv4toStringc              
      sÄ  z&ddl m‰m‰ m} |s$ˆ d¡ W n tyB   ˆ d¡ Y n0 tjdkr–zˆˆ dƒ W n8 ty” } z |j	dkr€ˆ d¡ W Y d }~n
d }~0 0 ‡ ‡fd	d
„‰‡‡fdd
„}ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ |dƒ |dƒ |dƒ |dƒ |dƒ |dƒ |dƒ |dƒ ts`|dƒ ˆ 
dˆd ƒ¡ ˆ 
d!ˆd"ƒ¡ ˆ 
d#ˆd$ƒ¡ |d%ƒ |d&ƒ |d'ƒ |d(ƒ |d)ƒ |d*ƒ d S )+Nr   )rª  rç   r1  úIPv6 not availableú+could not import needed symbols from socketÚwin32ú::é&'  úIPv6 might not be supportedc                    s
   ˆˆ | ƒS r2   r   r«  )rç   rª  r   r   rì     rí   z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r2   r­  r«  ©r   r@   r   r   rì   	  s   
ÿó                   z0::0s                  z1::s   EïvË Vï¯ë¬$®®z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes   ­B
¼    '  T zad42:abc::127:0:254:2s     
            z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:0z1:2:3:4:5:6:7:8:s               þ*@z::254.42.23.64s    B        ¢›þ*@z42::a29b:254.42.23.64s    B¨¹   ÿÿ¢›þ*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)r   rª  rç   r1  rb   ÚImportErrorr|  r›  r   Úwinerrorr±   r   ©r@   r1  rŠ   r´  r   )rç   r   rª  r@   r   ÚtestIPv6toString÷  sj    

 þþÿþþz#GeneralModuleTests.testIPv6toStringÚ	inet_ntopztest needs socket.inet_ntop()c                    s  ddl m}m‰m‰  ‡ ‡fdd„}‡fdd„}ˆ d|dƒ¡ ˆ d|d	ƒ¡ ˆ d
|dƒ¡ ˆ d|dƒ¡ ||dƒ ||dƒ ||dƒ ˆ d|td	ƒƒ¡ ˆ d|dƒ¡ ˆ d|d	ƒ¡ ˆ d
|dƒ¡ ||dƒ ||dƒ ||dƒ ˆ d|td	ƒƒ¡ d S )Nr   )Ú	inet_ntoarÂ  r:   c                    s
   ˆˆ | ƒS r2   r   r«  )r:   rÂ  r   r   rì   ;  rí   z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r2   r­  r®  r?   r   r   rì   <  s   
ÿz1.0.1.0s     z170.85.170.85s   ªUªUr`  r¨  r°  r¯  s      s        r½  )r   rÃ  rÂ  r:   r±   Ú	bytearrayr²  r   )r:   rÂ  r@   r   ÚtestStringToIPv47  s$    





z#GeneralModuleTests.testStringToIPv4c              
      s  z&ddl m‰m‰ m} |s$ˆ d¡ W n tyB   ˆ d¡ Y n0 tjdkr–zˆˆ dƒ W n8 ty” } z |j	dkr€ˆ d¡ W Y d }~n
d }~0 0 ‡ ‡fd	d
„‰‡‡fdd
„}ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆtdƒƒ¡ |dƒ |dƒ |dƒ d S )Nr   )rÂ  rç   r1  r¶  r·  r¸  r½  rº  r»  c                    s
   ˆˆ | ƒS r2   r   r«  )rç   rÂ  r   r   rì   b  rí   z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r2   r­  r«  r¼  r   r   rì   c  s   
ÿr¹  r±  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
ïÿÿ™— Ups   s   s   )r   rÂ  rç   r1  rb   r¾  r|  r›  r   r¿  r±   rÄ  rÀ  r   )rç   r   rÂ  r@   r   ÚtestStringToIPv6Q  s0    

 þz#GeneralModuleTests.testStringToIPv6c                 C   sœ   t  ¡ }t tjtj¡}|  |j¡ | d|f¡ | ¡ }zt 	t 
¡ ¡}W n tyh   |  d¡ Y n0 |  |d d|fd|d  ¡ |  |d |¡ d S )Nr§  rU  r   z
%s invalidro   )r   Úfind_unused_portr   r:   r/   rU   r   r`   rœ   rW  rV  r   rb   r  r±   )r@   r=   rÕ   rû   Z
my_ip_addrr   r   r   ÚtestSockNameu  s    zGeneralModuleTests.testSockNamec                 C   s@   t   t jt j¡}|  |j¡ | t jt j¡}|  |dkd¡ d S )Nr   zinitial mode is reuse)	r   r:   r/   rU   r   Ú
getsockoptr3  r4  ÚassertFalse©r@   rÕ   Zreuser   r   r   ÚtestGetSockOpt‡  s    z!GeneralModuleTests.testGetSockOptc                 C   sR   t   t jt j¡}|  |j¡ | t jt jd¡ | t jt j¡}|  	|dkd¡ d S )Nro   r   zfailed to set reuse mode)
r   r:   r/   rU   r   Ú
setsockoptr3  r4  rÉ  rÊ  rË  r   r   r   ÚtestSetSockOpt  s
    z!GeneralModuleTests.testSetSockOptc                 C   sN   t   t jt j¡}| d¡ W d   ƒ n1 s00    Y  |  t|jd¡ d S )Nro   ó   spam)r   r:   r/   Ú
settimeoutr$  r   r·   rÞ   r   r   r   ÚtestSendAfterClose—  s    (z%GeneralModuleTests.testSendAfterClosec              
   C   s‚   t   ¡ }| t jdf¡ t j | ¡ d ¡  z| ¡  W n: tyr } z"|  |jtjtj	f¡ W Y d }~nd }~0 0 |  
d¡ d S )Nr   ©r  z#close() should raise EBADF/ENOTSOCK)r   r`   Ú
_LOCALHOSTr  r   r   r  re  ÚEBADFÚENOTSOCKr   )r@   rÕ   r  r   r   r   ÚtestCloseException  s    ,z%GeneralModuleTests.testCloseExceptionc                 C   sŠ   t   t jt j¡f}|  |jt j¡ tt dƒrJ|  |jt jt jB t jf¡ n|  |jt j¡ |  |j	d¡ W d   ƒ n1 s|0    Y  d S )NÚSOCK_CLOEXECr   )
r   r:   r/   r±   r  r   r  rð   r×  r  rÞ   r   r   r   ÚtestNewAttributes©  s    

ÿÿz$GeneralModuleTests.testNewAttributesc                 C   sÀ   t   ¡ }|  |j¡ t ¡ }|d }|d }|  t|jt|f¡ |  t|jt|f¡ t	 
¡ D ]^}t ¡ }z| t|f¡ W n: ty´ } z"|jtjksž|dkr ‚ W Y d }~q\d }~0 0  q¼q\d S )NrŽ  é   )r   rU   r   r   rÇ  r$  ru  r`   r›   Ú	itertoolsÚcountr   re  Z
EADDRINUSE)r@   rÕ   r=   Zbig_portZneg_portr8   rŠ   r   r   r   Útest_getsockaddrarg¶  s    z&GeneralModuleTests.test_getsockaddrargc                 C   sŠ   |   ttjdƒ¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ t ¡ }|  |j¡ |  t|jdd ¡ | tjd¡ d S )Nr   Z
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFFÚSIO_KEEPALIVE_VALSrp  )ro   éd   rÞ  )	r  r   r   rU   r   r$  r£  r   rÝ  r  r   r   r   Útest_sock_ioctlÊ  s    z"GeneralModuleTests.test_sock_ioctlÚSIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc              
   C   s~   t   ¡ }|  |j¡ z| t jd¡ W n> tyd } z&d}|j|krN|  d¡ ‚ W Y d }~n
d }~0 0 |  t	|jt jd ¡ d S )NTi='  zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
r   rU   r   r   rà  r   r¿  rb   r$  r‰   )r@   r   ÚexcZWSAEOPNOTSUPPr   r   r   Útest_sio_loopback_fast_pathÖ  s    

z.GeneralModuleTests.test_sio_loopback_fast_pathc           
   
   C   s@  zt  dd¡ W n> t jyN } z$|jt jkr8|  d¡ ‚ W Y d }~n
d }~0 0 t  td ¡D ]}|  t|ƒd¡ q\t  dd¡ t  dd¡ t  d d¡ t	j
r¨t  dd¡ ttdƒr¾t ¡ dkrÊt  td	¡ t  td¡ t  td ¡ t  tdt jt j¡}|D ]J\}}}}}|  |t j¡ |  t|ƒd
¡ |  |t j¡ |  t|ƒd¡ qút  td dt j¡}|D ]\}}}}}|  |t j¡ q\t  td ddt j¡ t  td dddt j¡ t  d dt jt jdt j¡ t  td ¡}t jtd d}	|  ||	¡ t  td t j¡}t jtd t jd}	|  ||	¡ t  td dt j¡}t jtd t jd}	|  ||	¡ t  td ddt j¡}t jtd t jd}	|  ||	¡ t  td dddt j¡}t jtd t jd}	|  ||	¡ t  d dt jt jdt j¡}t jd dt jt jdt jd}	|  ||	¡ |  tt jdd¡ tt dƒr<zt  dd dddt j¡ W n t jy:   Y n0 d S )NÚ	localhostéP   zbuggy libc versionrÙ  r  r±  r™  rš  ÚhttpúAddressFamily.AF_INETúSocketKind.SOCK_STREAMr   )rÝ   r=   ©r  ©rð   )r  )Úflags)rÝ   r=   r  rð   r  rê  u   í €ÚAI_NUMERICSERV)r   Úgetaddrinfor&  re  ÚEAI_SERVICErb   r›   r±   Úlenr   ÚIPV6_ENABLEDr   r|  r™  r:   r/   r  ÚSOL_TCPÚ
AI_PASSIVEÚ	AF_UNSPECr$  ÚUnicodeEncodeErrorrë  )
r@   r  ÚinfoZinfosr  rð   ru   Úsocktyper¬  Úbr   r   r   ÚtestGetaddrinfoæ  s€    


ÿÿÿþÿz"GeneralModuleTests.testGetaddrinfoc                 C   s   |   ttjdd¡ d S )N)zmail.python.orgr   r   )r$  r   r   r}  r?   r   r   r   Útest_getnameinfo4  s    z#GeneralModuleTests.test_getnameinfoÚnetworkznetwork is not enabledc                 C   sd   t  d¡ t d¡ W d   ƒ n1 s*0    Y  d}t |¡ t |¡ t |dtjtj¡ d S )Nz
python.orgu!   Ð¸ÑÐ¿Ñ‹Ñ‚Ð°Ð½Ð¸Ðµ.pythontest.netr   )r   Ztransient_internetr   rW  Úgethostbyname_exrì  rò  r/   )r@   r˜  r   r   r   Ú	test_idna8  s    (

zGeneralModuleTests.test_idnac              
      s2  t tdƒrt tdƒsˆ  d¡ ‡ fdd„}‡ fdd„}t ¡ \}}t tj|¡}z²|r`| d¡ ˆ  t¡* t 	d	¡ | 
d
tj ¡ W d   ƒ n1 sš0    Y  |rØt tj|¡ t 	d	¡ ˆ  tj|j
d
tj ¡ W t 	d¡ t tj|¡ | ¡  | ¡  n*t 	d¡ t tj|¡ | ¡  | ¡  0 d S )NÚalarmrÀ   z9signal.alarm and socket.socketpair required for this testc                     s   ˆ   ttjd¡ d S rš   ©r$  r£  ÚmathÚacosh©rQ   r?   r   r   Ú
ok_handlerO  s    z@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlerc                     s   ˆ   ttjd¡ dd  d S ©Nr   ro   rý  r   r?   r   r   Úraising_handlerQ  s    zEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg      ø?ro   ó   xr   )r   Úsignalr   rb   rÀ   ÚSIGALRMrÐ  r$  ÚZeroDivisionErrorrü  Úsendallr   ÚSOCK_MAX_SIZEr5   r   )r@   Zwith_timeoutr  r  Úcr   Ú	old_alarmr   r?   r   Úcheck_sendall_interruptedI  s4    


.
ÿ

ý
z,GeneralModuleTests.check_sendall_interruptedc                 C   s   |   d¡ d S ©NF©r  r?   r   r   r   Útest_sendall_interruptedh  s    z+GeneralModuleTests.test_sendall_interruptedc                 C   s   |   d¡ d S )NTr  r?   r   r   r   Ú%test_sendall_interrupted_with_timeoutk  s    z8GeneralModuleTests.test_sendall_interrupted_with_timeoutc                 C   sÎ   t   t jt j¡}t|ƒ}|  t¡}d }t ¡  W d   ƒ n1 sD0    Y  |  |t	|j
jd ƒ¡ t   t jt j¡}| d¡}t|ƒ}d }t ¡  |  t¡ d }t ¡  W d   ƒ n1 sÀ0    Y  d S )Nr   r	   )r   r:   r/   r  r‘  ÚResourceWarningr   r  r  r  ÚwarningrQ   Úmakefile)r@   rÕ   r   r/  r   r   r   r   Útest_dealloc_warnn  s    &
z$GeneralModuleTests.test_dealloc_warnc                 C   sV   t   t jt j¡2}| d¡}| ¡  |  t|ƒd¡ W d   ƒ n1 sH0    Y  d S )Nr	   z<_io.BufferedReader name=-1>)r   r:   r/   r  r   r±   r  ©r@   rÕ   Úfpr   r   r   Útest_name_closed_socketio  s    
z,GeneralModuleTests.test_name_closed_socketioc                 C   s–   t   ¡ z}|jddd}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ | ¡  |  t	|j¡ |  t	|j¡ |  t	|j¡ W d   ƒ n1 sˆ0    Y  d S )Nr	   r   )Ú	buffering)
r   r  r  ÚreadablerÊ  ÚwritableÚseekabler   r$  r£  r  r   r   r   Útest_unusable_closed_socketio…  s    
z0GeneralModuleTests.test_unusable_closed_socketioc                 C   s2  t   ¡ }z†| tdf¡ t  | ¡ ¡ |  t¡ | d¡ W d   ƒ n1 sP0    Y  W |  t¡ | ¡  W d   ƒ qÄ1 s„0    Y  n4|  t¡ | ¡  W d   ƒ n1 s¸0    Y  0 |  t¡ t  d ¡ W d   ƒ n1 sî0    Y  |  t¡ t  d¡ W d   ƒ n1 s$0    Y  d S )Nr   ro   rp  )	r   r`   r›   r   r  r$  r   r>   r‰   rÞ   r   r   r   Útest_socket_close  s    *(þ((z$GeneralModuleTests.test_socket_closec                 C   sš   dD ]}| j |dp t ¡ H}| |¡}|  |j|¡ W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  W d   ƒ q1 sŠ0    Y  qd S )N)r   r	   ÚrwÚwÚwb©Úmode)ÚsubTestr   r  r±   r"  )r@   r"  rÕ   r  r   r   r   Útest_makefile_mode   s
    
z%GeneralModuleTests.test_makefile_modec                 C   s˜   dD ]Ž}| j |dn t ¡ F}|  td¡ | |¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  W d   ƒ q1 sˆ0    Y  qd S )N)Úrtr\   ú+r¬  r!  zinvalid mode)r#  r   ÚassertRaisesRegexr£  r  )r@   r"  rÕ   r   r   r   Útest_makefile_invalid_mode§  s
    
z-GeneralModuleTests.test_makefile_invalid_modec                 C   s®   t   ¡ }|6 ttjd ƒD ]}|  ttj||¡ qW d   ƒ n1 sH0    Y  ttjd ƒD ]H}t t t j|¡¡}|  	|t j¡ t t t j
|¡¡}|  	|t j
¡ q`d S rÛ   )r   ÚrangeÚpickleÚHIGHEST_PROTOCOLr$  r‰   ÚdumpsÚloadsr:   r±   r/   )r@   rÕ   Úprotocolr  rð   r   r   r   Útest_pickle®  s    2zGeneralModuleTests.test_picklec              	   C   sœ   dD ]L}t   t jt j¡(}| tdf¡ | |¡ W d   ƒ q1 sF0    Y  qt   t jt j¡&}| tdf¡ | ¡  W d   ƒ n1 sŽ0    Y  d S )N)r   rp  r   )r   r:   r/   r`   r›   r>   )r@   ÚbacklogÚsrvr   r   r   Útest_listen_backlog¹  s    *z&GeneralModuleTests.test_listen_backlogc                 C   s`   dd l }t tjtj¡4}| tdf¡ |  t|j|j	d ¡ W d   ƒ n1 sR0    Y  d S r  )
r  r   r:   r/   r`   r›   r$  ru  r>   r  )r@   r  r1  r   r   r   Útest_listen_backlog_overflowÃ  s    z/GeneralModuleTests.test_listen_backlog_overflowúIPv6 required for this test.c                 C   sf   |   ttjtjddfd¡ t tjtj¡(}|   t|jtjddf¡ W d   ƒ n1 sX0    Y  d S )Nr   rt  iöÿÿÿ)	r$  ru  r   r}  r   rå   rç   r/   r`   r  r   r   r   Útest_flowinfoË  s
    
ÿz GeneralModuleTests.test_flowinfoc                 C   s0   t  ddt jt jt j¡\^ }}|  |d¡ d S )Núff02::1de:c0:face:8Dr   )úff02::1de:c0:face:8dr   r   r   )r   rì  rç   r    r7  r±   )r@   ru   Úsockaddrr   r   r   Útest_getaddrinfo_ipv6_basicÒ  s    üz.GeneralModuleTests.test_getaddrinfo_ipv6_basicr¸  zdoes not work on WindowszSymbolic scope id does not workc                 C   sL   t  ¡ d \}}t  d| dt jt jt j¡\^ }}|  |ddd|f¡ d S )Nr   úff02::1de:c0:face:8D%r   r7  )r   rh  rì  rç   r    r7  r±   )r@   ÚifindexÚtest_interfaceru   r8  r   r   r   Ú&test_getaddrinfo_ipv6_scopeid_symbolicÜ  s    üz9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicz.Numeric scope id does not work or undocumentedc                 C   sD   d}t  dt|ƒ dt jt jt j¡\^ }}|  |ddd|f¡ d S )Né*   r:  r   r7  r   )r   rì  r  rç   r    r7  r±   )r@   r;  ru   r8  r   r   r   Ú%test_getaddrinfo_ipv6_scopeid_numericë  s    
üz8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericc                 C   sH   t  ¡ d \}}ddd|f}t  |t jt jB ¡}|  |d| df¡ d S )Nr   r6  r   úff02::1de:c0:face:8d%Ú1234)r   rh  r}  ÚNI_NUMERICHOSTÚNI_NUMERICSERVr±   )r@   r;  r<  r8  Únameinfor   r   r   Ú&test_getnameinfo_ipv6_scopeid_symbolicü  s    z9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolicc                 C   s@   d}ddd|f}t  |t jt jB ¡}|  |dt|ƒ df¡ d S )Nr>  r6  r   r   r@  rA  )r   r}  rB  rC  r±   r  )r@   r;  r8  rD  r   r   r   Ú%test_getnameinfo_ipv6_scopeid_numeric  s    z8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericc                 C   sX   t   t jt j¡4}|  t|jƒd¡ |  t|jƒd¡ W d   ƒ n1 sJ0    Y  d S )Nræ  rç  )r   r:   r/   r±   r  r  rð   r  r   r   r   Útest_str_for_enums  s    z%GeneralModuleTests.test_str_for_enumsc                 C   sÐ   t tddƒ}t tddƒ}tj|B |B }t tj|¡ˆ}|  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ W d   ƒ n1 sÂ0    Y  d S )NÚSOCK_NONBLOCKr   r×  ro   TF)r   r   r/   r:   r±   rð   rÐ  Úsetblocking)r@   rH  r×  Z	sock_typer   r   r   r   Ú test_socket_consistent_sock_type  s    



z3GeneralModuleTests.test_socket_consistent_sock_typec                 C   s®   t   t jt j¡}| ¡ }tt jj ¡ ƒd }tdd„ t jj 	¡ D ƒƒd }t j ||d|d>}|  
|j|¡ |  
|j|¡ |  |jddh¡ W d   ƒ n1 s 0    Y  d S )Nro   c                 s   s   | ]\}}|d vr|V  qdS )>   r×  rH  Nr   )rú   rû   Úkindr   r   r   rÿ   3  s   þzEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>rš  )r  rð   r  r  r   )r   r:   r/   ÚdetachÚmaxÚAddressFamilyÚ__members__ÚvaluesÚ
SocketKindrˆ  r±   r  rð   r  r  )r@   rÕ   ÚfdZunknown_familyZunknown_typer   r   r   r   Útest_unknown_socket_family_repr(  s     
þüþz2GeneralModuleTests.test_unknown_socket_family_reprÚsendfileztest needs os.sendfile()c              	   C   s  G dd„ dƒ}t   ¡ Ø}t tjtj¡}t |¡ |  t j¡ | ||ƒ¡ W d   ƒ n1 sb0    Y  |  t	¡" | |dd ƒ¡ W d   ƒ n1 sž0    Y  |  t
¡ | |d ƒ¡ W d   ƒ n1 sÖ0    Y  W d   ƒ n1 sô0    Y  d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.Filec                 S   s
   || _ d S r2   ©rR  )r@   rR  r   r   r   rL   D  s    zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S   s   | j S r2   rU  r?   r   r   r   r  G  s    zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rE   rF   rG   rL   r  r   r   r   r   ÚFileC  s   rV  rŸ   rq  )r   rÏ   r   ÚcurdirÚO_RDONLYr   r$  Ú_GiveupOnSendfileÚ_sendfile_use_sendfileru  r‰   )r@   rV  rÕ   rR  r   r   r   Útest__sendfile_use_sendfileA  s    

,0z.GeneralModuleTests.test__sendfile_use_sendfilec                 C   st   |   |j|¡ |   |j|¡ | ¡ }tj|d}|  |j¡ | ¡  |   |j|¡ |   |j|¡ |   | ¡ |¡ d S ©NrÒ  )r±   r  rð   r  r   rU   r   rL  )r@   r   r  ÚstyperR  Ús2r   r   r   Ú_test_socket_filenoS  s    z&GeneralModuleTests._test_socket_filenoc                 C   sP  t   t jt j¡}|  |j¡ | tjdf¡ |  |t jt j¡ t	t dƒr†t   t jt j
¡}|  |j¡ | tjdf¡ |  |t jt j
¡ tjrÎt   t jt j¡}|  |j¡ | tjdddf¡ |  |t jt j¡ t	t dƒrLt ¡ }|  tj|¡ t   t jt j¡}|  |j¡ z| tj |d¡¡ W n ty8   Y n0 |  |t jt j¡ d S )Nr   r    rØ   r   )r   r:   r/   rU   r   r`   r   r›   r_  r   r    rï  rç   rå   rÌ   rÍ   ÚshutilÚrmtreerØ   rÏ   rÖ   r   ÚPermissionError)r@   r   Ztmpdirr   r   r   Útest_socket_fileno`  s4    

ÿz%GeneralModuleTests.test_socket_filenoc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nzinteger argument expectedg     @E@rÒ  ©r'  r‰   r   r:   r/   r?   r   r   r   Ú test_socket_fileno_rejects_float  s    z3GeneralModuleTests.test_socket_fileno_rejects_floatc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nzinteger is requiredÚfoorÒ  rd  r?   r   r   r   Ú&test_socket_fileno_rejects_other_typesƒ  s    z9GeneralModuleTests.test_socket_fileno_rejects_other_typesc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Núnegative file descriptorrp  rÒ  ©r'  r£  r   r:   r/   r?   r   r   r   Ú)test_socket_fileno_rejects_invalid_socket‡  s    z<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlyc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nrh  iÖÿÿÿrÒ  ri  r?   r   r   r   Ú#test_socket_fileno_rejects_negative‹  s    z6GeneralModuleTests.test_socket_fileno_rejects_negativec                 C   s°   d}|   t¡ }tjt ¡ d W d   ƒ n1 s40    Y  |  |jjtj|f¡ |   t¡(}tjtj	tj
t ¡ d W d   ƒ n1 sŒ0    Y  |  |jjtj|f¡ d S )Ni6'  rÒ  )r$  r   r   r   Zmake_bad_fdr  r-  re  rÔ  r:   r/   )r@   ZWSAENOTSOCKr/  r   r   r   Ú$test_socket_fileno_requires_valid_fd  s    .ý$z7GeneralModuleTests.test_socket_fileno_requires_valid_fdc              	   C   sº   t  ¡ ž}|  t¡  tj| ¡ d W d   ƒ n1 s:0    Y  |  t¡(}tjtjtj| ¡ d W d   ƒ n1 s|0    Y  |  |j	j
t
j¡ W d   ƒ n1 s¬0    Y  d S r\  )rÌ   ÚNamedTemporaryFiler$  r   r   r  r:   r/   r±   r-  re  rÕ  )r@   Zafiler/  r   r   r   Ú%test_socket_fileno_requires_socket_fd  s    
.ý$z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)YrE   rF   rG   r  r  r¢   Ú
skipUnlessr  r  r"  r'  r0  r5  r9  rÏ   rû   r<  r|  r›  r   rï  rT  r_  ra  rb  r   r   rg  ro  ry  rz  r  r€  rŒ  r   Úcpython_onlyr”  r   r¤  r©  rµ  rÁ  rÅ  rÆ  rÈ  rÌ  rÎ  rÑ  rÖ  rØ  rÜ  rß  râ  r÷  rø  Zis_resource_enabledrû  r  r  r  r  r  r  r  r$  r(  r/  r2  r3  r5  r9  ÚskipIfr   r=  r?  rE  rF  rG  rJ  rS  r[  r_  rc  re  rg  rj  rk  rl  rn  r   r   r   r   r
  B  s  

,

	ÿ
ÿ
ÿ
ÿ


,ÿ
ÿ
ÿ
>ÿ
ÿ
"
ÿNÿ




	
þ
ÿ

r
  z!SocketCan required for this test.c                   @   s”   e Zd Zdd„ Ze eedƒd¡dd„ ƒZdd„ Z	e eedƒd¡d	d
„ ƒZ
dd„ Zdd„ Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚBasicCANTestc                 C   s   t j t j t j d S r2   )r   ÚAF_CANr   r   r?   r   r   r   r5  ­  s    z!BasicCANTest.testCrucialConstantsÚCAN_BCMú&socket.CAN_BCM required for this test.c                 C   s”   t j t j t j t j t j t j t j t j t j	 t j
 t j t j t j t j t j t j t j t j t j t j t j t j t j t j d S r2   )r   rt  ÚCAN_BCM_TX_SETUPÚCAN_BCM_TX_DELETEÚCAN_BCM_TX_READÚCAN_BCM_TX_SENDÚCAN_BCM_RX_SETUPÚCAN_BCM_RX_DELETEÚCAN_BCM_RX_READÚCAN_BCM_TX_STATUSÚCAN_BCM_TX_EXPIREDÚCAN_BCM_RX_STATUSÚCAN_BCM_RX_TIMEOUTÚCAN_BCM_RX_CHANGEDÚCAN_BCM_SETTIMERÚCAN_BCM_STARTTIMERÚCAN_BCM_TX_COUNTEVTÚCAN_BCM_TX_ANNOUNCEÚCAN_BCM_TX_CP_CAN_IDÚCAN_BCM_RX_FILTER_IDÚCAN_BCM_RX_CHECK_DLCÚCAN_BCM_RX_NO_AUTOTIMERÚCAN_BCM_RX_ANNOUNCE_RESUMEÚCAN_BCM_TX_RESET_MULTI_IDXÚCAN_BCM_RX_RTR_FRAMEr?   r   r   r   ÚtestBCMConstants²  s0    zBasicCANTest.testBCMConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   ©r   r   r   r   r  r   r   r   ÚtestCreateSocketÒ  s    zBasicCANTest.testCreateSocketc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r   r    rt  r  r   r   r   ÚtestCreateBCMSocketÖ  s    z BasicCANTest.testCreateBCMSocketc                 C   sV   t   t jt jt j¡.}d}| |¡ |  | ¡ |¡ W d   ƒ n1 sH0    Y  d S )N)r(  )r   r   r   r   r`   r±   rœ   )r@   r   Úaddressr   r   r   ÚtestBindAnyÜ  s    
zBasicCANTest.testBindAnyc                 C   sJ   t   t jt jt j¡"}|  td|jd¡ W d   ƒ n1 s<0    Y  d S )Núinterface name too long)Á   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   r   r   r   r'  r   r`   r  r   r   r   ÚtestTooLongInterfaceNameâ  s    ÿz%BasicCANTest.testTooLongInterfaceNameÚCAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c              	   C   sl   t   t jt jt j¡D}dD ].}| t jt j|¡ |  || t jt j¡¡ qW d   ƒ n1 s^0    Y  d S )N)r   ro   )	r   r   r   r   rÍ  ÚSOL_CAN_RAWr–  r±   rÉ  )r@   r   Zloopbackr   r   r   ÚtestLoopbackè  s    ÿÿzBasicCANTest.testLoopbackÚCAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c              	   C   s   d\}}t  d||¡}t tjtjtj¡R}| tjtj|¡ |  	|| 
tjtjd¡¡ | tjtjt|ƒ¡ W d   ƒ n1 s‚0    Y  d S )N)é   i   z=IIr]   )r   Úpackr   r   r   r   rÍ  r—  r™  r±   rÉ  rÄ  )r@   Úcan_idZcan_maskZ
can_filterr   r   r   r   Ú
testFilterò  s    ÿzBasicCANTest.testFilterN)rE   rF   rG   r5  r¢   ro  r   r   r  r  r  r’  r•  r˜  r  r   r   r   r   rr  ª  s(   ÿ
ÿ
ÿ
ÿrr  c                   @   s’   e Zd Zddd„Zedd„ ƒZedd„ ƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚCANTestrŽ   c                 C   s   t j| |d d S r   )r˜   rL   r’   r   r   r   rL     s    zCANTest.__init__c                 C   s&   t |ƒ}| dd¡}t | j|||¡S )zBuild a CAN frame.r]   ó    )rî  Úljustr   r›  rd   )Úclsrœ  ÚdataÚcan_dlcr   r   r   Úbuild_can_frame  s    zCANTest.build_can_framec                 C   s&   t  | j|¡\}}}|||d|… fS )zDissect a CAN frame.N)r   r   rd   )r¡  Úframerœ  r£  r¢  r   r   r   Údissect_can_frame  s    zCANTest.dissect_can_framec                 C   s6   | j  | j¡\}}|  | j|¡ |  |d | j¡ d S rš   )r   Úrecvfromrc   r±   Úcfra   ©r@   r¨  r½   r   r   r   ÚtestSendFrame  s    zCANTest.testSendFramec                 C   s    |   dd¡| _| j | j¡ d S )Nr   s   ©r¤  r¨  r“   r·   r?   r   r   r   Ú_testSendFrame  s    zCANTest._testSendFramec                 C   s$   | j  | j¡\}}|  | j|¡ d S r2   )r   r§  rc   r±   r¨  r©  r   r   r   ÚtestSendMaxFrame  s    zCANTest.testSendMaxFramec                 C   s    |   dd¡| _| j | j¡ d S )Nr   s   r«  r?   r   r   r   Ú_testSendMaxFrame  s    zCANTest._testSendMaxFramec                 C   sD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r2   )r   r§  rc   r±   Úcf1Úcf2r©  r   r   r   ÚtestSendMultiFrames"  s    zCANTest.testSendMultiFramesc                 C   s<   |   dd¡| _| j | j¡ |   dd¡| _| j | j¡ d S )Né   s   D3"é   s   ™"3)r¤  r¯  r“   r·   r°  r?   r   r   r   Ú_testSendMultiFrames)  s    zCANTest._testSendMultiFramesrt  ru  c                 C   sP   | j  | j¡\}}|  | j|¡ |  |¡\}}}|  | j|¡ |  | j|¡ d S r2   )r“   r§  rc   r±   r¨  r¦  rœ  r¢  )r@   r¨  r½   rœ  r£  r¢  r   r   r   Ú_testBCM0  s
    zCANTest._testBCMc                 C   sÒ   t   t jt jt j¡}|  |j¡ | | jf¡ d| _t	g d¢ƒ| _
|  | j| j
¡| _t j}d}d}d } } }}d}	d}
t| jƒdksŒJ ‚t | j||||||||	|
¡
}|| j }| |¡}|  |t|ƒ¡ d S )Né#  )éÀ   éÿ   éî   r   i"  ro   r‚  )r   r   r    rt  rU   r   r­   ra   rœ  Úbytesr¢  r¤  r¨  ry  rî  r   r›  rf   r·   r±   )r@   ZbcmZopcoderê  rÛ  Zival1_secondsZ
ival1_usecZival2_secondsZ
ival2_usecZ
bcm_can_idZnframesÚheaderZheader_plus_frameZ
bytes_sentr   r   r   ÚtestBCM9  s6    ÷

zCANTest.testBCMN)rŽ   )rE   rF   rG   rL   Úclassmethodr¤  r¦  rª  r¬  r­  r®  r±  r´  r¢   ro  r   r   rµ  r¼  r   r   r   r   rž  þ  s&   


ÿ
ÿrž  z!CAN ISOTP required for this test.c                       sV   e Zd Z‡ fdd„Zdd„ Zdd„ Ze ee	dƒd¡d	d
„ ƒZ
dd„ Zdd„ Z‡  ZS )Ú	ISOTPTestc                    s   t ƒ j|i |¤Ž d| _d S ©NrZ   ©rK   rL   ra   rP   rS   r   r   rL   \  s    zISOTPTest.__init__c                 C   s   t j t j t j t j d S r2   )r   rs  r   r!   r    r?   r   r   r   r5  `  s    zISOTPTest.testCrucialConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   rŽ  r  r   r   r   r  f  s    zISOTPTest.testCreateSocketr!   z(socket.CAN_ISOTP required for this test.c                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r   r    r!   r  r   r   r   ÚtestCreateISOTPSocketj  s    zISOTPTest.testCreateISOTPSocketc              	   C   sn   t   t jt jt j¡F}|  td¡ | d¡ W d   ƒ n1 sB0    Y  W d   ƒ n1 s`0    Y  d S )Nr“  )r”  ro   rŸ   )r   r   r    r!   r'  r   r`   r  r   r   r   r•  p  s    z"ISOTPTest.testTooLongInterfaceNamec              
   C   s¨   z^t   t jt jt j¡6}| jddf}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  W nD ty¢ } z,|j	t	j
krŒ|  d| j ¡ n‚ W Y d }~n
d }~0 0 d S )Nr¶  iV  r_   )r   r   r    r!   ra   r`   r±   rœ   r   re  ÚENODEVrb   ©r@   r   r½   rŠ   r   r   r   ÚtestBindv  s    
2ÿzISOTPTest.testBind)rE   rF   rG   rL   r5  r  r¢   ro  r   r   rÁ  r•  rÄ  rX   r   r   rS   r   r¾  Y  s   ÿ
r¾  z!CAN J1939 required for this test.c                       sX   e Zd Z‡ fdd„Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZ	d	d
„ Z
‡  ZS )Ú	J1939Testc                    s   t ƒ j|i |¤Ž d| _d S r¿  rÀ  rP   rS   r   r   rL   ‡  s    zJ1939Test.__init__r#   z(socket.CAN_J1939 required for this test.c                 C   s”   t j t j t j t j t j t j t j t j t j	 t j
 t j t j t j t j t j t j t j t j t j t j t j t j t j t j d S r2   )r   r#   ÚJ1939_MAX_UNICAST_ADDRÚJ1939_IDLE_ADDRÚJ1939_NO_ADDRÚJ1939_NO_NAMEÚJ1939_PGN_REQUESTÚJ1939_PGN_ADDRESS_CLAIMEDÚJ1939_PGN_ADDRESS_COMMANDEDÚJ1939_PGN_PDU1_MAXÚJ1939_PGN_MAXÚJ1939_NO_PGNÚSO_J1939_FILTERÚSO_J1939_PROMISCÚSO_J1939_SEND_PRIOÚSO_J1939_ERRQUEUEÚSCM_J1939_DEST_ADDRÚSCM_J1939_DEST_NAMEÚSCM_J1939_PRIOÚSCM_J1939_ERRQUEUEÚJ1939_NLA_PADÚJ1939_NLA_BYTES_ACKEDÚJ1939_EE_INFO_NONEÚJ1939_EE_INFO_TX_ABORTÚJ1939_FILTER_MAXr?   r   r   r   ÚtestJ1939Constants‹  s0    zJ1939Test.testJ1939Constantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r   r    r#   r  r   r   r   ÚtestCreateJ1939Socket®  s    zJ1939Test.testCreateJ1939Socketc              
   C   s°   zft   t jt jt j¡>}| jt jt jt jf}| |¡ |  	| 
¡ |¡ W d   ƒ n1 sZ0    Y  W nD tyª } z,|jtjkr”|  d| j ¡ n‚ W Y d }~n
d }~0 0 d S r^   )r   r   r    r#   ra   rÉ  rÏ  rÈ  r`   r±   rœ   r   re  rÂ  rb   rÃ  r   r   r   rÄ  ´  s    
2ÿzJ1939Test.testBind)rE   rF   rG   rL   r¢   ro  r   r   rÝ  rÞ  rÄ  rX   r   r   rS   r   rÅ  „  s   ÿ
!ÿ
rÅ  z#RDS sockets required for this test.c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBasicRDSTestc                 C   s   t j t j d S r2   )r   ÚAF_RDSr%   r?   r   r   r   r5  Å  s    z!BasicRDSTest.testCrucialConstantsc                 C   s6   t   t jt jd¡}W d   ƒ n1 s(0    Y  d S rš   )r   r%   r&   r  r   r   r   r  É  s    zBasicRDSTest.testCreateSocketc                 C   s^   d}t   t jt jd¡4}| t jt j|¡ | t jt j|¡ W d   ƒ n1 sP0    Y  d S )Ni @  r   )r   r%   r&   rÍ  r3  Ú	SO_RCVBUFÚ	SO_SNDBUF)r@   rc   r   r   r   r   ÚtestSocketBufferSizeÍ  s    z!BasicRDSTest.testSocketBufferSizeN)rE   rF   rG   r5  r  rã  r   r   r   r   rß  Â  s   rß  c                       sŽ   e Zd Zddd„Z‡ fdd„Zdd„ Zdd	„ Zd
d„ Zdd„ Ze	e
j
dƒdd„ ƒZe	e
j
dƒdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚRDSTestrŽ   c                 C   s   t j| |d d S r   )r™   rL   r’   r   r   r   rL   ×  s    zRDSTest.__init__c                    s   t ƒ  ¡  t ¡ | _d S r2   )rK   rA   rM   rx   Zevtr?   rS   r   r   rA   Ú  s    
zRDSTest.setUpc                 C   s2   | j  | j¡\}}|  | j|¡ |  | j|¡ d S r2   )r;   r§  rc   r±   r¢  r   ©r@   r¢  r½   r   r   r   ÚtestSendAndRecvÞ  s    zRDSTest.testSendAndRecvc                 C   s"   d| _ | j | j dt| jf¡ d S ©NrÏ  r   ©r¢  r“   r,  r›   r=   r?   r   r   r   Ú_testSendAndRecvã  s    zRDSTest._testSendAndRecvc                 C   sH   | j  | jtj¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r2   )r;   r§  rc   r   ÚMSG_PEEKr±   r¢  rå  r   r   r   ÚtestPeekç  s    zRDSTest.testPeekc                 C   s"   d| _ | j | j dt| jf¡ d S rç  rè  r?   r   r   r   Ú	_testPeekí  s    zRDSTest._testPeekÚrecvmsgc                 C   s(   | j  | j¡\}}}}|  | j|¡ d S r2   )r;   rí  rc   r±   r¢  )r@   r¢  ÚancdataZ	msg_flagsr½   r   r   r   ÚtestSendAndRecvMsgñ  s    zRDSTest.testSendAndRecvMsgÚsendmsgc                 C   s&   d| _ | j | j gddt| jf¡ d S )Ns<   hello hello hello hello hello hello hello hello hello hello r   r   )r¢  r“   rð  r›   r=   r?   r   r   r   Ú_testSendAndRecvMsgö  s    zRDSTest._testSendAndRecvMsgc                 C   sD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r2   )r;   r§  rc   r±   Údata1Údata2rå  r   r   r   ÚtestSendAndRecvMultiû  s    zRDSTest.testSendAndRecvMultic                 C   s@   d| _ | j | j dt| jf¡ d| _| j | jdt| jf¡ d S )Ns   baconr   s   egg)rò  r“   r,  r›   r=   ró  r?   r   r   r   Ú_testSendAndRecvMulti	  s    zRDSTest._testSendAndRecvMultic                 C   sL   t   | jgg g d¡\}}}|  | j|¡ | j | j¡\}}|  | j|¡ d S )Ng      @)Úselectr;   r  r§  rc   r±   r¢  )r@   r   r  r\   r¢  r½   r   r   r   Ú
testSelect		  s    zRDSTest.testSelectc                 C   s"   d| _ | j | j dt| jf¡ d S )Ns   selectr   rè  r?   r   r   r   Ú_testSelect	  s    zRDSTest._testSelect)rŽ   )rE   rF   rG   rL   rA   ræ  ré  rë  rì  r  r   rï  rñ  rô  rõ  r÷  rø  rX   r   r   rS   r   rä  Ô  s   




rä  z'QIPCRTR sockets required for this test.c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚBasicQIPCRTRTestc                 C   s
   t j d S r2   )r   r*   r?   r   r   r   r5  	  s    z%BasicQIPCRTRTest.testCrucialConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r2   )r   r*   r    r  r   r   r   r  	  s    z!BasicQIPCRTRTest.testCreateSocketc                 C   sH   t   t jt j¡$}|  | ¡ d d¡ W d   ƒ n1 s:0    Y  d S ©Nro   r   )r   r*   r    r±   rœ   r  r   r   r   ÚtestUnbound	  s    zBasicQIPCRTRTest.testUnboundc                 C   s^   t   t jt j¡:}tj|| ¡ d d |  | ¡ d d¡ W d   ƒ n1 sP0    Y  d S )Nr   rÜ   ro   )r   r*   r    r   r<   rœ   ÚassertNotEqualr  r   r   r   ÚtestBindSock"	  s    zBasicQIPCRTRTest.testBindSockc                 C   sH   t   t jt j¡$}| jttj|dd W d   ƒ n1 s:0    Y  d S )Nr  rÜ   )r   r*   r    r$  r   r   r<   r  r   r   r   ÚtestInvalidBindSock'	  s    z$BasicQIPCRTRTest.testInvalidBindSockc                 C   sR   t   t jt j¡.}| d¡ |  | ¡ d d¡ W d   ƒ n1 sD0    Y  d S )N)é{   rÿ  ro   r   )r   r*   r    r­   rü  rœ   r  r   r   r   ÚtestAutoBindSock+	  s    
z!BasicQIPCRTRTest.testAutoBindSockN)	rE   rF   rG   r5  r  rû  rý  rþ  r   r   r   r   r   rù  	  s   rù  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚBasicVSOCKTestc                 C   s
   t j d S r2   )r   r¤   r?   r   r   r   r5  5	  s    z#BasicVSOCKTest.testCrucialConstantsc                 C   s4   t j t j t j t j t j t j t j t j d S r2   )	r   ÚSO_VM_SOCKETS_BUFFER_SIZEÚSO_VM_SOCKETS_BUFFER_MIN_SIZEÚSO_VM_SOCKETS_BUFFER_MAX_SIZEr¥   ÚVMADDR_PORT_ANYÚVMADDR_CID_HOSTÚVM_SOCKETS_INVALID_VERSIONr   r?   r   r   r   ÚtestVSOCKConstants8	  s    z!BasicVSOCKTest.testVSOCKConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r2   )r   r¤   r/   r  r   r   r   r  B	  s    zBasicVSOCKTest.testCreateSocketc                 C   sú   t   t jt j¡Ö}| t jt j¡}| t jt j¡}| t jt j¡}| t jt j|d ¡ | t jt j|d ¡ | t jt j|d ¡ |  |d | t jt j¡¡ |  |d | t jt j¡¡ |  |d | t jt j¡¡ W d   ƒ n1 sì0    Y  d S ©NrŸ   )	r   r¤   r/   rÉ  r  r  r  rÍ  r±   )r@   r   Zorig_maxr~  Zorig_minr   r   r   rã  F	  sD    ÿÿÿ
ÿ
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿz#BasicVSOCKTest.testSocketBufferSizeN)rE   rF   rG   r5  r  r  rã  r   r   r   r   r  0	  s   
r  z)Bluetooth sockets required for this test.c                   @   sv   e Zd Zdd„ Zdd„ Ze ejdkd¡dd„ ƒZ	e ejdkd	¡d
d„ ƒZ
e ejdkpdej d¡d¡dd„ ƒZdS )ÚBasicBluetoothTestc                 C   sJ   t j t j t j t j tjdkrFt j t j t j	 tj 
d¡sFt j d S )Nr¸  r•  )r   Z
BDADDR_ANYZBDADDR_LOCALr.   r0   r|  r›  ÚBTPROTO_HCIZSOL_HCIÚBTPROTO_L2CAPrœ  ÚBTPROTO_SCOr?   r   r   r   ÚtestBluetoothConstantse	  s    
z)BasicBluetoothTest.testBluetoothConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r.   r/   r0   r  r   r   r   ÚtestCreateRfcommSockets	  s    z)BasicBluetoothTest.testCreateRfcommSocketr¸  z&windows does not support L2CAP socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r.   r&   r  r  r   r   r   ÚtestCreateL2capSocketw	  s    z(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r.   r   r  r  r   r   r   ÚtestCreateHciSocket|	  s    z&BasicBluetoothTest.testCreateHciSocketr•  z.windows and freebsd do not support SCO socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r2   )r   r.   r&   r  r  r   r   r   ÚtestCreateScoSocket	  s    z&BasicBluetoothTest.testCreateScoSocketN)rE   rF   rG   r  r  r¢   rq  r|  r›  r  r  rœ  r  r   r   r   r   r
  a	  s   

ÿr
  c                   @   s¾   e Zd Zd+dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Ze e¡Zejd$d%„ ƒZd&d'„ Zd(d)„ Zd*S ),ÚBasicTCPTestrŽ   c                 C   s   t j| |d d S r   ©rº   rL   r’   r   r   r   rL   Š	  s    zBasicTCPTest.__init__c                 C   s   | j  d¡}|  |t¡ d S r®   )r»   r°   r±   r²   r³   r   r   r   ÚtestRecv	  s    zBasicTCPTest.testRecvc                 C   s   | j  t¡ d S r2   ©r¾   r·   r²   r?   r   r   r   Ú	_testRecv’	  s    zBasicTCPTest._testRecvc                 C   s8   | j  ttƒd ¡}| j  d¡}|| }|  |t¡ d S ©Né   r¯   )r»   r°   rî  r²   r±   )r@   Úseg1Úseg2r´   r   r   r   ÚtestOverFlowRecv•	  s    zBasicTCPTest.testOverFlowRecvc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testOverFlowRecvœ	  s    zBasicTCPTest._testOverFlowRecvc                 C   s    | j  d¡\}}|  |t¡ d S r®   )r»   r§  r±   r²   ©r@   r´   r½   r   r   r   ÚtestRecvFromŸ	  s    zBasicTCPTest.testRecvFromc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testRecvFrom¤	  s    zBasicTCPTest._testRecvFromc                 C   s@   | j  ttƒd ¡\}}| j  d¡\}}|| }|  |t¡ d S r  )r»   r§  rî  r²   r±   )r@   r  r½   r  r´   r   r   r   ÚtestOverFlowRecvFrom§	  s    z!BasicTCPTest.testOverFlowRecvFromc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testOverFlowRecvFrom®	  s    z"BasicTCPTest._testOverFlowRecvFromc                 C   s0   d}| j  d¡}|sq ||7 }q|  |d¡ d S )Nrí   r¯   ó   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r»   r°   r±   )r@   r´   Úreadr   r   r   ÚtestSendAll±	  s    
zBasicTCPTest.testSendAllc                 C   s   d}| j  |¡ d S )Nr#  )r¾   r  )r@   Z	big_chunkr   r   r   Ú_testSendAll»	  s    zBasicTCPTest._testSendAllc                 C   sP   | j  ¡ }t |tjtj¡}|  |j¡ |  |tj¡ | 	d¡}|  
|t¡ d S r®   )r»   r  r   Úfromfdr:   r/   rU   r   r  r°   r±   r²   )r@   rR  rÕ   r´   r   r   r   Ú
testFromFd¿	  s    

zBasicTCPTest.testFromFdc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testFromFdÈ	  s    zBasicTCPTest._testFromFdc                 C   s0   | j  ¡ }|  |j¡ | d¡}|  |t¡ d S r®   )r»   ÚduprU   r   r°   r±   r²   )r@   rÕ   r´   r   r   r   ÚtestDupË	  s    

zBasicTCPTest.testDupc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testDupÒ	  s    zBasicTCPTest._testDupc                 C   s&   | j  d¡}|  |t¡ | j ¡  d S r®   )r»   r°   r±   r²   rz   rƒ   r³   r   r   r   ÚtestShutdownÕ	  s    zBasicTCPTest.testShutdownc                 C   s   | j  t¡ | j  d¡ d S r	  )r¾   r·   r²   Úshutdownr?   r   r   r   Ú_testShutdownÞ	  s    zBasicTCPTest._testShutdownc                 C   sX   dd l }| j t¡ |  t| jj|jd ¡ |  t| jjd|jd  ¡ | j d¡ d S )Nr   ro   rŸ   )	r  r¾   r·   r²   r$  ru  r.  r  ÚUINT_MAX©r@   r  r   r   r   Ú_testShutdown_overflowä	  s    ÿÿz#BasicTCPTest._testShutdown_overflowc                 C   s„   | j  ¡ }| j  ¡ }|  ||¡ |  | j j¡ |  t| j jd¡ | j  	¡  t
j
t
jt
j|d}|  |j	¡ | d¡}|  |t¡ d S )Nr¯   rÒ  )r»   r  rL  r±   r  Ú_closedr$  r   r°   r   r   r:   r/   rU   r²   )r@   r  r   rÕ   r´   r   r   r   Ú
testDetachï	  s    



zBasicTCPTest.testDetachc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testDetachÿ	  s    zBasicTCPTest._testDetachN)rŽ   )rE   rF   rG   rL   r  r  r  r  r  r   r!  r"  r%  r&  r(  r)  r+  r,  r-  r/  r   rp  ZtestShutdown_overflowr2  r4  r5  r   r   r   r   r  ˆ	  s,   

		


r  c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚBasicUDPTestrŽ   c                 C   s   t j| |d d S r   )r–   rL   r’   r   r   r   rL   
  s    zBasicUDPTest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r2   ©r;   r°   rî  r²   r±   r³   r   r   r   ÚtestSendtoAndRecv
  s    zBasicUDPTest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S rš   ©r“   r,  r²   r›   r=   r?   r   r   r   Ú_testSendtoAndRecv
  s    zBasicUDPTest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r2   ©r;   r§  rî  r²   r±   r  r   r   r   r  
  s    zBasicUDPTest.testRecvFromc                 C   s   | j  tdt| jf¡ d S rš   r9  r?   r   r   r   r   
  s    zBasicUDPTest._testRecvFromc                 C   s   |   t| jjd¡ d S ©Nrp  ©r$  r£  r;   r§  r?   r   r   r   ÚtestRecvFromNegative
  s    z!BasicUDPTest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S rš   r9  r?   r   r   r   Ú_testRecvFromNegative
  s    z"BasicUDPTest._testRecvFromNegativeN)rŽ   ©
rE   rF   rG   rL   r8  r:  r  r   r>  r?  r   r   r   r   r6  
  s   
r6  c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚBasicUDPLITETestrŽ   c                 C   s   t j| |d d S r   )r—   rL   r’   r   r   r   rL   $
  s    zBasicUDPLITETest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r2   r7  r³   r   r   r   r8  '
  s    z"BasicUDPLITETest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S rš   r9  r?   r   r   r   r:  ,
  s    z#BasicUDPLITETest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r2   r;  r  r   r   r   r  /
  s    zBasicUDPLITETest.testRecvFromc                 C   s   | j  tdt| jf¡ d S rš   r9  r?   r   r   r   r   4
  s    zBasicUDPLITETest._testRecvFromc                 C   s   |   t| jjd¡ d S r<  r=  r?   r   r   r   r>  7
  s    z%BasicUDPLITETest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S rš   r9  r?   r   r   r   r?  ;
  s    z&BasicUDPLITETest._testRecvFromNegativeN)rŽ   r@  r   r   r   r   rA   
  s   
rA  c                       s‚   e Zd ZejZ‡ fdd„Zdd„ ZdZdd„ Z	dd	„ Z
d
d„ Zdd„ ZdZdD ]ZeeeedƒO ZqNdZdZdZddd„Z‡  ZS )ÚSendrecvmsgBasec                    s   t  ¡ | _tƒ  ¡  d S r2   )rM   rx   Ú
misc_eventrK   rA   r?   rS   r   r   rA   `
  s    
zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r2   )Úcli_sockr·   r³   r   r   r   ÚsendToServerd
  s    zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r2   )rD  rð  Úsendmsg_to_server_defaultsrî  ©r@   rQ   r   r   r   ÚsendmsgToServerl
  s    ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r2   )rí  ÚregisterRecvmsgResult)r@   rÕ   rc   rQ   Úresultr   r   r   Ú	doRecvmsgt
  s    
zSendrecvmsgBase.doRecvmsgc                 C   s   d S r2   r   ©r@   rJ  r   r   r   rI  ~
  s    z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r2   ©r±   ©r@   Zaddr1Zaddr2r   r   r   ÚcheckRecvmsgAddress„
  s    z#SendrecvmsgBase.checkRecvmsgAddressr   )Ú
MSG_CTRUNCÚMSG_OOBNc           
      C   s¬   | j }| j}|r&|| jO }|| jO }n|d urB|| jO }|| jO }|| M }|| M }||O }||O }||@ | @ }|r†td |¡ƒ‚||B | @ }	|  ||	@ ||	@ ¡ d S )Nz6contradictory set, unset requirements for flags {0:#x})Úmsg_flags_common_setÚmsg_flags_common_unsetÚmsg_flags_eor_indicatorÚmsg_flags_non_eor_indicatorÚ	Exceptionr  r±   )
r@   rê  ÚeorÚchecksetÚ
checkunsetÚignoreZ
defaultsetZdefaultunsetZinbothr‹  r   r   r   Ú
checkFlags™
  s&    




ÿzSendrecvmsgBase.checkFlags)Nr   r   r   )rE   rF   rG   r   ÚLOOPBACK_TIMEOUTÚfail_timeoutrA   rE  rF  rH  rK  rI  rO  rS  rû   r   r   rR  rT  rU  r[  rX   r   r   rS   r   rB  Y
  s   
rB  c                   @   s   e Zd Zdd„ ZdS )ÚRecvmsgIntoMixinc                 G   sh   t |ƒ}|j|gg|¢R Ž }|  |¡ |  |d d¡ |  |d |¡ t|d |d … ƒf|dd …  S r  )rÄ  Úrecvmsg_intorI  ÚassertGreaterEqualÚassertLessEqualrº  )r@   rÕ   rc   rQ   ÚbufrJ  r   r   r   rK  Ó
  s    
zRecvmsgIntoMixin.doRecvmsgN)rE   rF   rG   rK  r   r   r   r   r^  Ð
  s   r^  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgDgramFlagsBasec                    s   t ƒ jtjB S r2   )rK   rU  r   Ú	MSG_TRUNCr?   rS   r   r   rU  ß
  s    z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rE   rF   rG   ÚpropertyrU  rX   r   r   rS   r   rc  Ü
  s   rc  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgSCTPFlagsBasec                    s   t ƒ jtjB S r2   )rK   rT  r   ÚMSG_EORr?   rS   r   r   rT  ç
  s    z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rE   rF   rG   re  rT  rX   r   r   rS   r   rf  ä
  s   rf  c                   @   s8   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zd	S )
ÚSendrecvmsgConnectionlessBasec                 C   s   | j S r2   )r;   r?   r   r   r   Ú	serv_sockñ
  s    z'SendrecvmsgConnectionlessBase.serv_sockc                 C   s   | j S r2   )r“   r?   r   r   r   rD  õ
  s    z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS rš   )rÅ   r?   r   r   r   rF  ù
  s    z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r2   )rD  r,  rÅ   r³   r   r   r   rE  ý
  s    z*SendrecvmsgConnectionlessBase.sendToServerN)rE   rF   rG   re  ri  rD  rF  rE  r   r   r   r   rh  ì
  s   


rh  c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚSendrecvmsgConnectedBasec                 C   s   | j S r2   )r»   r?   r   r   r   ri    s    z"SendrecvmsgConnectedBase.serv_sockc                 C   s   | j S r2   )r¾   r?   r   r   r   rD    s    z!SendrecvmsgConnectedBase.cli_sockc                 C   s   d S r2   r   rN  r   r   r   rO    s    z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rE   rF   rG   re  ri  rD  rO  r   r   r   r   rj    s
   

rj  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    s   t ƒ  ¡  | j | j¡ d S r2   )rK   rA   ri  rÐ  r]  r?   rS   r   r   rA     s    
z"SendrecvmsgServerTimeoutBase.setUp)rE   rF   rG   rA   rX   r   r   rS   r   rk    s   rk  c                   @   s¼   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zeedƒdd„ ƒZejd d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*S )+ÚSendmsgTestsc                 C   s   |   | j ttƒ¡t¡ d S r2   ©r±   ri  r°   rî  r²   r?   r   r   r   ÚtestSendmsg!  s    zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r2   ©r±   rH  r²   rî  r?   r   r   r   Ú_testSendmsg%  s    zSendmsgTests._testSendmsgc                 C   s   |   | j ttƒ¡t¡ d S r2   rm  r?   r   r   r   ÚtestSendmsgDataGenerator(  s    z%SendmsgTests.testSendmsgDataGeneratorc                 C   s&   |   |  dd„ tfD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r2   r   r  r   r   r   rÿ   -  rí   z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>ro  r?   r   r   r   Ú_testSendmsgDataGenerator,  s    ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r2   rm  r?   r   r   r   ÚtestSendmsgAncillaryGenerator0  s    z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |   |  tgdd„ dD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r2   r   r  r   r   r   rÿ   5  rí   z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   ro  r?   r   r   r   Ú_testSendmsgAncillaryGenerator4  s    ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r2   rm  r?   r   r   r   ÚtestSendmsgArray8  s    zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)r±   rH  Úarrayr²   rî  r?   r   r   r   Ú_testSendmsgArray<  s    ÿzSendmsgTests._testSendmsgArrayc                 C   s   |   | j ttƒ¡t¡ d S r2   rm  r?   r   r   r   ÚtestSendmsgGather@  s    zSendmsgTests.testSendmsgGatherc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nr  ro  r?   r   r   r   Ú_testSendmsgGatherD  s    zSendmsgTests._testSendmsgGatherc                 C   s   |   | j d¡d¡ d S ©Nrq  ó   done©r±   ri  r°   r?   r   r   r   ÚtestSendmsgBadArgsG  s    zSendmsgTests.testSendmsgBadArgsc                 C   s²   |   t| jj¡ |   t| jd¡ |   t| jtƒ ¡ |   t| jtƒ g¡ |   t| jttƒ g¡ |   t| jtgtƒ ¡ |   t| jtgg tƒ ¡ |   t| jtgg dtƒ ¡ |  d¡ d S )Ns   not in an iterabler   r}  )r$  r‰   rD  rð  rH  Úobjectr²   rE  r?   r   r   r   Ú_testSendmsgBadArgsK  s.    
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   s   |   | j d¡d¡ d S r|  r~  r?   r   r   r   ÚtestSendmsgBadCmsg]  s    zSendmsgTests.testSendmsgBadCmsgc                 C   s¬   |   t| jtgtƒ g¡ |   t| jtgtƒ ddfg¡ |   t| jtgdtƒ dfg¡ |   t| jtgddtƒ fg¡ |   t| jtgdg¡ |   t| jtgdg¡ |  d¡ d S )Nr   ó   data)r   r   )r   r   rƒ  r>  r}  ©r$  r‰   rH  r²   r€  rE  r?   r   r   r   Ú_testSendmsgBadCmsga  s&    

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   s   |   | j d¡d¡ d S r|  r~  r?   r   r   r   ÚtestSendmsgBadMultiCmsgp  s    z$SendmsgTests.testSendmsgBadMultiCmsgc                 C   s@   |   t| jtgg d¢¡ |   t| jtgdtƒ g¡ |  d¡ d S )N©r   r   rí   r}  r„  r?   r   r   r   Ú_testSendmsgBadMultiCmsgv  s    

ÿ
ÿz%SendmsgTests._testSendmsgBadMultiCmsgc                 C   s   |   | j d¡d¡ d S r|  r~  r?   r   r   r   ÚtestSendmsgExcessCmsgReject~  s    z(SendmsgTests.testSendmsgExcessCmsgRejectc                 C   sb   t tdƒsT|  t¡"}|  tgddg¡ W d   ƒ n1 s<0    Y  |  |jj¡ |  	d¡ d S )Nr†  rˆ  r}  )
r   r   r$  r   rH  r²   ÚassertIsNoner-  re  rE  ©r@   r/  r   r   r   Ú_testSendmsgExcessCmsgRejectƒ  s
    
0z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   s   d S r2   r   r?   r   r   r   ÚtestSendmsgAfterClose‹  s    z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r2   )rD  r   r$  r   rH  r²   r?   r   r   r   Ú_testSendmsgAfterClose  s    
z#SendmsgTests._testSendmsgAfterCloseN)rE   rF   rG   rn  rp  rq  rr  rs  rt  ru  rx  ry  r{  r  r  r‚  r…  r  r   r‡  rñ   r‰  rŠ  r  rŽ  r  r   r   r   r   rl    s,   

rl  c                   @   sR   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zeej	d	vd
ƒdd„ ƒZ
e
jdd„ ƒZdS )ÚSendmsgStreamTestsc                 C   s   |   | j ttƒ¡t¡ d S r2   rm  r?   r   r   r   ÚtestSendmsgExplicitNoneAddr˜  s    z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S rš   ro  r?   r   r   r   Ú_testSendmsgExplicitNoneAddrœ  s    z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nrš  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r5   ©r±   ri  r°   r  rC  rƒ   r]  r?   r   r   r   ÚtestSendmsgTimeoutŸ  s    z%SendmsgStreamTests.testSendmsgTimeoutc              
   C   sŽ   z|| j  d¡ z|  dg¡ qW nD tjy4   Y n< tyd } z|jtjkrP‚ W Y d }~nd }~0 0 |  d¡ W | j	 
¡  n| j	 
¡  0 d S )Nç¸…ëQ¸ž?r”  úsocket.timeout not raised)rD  rÐ  rH  r   r5   r   re  ÚENOMEMr   rC  rm   ©r@   rá  r   r   r   Ú_testSendmsgTimeout¤  s    z&SendmsgStreamTests._testSendmsgTimeout>   r–  z<MSG_DONTWAIT not known to work on this platform when sendingc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S r“  r–  r?   r   r   r   ÚtestSendmsgDontWait»  s    z&SendmsgStreamTests.testSendmsgDontWaitc                 C   sz   zh|   t¡$}|  dgg tj¡ qW d   ƒ n1 s60    Y  |  |jjtjtj	tj
f¡ W | j ¡  n| j ¡  0 d S ©Nr”  )r$  r   rH  r   ÚMSG_DONTWAITr  r-  re  ÚEAGAINÚEWOULDBLOCKrš  rC  rm   rŒ  r   r   r   Ú_testSendmsgDontWaitÃ  s    2
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rE   rF   rG   r‘  r’  r—  rœ  rø   r|  r›  r  rñ   r¢  r   r   r   r   r  ”  s   
ÿ
r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSendmsgConnectionlessTestsc                 C   s   d S r2   r   r?   r   r   r   ÚtestSendmsgNoDestAddrÖ  s    z0SendmsgConnectionlessTests.testSendmsgNoDestAddrc                 C   s2   |   t| jjtg¡ |   t| jjtgg dd ¡ d S rš   )r$  r   rD  rð  r²   r?   r   r   r   Ú_testSendmsgNoDestAddrÛ  s    ÿ
ÿz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rE   rF   rG   r¤  r¥  r   r   r   r   r£  Ñ  s   r£  c                   @   sÎ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zeed!ƒd"d#„ ƒZejd$d%„ ƒZeejd&ƒd'd(„ ƒZejd)d*„ ƒZd+S ),ÚRecvmsgGenericTestsc                 C   sR   |   | jttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S ©NT©rW  ©rK  ri  rî  r²   r±   rO  r   r[  ©r@   r´   rî  rê  r½   r   r   r   ÚtestRecvmsgæ  s
    zRecvmsgGenericTests.testRecvmsgc                 C   s   |   t¡ d S r2   ©rE  r²   r?   r   r   r   Ú_testRecvmsgî  s    z RecvmsgGenericTests._testRecvmsgc                 C   sV   |   | jttƒdd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr   Tr¨  r©  rª  r   r   r   ÚtestRecvmsgExplicitDefaultsñ  s    
ÿz/RecvmsgGenericTests.testRecvmsgExplicitDefaultsc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgExplicitDefaultsú  s    z0RecvmsgGenericTests._testRecvmsgExplicitDefaultsc                 C   sV   |   | jttƒd ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr>  Tr¨  r©  rª  r   r   r   ÚtestRecvmsgShorterý  s    
ÿz&RecvmsgGenericTests.testRecvmsgShorterc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgShorter  s    z'RecvmsgGenericTests._testRecvmsgShorterc                 C   s^   |   | jttƒd ¡\}}}}|  |td d… ¡ |  || j¡ |  |g ¡ | j|dd d S )Nr  éýÿÿÿFr¨  r©  rª  r   r   r   ÚtestRecvmsgTrunc	  s    
ÿz$RecvmsgGenericTests.testRecvmsgTruncc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgTrunc  s    z%RecvmsgGenericTests._testRecvmsgTruncc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nro   Tr¨  r©  rª  r   r   r   ÚtestRecvmsgShortAncillaryBuf  s    ÿz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgShortAncillaryBuf  s    z1RecvmsgGenericTests._testRecvmsgShortAncillaryBufc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Né (  Tr¨  r©  rª  r   r   r   ÚtestRecvmsgLongAncillaryBuf!  s    ÿz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgLongAncillaryBuf*  s    z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j  ¡  |  t| j| j d¡ d S r®   )ri  r   r$  r   rK  r?   r   r   r   ÚtestRecvmsgAfterClose-  s    
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   s   d S r2   r   r?   r   r   r   Ú_testRecvmsgAfterClose2  s    z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sF   z4| j  d¡ |  tj| j| j ttƒ¡ W | j 	¡  n| j 	¡  0 d S )Nr˜  )
ri  rÐ  r$  r   r5   rK  rî  r²   rC  rm   r?   r   r   r   ÚtestRecvmsgTimeout5  s    ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©Nr•  )r  rC  rƒ   r]  r?   r   r   r   Ú_testRecvmsgTimeout>  s    z'RecvmsgGenericTests._testRecvmsgTimeoutrê  c                 C   s  |   | jttƒd dtj¡\}}}}|  |td d… ¡ |  || j¡ |  |g ¡ | j	|dt
tddƒd |   | jttƒdtj¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd |   | jttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S )	Nr  r   r²  Frd  ©rW  rZ  Tr¨  )rK  ri  rî  r²   r   rê  r±   rO  r   r[  r   rª  r   r   r   ÚtestRecvmsgPeekA  s.    þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgPeekd  s    z$RecvmsgGenericTests._testRecvmsgPeekrð  c                 C   s`   | j  | j¡ |  | j ttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S r§  )
ri  rÐ  r]  rK  rî  r²   r±   rO  r   r[  rª  r   r   r   ÚtestRecvmsgFromSendmsgh  s    z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S rz  ro  r?   r   r   r   Ú_testRecvmsgFromSendmsgs  s    z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rE   rF   rG   r«  r­  r®  r¯  r°  r±  r³  r´  rµ  r¶  r¸  r¹  rº  r»  r¼  r¾  r  r   rÀ  rñ   rÁ  rÂ  rÃ  r   r   r   r   r¦  â  s0   						
"



r¦  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRecvmsgGenericStreamTestsc                 C   sN   |   | jd¡\}}}}|  |d¡ |  || j¡ |  |g ¡ | j|d d d S )Nr¯   rí   r¨  )rK  ri  r±   rO  r   r[  rª  r   r   r   ÚtestRecvmsgEOF|  s
    z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   s   | j  ¡  d S r2   )rD  r   r?   r   r   r   Ú_testRecvmsgEOF„  s    z)RecvmsgGenericStreamTests._testRecvmsgEOFc                 C   sœ   |   | jttƒd ¡\}}}}|  || j¡ |  |g ¡ | j|dd |   | jd¡\}}}}|  || j¡ |  |g ¡ | j|dd || }|  |t¡ d S )Nr  Fr¨  r¯   T)rK  ri  rî  r²   rO  r   r±   r[  )r@   r  rî  rê  r½   r  r´   r   r   r   ÚtestRecvmsgOverflow‡  s    
ÿz-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgOverflow—  s    z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rE   rF   rG   rÅ  rÆ  rÇ  rÈ  r   r   r   r   rÄ  x  s   rÄ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRecvmsgTestsc                 C   s   |   t| jj¡ |   t| jjddd¡ |   t| jjttƒdd¡ |   t| jjtdƒgdd¡ |   t| jjtƒ dd¡ |   t| jjttƒtƒ d¡ |   t| jjttƒdtƒ ¡ | j ttƒdd¡\}}}}|  	|t¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nrp  r   r¡  Tr¨  )r$  r‰   ri  rí  r£  rî  r²   rÄ  r€  r±   rO  r   r[  rª  r   r   r   ÚtestRecvmsgBadArgsž  s0    ÿ
ÿÿÿÿÿzRecvmsgTests.testRecvmsgBadArgsc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgBadArgs´  s    z RecvmsgTests._testRecvmsgBadArgsN)rE   rF   rG   rÊ  rË  r   r   r   r   rÉ  ›  s   rÉ  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚRecvmsgIntoTestsc                 C   sL  t ttƒƒ}|  t| jj¡ |  t| jjttƒdd¡ |  t| jj|dd¡ |  t| jjtƒ gdd¡ |  t| jjdgdd¡ |  t| jj|tƒ gdd¡ |  t| jj|gdd¡ |  t| jj|gtƒ d¡ |  t| jj|gdtƒ ¡ | j |gdd¡\}}}}|  	|ttƒ¡ |  	|t tƒ¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nr   s   I'm not writablerp  Tr¨  )rÄ  rî  r²   r$  r‰   ri  r_  r€  r£  r±   rO  r   r[  ©r@   rb  Únbytesrî  rê  r½   r   r   r   ÚtestRecvmsgIntoBadArgs»  s@    
ÿÿ
ÿÿÿÿ
ÿ
ÿz'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgIntoBadArgs×  s    z(RecvmsgIntoTests._testRecvmsgIntoBadArgsc                 C   sx   t ttƒƒ}| j dd„ |fD ƒ¡\}}}}|  |ttƒ¡ |  |t tƒ¡ |  || j¡ |  |g ¡ | j|dd d S )Nc                 s   s   | ]
}|V  qd S r2   r   r  r   r   r   rÿ   Þ  rí   z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr¨  )	rÄ  rî  r²   ri  r_  r±   rO  r   r[  rÍ  r   r   r   ÚtestRecvmsgIntoGeneratorÚ  s    ÿz)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgIntoGeneratorå  s    z*RecvmsgIntoTests._testRecvmsgIntoGeneratorc                 C   sx   t   ddgttƒ ¡}| j |g¡\}}}}|  |ttƒ¡ |  | ¡ t¡ |  || j¡ |  |g ¡ | j	|dd d S )Nrv  r   Tr¨  )
rw  rî  r²   ri  r_  r±   ÚtobytesrO  r   r[  rÍ  r   r   r   ÚtestRecvmsgIntoArrayè  s    z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   s   |   t¡ d S r2   r¬  r?   r   r   r   Ú_testRecvmsgIntoArrayò  s    z&RecvmsgIntoTests._testRecvmsgIntoArrayc                 C   sª   t dƒ}t dƒ}t dƒ}| j |t|ƒdd… |g¡\}}}}|  |tdƒ¡ |  |t dƒ¡ |  |t dƒ¡ |  |t d	ƒ¡ |  || j¡ |  |g ¡ | j|d
d d S )Ns   ----s
   0123456789s   --------------rŸ   é	   ó   Mary had a little lambs   Marys
   01 had a 9s   little lamb---Tr¨  )	rÄ  ri  r_  Ú
memoryviewr±   rî  rO  r   r[  )r@   Úb1Úb2Zb3rÎ  rî  rê  r½   r   r   r   ÚtestRecvmsgIntoScatterõ  s    ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   s   |   d¡ d S )Nr×  )rE  r?   r   r   r   Ú_testRecvmsgIntoScatter  s    z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rE   rF   rG   rÏ  rÐ  rÑ  rÒ  rÔ  rÕ  rÛ  rÜ  r   r   r   r   rÌ  ¸  s   
rÌ  c                   @   s`   e Zd ZzddlZW n ey*   dZY n0 edejƒZee	dƒdd„ ƒZ
ee	dƒdd	„ ƒZdS )
ÚCmsgMacroTestsr   NiÿÿÿÚCMSG_LENc                 C   s¾   | j t d¡ d }ttdƒƒtt|d |ƒƒ }|  t d¡t d¡jd ¡ |D ]2}t |¡}|  |t d¡ |¡ |  	|| j ¡ qT|  
ttjd¡ |  
ttj|¡ |  
ttjtj¡ d S )Nr   ro   é  r8   rŸ   rp  )Úsocklen_t_limitr   rÞ  Úlistr)  rj  rw  Úitemsizer±   ra  r$  ru  r|  Úmaxsize)r@   ÚtoobigrP  Únr,   r   r   r   ÚtestCMSG_LEN  s    
zCmsgMacroTests.testCMSG_LENr†  c                 C   sä   | j t d¡ d }ttdƒƒtt|d |ƒƒ }t d¡}|  |t d¡jd ¡ |D ]T}t |¡}|  ||¡ |  |t 	|¡¡ |  ||t 	d¡ ¡ |  
|| j ¡ |}qX|  ttjd¡ |  ttj|¡ |  ttjtj¡ d S )Nro   rß  r   r8   rŸ   rp  )rà  r   r†  rá  r)  rj  rw  râ  r`  rÞ  ra  r$  ru  r|  rã  )r@   rä  rP  Úlastrå  r,   r   r   r   ÚtestCMSG_SPACE*  s    

zCmsgMacroTests.testCMSG_SPACE)rE   rF   rG   r  r¾  rà  Úminr  r  r   ræ  rè  r   r   r   r   rÝ    s   

rÝ  c                   @   sH  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdddd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zeedƒdd„ ƒZejdd„ ƒZdd„ Zdd „ Ze ejd!kd"¡e ed#¡eedƒd$d%„ ƒƒƒZeje ejd!kd"¡e ed#¡d&d'„ ƒƒƒZe ejd!kd"¡e ed#¡eedƒd(d)„ ƒƒƒZeje ejd!kd"¡e ed#¡d*d+„ ƒƒƒZd,d-„ Ze ejd!kd.¡d/d0„ ƒZd1d2„ Z d3d4„ Z!d5d6„ Z"eedƒd7d8„ ƒZ#e#jd9d:„ ƒZ$ded;d<„Z%d=d>„ Z&d?d@„ Z'dAdB„ Z(dCdD„ Z)dEdF„ Z*dGdH„ Z+dIdJ„ Z,dKdL„ Z-dMdN„ Z.dOdP„ Z/dfdQdR„Z0dSdT„ Z1dUdV„ Z2dWdX„ Z3dYdZ„ Z4d[d\„ Z5d]d^„ Z6d_d`„ Z7dadb„ Z8dcS )gÚSCMRightsTesti«ªÿÿc                 C   s\   g }t |ƒD ]J}t ¡ \}}|  tj|¡ |  tj|¡ t |t|ƒ 	¡ ¡ | 
|¡ q|S r2   )r)  rÌ   ÚmkstemprU   rÏ   rÔ   r   Úwriter  ÚencodeÚappend)r@   rå  Úfdsr8   rR  rÖ   r   r   r   ÚnewFDsK  s    zSCMRightsTest.newFDsc                 C   sB   t |ƒD ]4\}}t |dtj¡ |  t |d¡t|ƒ ¡ ¡ qd S )Nr   r¯   )Ú	enumeraterÏ   ÚlseekÚSEEK_SETr±   r$  r  rí  )r@   rï  rå  rR  r   r   r   ÚcheckFDsW  s    zSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r2   )rU   ÚcloseRecvmsgFDsrL  r   r   r   rI  ^  s    z#SCMRightsTest.registerRecvmsgResultc                 C   sn   |d D ]`\}}}|t jkr|t jkrt d¡}| |d t|ƒt|ƒ|j  … ¡ |D ]}t |¡ qXqd S )Nro   r8   )	r   r3  Ú
SCM_RIGHTSrw  Ú	frombytesrî  râ  rÏ   r   )r@   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datarï  rR  r   r   r   rõ  a  s    
ÿ
ÿzSCMRightsTest.closeRecvmsgFDsc                 C   s8   |   |  tgtjtjt d|  |¡¡fg¡ttƒ¡ d S )Nr8   )	r±   rH  r²   r   r3  rö  rw  rð  rî  )r@   rå  r   r   r   ÚcreateAndSendFDsm  s    þÿûzSCMRightsTest.createAndSendFDsro   r   c                 C   sä   |\}}}}|   |t¡ |  || j¡ | j|dtj|d |  |t¡ |  	t
|ƒ|¡ t d¡}	|D ]`}
|  |
t¡ |
\}}}|   |tj¡ |   |tj¡ |  |t¡ |   t
|ƒt d¡ |	 |¡ qd|   t
|	ƒ|¡ |  |	¡ d S )NT©rW  rY  rZ  r8   r   )r±   r²   rO  r   r[  r   rP  r  rá  ra  rî  rw  Útupler3  rö  rº  Ú
SIZEOF_INTr÷  rô  )r@   ZnumfdsrJ  ÚmaxcmsgsÚignoreflagsr´   rî  rê  r½   rï  Úitemrø  rù  rú  r   r   r   ÚcheckRecvmsgFDsw  s&    ÿ

zSCMRightsTest.checkRecvmsgFDsc                 C   s    |   d|  | jttƒd¡¡ d S )Nro   r·  ©r  rK  ri  rî  r²   r?   r   r   r   ÚtestFDPassSimple’  s    ÿzSCMRightsTest.testFDPassSimplec                 C   s<   |   |  tgtjtjt d|  d¡¡ ¡ fg¡t	tƒ¡ d S )Nr8   ro   )
r±   rH  r²   r   r3  rö  rw  rð  rÓ  rî  r?   r   r   r   Ú_testFDPassSimple—  s    þþúzSCMRightsTest._testFDPassSimplec                 C   s    |   d|  | jttƒd¡¡ d S )Nr+  r·  r  r?   r   r   r   ÚtestMultipleFDPass   s    ÿz SCMRightsTest.testMultipleFDPassc                 C   s   |   d¡ d S ©Nr+  ©rû  r?   r   r   r   Ú_testMultipleFDPass¥  s    z!SCMRightsTest._testMultipleFDPassr†  c                 C   s*   |   d|  | jttƒt dt ¡¡¡ d S r  )r  rK  ri  rî  r²   r   r†  rþ  r?   r   r   r   ÚtestFDPassCMSG_SPACE¨  s
    ÿÿz"SCMRightsTest.testFDPassCMSG_SPACEc                 C   s   |   d¡ d S r  r  r?   r   r   r   Ú_testFDPassCMSG_SPACE¯  s    z#SCMRightsTest._testFDPassCMSG_SPACEc              
   C   s0   | j d|  | jttƒt dt ¡¡tjd d S )Nro   r+  ©r   )	r  rK  ri  rî  r²   r   rÞ  rþ  rP  r?   r   r   r   ÚtestFDPassCMSG_LEN³  s    ÿúz SCMRightsTest.testFDPassCMSG_LENc                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testFDPassCMSG_LEN½  s    z!SCMRightsTest._testFDPassCMSG_LENr=  zskipping, see issue #12958zskipping, see issue #22397c                 C   s$   | j d|  | jttƒd¡dd d S )NrŸ   r·  )rÿ  r  r?   r   r   r   ÚtestFDPassSeparateÀ  s    þz SCMRightsTest.testFDPassSeparatec                 C   sX   |   d¡\}}|  |  tgtjtjt d|g¡ftjtjt d|g¡fg¡ttƒ¡ d S ©NrŸ   r8   ©	rð  r±   rH  r²   r   r3  rö  rw  rî  ©r@   Zfd0Úfd1r   r   r   Ú_testFDPassSeparateÊ  s    þþýùz!SCMRightsTest._testFDPassSeparatec                 C   s@   d}| j ||  | jttƒt t¡t t| ¡ ¡dtj	d d S )NrŸ   )rÿ  r   )
r  rK  ri  rî  r²   r   r†  rþ  rÞ  rP  )r@   Znum_fdsr   r   r   ÚtestFDPassSeparateMinSpaceØ  s    ÿÿüz(SCMRightsTest.testFDPassSeparateMinSpacec                 C   sX   |   d¡\}}|  |  tgtjtjt d|g¡ftjtjt d|g¡fg¡ttƒ¡ d S r  r  r  r   r   r   Ú_testFDPassSeparateMinSpaceå  s    þþýùz)SCMRightsTest._testFDPassSeparateMinSpacec              
   C   sf   z|   |g|¡}W n> tyP } z&|  |jt¡ |   |g¡}W Y d }~n
d }~0 0 |  |t|ƒ¡ d S r2   )rH  r   r  re  ri  r±   rî  )r@   r´   rî  rÎ  rŠ   r   r   r   ÚsendAncillaryIfPossibleó  s    "z%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725c                 C   s&   | j d|  | jttƒd¡tjd d S )Nr   r·  r  )r  rK  ri  rî  r²   r   rP  r?   r   r   r   ÚtestFDPassEmptyþ  s
    ÿþzSCMRightsTest.testFDPassEmptyc                 C   s   |   ttjtjdfg¡ d S ©Nrí   )r  r²   r   r3  rö  r?   r   r   r   Ú_testFDPassEmpty  s    
þzSCMRightsTest._testFDPassEmptyc                 C   s˜   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ |D ]6\}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ q\d S )Nr·  Tr¿  ro   )rK  ri  rî  r²   r±   rO  r   r[  r   rP  ra  r3  rö  Ú
assertLessrþ  ©r@   r´   rî  rê  r½   rø  rù  rú  r   r   r   ÚtestFDPassPartialInt  s    ÿz"SCMRightsTest.testFDPassPartialIntc              	   C   s4   |   ttjtjt d| jg¡ ¡ d d… fg¡ d S )Nr8   rp  )r  r²   r   r3  rö  rw  ÚbadfdrÓ  r?   r   r   r   Ú_testFDPassPartialInt  s    þþz#SCMRightsTest._testFDPassPartialIntc           	      C   sÐ   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ t d¡}|D ]J\}}}|  |tj¡ |  |tj¡ | |d t|ƒt|ƒ|j  … ¡ qf|  
t|ƒd¡ |  |¡ d S )Nr·  Tr¿  rŸ   r8   )rK  ri  rî  r²   r±   rO  r   r[  r   rP  ra  rw  r3  rö  r÷  râ  rô  )	r@   r´   rî  rê  r½   rï  rø  rù  rú  r   r   r   ÚtestFDPassPartialIntInMiddle  s     ÿ
ÿ
z*SCMRightsTest.testFDPassPartialIntInMiddlec              
   C   sZ   |   d¡\}}|  ttjtjt d|| jg¡ ¡ d d… ftjtjt d|g¡fg¡ d S )NrŸ   r8   rp  )	rð  r  r²   r   r3  rö  rw  r  rÓ  r  r   r   r   Ú_testFDPassPartialIntInMiddle2  s    þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©rW  rX  rZ  )r±   r²   rO  r   r[  r   rP  )r@   rJ  r   r´   rî  rê  r½   r   r   r   ÚcheckTruncatedHeader>  s    ÿz"SCMRightsTest.checkTruncatedHeaderc                 C   s"   | j |  | jttƒ¡tjd d S ©Nr  ©r#  rK  ri  rî  r²   r   rP  r?   r   r   r   ÚtestCmsgTruncNoBufSizeH  s    üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testCmsgTruncNoBufSizeQ  s    z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j |  | jttƒd¡tjd d S )Nr   r  r%  r?   r   r   r   ÚtestCmsgTrunc0T  s    ÿzSCMRightsTest.testCmsgTrunc0c                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testCmsgTrunc0Y  s    zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S rÛ   )r#  rK  ri  rî  r²   r?   r   r   r   ÚtestCmsgTrunc1_  s    zSCMRightsTest.testCmsgTrunc1c                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testCmsgTrunc1b  s    zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S r	  )r#  rK  ri  rî  r²   rþ  r?   r   r   r   ÚtestCmsgTrunc2Inte  s    ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testCmsgTrunc2Intl  s    z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S r  )r#  rK  ri  rî  r²   r   rÞ  r?   r   r   r   ÚtestCmsgTruncLen0Minus1o  s    ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testCmsgTruncLen0Minus1s  s    z&SCMRightsTest._testCmsgTruncLen0Minus1c                 C   sò   |   | jttƒ|¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |dkr\|g kr\d S |  t|ƒd¡ |d \}}	}
|  |tj
¡ |  |	tj¡ |  t|
ƒ|¡ |  t|
ƒ|¡ t d¡}| |
d t|
ƒt|
ƒ|j  … ¡ |  |¡ d S )NT©rW  rX  r   ro   r8   )rK  ri  rî  r²   r±   rO  r   r[  r   rP  r3  rö  r`  ra  rw  r÷  râ  rô  )r@   ÚancbufÚmaxdataZmindatar´   rî  rê  r½   rø  rù  rú  rï  r   r   r   ÚcheckTruncatedArrayy  s&    ÿ
ÿz!SCMRightsTest.checkTruncatedArrayc                 C   s   | j t d¡dd d S )Nr   ©r1  r2  ©r3  r   rÞ  r?   r   r   r   ÚtestCmsgTruncLen0‘  s    zSCMRightsTest.testCmsgTruncLen0c                 C   s   |   d¡ d S rÛ   r  r?   r   r   r   Ú_testCmsgTruncLen0”  s    z SCMRightsTest._testCmsgTruncLen0c                 C   s   | j t d¡d dd d S )Nr   ro   r4  r5  r?   r   r   r   ÚtestCmsgTruncLen0Plus1—  s    z$SCMRightsTest.testCmsgTruncLen0Plus1c                 C   s   |   d¡ d S r	  r  r?   r   r   r   Ú_testCmsgTruncLen0Plus1š  s    z%SCMRightsTest._testCmsgTruncLen0Plus1c                 C   s   | j t t¡td d S )Nr4  ©r3  r   rÞ  rþ  r?   r   r   r   ÚtestCmsgTruncLen1  s    ÿzSCMRightsTest.testCmsgTruncLen1c                 C   s   |   d¡ d S r	  r  r?   r   r   r   Ú_testCmsgTruncLen1¡  s    z SCMRightsTest._testCmsgTruncLen1c                 C   s(   | j t dt ¡d dt d d d S )NrŸ   ro   r4  r:  r?   r   r   r   ÚtestCmsgTruncLen2Minus1¤  s    
ÿz%SCMRightsTest.testCmsgTruncLen2Minus1c                 C   s   |   d¡ d S r	  r  r?   r   r   r   Ú_testCmsgTruncLen2Minus1¨  s    z&SCMRightsTest._testCmsgTruncLen2Minus1N)ro   r   )r   )r   )9rE   rF   rG   r  rð  rô  rI  rõ  rû  r  r  r  r  r	  r  r   r
  rñ   r  r  r  r¢   rq  r|  r›  r   r  r  r  r  r  r  r  r  r  r   r!  r#  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r3  r6  r7  r8  r9  r;  r<  r=  r>  r   r   r   r   rê  C  s~   

	












	
rê  c                   @   s  e Zd ZdZdZdd„ Zd^dd„Zeed	d
ƒdd„ ƒZ	e	j
dd„ ƒZeedd	d
ƒdd„ ƒZej
dd„ ƒZeejdƒeed	d
ƒdd„ ƒƒZej
dd„ ƒZd_dd„Zeed	d
ddƒdd„ ƒZej
dd „ ƒZeedd	d
ddƒd!d"„ ƒZej
d#d$„ ƒZeejdƒeedd	d
ddƒd%d&„ ƒƒZej
d'd(„ ƒZeejdƒeedd	d
ddƒd)d*„ ƒƒZej
d+d,„ ƒZd`d-d.„Zeed	d
ƒd/d0„ ƒZej
d1d2„ ƒZeed	d
ƒd3d4„ ƒZej
d5d6„ ƒZeed	d
ƒd7d8„ ƒZej
d9d:„ ƒZeed	d
ƒd;d<„ ƒZ e j
d=d>„ ƒZ!eed	d
ƒd?d@„ ƒZ"e"j
dAdB„ ƒZ#eed	d
ƒdCdD„ ƒZ$e$j
dEdF„ ƒZ%dadGdH„Z&eedd	d
ddƒdIdJ„ ƒZ'e'j
dKdL„ ƒZ(eedd	d
ddƒdMdN„ ƒZ)e)j
dOdP„ ƒZ*eedd	d
ddƒdQdR„ ƒZ+e+j
dSdT„ ƒZ,eedd	d
ddƒdUdV„ ƒZ-e-j
dWdX„ ƒZ.eedd	d
ddƒdYdZ„ ƒZ/e/j
d[d\„ ƒZ0d]S )bÚRFC3542AncillaryTestrŸ   rp  c                 C   s4   i }|D ]&\}}}|   ||f|¡ ||||f< q|S r2   )r  )r@   rî  Údrø  rù  rú  r   r   r   ÚancillaryMapping½  s
    z%RFC3542AncillaryTest.ancillaryMappingr¸  r   c                 C   s  | j  tjtjd¡ | j ¡  |  | j tt	ƒ|¡\}}}}|  
|t	¡ |  || j¡ | j|dtj|d |  
t|ƒd¡ |  |d t¡ |d \}}	}
|  
|tj¡ |  
|	tj¡ |  |
t¡ |  
t|
ƒt¡ t d¡}| |
¡ |  |d d¡ |  |d |¡ d S )Nro   Trü  r   r8   )ri  rÍ  r   r8  r@  rC  rm   rK  rî  r²   r±   rO  r   r[  rP  r  rý  rA  rº  rþ  rw  r÷  r`  ra  )r@   Ú
ancbufsizeÚmaxhopr   r´   rî  rê  r½   rø  rù  rú  r¬  r   r   r   ÚcheckHopLimitÇ  s.    
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitr@  rA  c                 C   s   | j dd d S ©Nr·  ©rB  )rD  r?   r   r   r   ÚtestRecvHopLimitã  s    z%RFC3542AncillaryTest.testRecvHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r½  ©r  rC  rƒ   r]  rE  r²   r?   r   r   r   Ú_testRecvHopLimitè  s    z&RFC3542AncillaryTest._testRecvHopLimitr†  c                 C   s   | j t t¡d d S )NrF  )rD  r   r†  rþ  r?   r   r   r   ÚtestRecvHopLimitCMSG_SPACEð  s    z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testRecvHopLimitCMSG_SPACEõ  s    z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErð  c                 C   s   | j d| jd d S ©Nr·  )rB  rC  )rD  Ú	hop_limitr?   r   r   r   ÚtestSetHopLimitÿ  s    z$RFC3542AncillaryTest.testSetHopLimitc                 C   sL   |   | jj| jd¡ |  |  tgtjtj	t
 
d| jg¡fg¡ttƒ¡ d S ©Nr•  r8   )r  rC  rƒ   r]  r±   rH  r²   r   r8  rA  rw  rM  rî  r?   r   r   r   Ú_testSetHopLimit  s    ÿÿüz%RFC3542AncillaryTest._testSetHopLimitc                 C   sB  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒ|¡\}}}}|  |t
¡ |  || j¡ | j|dtj|d |  t	|ƒd¡ |  |¡}|tjtjf }	|  t	|	ƒt¡ t d¡}
|
 |	¡ |  |
d d¡ |  |
d d¡ |tjtjf }|  t	|ƒt¡ t d¡}
|
 |¡ |  |
d d¡ |  |
d |¡ d S )Nro   Trü  rŸ   r8   r   r¸  )ri  rÍ  r   r8  r@  rH  rC  rm   rK  rî  r²   r±   rO  r   r[  rP  rA  rP  rþ  rw  r÷  r`  ra  rA  )r@   rB  rC  r   r´   rî  rê  r½   ZancmapZtcdatar¬  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimit  s:    
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrH  rP  c                 C   s   | j dd d S rE  )rQ  r?   r   r   r   ÚtestRecvTrafficClassAndHopLimit3  s    z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú _testRecvTrafficClassAndHopLimit9  s    z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©NrŸ   rF  )rQ  r   r†  rþ  r?   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACE>  s    ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACEF  s    z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s   | j d| jd d S rL  ©rQ  rM  r?   r   r   r   ÚtestSetTrafficClassAndHopLimitK  s    ÿz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc                 C   sd   |   | jj| jd¡ |  |  tgtjtj	t
 
d| jg¡ftjtjt
 
d| jg¡fg¡ttƒ¡ d S rO  )r  rC  rƒ   r]  r±   rH  r²   r   r8  rP  rw  Útraffic_classrA  rM  rî  r?   r   r   r   Ú_testSetTrafficClassAndHopLimitT  s    ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   s   | j d| jd d S rL  rW  r?   r   r   r   ÚtestOddCmsgSize_  s    ÿz$RFC3542AncillaryTest.testOddCmsgSizec                 C   sæ   |   | jj| jd¡ zJ|  tgtjtjt	 	d| j
g¡ ¡ d ftjtjt	 	d| jg¡fg¡}W n€ tyà } zh|  |jt¡ |  tgtjtjt	 	d| j
g¡ftjtjt	 	d| jg¡fg¡}|  |ttƒ¡ W Y d }~n
d }~0 0 d S )Nr•  r8   rŸ  )r  rC  rƒ   r]  rH  r²   r   r8  rP  rw  rY  rÓ  rA  rM  r   r  re  ri  r±   rî  )r@   rÎ  rŠ   r   r   r   Ú_testOddCmsgSizei  s2    ÿÿþþÿÿþþz%RFC3542AncillaryTest._testOddCmsgSizec                 C   s   | j  tjtjd¡ | j ¡  |d u r*dn|f}| j| j tt	ƒg|¢R Ž \}}}}|  
|t	¡ |  || j¡ |  
|g ¡ | j|dtj|d d S )Nro   r   Tr"  )ri  rÍ  r   r8  r@  rC  rm   rK  rî  r²   r±   rO  r   r[  rP  )r@   rB  r   rQ   r´   rî  rê  r½   r   r   r   ÚcheckHopLimitTruncatedHeader  s     
ÿ
ÿÿÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©rB  r   ©r]  r   rP  r?   r   r   r   r&  “  s    ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   r'  ž  s    z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   r^  r_  r?   r   r   r   ÚtestSingleCmsgTrunc0£  s    ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSingleCmsgTrunc0ª  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   s   | j dd d S )Nro   rF  )r]  r?   r   r   r   ÚtestSingleCmsgTrunc1²  s    z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSingleCmsgTrunc1¶  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rT  )r]  rþ  r?   r   r   r   ÚtestSingleCmsgTrunc2Int»  s    z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSingleCmsgTrunc2Int¿  s    z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   ro   rF  )r]  r   rÞ  r?   r   r   r   ÚtestSingleCmsgTruncLen0Minus1Ä  s    z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSingleCmsgTruncLen0Minus1È  s    z3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1c                 C   sÂ   | j  tjtjd¡ | j ¡  |  | j tt	ƒt 
t¡d ¡\}}}}|  |t	¡ |  || j¡ | j|dtjd |  t|ƒd¡ |r¾|d \}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ d S )Nro   Tr0  r   )ri  rÍ  r   r8  r@  rC  rm   rK  rî  r²   rÞ  rþ  r±   rO  r   r[  rP  ra  rA  r  r  r   r   r   ÚtestSingleCmsgTruncInDataÍ  s     
ÿ
ÿz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSingleCmsgTruncInDataã  s    z/RFC3542AncillaryTest._testSingleCmsgTruncInDatac                 C   s  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒ|¡\}}}}|  |t
¡ |  || j¡ | j|dtj|d |  t	|ƒd¡ |d \}}}	|  |tj¡ |  |tjtjh¡ |  t	|	ƒt¡ t d¡}
|
 |	¡ |  |
d d¡ |  |
d d¡ d S )Nro   Tr"  r   r8   r¸  )ri  rÍ  r   r8  r@  rH  rC  rm   rK  rî  r²   r±   rO  r   r[  rP  r  rP  rA  rþ  rw  r÷  r`  ra  )r@   rB  r   r´   rî  rê  r½   rø  rù  rú  r¬  r   r   r   ÚcheckTruncatedSecondHeaderè  s0    
ÿ
ÿ
ÿÿ

z/RFC3542AncillaryTest.checkTruncatedSecondHeaderc                 C   s   | j t t¡tjd d S r$  )rj  r   r†  rþ  rP  r?   r   r   r   ÚtestSecondCmsgTrunc0  s    ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSecondCmsgTrunc0  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S rÛ   ©rj  r   r†  rþ  r?   r   r   r   ÚtestSecondCmsgTrunc1  s    z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSecondCmsgTrunc1  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S r	  rm  r?   r   r   r   ÚtestSecondCmsgTrunc2Int  s    ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSecondCmsgTrunc2Int#  s    z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S r  )rj  r   r†  rþ  rÞ  r?   r   r   r   ÚtestSecondCmsgTruncLen0Minus1(  s
    ÿÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSecondCmsgTruncLen0Minus1.  s    z3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c           
      C   sT  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒt t¡t t¡ d ¡\}}}}|  |t
¡ |  || j¡ | j|dtjd tjtjh}| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ t d¡}	|	 |¡ |  |	d d¡ |  |	d d¡ |rD| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ |  |g ¡ d S )Nro   Tr0  r   r8   r¸  )ri  rÍ  r   r8  r@  rH  rC  rm   rK  rî  r²   r†  rþ  rÞ  r±   rO  r   r[  rP  rP  rA  ÚpopÚremoverw  r÷  r`  ra  r  )
r@   r´   rî  rê  r½   Z
cmsg_typesrø  rù  rú  r¬  r   r   r   ÚtestSecomdCmsgTruncInData3  s:    
ÿ
ÿ

þ



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r½  rH  r?   r   r   r   Ú_testSecomdCmsgTruncInDataX  s    z/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r¸  r   )r¸  r   )r   )r   )1rE   rF   rG   rM  rY  rA  rD  r  r   rG  rñ   rI  rJ  rK  rN  rP  rQ  rR  rS  rU  rV  rX  rZ  r[  r\  r]  r&  r'  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rn  ro  rp  rq  rr  rs  rv  rw  r   r   r   r   r?  ¬  sÌ   






	


  ÿ
$ÿ


ÿ



ÿ



ÿ





















 
ÿ


ÿ


ÿ


ÿ


ÿ
#r?  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rE   rF   rG   r   r   r   r   rx  `  s   rx  rð  c                   @   s   e Zd ZdS )ÚSendmsgUDPTestNry  r   r   r   r   rz  e  s   rz  rí  c                   @   s   e Zd ZdS )ÚRecvmsgUDPTestNry  r   r   r   r   r{  i  s   r{  r_  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPTestNry  r   r   r   r   r|  m  s   r|  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDP6TestBasec                 C   s    |   |d d… |d d… ¡ d S r<  rM  rN  r   r   r   rO  v  s    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rE   rF   rG   rO  r   r   r   r   r}  r  s   r}  r4  rç   r    c                   @   s   e Zd ZdS )ÚSendmsgUDP6TestNry  r   r   r   r   r  {  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgUDP6TestNry  r   r   r   r   r€    s   r€  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDP6TestNry  r   r   r   r   r  ‡  s   r  r8  c                   @   s   e Zd ZdS )ÚRecvmsgRFC3542AncillaryUDP6TestNry  r   r   r   r   r‚    s   r‚  c                   @   s   e Zd ZdS )Ú#RecvmsgIntoRFC3542AncillaryUDP6TestNry  r   r   r   r   rƒ  •  s   rƒ  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPLITETestBaseNry  r   r   r   r   r„  Ÿ  s   r„  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITETestNry  r   r   r   r   r…  ¦  s   r…  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITETestNry  r   r   r   r   r†  ¬  s   r†  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITETestNry  r   r   r   r   r‡  ²  s   r‡  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDPLITE6TestBasec                 C   s    |   |d d… |d d… ¡ d S r<  rM  rN  r   r   r   rO  ¿  s    z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNr~  r   r   r   r   rˆ  ¹  s   rˆ  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITE6TestNry  r   r   r   r   r‰  Ä  s   r‰  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITE6TestNry  r   r   r   r   rŠ  Ì  s   rŠ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITE6TestNry  r   r   r   r   r‹  Ô  s   r‹  c                   @   s   e Zd ZdS )Ú#RecvmsgRFC3542AncillaryUDPLITE6TestNry  r   r   r   r   rŒ  Ü  s   rŒ  c                   @   s   e Zd ZdS )Ú'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNry  r   r   r   r   r  æ  s   	r  c                   @   s   e Zd ZdS )ÚSendrecvmsgTCPTestBaseNry  r   r   r   r   rŽ  ò  s   rŽ  c                   @   s   e Zd ZdS )ÚSendmsgTCPTestNry  r   r   r   r   r  ö  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgTCPTestNry  r   r   r   r   r  ú  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgIntoTCPTestNry  r   r   r   r   r‘  ÿ  s   r‘  c                   @   s   e Zd ZdS )ÚSendrecvmsgSCTPStreamTestBaseNry  r   r   r   r   r’    s   r’  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr:   r/   rã   c                   @   s   e Zd ZdS )ÚSendmsgSCTPStreamTestNry  r   r   r   r   r“  
  s   r“  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚRecvmsgSCTPStreamTestc              
      sT   zt t| ƒ ¡  W n< tyN } z$|jtjkr0‚ |  d¡ W Y d }~n
d }~0 0 d S ©Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rK   r”  rÅ  r   re  ÚENOTCONNrb   ©r@   rŠ   rS   r   r   rÅ    s    z$RecvmsgSCTPStreamTest.testRecvmsgEOF©rE   rF   rG   rÅ  rX   r   r   rS   r   r”    s   r”  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚRecvmsgIntoSCTPStreamTestc              
      sT   zt t| ƒ ¡  W n< tyN } z$|jtjkr0‚ |  d¡ W Y d }~n
d }~0 0 d S r•  )rK   r™  rÅ  r   re  r–  rb   r—  rS   r   r   rÅ  $  s    z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr˜  r   r   rS   r   r™    s   r™  c                   @   s   e Zd ZdS )ÚSendrecvmsgUnixStreamTestBaseNry  r   r   r   r   rš  -  s   rš  rØ   c                   @   s   e Zd ZdS )ÚSendmsgUnixStreamTestNry  r   r   r   r   r›  1  s   r›  c                   @   s   e Zd ZdS )ÚRecvmsgUnixStreamTestNry  r   r   r   r   rœ  6  s   rœ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUnixStreamTestNry  r   r   r   r   r  <  s   r  r3  rö  c                   @   s   e Zd ZdS )ÚRecvmsgSCMRightsStreamTestNry  r   r   r   r   rž  B  s   rž  c                   @   s   e Zd ZdS )ÚRecvmsgIntoSCMRightsStreamTestNry  r   r   r   r   rŸ  G  s   rŸ  c                       sF   e Zd Z‡ fdd„ZejZeedƒr2dZ	dd„ Z
ndZ	dd„ Z
‡  ZS )	ÚInterruptedTimeoutBasec                    s2   t ƒ  ¡  t tjdd„ ¡}|  tjtj|¡ d S )Nc                 S   s   dd S rú  r   )Úsignumr¥  r   r   r   rì   [  rí   z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rK   rA   r  r  rU   )r@   Zorig_alrm_handlerrS   r   r   rA   X  s
    
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r2   )r  r¢  ÚITIMER_REAL©r@   Zsecondsr   r   r   ÚsetAlarmg  s    zInterruptedTimeoutBase.setAlarmrŸ   c                 C   s   t  |¡ d S r2   )r  rü  r¤  r   r   r   r¥  m  s    )rE   rF   rG   rA   r   r\  r5   r   r  Ú
alarm_timer¥  rX   r   r   rS   r   r   S  s   

r   Úsiginterruptrü  r¢  z+Don't have signal.alarm or signal.setitimerc                       sl   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	e
j
dƒdd„ ƒZe	e
j
dƒdd„ ƒZ‡  ZS )ÚInterruptedRecvTimeoutTestc                    s   t ƒ  ¡  | j | j¡ d S r2   )rK   rA   r;   rÐ  r5   r?   rS   r   r   rA   z  s    
z InterruptedRecvTimeoutTest.setUpc              	   O   sd   zR|   | j¡ |  t¡}||i |¤Ž W d   ƒ n1 s<0    Y  W |   d¡ n|   d¡ 0 d S rš   )r¥  r¦  r$  r  ©r@   r‰  rQ   rR   r/  r   r   r   ÚcheckInterruptedRecv~  s
    .z/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C   s   |   | jjd¡ d S r®   )rª  r;   r°   r?   r   r   r   ÚtestInterruptedRecvTimeoutˆ  s    z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C   s   |   | jjtdƒ¡ d S r®   )rª  r;   Ú	recv_intorÄ  r?   r   r   r   ÚtestInterruptedRecvIntoTimeout‹  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   s   |   | jjd¡ d S r®   )rª  r;   r§  r?   r   r   r   ÚtestInterruptedRecvfromTimeoutŽ  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutc                 C   s   |   | jjtdƒ¡ d S r®   )rª  r;   Úrecvfrom_intorÄ  r?   r   r   r   Ú"testInterruptedRecvfromIntoTimeout‘  s    z=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutrí  c                 C   s   |   | jjd¡ d S r®   )rª  r;   rí  r?   r   r   r   ÚtestInterruptedRecvmsgTimeout”  s    z8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr_  c                 C   s   |   | jjtdƒg¡ d S r®   )rª  r;   r_  rÄ  r?   r   r   r   Ú!testInterruptedRecvmsgIntoTimeout˜  s    z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rE   rF   rG   rA   rª  r«  r­  r®  r°  r  r   r±  r²  rX   r   r   rS   r   r¨  s  s   



r¨  c                       st   e Zd Z‡ fdd„Zdd„ Zdd„ Ze dd¡d	d
„ ƒZe dd¡dd„ ƒZ	e dd¡e
ejdƒdd„ ƒƒZ‡  ZS )ÚInterruptedSendTimeoutTestc                    sp   t ƒ  ¡  |  ¡ | _|  | jj¡ tj| jd}| 	¡  | j
 ¡ \| _}|  | jj¡ | ¡  | j | j¡ d S )N)Útarget)rK   rA   rÂ   r¾   rU   r   rM   ÚThreadÚ	doConnectÚstartr;   r§   r»   r   rÐ  r5   )r@   Z
cli_threadr½   rS   r   r   rA   ¨  s    

z InterruptedSendTimeoutTest.setUpc                 C   s   | j  | j¡ d S r2   )r¾   r­   rÅ   r?   r   r   r   r¶  ¶  s    z$InterruptedSendTimeoutTest.doConnectc              	   O   sf   zT|   t¡,}|  | j¡ ||i |¤Ž qW d   ƒ n1 s>0    Y  W |  d¡ n|  d¡ 0 d S rš   )r$  r  r¥  r¦  r©  r   r   r   ÚcheckInterruptedSend¹  s
    0z/InterruptedSendTimeoutTest.checkInterruptedSendr¡  r²  c                 C   s   |   | jjd¡ d S rž  )r¸  r¾   r·   r?   r   r   r   ÚtestInterruptedSendTimeoutÆ  s    z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutc                 C   s   |   | jjd| j¡ d S rž  )r¸  r¾   r,  rÅ   r?   r   r   r   ÚtestInterruptedSendtoTimeoutÊ  s    ÿz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrð  c                 C   s   |   | jjdg¡ d S rž  )r¸  r¾   rð  r?   r   r   r   ÚtestInterruptedSendmsgTimeoutÓ  s    z8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rE   rF   rG   rA   r¶  r¸  r   Zrequires_mac_verr¹  rº  r  r   r»  rX   r   r   rS   r   r³  Ÿ  s   	





r³  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTCPCloserTestc                 C   sh   | j  ¡ \}}| ¡  | j}t |gg g d¡\}}}|  ||g¡ |  | d¡d¡ | ¡  | ¡  d S )Nç      ð?ro   rí   )r;   r§   r   r“   rö  r±   r°   )r@   r¨   r½   Úsdr$  rì  r  r   r   r   Ú	testCloseÛ  s    zTCPCloserTest.testClosec                 C   s    | j  t| jf¡ t d¡ d S ©Nr½  )r“   r­   r›   r=   r«   r¬   r?   r   r   r   Ú
_testCloseè  s    zTCPCloserTest._testCloseN)rE   rF   rG   r¿  rÁ  r   r   r   r   r¼  Ù  s   r¼  c                   @   sN   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚBasicSocketPairTestrŽ   c                 C   s   t j| |d d S r   )r¿   rL   r’   r   r   r   rL   ï  s    zBasicSocketPairTest.__init__c                 C   s\   |   |tj¡ ttdƒr*|  |jtj¡ n|  |jtj¡ |  |jtj¡ |  |j	d¡ d S )NrØ   r   )
r  r   r   r±   r  rØ   r:   rð   r/   r  rÞ   r   r   r   Ú_check_defaultsò  s    
z#BasicSocketPairTest._check_defaultsc                 C   s   |   | j¡ d S r2   )rÃ  r“   r?   r   r   r   Ú_testDefaultsû  s    z!BasicSocketPairTest._testDefaultsc                 C   s   |   | j¡ d S r2   )rÃ  r;   r?   r   r   r   ÚtestDefaultsþ  s    z BasicSocketPairTest.testDefaultsc                 C   s   | j  d¡}|  |t¡ d S r®   ©r;   r°   r±   r²   r³   r   r   r   r    s    zBasicSocketPairTest.testRecvc                 C   s   | j  t¡ d S r2   ©r“   r·   r²   r?   r   r   r   r    s    zBasicSocketPairTest._testRecvc                 C   s   | j  t¡ d S r2   ©r;   r·   r²   r?   r   r   r   ÚtestSend  s    zBasicSocketPairTest.testSendc                 C   s   | j  d¡}|  |t¡ d S r®   ©r“   r°   r±   r²   r³   r   r   r   Ú	_testSend  s    zBasicSocketPairTest._testSendN)rŽ   )rE   rF   rG   rL   rÃ  rÄ  rÅ  r  r  rÉ  rË  r   r   r   r   rÂ  í  s   
	rÂ  c                       s®   e Zd Zdd„ Z‡ fdd„Z‡ fdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze eedƒ preedƒ d¡e ejd¡dd„ ƒƒZdd„ Zdd„ Zdd„ Z‡  ZS )ÚPurePythonSocketPairTestc                 C   s2   zt  t j¡W S  ty,   t  t j¡ Y S 0 d S r2   )r   rÀ   rç   r   r:   r?   r   r   r   rÀ     s    z#PurePythonSocketPairTest.socketpairc                    s0   t tdƒrtj| _tjt_nd | _tƒ  ¡  d S )NrÀ   )r   r  r   rÀ   Ú_orig_spÚ_fallback_socketpairrK   rA   r?   rS   r   r   rA     s
    

zPurePythonSocketPairTest.setUpc                    s    t ƒ  ¡  | jd ur| jt_d S r2   )rK   rC   rÍ  r   rÀ   r?   rS   r   r   rC   )  s    

z!PurePythonSocketPairTest.tearDownc                 C   s   | j  d¡}|  |t¡ d S r®   rÆ  r³   r   r   r   Ú	test_recv/  s    z"PurePythonSocketPairTest.test_recvc                 C   s   | j  t¡ d S r2   rÇ  r?   r   r   r   Ú
_test_recv3  s    z#PurePythonSocketPairTest._test_recvc                 C   s   | j  t¡ d S r2   rÈ  r?   r   r   r   Ú	test_send6  s    z"PurePythonSocketPairTest.test_sendc                 C   s   | j  d¡}|  |t¡ d S r®   rÊ  r³   r   r   r   Ú
_test_send9  s    z#PurePythonSocketPairTest._test_sendc                 C   s$   t  t j¡\}}| ¡  | ¡  d S r2   )r   rÀ   r:   r   ©r@   r“   r1  r   r   r   Ú	test_ipv4=  s    z"PurePythonSocketPairTest.test_ipv4c                 C   s   d S r2   r   r?   r   r   r   Ú
_test_ipv4B  s    z#PurePythonSocketPairTest._test_ipv4r8  ÚIPV6_V6ONLYú IPV6_V6ONLY option not supportedr>  c                 C   s$   t  t j¡\}}| ¡  | ¡  d S r2   )r   rÀ   rç   r   rÓ  r   r   r   Ú	test_ipv6E  s    z"PurePythonSocketPairTest.test_ipv6c                 C   s   d S r2   r   r?   r   r   r   Ú
_test_ipv6N  s    z#PurePythonSocketPairTest._test_ipv6c                    sÄ   t j j‰d ‰ ‡ ‡fdd„}d  }}zn|t j _|  t¡ t  ¡ \}}W d   ƒ n1 sX0    Y  W ˆt j _ˆ rxˆ  ¡  |r„| ¡  |rÀ| ¡  n.ˆt j _ˆ r¦ˆ  ¡  |r²| ¡  |r¾| ¡  0 d S )Nc              	      sf   ˆ| ƒ}ˆ d u rbt   t jt j¡‰ ˆ  d¡ zˆ  |d d… ¡ W n ttfyV   Y n0 ˆ  d¡ |S )NFrŸ   T)r   r:   r/   rI  r­   ÚBlockingIOErrorÚInterruptedError)r@   r.  ©Zinject_sockZorig_getsocknamer   r   Úinject_getsocketnameU  s    

z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)r   rœ   r$  r   rÀ   r   )r@   rÝ  Úsock1Úsock2r   rÜ  r   Ú$test_injected_authentication_failureQ  s,    ,
úz=PurePythonSocketPairTest.test_injected_authentication_failurec                 C   s   d S r2   r   r?   r   r   r   Ú%_test_injected_authentication_failurer  s    z>PurePythonSocketPairTest._test_injected_authentication_failure)rE   rF   rG   rÀ   rA   rC   rÏ  rÐ  rÑ  rÒ  rÔ  rÕ  r¢   rq  r   r  ro  r   rï  rØ  rÙ  rà  rá  rX   r   r   rS   r   rÌ    s$   	
þ!rÌ  c                   @   s¶   e Zd Zd&dd„Zdd„ Zdd„ Zdd	„ Zejd
d„ ƒZ	e e¡Z
e eedƒd¡e ddd¡dd„ ƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )'ÚNonBlockingTCPTestsrŽ   c                 C   s   t  ¡ | _tj| |d d S r   )rM   rx   Úeventr   rL   r’   r   r   r   rL   |  s    
zNonBlockingTCPTests.__init__c                 C   sh   |   | j ¡ |¡ |dk}|   | ¡ |¡ td urd|d u }t |tjtj¡}|   t|tj@ ƒ |¡ d S )Nç        )	r±   r;   r¢  Úgetblockingr   ÚF_GETFLrÏ   Ú
O_NONBLOCKÚbool)r@   rÕ   r5   ÚblockingZfd_blockingÚflagr   r   r   Úassert_sock_timeout€  s    z'NonBlockingTCPTests.assert_sock_timeoutc                 C   s    | j  d¡ |  | j d ¡ | j  d¡ |  | j d¡ | j  d ¡ |  | j d ¡ | j  d¡ |  | j d¡ | j  d¡ |  | j d¡ | j  d¡ |  | j d¡ d S )NTFrä  r   r¡  )r;   rI  rë  rÐ  r?   r   r   r   ÚtestSetBlocking‘  s    z#NonBlockingTCPTests.testSetBlockingc                 C   s   d S r2   r   r?   r   r   r   Ú_testSetBlocking¥  s    z$NonBlockingTCPTests._testSetBlockingc                 C   sb   dd l }|j|jkr|  d¡ | j d¡ |  | j ¡ d¡ | j |jd ¡ |  | j ¡ ¡ d S )Nr   zneeds UINT_MAX < ULONG_MAXFrä  ro   )	r  r0  Z	ULONG_MAXrb   r;   rI  r±   r¢  r‹  r1  r   r   r   ÚtestSetBlocking_overflow¨  s    
z,NonBlockingTCPTests.testSetBlocking_overflowrH  ztest needs socket.SOCK_NONBLOCKrŸ   é   é   c                 C   s4   | j  ¡  t tjtjtjB ¡| _ |  | j d¡ d S rš   )r;   r   r   r:   r/   rH  rë  r?   r   r   r   ÚtestInitNonBlocking·  s
    

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   s   d S r2   r   r?   r   r   r   Ú_testInitNonBlockingÁ  s    z(NonBlockingTCPTests._testInitNonBlockingc                 C   s`   t d ƒD | j d¡ | j ¡ \}}|  |j¡ |  | ¡ ¡ W d   ƒ n1 sR0    Y  d S )Nr¡  )r6   r;   rÐ  r§   rU   r   r‹  r¢  r¼   r   r   r   ÚtestInheritFlagsBlockingÄ  s
    
z,NonBlockingTCPTests.testInheritFlagsBlockingc                 C   s   | j  t| jf¡ d S r2   ©r“   r­   r›   r=   r?   r   r   r   Ú_testInheritFlagsBlockingÍ  s    z-NonBlockingTCPTests._testInheritFlagsBlockingc                 C   sf   d}t |ƒF | j d¡ | j ¡ \}}|  |j¡ |  | ¡ |¡ W d   ƒ n1 sX0    Y  d S )Ng      4@r¡  )r6   r;   rÐ  r§   rU   r   r±   r¢  )r@   Zdefault_timeoutr¨   r½   r   r   r   ÚtestInheritFlagsTimeoutÐ  s    
z+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   s   | j  t| jf¡ d S r2   rô  r?   r   r   r   Ú_testInheritFlagsTimeoutÛ  s    z,NonBlockingTCPTests._testInheritFlagsTimeoutc                 C   sÊ   | j  d¡ t ¡ }|  t¡ | j  ¡ \}}W d   ƒ n1 sB0    Y  t ¡ | }|  |d¡ | j 	¡  t
 
| j gg g tj¡\}}}| j |vrž|  d¡ | j  ¡ \}}|  |j¡ |  | ¡ ¡ d S )NFr½  z'Error trying to do accept after select.)r;   rI  r«   Ú	monotonicr$  rÚ  r§   r  rã  rm   rö  r   ÚLONG_TIMEOUTr   rU   r   r‹  r¢  )r@   Z
start_timer¨   r½   Zdtr$  rì  r  r   r   r   Ú
testAcceptÞ  s    ,


zNonBlockingTCPTests.testAcceptc                 C   s    | j  ¡  | j t| jf¡ d S r2   )rã  rƒ   r“   r­   r›   r=   r?   r   r   r   Ú_testAcceptô  s    
zNonBlockingTCPTests._testAcceptc                 C   s°   | j  ¡ \}}|  |j¡ | d¡ |  t¡ | tt	ƒ¡}W d   ƒ n1 sR0    Y  | j
 ¡  t |gg g tj¡\}}}||vr’|  d¡ | tt	ƒ¡}|  |t	¡ d S )NFz0Error during select call to non-blocking socket.)r;   r§   rU   r   rI  r$  rÚ  r°   rî  r²   rã  rm   rö  r   rù  r   r±   )r@   r¨   r½   r´   r$  rì  r  r   r   r   r  û  s    
,

zNonBlockingTCPTests.testRecvc                 C   s,   | j  t| jf¡ | j ¡  | j  t¡ d S r2   )r“   r­   r›   r=   rã  rƒ   r  r²   r?   r   r   r   r    s    
zNonBlockingTCPTests._testRecvN)rŽ   )rE   rF   rG   rL   rë  rì  rí  r   rp  rî  Z_testSetBlocking_overflowr¢   ro  r   r   Úrequires_linux_versionrñ  rò  ró  rõ  rö  r÷  rú  rû  r  r  r   r   r   r   râ  z  s*   


ÿ	râ  c                   @   sú   e Zd ZdZdZdZdZdZdZe	Z
dZe	Zd;d	d
„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%dS )<ÚFileObjectClassTestCaseao  Unit tests for the object returned by socket.makefile()

    self.read_file is the io object returned by makefile() on
    the client connection.  You can read from this file to
    get output from the server.

    self.write_file is the io object returned by makefile() on the
    server connection.  You can write to this file to send output
    to the client.
    rp  r   ÚstrictNr	   r   rŽ   c                 C   s   t j| |d d S r   r  r’   r   r   r   rL   0  s    z FileObjectClassTestCase.__init__c                 C   sR   dd„ t dƒD ƒ\| _| _| _| _t | ¡ | jj| j	| j
| j| j| jd| _d S )Nc                 S   s   g | ]}t  ¡ ‘qS r   )rM   rx   ©rú   r8   r   r   r   rü   4  s   z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r+  ©ÚencodingÚerrorsÚnewline)r)  Úevt1Úevt2Úserv_finishedÚcli_finishedrº   rA   r»   r  Ú	read_moderc   r  r  r  Ú	read_filer?   r   r   r   rA   3  s    ÿ
üzFileObjectClassTestCase.setUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r2   )r  rm   r	  r   r  Úclosedrº   rC   r?   r   r   r   rC   =  s
    

z FileObjectClassTestCase.tearDownc                 C   s0   t  | ¡ | jj| j| j| j| j| jd| _	d S )Nr   )
rº   r…   r¾   r  Ú
write_moderc   r  r  r  Ú
write_filer?   r   r   r   r…   D  s    
üz#FileObjectClassTestCase.clientSetUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r2   )r  rm   r  r   r  r
  rº   rˆ   r?   r   r   r   rˆ   L  s
    

z&FileObjectClassTestCase.clientTearDownc                 C   sx   | j  d¡ | j d¡ |  tj| jjd¡ |  t¡}| j d¡ W d   ƒ n1 sX0    Y  |  dt	|j
ƒ¡ d S )Nro   r  z!cannot read from timed out object)r»   rÐ  r	  r$  r$  r   r5   r   r  r  r-  )r@   Úctxr   r   r   ÚtestReadAfterTimeoutS  s    *z,FileObjectClassTestCase.testReadAfterTimeoutc                 C   s.   | j  | jdd… ¡ | j  ¡  | j ¡  d S )Nr   r  )r  rì  Ú	write_msgÚflushr  rƒ   r?   r   r   r   Ú_testReadAfterTimeout_  s    
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S rz  )r	  r$  rî  Úread_msgr±   )r@   Ú	first_segZ
second_segr´   r   r   r   ÚtestSmallReadd  s    z%FileObjectClassTestCase.testSmallReadc                 C   s   | j  | j¡ | j  ¡  d S r2   ©r  rì  r  r  r?   r   r   r   Ú_testSmallReadk  s    z&FileObjectClassTestCase._testSmallReadc                 C   s   | j  ¡ }|  || j¡ d S r2   )r	  r$  r±   r  r³   r   r   r   ÚtestFullReado  s    
z$FileObjectClassTestCase.testFullReadc                 C   s   | j  | j¡ | j  ¡  d S r2   )r  rì  r  r   r?   r   r   r   Ú_testFullReadt  s    z%FileObjectClassTestCase._testFullReadc                 C   s:   t | jƒƒ }| j d¡}|sq(||7 }q|  || j¡ d S rÛ   )rð   r  r	  r$  r±   )r@   rb  Úcharr   r   r   ÚtestUnbufferedReadx  s    
z*FileObjectClassTestCase.testUnbufferedReadc                 C   s   | j  | j¡ | j  ¡  d S r2   r  r?   r   r   r   Ú_testUnbufferedRead‚  s    z+FileObjectClassTestCase._testUnbufferedReadc                 C   s   | j  ¡ }|  || j¡ d S r2   )r	  Úreadliner±   r  ©r@   Úliner   r   r   ÚtestReadline†  s    
z$FileObjectClassTestCase.testReadlinec                 C   s   | j  | j¡ | j  ¡  d S r2   r  r?   r   r   r   Ú_testReadline‹  s    z%FileObjectClassTestCase._testReadlinec                 C   s&   | j  ¡  | j ¡ }|  || j¡ d S r2   )r»   r   r	  r$  r±   r  r³   r   r   r   ÚtestCloseAfterMakefile  s    

z.FileObjectClassTestCase.testCloseAfterMakefilec                 C   s   | j  | j¡ | j  ¡  d S r2   r  r?   r   r   r   Ú_testCloseAfterMakefile–  s    z/FileObjectClassTestCase._testCloseAfterMakefilec                 C   s@   | j  ¡  | j ttƒ¡}t| jtƒr.| 	¡ }|  
|| j¡ d S r2   )r	  r   r»   r°   rî  r²   rï   r  r  Údecoder±   r³   r   r   r   ÚtestMakefileAfterMakefileCloseš  s
    
z6FileObjectClassTestCase.testMakefileAfterMakefileClosec                 C   s   | j  | j¡ | j  ¡  d S r2   r  r?   r   r   r   Ú_testMakefileAfterMakefileClose¡  s    z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C   s   |   | jj ¡ d S r2   )r  r	  r
  r?   r   r   r   ÚtestClosedAttr¥  s    z&FileObjectClassTestCase.testClosedAttrc                 C   s   |   | jj ¡ d S r2   )r  r  r
  r?   r   r   r   Ú_testClosedAttr¨  s    z'FileObjectClassTestCase._testClosedAttrc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r2   )r±   r	  r"  r  rû   r»   r  r?   r   r   r   ÚtestAttributes«  s    z&FileObjectClassTestCase.testAttributesc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r2   )r±   r  r"  r  rû   r¾   r  r?   r   r   r   Ú_testAttributes¯  s    z'FileObjectClassTestCase._testAttributesc                 C   s8   | j  ¡  |  t| j j¡ | j ¡  |  t| jj¡ d S r2   )r	  r   r$  r£  r  r»   r   rœ   r?   r   r   r   ÚtestRealClose³  s    

z%FileObjectClassTestCase.testRealClosec                 C   s   d S r2   r   r?   r   r   r   Ú_testRealClose¹  s    z&FileObjectClassTestCase._testRealClose)rŽ   )&rE   rF   rG   rW   rc   r  r  r  r  r²   r  r  r  rL   rA   rC   r…   rˆ   r  r  r  r  r  r  r  r  r  r   r!  r"  r$  r%  r&  r'  r(  r)  r*  r+  r   r   r   r   rý    sD   


rý  c                   @   sd   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )Ú!UnbufferedFileObjectClassTestCasea‡  Repeat the tests from FileObjectClassTestCase with bufsize==0.

    In this case (and in this case only), it should be possible to
    create a file object, read a line from it, create another file
    object, read another line from it, without loss of data in the
    first file object's buffer.  Note that http.client relies on this
    when reading multiple requests from the same socket.r   c                 C   sL   | j  ¡ }|  |d| j ¡ | j dd¡| _ | j  ¡ }|  |d| j ¡ d S )Nó   A. r	   r   ó   B. )r	  r  r±   r  r»   r  r  r   r   r   ÚtestUnbufferedReadlineÉ  s
    

z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinec                 C   s2   | j  d| j ¡ | j  d| j ¡ | j  ¡  d S )Nr-  r.  r  r?   r   r   r   Ú_testUnbufferedReadlineÑ  s    z9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinec                 C   sD   | j  ¡  | j  d¡}|  || j¡ | j ¡  |  t| j jd¡ d S r®   )r»   r   r°   r±   r  r	  r$  r   r³   r   r   r   ÚtestMakefileCloseÖ  s
    

z3UnbufferedFileObjectClassTestCase.testMakefileClosec                 C   s   | j  | j¡ | j  ¡  d S r2   r  r?   r   r   r   Ú_testMakefileCloseß  s    z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t  | j¡}| j ¡  t  | j¡}|  |d |¡ d S rÛ   )r|  r{  r»   r	  r   r±   )r@   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyã  s    
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   s   d S r2   r   r?   r   r   r   Ú_testMakefileCloseSocketDestroyé  s    zAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroyc                 C   s  | j  d¡ |  | j tdƒ¡d ¡ |  | j t| jƒd ¡d ¡ | j	 
¡  | j d¡ | j t| jƒd ¡}|d u r–t d¡ | j t| jƒd ¡}tdƒ}| j |¡}|  |d¡ ||d |…  }|  || j¡ |  | j tdƒ¡d ¡ |  | j d¡d ¡ d S )NFr¡  r  r½  g      à?r‚  ro   )r»   rI  r±   r	  ÚreadintorÄ  r$  rî  r  r  rm   r  rƒ   r«   r¬   )r@   r  rb  rå  r´   r   r   r   ÚtestSmallReadNonBlockingð  s     

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingc                 C   s>   | j  d¡ | j | j¡ | j ¡  | j ¡  | j d¡ d S )Nr½  ç      @)	r  rƒ   r  rì  r  r  r  rm   r  r?   r   r   r   Ú_testSmallReadNonBlocking  s
    

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s"   | j  d¡ | jr|  | j¡ d S )Nr7  )r  rƒ   Úserv_skippedrb   r?   r   r   r   ÚtestWriteNonBlocking  s    z6UnbufferedFileObjectClassTestCase.testWriteNonBlockingc                 C   st   d | _ | j d¡ dtj }d}| j |¡}|  |d¡ t|ƒD ](}| j |¡}|d u r\ qp|  |d¡ q@d| _ d S )NFr  r¡  r   z$failed to saturate the socket buffer)	r9  r¾   rI  r   r	  r  rì  rj  r)  )r@   ZBIGZLIMITrå  r8   r   r   r   Ú_testWriteNonBlocking  s    
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rE   rF   rG   rW   rc   r/  r0  r1  r2  r3  r4  r6  r8  r:  r;  r   r   r   r   r,  ½  s   		r,  c                   @   s   e Zd ZdZdS )Ú#LineBufferedFileObjectClassTestCasero   N©rE   rF   rG   rc   r   r   r   r   r<  )  s   r<  c                   @   s   e Zd ZdZdS )Ú$SmallBufferedFileObjectClassTestCaserŸ   Nr=  r   r   r   r   r>  .  s   r>  c                   @   s*   e Zd ZdZdZe d¡ZdZeZ	dZ
dS )Ú"UnicodeReadFileObjectClassTestCaseú=Tests for socket.makefile() in text mode (rather than binary)r   r   r   r(  N©rE   rF   rG   rW   r  r²   r#  r  r  r  r  r   r   r   r   r?  3  s   
r?  c                   @   s*   e Zd ZdZdZeZdZe d¡Z	dZ
dS )Ú#UnicodeWriteFileObjectClassTestCaser@  r	   r  r   r(  N)rE   rF   rG   rW   r  r²   r  r  r#  r  r  r   r   r   r   rB  =  s   
rB  c                   @   s0   e Zd ZdZdZe d¡ZdZe d¡Z	dZ
dS )Ú'UnicodeReadWriteFileObjectClassTestCaser@  r   r   r  r(  NrA  r   r   r   r   rC  G  s   

rC  c                   @   s   e Zd ZdZdd„ ZdS )ÚNetworkConnectionTestzProve network connection.c                 C   s   t  t| jf¡| _| j| _d S r2   )r   Úcreate_connectionr›   r=   r“   r¾   r?   r   r   r   r…   T  s    z!NetworkConnectionTest.clientSetUpN)rE   rF   rG   rW   r…   r   r   r   r   rD  Q  s   rD  c                   @   s   e Zd ZdZdS )ÚBasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)rE   rF   rG   rW   r   r   r   r   rF  Z  s   rF  c                   @   sD   e Zd ZG dd„ dejƒZejdd„ ƒZdd„ Zdd„ Z	d	d
„ Z
dS )ÚNetworkConnectionNoServerc                   @   s   e Zd Zdd„ ZdS )z$NetworkConnectionNoServer.MockSocketc                 G   s   t  d¡‚d S )Nz	timed out)r   r5   rG  r   r   r   r­   a  s    z,NetworkConnectionNoServer.MockSocket.connectN)rE   rF   rG   r­   r   r   r   r   Ú
MockSocket`  s   rH  c                 c   s,   t j }| jt _ zdV  W |t _ n|t _ 0 dS )z*Return a socket which times out on connectN)r   rH  )r@   Z
old_socketr   r   r   Úmocked_socket_moduled  s
    z.NetworkConnectionNoServer.mocked_socket_modulec                 C   sr   t  ¡ }t tjtj¡}|  |j¡ |  t¡}| 	t
|f¡ W d   ƒ n1 sR0    Y  |  |jjtj¡ d S r2   )r   rÇ  r   r:   r/   rU   r   r$  r   r­   r›   r±   r-  re  ZECONNREFUSED)r@   r=   r“   r/  r   r   r   Útest_connectn  s    ,z&NetworkConnectionNoServer.test_connectc                 C   s\   t  ¡ }|  t¡}t t|f¡ W d   ƒ n1 s60    Y  t  ¡ }|  |j	j
|¡ d S r2   )r   rÇ  r$  r   r   rE  r›   Zget_socket_conn_refused_errsr  r-  re  )r@   r=   r/  Zexpected_errnosr   r   r   Útest_create_connectionv  s
    ,z0NetworkConnectionNoServer.test_create_connectionc                 C   s”   |   ¡ x zt tdf¡ W nJ tjy0   Y nB tyf } z tjsP|jtj	krR‚ W Y d }~nd }~0 0 |  
d¡ W d   ƒ n1 s†0    Y  d S )Nr   r™  )rI  r   rE  r›   r5   r   r   rï  re  ZEAFNOSUPPORTr   r›  r   r   r   Útest_create_connection_timeoutŽ  s    
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rE   rF   rG   r   rH  Ú
contextlibÚcontextmanagerrI  rJ  rK  rL  r   r   r   r   rG  ^  s   
	rG  c                   @   sv   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeZd
d„ ZeZ	dd„ Z
eZdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZdS )ÚNetworkConnectionAttributesTestrŽ   c                 C   s   t j| |d t | ¡ d S r   r‘   r’   r   r   r   rL   Ÿ  s    z(NetworkConnectionAttributesTest.__init__c                 C   s   t  ¡ | _d S r2   )r   rÇ  Úsource_portr?   r   r   r   r…   £  s    z+NetworkConnectionAttributesTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   ¦  s    
z.NetworkConnectionAttributesTest.clientTearDownc                 C   s   | j  ¡ \}}| ¡  d S r2   )r;   r§   r   r¼   r   r   r   Ú_justAccept«  s    z+NetworkConnectionAttributesTest._justAcceptc                 C   s:   t jt| jftjd| _|  | jj¡ |  	| jj
d¡ d S )Nr•  rŸ   )r   rE  r›   r=   r   r\  r“   rU   r   r±   r  r?   r   r   r   Ú_testFamily°  s
    ÿz+NetworkConnectionAttributesTest._testFamilyc                 C   sJ   t jt| jftjd| jfd| _|  | jj	¡ |  
| j ¡ d | j¡ d S )Nr(  )r5   Úsource_addressro   )r   rE  r›   r=   r   r\  rP  r“   rU   r   r±   rœ   r?   r   r   r   Ú_testSourceAddress·  s    þz2NetworkConnectionAttributesTest._testSourceAddressc              	   C   sn   |   t ¡ d u ¡ t d¡ z.t t| jf¡| _|  | jj	¡ W t d ¡ nt d ¡ 0 |  
| j ¡ d¡ d S )Nr>  ©r  r   r3   r4   rE  r›   r=   r“   rU   r   r±   r¢  r?   r   r   r   Ú_testTimeoutDefaultÁ  s    
z3NetworkConnectionAttributesTest._testTimeoutDefaultc              	   C   sr   |   t ¡ d u ¡ t d¡ z2tjt| jfd d| _|  | jj	¡ W t d ¡ nt d ¡ 0 |  
| j ¡ d ¡ d S ©Né   r•  rU  r?   r   r   r   Ú_testTimeoutNoneÍ  s    
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S rW  )r   rE  r›   r=   r“   r±   r¢  r?   r   r   r   Ú_testTimeoutValueNamedÙ  s    z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t  t| jfd¡| _|  | jj¡ |  | j ¡ d¡ d S )NrX  )	r   rE  r›   r=   r“   rU   r   r±   r¢  r?   r   r   r   Ú_testTimeoutValueNonamedÞ  s    z8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)rŽ   )rE   rF   rG   rL   r…   rˆ   rQ  Z
testFamilyrR  ZtestSourceAddressrT  ZtestTimeoutDefaultrV  ZtestTimeoutNonerY  ZtestTimeoutValueNamedrZ  ZtestTimeoutValueNonamedr[  r   r   r   r   rO    s    
	rO  c                   @   sB   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeZd
d„ Zdd„ Z	dS )ÚNetworkConnectionBehaviourTestrŽ   c                 C   s   t j| |d t | ¡ d S r   r‘   r’   r   r   r   rL   æ  s    z'NetworkConnectionBehaviourTest.__init__c                 C   s   d S r2   r   r?   r   r   r   r…   ê  s    z*NetworkConnectionBehaviourTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   í  s    
z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  ¡ \}}|  |j¡ t d¡ | d¡ d S )Nr  ó   done!)r;   r§   rU   r   r«   r¬   r·   r¼   r   r   r   ÚtestInsideTimeoutò  s    
z0NetworkConnectionBehaviourTest.testInsideTimeoutc                 C   s0   t  t| jf¡ | _}| d¡}|  |d¡ d S )NrÙ  r]  )r   rE  r›   r=   r“   r°   r±   )r@   rÕ   r¢  r   r   r   Ú_testInsideTimeoutù  s    
z1NetworkConnectionBehaviourTest._testInsideTimeoutc                    s4   t jt| jfdd | _‰ |  t j‡ fdd„¡ d S )Nro   r•  c                      s
   ˆ   d¡S )NrÙ  )r°   r   ©rÕ   r   r   rì      rí   zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r   rE  r›   r=   r“   r$  r5   r?   r   r`  r   Ú_testOutsideTimeoutþ  s    z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)rŽ   )
rE   rF   rG   rL   r…   rˆ   r^  ZtestOutsideTimeoutr_  ra  r   r   r   r   r\  ä  s   
r\  c                   @   s6   e Zd Zdd„ Zdd„ Ze eedƒd¡dd„ ƒZ	d	S )
ÚTCPTimeoutTestc                    s    ‡ fdd„}ˆ   tj|d¡ d S )Nc                     s   ˆ j  d¡ ˆ j  ¡  d S rÀ  )r;   rÐ  r§   ré   r?   r   r   Úraise_timeout  s    z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)©r$  r   r5   ©r@   rc  r   r?   r   ÚtestTCPTimeout  s    
ÿzTCPTimeoutTest.testTCPTimeoutc                 C   sx   d}z| j  d¡ | j  ¡ }W nF tjy<   |  d¡ Y n* tyP   d}Y n   |  d¡ Y n0 |st|  d¡ d S )NFrä  z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r;   rÐ  r§   r   r5   r   r   ©r@   Úokrf  r   r   r   ÚtestTimeoutZero  s    zTCPTimeoutTest.testTimeoutZerorü  ztest needs signal.alarm()c              
      s  | j  d¡ G dd„ dtƒ‰ ‡ fdd„}t tj|¡}zÐz zŽzt d¡ | j  ¡ }W n\ tjyr   |  	d¡ Y nJ ˆ y‚   Y n:   |  	dt
 ¡ d d… t ¡ f  ¡ Y n0 |  	d	¡ W t d
¡ nt d
¡ 0 W n ˆ yô   |  	d¡ Y n0 W t tj|¡ nt tj|¡ 0 d S )Nr7  c                   @   s   e Zd ZdS )z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNry  r   r   r   r   ÚAlarm!  s   rj  c                    s   ˆ ‚d S r2   r   )r  r¥  ©rj  r   r   Úalarm_handler#  s    z<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerrŸ   zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtr   zgot Alarm in wrong place)r;   rÐ  rV  r  r  rü  r§   r   r5   r   r|  Úexc_infoÚ	tracebackÚ
format_exc)r@   rl  r  rf  r   rk  r   ÚtestInterruptedTimeout  s*    
þz%TCPTimeoutTest.testInterruptedTimeoutN)
rE   rF   rG   rf  ri  r¢   ro  r   r  rp  r   r   r   r   rb    s   ÿrb  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚUDPTimeoutTestc                    s    ‡ fdd„}ˆ   tj|d¡ d S )Nc                     s   ˆ j  d¡ ˆ j  d¡ d S ©Nr½  r¯   ©r;   rÐ  r°   ré   r?   r   r   rc  ?  s    z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)rd  re  r   r?   r   ÚtestUDPTimeout>  s    
ÿzUDPTimeoutTest.testUDPTimeoutc                 C   sz   d}z| j  d¡ | j  d¡}W nF tjy>   |  d¡ Y n* tyR   d}Y n   |  d¡ Y n0 |sv|  d¡ d S )NFrä  r¯   z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)ú1recv() returned success when we did not expect it©r;   rÐ  r°   r   r5   r   r   rg  r   r   r   ri  E  s    zUDPTimeoutTest.testTimeoutZeroN)rE   rF   rG   rt  ri  r   r   r   r   rq  <  s   rq  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚUDPLITETimeoutTestc                    s    ‡ fdd„}ˆ   tj|d¡ d S )Nc                     s   ˆ j  d¡ ˆ j  d¡ d S rr  rs  ré   r?   r   r   rc  X  s    z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)rd  re  r   r?   r   ÚtestUDPLITETimeoutW  s    
ÿz%UDPLITETimeoutTest.testUDPLITETimeoutc                 C   sz   d}z| j  d¡ | j  d¡}W nF tjy>   |  d¡ Y n* tyR   d}Y n   |  d¡ Y n0 |sv|  d¡ d S )NFrä  r¯   z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)ru  rv  rg  r   r   r   ri  ^  s    z"UDPLITETimeoutTest.testTimeoutZeroN)rE   rF   rG   rx  ri  r   r   r   r   rw  S  s   rw  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestExceptionsc                 C   sJ   |   tttƒ¡ |   ttjtƒ¡ |   ttjtƒ¡ |   ttjtƒ¡ d S r2   )r  Ú
issubclassr   rV  r   r%  r&  r5   r?   r   r   r   ÚtestExceptionTreen  s    z TestExceptions.testExceptionTreec                 C   sv   t   t jt jd¡}t   t jt jd| ¡ ¡}| ¡  |  |j¡ |  t¡ | 	d¡ W d   ƒ n1 sh0    Y  d S )Nr   F)
r   r:   r/   r  r   rU   rL  r$  r   rI  )r@   Zsock0rÕ   r   r   r   Útest_setblocking_invalidfdt  s    ÿz)TestExceptions.test_setblocking_invalidfdN)rE   rF   rG   r{  r|  r   r   r   r   ry  l  s   ry  r–  úLinux specific testc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestLinuxAbstractNamespaceél   c              
   C   sÔ   d}t   t jt j¡¬}| |¡ | ¡  t   t jt j¡j}| | ¡ ¡ | ¡ d 0}|  | ¡ |¡ |  | 	¡ |¡ W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )Ns    python-test-hello ÿr   )
r   rØ   r/   r`   r>   r­   rœ   r§   r±   Úgetpeername)r@   r‘  Ús1r^  Zs3r   r   r   ÚtestLinuxAbstractNamespace†  s    
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec                 C   s`   dd| j d   }t tjtj¡*}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  d S )NrŸ  ó   hro   )ÚUNIX_PATH_MAXr   rØ   r/   r`   r±   rœ   ©r@   r‘  r   r   r   r   ÚtestMaxName‘  s    
z&TestLinuxAbstractNamespace.testMaxNamec                 C   sR   dd| j   }t tjtj¡ }|  t|j|¡ W d   ƒ n1 sD0    Y  d S )Nú Úh)r„  r   rØ   r/   r$  r   r`   r…  r   r   r   ÚtestNameOverflow—  s    z+TestLinuxAbstractNamespace.testNameOverflowc                 C   sF   t   t jt j¡}z&| d¡ |  | ¡ d¡ W | ¡  n
| ¡  0 d S )Nz python test ó    python test )r   rØ   r/   r`   r±   rœ   r   r  r   r   r   ÚtestStrNameœ  s
    
z&TestLinuxAbstractNamespace.testStrNamec                 C   sR   t   t jt j¡.}| tdƒ¡ |  | ¡ d¡ W d   ƒ n1 sD0    Y  d S )NrŠ  )r   rØ   r/   r`   rÄ  r±   rœ   r  r   r   r   ÚtestBytearrayName¥  s    z,TestLinuxAbstractNamespace.testBytearrayNamec              	   C   s°   d}t   t jt j¡ˆ}| d¡ |  | ¡ |¡ t   t jt j¡>}| d¡ |  | ¡ |¡ |  | ¡ | ¡ ¡ W d   ƒ n1 s„0    Y  W d   ƒ n1 s¢0    Y  d S )Ns   ^ [0-9a-f]{5}r(  )r   rØ   r/   r`   ZassertRegexrœ   rü  )r@   Zabstract_addressr  r^  r   r   r   ÚtestAutobind«  s    

z'TestLinuxAbstractNamespace.testAutobindN)
rE   rF   rG   r„  r‚  r†  r‰  r‹  rŒ  r  r   r   r   r   r~    s   	r~  ztest needs socket.AF_UNIXc                   @   sn   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze ejdkd¡dd„ ƒZdS )ÚTestUnixDomainc                 C   s   t   t jt j¡| _d S r2   )r   rØ   r/   rÕ   r?   r   r   r   rA   ¼  s    zTestUnixDomain.setUpc                 C   s   | j  ¡  d S r2   )rÕ   r   r?   r   r   r   rC   ¿  s    zTestUnixDomain.tearDownc              
   C   s:   zt  |¡W S  ty4   |  d |t ¡ ¡¡ Y n0 d S )NzBPathname {0!a} cannot be represented in file system encoding {1!r})rÏ   Úfsencoderó  rb   r  r|  Úgetfilesystemencoding©r@   rÖ   r   r   r   ÚencodedÂ  s    þÿzTestUnixDomain.encodedc              
   C   sZ   zt  ||¡ W nD tyT } z,t|ƒdkr>|  d |¡¡ n‚ W Y d }~n
d }~0 0 d S )NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r   rÓ   r   r  rb   r  )r@   rÕ   rÖ   rŠ   r   r   r   r`   Í  s    ÿÿzTestUnixDomain.bindc                 C   s   |   | j ¡ d¡ d S )N)r(  N)r  rÕ   rœ   r?   r   r   r   rû  Ù  s    zTestUnixDomain.testUnboundc                 C   s@   t j tj¡}|  | j|¡ |  tj|¡ |  	| j 
¡ |¡ d S r2   )rÏ   rÖ   Úabspathr   ÚTESTFNr`   rÕ   rU   rÔ   r±   rœ   r‘  r   r   r   ÚtestStrAddrÝ  s    zTestUnixDomain.testStrAddrc                 C   sF   t j tj¡}|  | j|  |¡¡ |  tj	|¡ |  
| j ¡ |¡ d S r2   )rÏ   rÖ   r“  r   r”  r`   rÕ   r’  rU   rÔ   r±   rœ   r‘  r   r   r   ÚtestBytesAddrä  s    zTestUnixDomain.testBytesAddrc                 C   sR   t j tj¡}|  |¡}|  | j| dd¡¡ |  	tj
|¡ |  | j ¡ |¡ d S )NÚasciiÚsurrogateescape)rÏ   rÖ   r“  r   ZTESTFN_UNICODEr’  r`   rÕ   r#  rU   rÔ   r±   rœ   )r@   rÖ   rö  r   r   r   ÚtestSurrogateescapeBindë  s
    
z&TestUnixDomain.testSurrogateescapeBindc                 C   sT   t jd u r|  d¡ tj t j¡}|  | j|¡ |  t j	|¡ |  
| j ¡ |¡ d S )Nz!No unencodable filename available)r   ZTESTFN_UNENCODABLErb   rÏ   rÖ   r“  r`   rÕ   rU   rÔ   r±   rœ   r‘  r   r   r   ÚtestUnencodableAddrô  s    

z"TestUnixDomain.testUnencodableAddrr–  r}  c                 C   s   |   t| jjd¡ d S )Nr(  )r$  r   rÕ   r`   r?   r   r   r   ÚtestEmptyAddressþ  s    zTestUnixDomain.testEmptyAddressN)rE   rF   rG   rA   rC   r’  r`   rû  r•  r–  r™  rš  r¢   rq  r|  r›  r›  r   r   r   r   rŽ  ¹  s   	
rŽ  c                   @   s†   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZeZdd„ Z	eZ
dd„ Zdd„ Zdd„ ZeZdd„ ZeZdd„ Zdd„ Zdd„ ZeZdS )ÚBufferIOTestzF
    Test the buffer versions of socket.recv() and socket.send().
    rŽ   c                 C   s   t j| |d d S r   r  r’   r   r   r   rL     s    zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nrv  r   )rw  rî  r²   r»   r¬  r±   rÓ  ©r@   rb  rÎ  r´   r   r   r   ÚtestRecvIntoArray  s    zBufferIOTest.testRecvIntoArrayc                 C   s   t tƒ}| j |¡ d S r2   ©rº  r²   r¾   r·   ©r@   rb  r   r   r   Ú_testRecvIntoArray  s    zBufferIOTest._testRecvIntoArrayc                 C   sD   t dƒ}| j |¡}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r®   )rÄ  r»   r¬  r±   rî  r²   rž  r   r   r   ÚtestRecvIntoBytearray  s
    z"BufferIOTest.testRecvIntoBytearrayc                 C   sH   t dƒ}| j t|ƒ¡}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r®   )rÄ  r»   r¬  rØ  r±   rî  r²   rž  r   r   r   ÚtestRecvIntoMemoryview   s
    z#BufferIOTest.testRecvIntoMemoryviewc                 C   s^   t   ddgttƒ ¡}| j |¡\}}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S r  )rw  rî  r²   r»   r¯  r±   rÓ  ©r@   rb  rÎ  r½   r´   r   r   r   ÚtestRecvFromIntoArray)  s    z"BufferIOTest.testRecvFromIntoArrayc                 C   s   t tƒ}| j |¡ d S r2   r   r¡  r   r   r   Ú_testRecvFromIntoArray1  s    z#BufferIOTest._testRecvFromIntoArrayc                 C   sH   t dƒ}| j |¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r®   )rÄ  r»   r¯  r±   rî  r²   r¥  r   r   r   ÚtestRecvFromIntoBytearray5  s
    z&BufferIOTest.testRecvFromIntoBytearrayc                 C   sL   t dƒ}| j t|ƒ¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r®   )rÄ  r»   r¯  rØ  r±   rî  r²   r¥  r   r   r   ÚtestRecvFromIntoMemoryview>  s
    z'BufferIOTest.testRecvFromIntoMemoryviewc                 C   s    t dƒ}|  t| jj|d¡ d S )Nr]   r¯   )rÄ  r$  r£  r»   r¯  r¡  r   r   r   ÚtestRecvFromIntoSmallBufferG  s    z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testRecvFromIntoSmallBufferL  s    z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t ƒ }| j |¡ | j |d¡ d S rš   )rÄ  r»   r¯  r¡  r   r   r   ÚtestRecvFromIntoEmptyBufferO  s    z(BufferIOTest.testRecvFromIntoEmptyBufferN)rŽ   )rE   rF   rG   rW   rL   rŸ  r¢  r£  Z_testRecvIntoBytearrayr¤  Z_testRecvIntoMemoryviewr¦  r§  r¨  Z_testRecvFromIntoBytearrayr©  Z_testRecvFromIntoMemoryviewrª  r«  r¬  Z_testRecvFromIntoEmptyBufferr   r   r   r   rœ    s$   
rœ  iÐ  éÈ   éÒ   c               
   C   s„   t tdƒsdS ztdƒ} W n tttfy4   Y dS 0 | 6 | D ] }| d¡r@ W d  ƒ dS q@W d  ƒ n1 sv0    Y  dS )zˆCheck if the TIPC module is loaded

    The TIPC module is not loaded automatically on Ubuntu and probably
    other Linux distros.
    ÚAF_TIPCFz/proc/modulesztipc NT)r   r   r   ÚFileNotFoundErrorÚIsADirectoryErrorrb  rœ  )r   r  r   r   r   ÚisTipcAvailable[  s    

2r²  z6TIPC module is not loaded, please 'sudo modprobe tipc'c                   @   s   e Zd Zdd„ ZdS )ÚTIPCTestc                 C   sº   t   t jt j¡}t   t jt j¡}|  |j¡ |  |j¡ | t jt jd¡ t jt	t
tf}| |¡ t jt	t
ttt
 d ƒ df}| t|¡ | d¡\}}|  | ¡ |¡ |  |t¡ d S )Nro   rŸ   r   r¯   )r   r¯  r2  rU   r   rÍ  r3  r4  ÚTIPC_ADDR_NAMESEQÚ
TIPC_STYPEÚ
TIPC_LOWERÚ
TIPC_UPPERr`   ÚTIPC_ADDR_NAMEri  r,  r²   r§  r±   rœ   )r@   r1  r“   ÚsrvaddrZsendaddrr´   Zrecvaddrr   r   r   ÚtestRDMr  s     ÿ
ÿzTIPCTest.testRDMN)rE   rF   rG   rº  r   r   r   r   r³  o  s   r³  c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTIPCThreadableTestrŽ   c                 C   s   t jj| |d t | ¡ d S r   r¡   r’   r   r   r   rL   Š  s    zTIPCThreadableTest.__init__c                 C   s„   t   t jt j¡| _|  | jj¡ | j t jt jd¡ t j	t
ttf}| j |¡ | j ¡  |  ¡  | j ¡ \| _| _|  | jj¡ d S rÛ   )r   r¯  r/   r1  rU   r   rÍ  r3  r4  r´  rµ  r¶  r·  r`   r>   rn   r§   r¨   r©   )r@   r¹  r   r   r   rA   Ž  s    ÿ
zTIPCThreadableTest.setUpc                 C   sd   t  d¡ t tjtj¡| _|  | jj¡ tjt	t
ttt
 d ƒ df}| j |¡ | j ¡ | _d S )Nrª   rŸ   r   )r«   r¬   r   r¯  r/   r“   rU   r   r¸  rµ  r¶  ri  r·  r­   rœ   Úcliaddr)r@   r½   r   r   r   r…   š  s    
ÿzTIPCThreadableTest.clientSetUpc                 C   s,   | j  d¡}|  |t¡ |  | j| j¡ d S r®   )r¨   r°   r±   r²   r¼  r©   r³   r   r   r   rµ   ¦  s    zTIPCThreadableTest.testStreamc                 C   s   | j  t¡ | j  ¡  d S r2   r¶   r?   r   r   r   r¸   «  s    zTIPCThreadableTest._testStreamN)rŽ   r¹   r   r   r   r   r»  ‡  s
   
r»  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚContextManagersTestc                 C   sÄ   t   ¡ }|  |j¡ W d   ƒ n1 s*0    Y  |  |j¡ t   ¡ }| ¡  W d   ƒ n1 sf0    Y  |  |j¡ t   ¡  }|  t|jd¡ W d   ƒ n1 sª0    Y  |  |j¡ d S ©Nr)  )r   rÊ  r3  r  r   r$  r   r  rÞ   r   r   r   Ú_testSocketClass²  s    
*
&
.z$ContextManagersTest._testSocketClassc                 C   s2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S r®   ©r;   r§   rU   r   r°   r  ©r@   r¨   r½   r¢  r   r   r   ÚtestCreateConnectionBaseÀ  s    
z,ContextManagersTest.testCreateConnectionBasec                 C   sl   | j  ¡ }t |¡8}|  |j¡ | d¡ |  | d¡d¡ W d   ƒ n1 sR0    Y  |  	|j¡ d S )Nr)  r¯   )
r;   rœ   r   rE  rÊ  r3  r  r±   r°   r  ©r@   r‘  rÕ   r   r   r   Ú_testCreateConnectionBaseÆ  s    

0z-ContextManagersTest._testCreateConnectionBasec                 C   s2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S r®   rÀ  rÁ  r   r   r   ÚtestCreateConnectionCloseÎ  s    
z-ContextManagersTest.testCreateConnectionClosec                 C   s\   | j  ¡ }t |¡}| ¡  W d   ƒ n1 s20    Y  |  |j¡ |  t|j	d¡ d S r¾  )
r;   rœ   r   rE  r   r  r3  r$  r   r  rÃ  r   r   r   Ú_testCreateConnectionCloseÔ  s
    
&z.ContextManagersTest._testCreateConnectionCloseN)rE   rF   rG   r¿  rÂ  rÄ  rÅ  rÆ  r   r   r   r   r½  °  s
   r½  c                   @   s„   e Zd Ze eedƒd¡e ddd¡dd„ ƒƒZ	dd	„ Z
d
d„ Zdd„ Ze edu d¡dd„ ƒZe edu d¡dd„ ƒZdd„ ZdS )ÚInheritanceTestr×  zSOCK_CLOEXEC not definedrŸ   rï  rð  c                 C   sX   t   t jt jt jB ¡.}|  |jt j¡ |  | ¡ ¡ W d   ƒ n1 sJ0    Y  d S r2   )r   r:   r/   r×  r±   rð   rÊ  Úget_inheritabler  r   r   r   Útest_SOCK_CLOEXECÝ  s    
ÿz!InheritanceTest.test_SOCK_CLOEXECc                 C   s@   t   ¡ }|  |  | ¡ d¡ W d   ƒ n1 s20    Y  d S r  )r   r±   rÈ  rÞ   r   r   r   Útest_default_inheritableæ  s    z(InheritanceTest.test_default_inheritablec              	   C   st   t   ¡ }|T | ¡ }| ¡  |  |  | ¡ d¡ W d   ƒ n1 sH0    Y  W d   ƒ n1 sf0    Y  d S r  )r   r*  r   r±   rÈ  )r@   rÕ   Znewsockr   r   r   Útest_dupë  s    zInheritanceTest.test_dupc                 C   sd   t   ¡ }|D | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ W d   ƒ n1 sV0    Y  d S )NTF)r   Úset_inheritabler±   rÈ  rÞ   r   r   r   Útest_set_inheritableó  s    

z$InheritanceTest.test_set_inheritableNrž   c                 C   s‚   t   ¡ }|b | ¡ }|  | ¡ d¡ t |tj¡}|tj M }t |tj|¡ |  | ¡ d¡ W d   ƒ n1 st0    Y  d S )NFT)r   r  r±   rÈ  r   ÚF_GETFDÚ
FD_CLOEXECZF_SETFD)r@   rÕ   rR  rê  r   r   r   Útest_get_inheritable_cloexecü  s    z,InheritanceTest.test_get_inheritable_cloexecc                 C   s|   t   ¡ }|\ | ¡ }|  t |tj¡tj@ tj¡ | d¡ |  t |tj¡tj@ d¡ W d   ƒ n1 sn0    Y  d S )NTr   )r   r  r±   r   rÎ  rÏ  rÌ  )r@   rÕ   rR  r   r   r   Útest_set_inheritable_cloexec
  s    ÿ
ÿz,InheritanceTest.test_set_inheritable_cloexecc                 C   sH   t  ¡ \}}|  |j¡ |  |j¡ |  | ¡ d¡ |  | ¡ d¡ d S r  )r   rÀ   rU   r   r±   rÈ  )r@   r  r^  r   r   r   Útest_socketpair  s
    zInheritanceTest.test_socketpair)rE   rF   rG   r¢   ro  r   r   r   rü  rÉ  rÊ  rË  rÍ  rq  r   rÐ  rÑ  rÒ  r   r   r   r   rÇ  Ü  s   ÿ	

rÇ  rH  zSOCK_NONBLOCK not definedc                   @   s,   e Zd Zddd„Ze ddd¡dd	„ ƒZd
S )ÚNonblockConstantTestTrä  c                 C   sº   |rj|   |jtj¡ |   | ¡ |¡ |  t |tjtj	¡tj	@ ¡ |dkrZ|  
| ¡ ¡ q¶|  | ¡ ¡ nL|   |jtj¡ |   | ¡ d ¡ |  
t |tjtj	¡tj	@ ¡ |  | ¡ ¡ d S rš   )r±   rð   r   r/   r¢  r  r   ræ  rÏ   rç  rÊ  rå  )r@   r   Únonblockr5   r   r   r   ÚcheckNonblock"  s    ÿ	ÿz"NonblockConstantTest.checkNonblockrŸ   rï  rð  c                 C   sÈ  t   t jt jt jB ¡Ž}|  |¡ | d¡ | j|dd | d¡ |  |¡ | d ¡ | j|dd | d¡ | j|dd | d¡ | j|dd W d   ƒ n1 sª0    Y  t  ¡ }t  d¡ t   ¡ }|  |¡ W d   ƒ n1 sî0    Y  t  d ¡ t   ¡ }|  |d¡ W d   ƒ n1 s.0    Y  t  d¡ t   ¡ }| j|dd W d   ƒ n1 sp0    Y  t  d ¡ t   ¡ }|  |d¡ W d   ƒ n1 s°0    Y  t  |¡ d S )NTF)rÔ  g       @r•  rä  )	r   r:   r/   rH  rÕ  rI  rÐ  r3   r4   )r@   r   Útr   r   r   Útest_SOCK_NONBLOCK;  s:    
ÿ






,

(

,

.

,z'NonblockConstantTest.test_SOCK_NONBLOCKN)Trä  )rE   rF   rG   rÕ  r   rü  r×  r   r   r   r   rÓ    s   
rÓ  r:  r;  zneed multiprocessingc                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestSocketSharingc                 C   sD   |  ¡ }|  ¡ }t |¡}| ¡ \}}| |¡ | ¡  | ¡  d S r2   )rr   r   Ú	fromsharer§   r  r   )r¡  ÚqZsdataÚmessager   r^  r
  r   r   r   ÚremoteProcessServerb  s    

z%TestSocketSharing.remoteProcessServerc           	      C   s°   t  ¡ }t j| j|fd}| ¡  | j |j¡}| j ¡ }| j 	¡  | 
|¡ d}| 
|¡ t |¡}g }| d¡}|szq†| |¡ qj| 	¡  d |¡}|  ||¡ | ¡  d S )N©r´  rQ   s
   slapmahfrorÞ  rí   )Úmultiprocessingr{   ÚProcessrÜ  r·  r;   ÚshareÚpidrœ   r   r‡   r   rE  r°   rî  r   r±   )	r@   rÚ  r!  r¢  r½   rÛ  r   ÚmÚreceivedr   r   r   Ú	testSharep  s&    






zTestSocketSharing.testSharec                 C   s@   | j  t ¡ ¡}|  ttj|d d… ¡ |  ttj|d ¡ d S )Nrp  r)  )r;   rà  rÏ   Úgetpidr$  r£  r   rÙ  )r@   r¢  r   r   r   ÚtestShareLength“  s    z!TestSocketSharing.testShareLengthc                 C   sb   |   | ¡ d ¡ |   | ¡ | ¡ ¡ |   |j|j¡ |   |j|j¡ |jdkr^|   |j|j¡ d S rš   )r±   r¢  r  rð   r  )r@   ZorgÚotherr   r   r   ÚcompareSockets˜  s    
z TestSocketSharing.compareSocketsc                 C   sD   | j  t ¡ ¡}t |¡}z|  | j |¡ W | ¡  n
| ¡  0 d S r2   )r;   rà  rÏ   rå  r   rÙ  rè  r   )r@   r¢  r   r   r   r   ÚtestShareLocal¨  s
    
z TestSocketSharing.testShareLocalc              
   C   s¬   t jt jg}t jt jg}|D ]Š}|D ]€}zt   ||¡}W n tyN   Y q$Y n0 zH| t ¡ ¡}t  	|¡}z|  
||¡ W | ¡  n
| ¡  0 W | ¡  q$| ¡  0 q$qd S r2   )r   r:   rç   r/   r    r   rà  rÏ   rå  rÙ  rè  r   )r@   ÚfamiliesÚtypesr   rÖ  Úsourcer¢  Zsharedr   r   r   Ú	testTypes°  s    

zTestSocketSharing.testTypesN)
rE   rF   rG   r½  rÜ  rä  ræ  rè  ré  rí  r   r   r   r   rØ  ]  s   
#rØ  c                   @   s  e Zd ZdZdZdZdZejZ	e
dd„ ƒZe
dd„ ƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;S )<ÚSendfileUsingSendTestz>
    Test the send() implementation of socket.sendfile().
    i    rh   rí   c                 C   sº   dd„ }d  dd„ t| jƒD ƒ¡}ttjdƒ.}|| j| jƒD ]}| |¡ q>W d   ƒ n1 sb0    Y  ttjdƒ.}| ¡ | _	t
| j	ƒ| jks˜J ‚W d   ƒ n1 s¬0    Y  d S )Nc                 s   s2   | |ksJ ‚| |kr$|V  | |8 } q| r.| V  d S r2   r   )ÚtotalÚstepr   r   r   ÚchunksÐ  s    
z0SendfileUsingSendTest.setUpClass.<locals>.chunksrí   c                 S   s   g | ]}t  tj¡ ¡ ‘qS r   )ÚrandomÚchoiceÚstringÚascii_lettersrí  rÿ  r   r   r   rü   Ø  s   ÿz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r   r	   )r   r)  ÚBUFSIZEr   r   r”  ÚFILESIZErì  r$  ÚFILEDATArî  )r¡  rñ  Úchunkr   Zcsizer   r   r   Ú
setUpClassÎ  s    
ÿ*
z SendfileUsingSendTest.setUpClassc                 C   s   t  t j¡ d S r2   )r   rÔ   r”  )r¡  r   r   r   ÚtearDownClassá  s    z#SendfileUsingSendTest.tearDownClassc                 C   s8   | j  tj¡ | j  ¡ \}}| | j¡ |  |j¡ |S r2   )r;   rÐ  r   rù  r§   ÚTIMEOUTrU   r   r¼   r   r   r   Úaccept_connå  s
    z!SendfileUsingSendTest.accept_connc                 C   s,   g }|  | j¡}|sq"| |¡ qd |¡S r  )r°   rö  rî  r   )r@   r¨   rã  rù  r   r   r   Ú	recv_dataì  s    zSendfileUsingSendTest.recv_datac                 C   s
   t |dƒS )NÚ_sendfile_use_send©r   rÞ   r   r   r   Úmeth_from_sockõ  s    z$SendfileUsingSendTest.meth_from_sockc              	   C   sš   | j  ¡ }ttjdƒ}t |¡f}|B}|  |¡}||ƒ}|  || j	¡ |  | 
¡ | j	¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Nr	   ©r;   rœ   r   r   r”  r   rE  r  r±   r÷  Útell©r@   r‘  ÚfilerÕ   ÚmethÚsentr   r   r   Ú_testRegularFileü  s    

z&SendfileUsingSendTest._testRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r2   ©rý  rþ  r±   rî  r÷  rø  ©r@   r¨   r¢  r   r   r   ÚtestRegularFile  s    
z%SendfileUsingSendTest.testRegularFilec              	   C   s¤   | j  ¡ }t | j¡}t |¡p}|L}| |¡}|  || j	¡ |  | 
¡ | j	¡ |  tj|j|¡ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  d S r2   )r;   rœ   ÚioÚBytesIOrø  r   rE  rT  r±   r÷  r  r$  rY  rZ  )r@   r‘  r  rÕ   r  r   r   r   Ú_testNonRegularFile  s    

ÿz)SendfileUsingSendTest._testNonRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r2   r	  r
  r   r   r   ÚtestNonRegularFile  s    
z(SendfileUsingSendTest.testNonRegularFilec              	   C   sÖ   | j  ¡ }tjd }t|dƒ |  tj|¡ W d   ƒ n1 sB0    Y  t|dƒ}t |¡b}|>}|  	|¡}||ƒ}|  
|d¡ |  
| ¡ d¡ W d   ƒ n1 sª0    Y  W d   ƒ n1 sÈ0    Y  d S )NÚ2r   r	   r   )r;   rœ   r   r”  r   rU   rÔ   r   rE  r  r±   r  )r@   r‘  Úfilenamer  rÕ   r  r  r   r   r   Ú_testEmptyFileSend  s    

,

z(SendfileUsingSendTest._testEmptyFileSendc                 C   s"   |   ¡ }|  |¡}|  |d¡ d S r  )rý  rþ  r±   r
  r   r   r   ÚtestEmptyFileSend+  s    
z'SendfileUsingSendTest.testEmptyFileSendc              	   C   s¢   | j  ¡ }ttjdƒ}t |¡n}|J}|  |¡}||dd}|  || j	d ¡ |  | 
¡ | j	¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  d S )Nr	   éˆ  )Úoffsetr  r  r   r   r   Ú_testOffset2  s    

z!SendfileUsingSendTest._testOffsetc                 C   sB   |   ¡ }|  |¡}|  t|ƒ| jd ¡ |  || jdd … ¡ d S )Nr  r	  r
  r   r   r   Ú
testOffset;  s    
z SendfileUsingSendTest.testOffsetc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   r•  éGKL ©rÛ  ©r;   rœ   r   r   r”  r   rE  r\  r  r±   r  ©r@   r‘  r  rÕ   rÛ  r  r  r   r   r   Ú
_testCountC  s    
ÿ
z SendfileUsingSendTest._testCountc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S )Nr  ©rý  rþ  r±   rî  rø  ©r@   rÛ  r¨   r¢  r   r   r   Ú	testCountO  s
    
zSendfileUsingSendTest.testCountc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   r•  ro   r  r  r  r   r   r   Ú_testCountSmallX  s    
ÿ
z%SendfileUsingSendTest._testCountSmallc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S rÛ   r  r  r   r   r   ÚtestCountSmalld  s
    
z$SendfileUsingSendTest.testCountSmallc              	   C   s¨   | j  ¡ }ttjdƒ}tj|ddp}|L}d}|  |¡}||d|d}|  ||¡ |  | 	¡ |d ¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   rŸ   r•  é§† é×  )r  rÛ  )
r;   rœ   r   r   r”  r   rE  r  r±   r  r  r   r   r   Ú_testCountWithOffsetm  s    

z*SendfileUsingSendTest._testCountWithOffsetc                 C   sD   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd|d … ¡ d S )Nr"  r#  r  r  r   r   r   ÚtestCountWithOffsetw  s
    
z)SendfileUsingSendTest.testCountWithOffsetc              	   C   sš   | j  ¡ }ttjdƒ}t |¡f}|B}| d¡ |  |¡}|  	t
||¡ |  	t
|j|¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Nr	   F)r;   rœ   r   r   r”  r   rE  rI  r  r$  r£  rT  ©r@   r‘  r  rÕ   r  r   r   r   Ú_testNonBlocking€  s    


z&SendfileUsingSendTest._testNonBlockingc                 C   s    |   ¡ }| d¡r|  d¡ d S )Nrh   z$was not supposed to receive any data)rý  r°   r   ©r@   r¨   r   r   r   ÚtestNonBlocking‰  s    
z%SendfileUsingSendTest.testNonBlockingc              	   C   s’   | j  ¡ }ttjdƒ}tj|tjd}|T |0 |  |¡}||ƒ}|  	|| j
¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  d S )Nr	   r•  )r;   rœ   r   r   r”  r   rE  r\  r  r±   r÷  r  r   r   r   Ú_testWithTimeout  s    
ÿ
z&SendfileUsingSendTest._testWithTimeoutc                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r2   r	  r
  r   r   r   ÚtestWithTimeoutš  s    
z%SendfileUsingSendTest.testWithTimeoutc              	   C   sˆ   | j  ¡ }ttjdƒ^}t |¡4}| d¡ |  |¡}|  	tj
||¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  d S )Nr	   g{®Gáz„?)r;   rœ   r   r   r”  r   rE  rÐ  r  r$  r5   r&  r   r   r   Ú_testWithTimeoutTriggeredSend¢  s    


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendc                 C   s    |   ¡ }| d¡ t d¡ d S )Ni€X ro   )rý  r°   r«   r¬   r(  r   r   r   ÚtestWithTimeoutTriggeredSendª  s    
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendc                 C   s   d S r2   r   r?   r   r   r   Ú_test_errors±  s    z"SendfileUsingSendTest._test_errorsc              	   C   s˜  t tjdƒX}tjtjd*}|  |¡}|  td||¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  t tjdƒR}t ¡ *}|  |¡}|  td||¡ W d   ƒ n1 sº0    Y  W d   ƒ n1 sØ0    Y  t tjdƒ”}t ¡ j}|  |¡}| jtd||dd | jtd||d	d | jtd||d
d | jtd||dd W d   ƒ n1 sj0    Y  W d   ƒ n1 sŠ0    Y  d S )Nr	   ré  r/   r%  zbinary modezpositive integerr  r  rª   r   rp  )	r   r   r”  r   r    r  r'  r£  r‰   )r@   r  r   r  r   r   r   Útest_errors´  s6    
ÿ@

ÿ@

ÿÿÿÿz!SendfileUsingSendTest.test_errorsN)&rE   rF   rG   rW   r÷  rö  rø  r   r\  rü  r½  rú  rû  rý  rþ  r  r  r  r  r  r  r  r  r  r  r  r   r!  r$  r%  r'  r)  r*  r+  r,  r-  r.  r/  r   r   r   r   rî  Ä  sD   

		
			
		
rî  rT  z%os.sendfile() required for this test.c                   @   s   e Zd ZdZdd„ ZdS )ÚSendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    c                 C   s
   t |dƒS )NrZ  r   rÞ   r   r   r   r  Ò  s    z(SendfileUsingSendfileTest.meth_from_sockN)rE   rF   rG   rW   r  r   r   r   r   r0  Ì  s   r0  zAF_ALG requiredc                   @   s|   e Zd Zdd„ Ze dd¡dd„ ƒZdd„ Ze dd	¡d
d„ ƒZe dd¡dd„ ƒZ	e dd	¡dd„ ƒZ
dd„ Zdd„ ZdS )ÚLinuxKernelCryptoAPIc              
   C   sl   t   t jt jd¡}z| ||f¡ W n> tyb } z&| ¡  t t|ƒ||¡‚W Y d }~nd }~0 0 |S d S rš   )	r   r(   r&   r`   r°  r   r¢   ZSkipTestr  )r@   Útyprû   rÕ   rŠ   r   r   r   Ú
create_algÙ  s    (zLinuxKernelCryptoAPI.create_algr+  rÙ  c              	   C   sü   t  d¡}|  dd¡Ò}| ¡ \}}|, | d¡ |  | d¡|¡ W d   ƒ n1 sZ0    Y  | ¡ \}}|V | dtj	¡ | dtj	¡ | dtj	¡ | d	¡ |  | d¡|¡ W d   ƒ n1 sÐ0    Y  W d   ƒ n1 sî0    Y  d S )
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adÚhashZsha256s   abcrš  ó   aó   bó   crí   )
rº  Úfromhexr3  r§   r  r±   r°   r·   r   ÚMSG_MORE)r@   r  ÚalgoÚopru   r   r   r   Útest_sha256æ  s    

0
z LinuxKernelCryptoAPI.test_sha256c              	   C   s    d}d}t  d¡}|  dd¡n}| tjtj|¡ | ¡ \}}|, | |¡ |  	| 
d¡|¡ W d   ƒ n1 st0    Y  W d   ƒ n1 s’0    Y  d S )Ns   Python loves AF_ALGs   what do ya want for nothing?Z(193dbb43c6297b47ea6277ec0ce67119a3f3aa66r4  z
hmac(sha1)rš  )rº  r8  r3  rÍ  r   ÚSOL_ALGÚALG_SET_KEYr§   r  r±   r°   )r@   Úkeyr¢  r  r:  r;  ru   r   r   r   Útest_hmac_sha1ø  s    

z#LinuxKernelCryptoAPI.test_hmac_sha1r  c              	   C   s&  t  d¡}t  d¡}d}t  d¡}t|ƒ}|  dd¡Ø}| tjtj|¡ | ¡ \}}|@ |j	tj
|tjd | |¡ |  | |¡|¡ W d   ƒ n1 s¢0    Y  | ¡ \}}|6 |j	|gtj|d |  | |¡|¡ W d   ƒ n1 sø0    Y  d	}	|g|	 }
| ¡ \}}|0 |j	|
tj
|d | ||	 ¡}W d   ƒ n1 sX0    Y  |  t|ƒ||	 ¡ |  |d |… |¡ | ¡ \}}|2 |j	|gtj|d | ||	 ¡}W d   ƒ n1 sÔ0    Y  |  t|ƒ||	 ¡ |  |||	 ¡ W d   ƒ n1 s0    Y  d S )
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41s   Single block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))r;  Úivrê  )r;  rA  r¯   )rº  r8  rî  r3  rÍ  r   r=  r>  r§   Úsendmsg_afalgÚALG_OP_ENCRYPTr9  r  r±   r°   ÚALG_OP_DECRYPT)r@   r?  rA  r´   Z
ciphertextZmsglenr:  r;  ru   Z
multiplierZlongmsgÚencZdecr   r   r   Útest_aes_cbc  sL    



ÿ
0ÿ0
ÿ.ÿ.z!LinuxKernelCryptoAPI.test_aes_cbcrÖ  c                 C   s   t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t|ƒ}t|ƒ}|  dd¡°}	|	 tjtj|¡ |	 tjtjd |¡ |	 	¡ \}
}|
€ |
j
tj||tjd	 |
 |tj¡ |
 |¡ |
 |t|ƒ | ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 s0    Y  |	 	¡ \}
}|
p || }|
j
|gtj||d
 |
 |t|ƒ | ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 s¬0    Y  t d¡j}|	 	¡ \}
}|
ž || }|
 |gtjtj|tjƒgtjtj|t|ƒƒ| gtjtj||ƒgf¡ |
 t|ƒ| ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 sx0    Y  |	 	¡ \}
}|
X || | }|
j
|gtj||d
 |
 t|ƒ| ¡}|  |||d … ¡ W d   ƒ n1 sò0    Y  W d   ƒ n1 s0    Y  d S )NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r;  rA  Úassoclenrê  )r;  rA  rG  r
   )rº  r8  rî  r3  rÍ  r   r=  r>  ÚALG_SET_AEAD_AUTHSIZEr§   rB  rC  r9  r  r°   r±   r   ÚStructr›  rð  Ú
ALG_SET_OPÚ
ALG_SET_IVÚALG_SET_AEAD_ASSOCLENrD  )r@   r?  rA  ZplainZassocZexpected_ctZexpected_tagZtaglenrG  r:  r;  ru   Úresr´   Zpack_uint32r   r   r   Útest_aead_aes_gcm0  sl    





ÿ
ÿ
6ÿ6þþ6ÿz&LinuxKernelCryptoAPI.test_aead_aes_gcmc              	   C   s–   |   dd¡v}t d¡}| tjtj|¡ | ¡ \}}|* | d¡}|  	t
|ƒd¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )NÚrngZdrbg_pr_sha256r  )r3  rÏ   ÚurandomrÍ  r   r=  r>  r§   r°   r±   rî  )r@   r:  Z
extra_seedr;  ru   Zrnr   r   r   Útest_drbg_pr_sha256o  s    

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c              	   C   sP  t   t jt jd¡}|" |  t¡ | ¡  W d   ƒ n1 sB0    Y  |  t¡ |jd d W d   ƒ n1 sx0    Y  |  t¡ | d¡ W d   ƒ n1 s¬0    Y  |  t¡  |jt jd d W d   ƒ n1 sæ0    Y  |  t¡  |jt jdd W d   ƒ n1 s"0    Y  W d   ƒ n1 sB0    Y  d S )Nr   )r;  ro   )r;  rG  rp  )r   r(   r&   r$  r‰   rB  rC  rÞ   r   r   r   Útest_sendmsg_afalg_argsz  s    &*(.z,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc                 C   sö   t   t jt jd¡}|  |j¡ |  t¡ | d¡ W d   ƒ n1 sH0    Y  |  t	d¡ | d¡ W d   ƒ n1 s~0    Y  |  t¡ | d¡ W d   ƒ n1 s²0    Y  |  t	d¡ | d¡ W d   ƒ n1 sè0    Y  d S )Nr   )Ztttttttttttttrû   ztype too long)Zttttttttttttttrû   )rð   Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)rð   Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r(   r&   rU   r   r$  r°  r`   r'  r£  rÞ   r   r   r   Útest_length_restrictionŒ  s    (((z,LinuxKernelCryptoAPI.test_length_restrictionN)rE   rF   rG   r3  r   rü  r<  r@  rF  rN  rQ  rR  rS  r   r   r   r   r1  Ö  s   



(

>


r1  Úwinzrequires Windowsc                   @   s   e Zd Zh d£Zdd„ ZdS )ÚTestMSWindowsTCPFlags>   ÚTCP_KEEPIDLEÚTCP_KEEPINTVLÚTCP_FASTOPENÚTCP_NODELAYÚ
TCP_MAXSEGÚTCP_KEEPCNTc                    s6   dd„ t tƒD ƒ}‡ fdd„|D ƒ}ˆ  g |d¡ d S )Nc                 S   s   g | ]}|  d ¡r|‘qS )ZTCP)rœ  ©rú   r   r   r   r   rü   ®  rí   z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>c                    s   g | ]}|ˆ j vr|‘qS r   )ÚknownTCPFlagsr\  r?   r   r   rü   ¯  rí   zANew TCP flags were discovered. See bpo-32394 for more information)rÑ   r   r±   )r@   ZprovidedÚunknownr   r?   r   Útest_new_tcp_flags­  s
    ÿz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rE   rF   rG   r]  r_  r   r   r   r   rU  ž  s   rU  c                   @   s‚   e Zd Zdd„ Zdd„ Zdd„ Ze ee	dƒ p:ee	dƒ d	¡e 
ejd
¡dd„ ƒƒZe e ¡  d¡e 
ejd
¡dd„ ƒƒZdS )ÚCreateServerTestc                 C   sÄ   t  ¡ }t d|f¡8}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 sT0    Y  t jrÀtjd|ftjd8}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 s¶0    Y  d S )Nr  r   ro   r±  rè  )r   rÇ  r   Úcreate_serverr±   rœ   rï  rç   ©r@   r=   rÕ   r   r   r   Útest_address·  s    2
ÿzCreateServerTest.test_addressc                 C   s¤   t  d¡0}|  |jt j¡ |  |jt j¡ W d   ƒ n1 s@0    Y  tjr t jdt j	d0}|  |jt j	¡ |  |jt j¡ W d   ƒ n1 s–0    Y  d S )Nr  ©r±  r   rè  )
r   ra  r±   r  r:   rð   r/   r   rï  rç   )r@   rÕ   r   r   r   r   Útest_family_and_typeÂ  s    .z%CreateServerTest.test_family_and_typec                 C   sØ   t tdƒsD|  t¡ tjddd W d   ƒ qÔ1 s80    Y  nt d¡,}| tjtj¡}|  |d¡ W d   ƒ n1 s€0    Y  tjddd,}| tjtj¡}|  	|d¡ W d   ƒ n1 sÊ0    Y  d S )NÚSO_REUSEPORT)rã  r   T)Ú
reuse_portr   )
r   r   r$  r£  ra  rÉ  r3  rf  r±   rü  )r@   rÕ   rS  r   r   r   Útest_reuse_portË  s    
.*z CreateServerTest.test_reuse_portr8  rÖ  r×  r>  c                 C   sH   t jdt jd$}| t jt j¡s&J ‚W d   ƒ n1 s:0    Y  d S )Nrd  rè  )r   ra  rç   rÉ  r8  rÖ  rÞ   r   r   r   Útest_ipv6_only_default×  s    z'CreateServerTest.test_ipv6_only_defaultúdualstack_ipv6 not supportedc                 C   sF   t jdt jdd }|  |jt j¡ W d   ƒ n1 s80    Y  d S )Nrd  T©r  Údualstack_ipv6)r   ra  rç   r±   r  rÞ   r   r   r   Útest_dualstack_ipv6_familyß  s
    
ÿz+CreateServerTest.test_dualstack_ipv6_familyN)rE   rF   rG   rc  re  rh  r¢   rq  r   r  ro  r   rï  ri  r   Úhas_dualstack_ipv6rm  r   r   r   r   r`  µ  s   	
þÿr`  c                   @   s   e Zd ZejZdd„ Zdd„ Zdd„ Ze	 
ejd¡dd	„ ƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZdS )ÚCreateServerFunctionalTestc                    sV   ‡ ‡fdd„}t  ¡ ‰ | ˆj¡ t j||fd}| ¡  ˆ |jˆj¡ ˆ  ¡  d S )Nc              	      s˜   | € |   ¡ \}}|P ˆ  ˆj¡ | d¡}|sNW d   ƒ W d   ƒ d S | |¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S r®   )r§   rƒ   r5   r°   r  )rÕ   r¨   ru   r´   ©rã  r@   r   r   Úrunì  s    
z3CreateServerFunctionalTest.echo_server.<locals>.runrÝ  )	rM   rx   rÐ  r5   rµ  r·  rU   r   rm   )r@   rÕ   rq  r€   r   rp  r   Úecho_serverë  s    
z&CreateServerFunctionalTest.echo_serverc                 C   sb   t j |dB}| | j¡ | |¡ | d¡ |  | d¡d¡ W d   ƒ n1 sT0    Y  d S )Nrè  r)  r¯   )r   rÐ  r5   r­   r  r±   r°   )r@   r½   r  rÕ   r   r   r   Úecho_clientý  s
    

z&CreateServerFunctionalTest.echo_clientc                 C   sV   t  ¡ }t d|f¡,}|  |¡ |  d|ftj¡ W d   ƒ n1 sH0    Y  d S )Nr(  r  )r   rÇ  r   ra  rr  rs  r:   rb  r   r   r   Ú	test_tcp4  s    
z$CreateServerFunctionalTest.test_tcp4r>  c                 C   s\   t  ¡ }tjd|ftjd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sN0    Y  d S )Nr(  rè  r±  ©r   rÇ  r   ra  rç   rr  rs  rb  r   r   r   Ú	test_tcp6
  s    
ÿ
z$CreateServerFunctionalTest.test_tcp6rj  c                 C   s^   t  ¡ }tjd|ftjdd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sP0    Y  d S )Nr(  Trk  r  )r   rÇ  r   ra  rç   rr  rs  r:   rb  r   r   r   Útest_dual_stack_client_v4  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v4c                 C   s^   t  ¡ }tjd|ftjdd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sP0    Y  d S )Nr(  Trk  r±  ru  rb  r   r   r   Útest_dual_stack_client_v6  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rE   rF   rG   r   r\  r5   rr  rs  rt  r¢   ro  r   rï  rv  rq  r   rn  rw  rx  r   r   r   r   ro  è  s    
	ÿÿro  Úsend_fdsÚrecv_fdsc                   @   s   e Zd Zdd„ ZdS )ÚSendRecvFdsTestsc              	   C   sn  dd„ }dd„ }dd„ t dƒD ƒ}|  ||¡ dd„ |D ƒ}t tjtj¡\}}|v |R t |tg|¡ t |t	tƒd	 t	|ƒd	 ¡\}}}	}
|  ||¡ W d   ƒ n1 s²0    Y  W d   ƒ n1 sÐ0    Y  |  
|t¡ |  
t	|ƒt	|ƒ¡ |  
|	d
¡ t|ƒD ]&\}}|\}}t |t|ƒ ¡ ¡ qt|ƒD ]*\}}t |d¡}|  
|t|ƒ ¡ ¡ q>d S )Nc                 S   s&   | D ]\}}t  |¡ t  |¡ qd S r2   ©rÏ   r   )Úpipesr  Úfd2r   r   r   Úclose_pipes-  s    
z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipesc                 S   s   | D ]}t  |¡ qd S r2   r|  )rï  rR  r   r   r   Ú	close_fds2  s    z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   s   g | ]}t  ¡ ‘qS r   )rÏ   Úpipe)rú   ru   r   r   r   rü   7  rí   z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r¡  c                 S   s   g | ]\}}|‘qS r   r   )rú   ÚrfdÚwfdr   r   r   rü   9  rí   rŸ   r   rÞ  )r)  rU   r   rÀ   rØ   r/   ry  r²   rz  rî  r±   rñ  rÏ   rì  r  rí  r$  )r@   r  r€  r}  rï  rÞ  rß  r´   Zfds2rê  r½   rm  r‚  rƒ  r¢  r   r   r   ÚtestSendAndRecvFds,  s&    &Hz#SendRecvFdsTests.testSendAndRecvFdsN)rE   rF   rG   r„  r   r   r   r   r{  (  s   r{  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S r2   )r   Zthreading_setupr¢   ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModuleR  s    r†  Ú__main__)Õr¢   Útestr   Ztest.supportr   re  r  rÚ  r   rö  rÌ   r«   rn  rp   r|  rÏ   r›  rw  rM  Úweakrefr   r  rþ  r*  r   rò  r`  rô  Ú_threadr€   rM   rÞ  r¾  r   r›   rí  r²   r¦   Úsystemr   r  r   r   r"   r$   r'   r)   r+   r-   r1   rN  r6   ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_CAN_J1939ZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKr   ZHAVE_SOCKET_UDPLITEZHAVE_SOCKET_BLUETOOTHrâ  rþ  r£   r9   rH   rI   rJ   rY   rg   ri   r   r–   ro  r—   r˜   r™   rq  r    rº   r¿   rÁ   rÆ   rÇ   rÊ   rË   r×   rÚ   rß   rà   rá   râ   rä   ræ   rè   rø   r  r	  r
  rr  rž  r¾  rÅ  rß  rä  rù  r  r
  r  r6  rA  rB  r^  rc  rf  rh  rj  rk  rl  r  r£  r¦  rÄ  rÉ  rÌ  rÝ  rê  r?  rx  rz  r{  r|  r}  rï  r  r€  r  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r  rŽ  r  r  r‘  r’  r“  r”  r™  rš  r›  rœ  r  rž  rŸ  r   r¨  r³  r¼  rÂ  rÌ  râ  rý  r,  r<  r>  r?  rB  rC  r€  rD  rF  rG  rO  r\  rb  rq  rw  ry  r~  rŽ  rœ  rµ  r¶  r·  r²  r³  r»  r½  rÇ  rÓ  rû   rØ  rî  r0  r1  rœ  rU  r`  ro  r{  r†  rE   Úmainr   r   r   r   Ú<module>   sV  










	

3qÿÿÿ!$ÿÿ$	
        p
S
Z
*
=

>ÿÿ.ÿ%{ÿ7ww= #P;  k   7þ


þ	



ÿ
þÿþÿ
ÿ
ÿ
ÿþ	
ÿ
ÿ
ÿ
ÿÿ
ÿþÿ

ÿ
ÿþ





ÿ



ÿ
ÿ

ÿ
ÿÿ
 ÿ)ÿþ7#j ! $l


	?G9ÿ7JSÿÿ',Cÿ<e  
ÿ H3@

'