a
     Rî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%d	Z&e '¡ d
kZ(zd dl)Z)W n e yx   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„ Z0dd„ Z1dd„ Z2ej3dd„ ƒZ4e+ƒ Z5e,ƒ Z6e-ƒ Z7e.ƒ Z8e/ƒ Z9e0ƒ Z:e1ƒ Z;e<edƒZ=e2ƒ Z>e d ¡j?Z@G d!d"„ d"e jAƒZBG d#d$„ d$e jAƒZCG d%d&„ d&eCƒZDG d'd(„ d(ƒZEG d)d*„ d*e jAƒZFG d+d,„ d,e jAƒZGG d-d.„ d.ƒZHG d/d0„ d0eBeHƒZIG d1d2„ d2eCeHƒZJe  Ke=d3¡G d4d5„ d5eDeHƒƒZLG d6d7„ d7eFeHƒZMG d8d9„ d9eGeHƒZNe  Oe!du d:¡e  Ke;d;¡e  Ke*ƒ d<kd=¡G d>d?„ d?e jAeHƒƒƒƒZPG d@dA„ dAeIƒZQG dBdC„ dCe jAeHƒZRG dDdE„ dEe jAƒZSG dFdG„ dGeSƒZTG dHdI„ dIeEeSeHƒZUG dJdK„ dKeTeUƒZVG dLdM„ dMeSƒZWG dNdO„ dOeWƒZXG dPdQ„ dQeSƒZYG dRdS„ dSeYƒZZG dTdU„ dUeYƒZ[G dVdW„ dWeYƒZ\G dXdY„ dYeYƒZ]G dZd[„ d[eYƒZ^G d\d]„ d]e^ƒZ_G d^d_„ d_e^ƒZ`d`da„ Zadbdc„ Zbddde„ ZcG dfdg„ dge jAƒZde  Ke5dh¡G didj„ dje jAƒƒZee  Ke5dh¡G dkdl„ dleMƒƒZfe  Ke6dm¡G dndo„ doe jAƒƒZge  Ke7dp¡G dqdr„ dre jAƒƒZhe  Ke8ds¡G dtdu„ due jAƒƒZie  Ke8ds¡G dvdw„ dweNƒƒZje  Ke:dx¡G dydz„ dze jAƒƒZke  Oe!du d:¡e  Ke;d;¡G d{d|„ d|e jAƒƒƒZle  Ke>d}¡G d~d„ de jAƒƒZmG d€d„ deQƒZnG d‚dƒ„ dƒeJƒZoe  Ke=d3¡G d„d…„ d…eLƒƒZpG d†d‡„ d‡eEƒZqG dˆd‰„ d‰eqƒZrG dŠd‹„ d‹eqƒZsG dŒd„ deqƒZtG dŽd„ deqƒZuG dd‘„ d‘eqƒZvG d’d“„ d“eqƒZwG d”d•„ d•ewƒZxG d–d—„ d—exƒZyG d˜d™„ d™exƒZzG dšd›„ d›eqƒZ{G dœd„ de{ƒZ|G dždŸ„ dŸe{ƒZ}G d d¡„ d¡ere{ƒZ~G d¢d£„ d£e jAƒZG d¤d¥„ d¥ewƒZ€G d¦d§„ d§ewƒZG d¨d©„ d©eseueUe[ƒZ‚ebejdªƒG d«d¬„ d¬eze‚ƒƒZƒebejd­ƒG d®d¯„ d¯e}e‚ƒƒZ„ebejd°ƒG d±d²„ d²e~e‚ƒƒZ…G d³d´„ d´eseueUe_ƒZ†ebejdªƒe  Kej‡dµ¡ecd¶d·ƒG d¸d¹„ d¹eze†ƒƒƒƒZˆebejd­ƒe  Kej‡dµ¡ecd¶d·ƒG dºd»„ d»e}e†ƒƒƒƒZ‰ebejd°ƒe  Kej‡dµ¡ecd¶d·ƒG d¼d½„ d½e~e†ƒƒƒƒZŠebejd­ƒe  Kej‡dµ¡ebed¾ƒecd¶d·ƒG d¿dÀ„ dÀee†ƒƒƒƒƒZ‹ebejd°ƒe  Kej‡dµ¡ebed¾ƒecd¶d·ƒG dÁdÂ„ dÂeree†ƒƒƒƒƒZŒe  Ke=d3¡G dÃdÄ„ dÄeseueUe\ƒƒZe  Ke=d3¡ebejdªƒG dÅdÆ„ dÆezeƒƒƒZŽe  Ke=d3¡ebejd­ƒG dÇdÈ„ dÈe}eƒƒƒZe  Ke=d3¡ebejd°ƒG dÉdÊ„ dÊe~eƒƒƒZe  Ke=d3¡G dËdÌ„ dÌeseueUe`ƒƒZ‘ebejdªƒe  Kej‡dµ¡e  Ke=d3¡ecd¶d·ƒG dÍdÎ„ dÎeze‘ƒƒƒƒƒZ’ebejd­ƒe  Kej‡dµ¡e  Ke=d3¡ecd¶d·ƒG dÏdÐ„ dÐe}e‘ƒƒƒƒƒZ“ebejd°ƒe  Kej‡dµ¡e  Ke=d3¡ecd¶d·ƒG dÑdÒ„ dÒe~e‘ƒƒƒƒƒZ”ebejd­ƒe  Kej‡dµ¡e  Ke=d3¡ebed¾ƒecd¶d·ƒG dÓdÔ„ dÔee‘ƒƒƒƒƒƒZ•ebejd°ƒe  Kej‡dµ¡e  Ke=d3¡ebed¾ƒecd¶d·ƒG dÕdÖ„ dÖeree‘ƒƒƒƒƒƒZ–G d×dØ„ dØeveVeZƒZ—ebejdªƒG dÙdÚ„ dÚeye—ƒƒZ˜ebejd­ƒG dÛdÜ„ dÜe}e|e—ƒƒZ™ebejd°ƒG dÝdÞ„ dÞe~e|e—ƒƒZšG dßdà„ dàeteveVe]ƒZ›ebejdªƒe  Oe(dá¡ecdâdãdäƒG dådæ„ dæeye›ƒƒƒƒZœebejd­ƒe  Oe(dá¡ecdâdãdäƒG dçdè„ dèe}e|e›ƒƒƒƒZebejd°ƒe  Oe(dá¡ecdâdãdäƒG dédê„ dêe~e|e›ƒƒƒƒZžG dëdì„ dìeveVeXƒZŸebejdªƒebedíƒG dîdï„ dïeyeŸƒƒƒZ ebejd­ƒebedíƒG dðdñ„ dñe}e|eŸƒƒƒZ¡ebejd°ƒebedíƒG dòdó„ dóe~e|eŸƒƒƒZ¢ebejdªd­ƒebedídôdõƒG död÷„ d÷e€eŸƒƒƒZ£ebejdªd°ƒebedídôdõƒG dødù„ dùere€eŸƒƒƒZ¤G dúdû„ dûƒZ¥ebedüƒe  Ke<edýƒpèe<edþƒdÿ¡G d d„ de¥e[ƒƒƒZ¦ebedüƒe  Ke<edýƒp(e<edþƒdÿ¡G dd„ de¥eEeTeZƒƒƒZ§G dd„ deIƒZ¨G dd„ deRƒZ©G dd	„ d	eRƒZªG d
d„ deIƒZ«G dd„ deQƒ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´enƒZµG dd„ de jAƒZ¶G d d!„ d!eBeHƒZ·G d"d#„ d#eBeHƒZ¸G d$d%„ d%eBƒZ¹G d&d'„ d'eCƒZºe  Ke=d3¡G d(d)„ d)eDƒƒZ»G d*d+„ d+e jAƒZ¼e  Kejd,kd-¡G d.d/„ d/e jAƒƒZ½e  Ke<edíƒd0¡G d1d2„ d2e jAƒƒZ¾G d3d4„ d4eQƒZ¿d5ZÀd6ZÁd7ZÂd8d9„ ZÃe  KeÃƒ d:¡G d;d<„ d<e jAƒƒZÄe  KeÃƒ d:¡G d=d>„ d>e jAeHƒƒZÅG d?d@„ d@eIƒZÆG dAdB„ dBe jAƒZÇe  Ke<edCƒdD¡G dEdF„ dFe jAƒƒZÈe  KejÉdGkdH¡e  KedI¡G dJdK„ dKeBƒƒƒZÊG dLdM„ dMeIƒZËe  Ke<edNƒdO¡G dPdQ„ dQeËƒƒZÌe  Ke9dR¡G dSdT„ dTe jAƒƒZÍe  Kej ÎdU¡dV¡G dWdX„ dXe jAƒƒZÏG dYdZ„ dZe jAƒZÐG d[d\„ d\e jAƒZÑebed]ƒebed^ƒebedíƒG d_d`„ d`e jAƒƒƒƒZÒdadb„ ZÓeÔdckr²e  Õ¡  dS (d  é    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.24/usr/lib/python3.9/test/test_socket.pyÚget_cid3   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_isotpJ   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_j1939T   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_algh   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_qipcrtrr   s    r,   c                  C   s   t ƒ } | duS )z:Check whether AF_VSOCK sockets are supported on this host.N)r   )Úcidr   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    r2   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
    
r7   Ú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 r3   )r   ÚAF_INETr0   Úservr   Ú	bind_portÚportÚlisten©Úselfr   r   r   ÚsetUp°   s    zSocketTCPTest.setUpc                 C   s   | j  ¡  d | _ d S r3   ©r<   r   r@   r   r   r   ÚtearDownµ   s    
zSocketTCPTest.tearDownN©Ú__name__Ú
__module__Ú__qualname__rB   rD   r   r   r   r   r:   ®   s   r:   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 r3   )r   r;   r!   r<   r   r=   r>   r@   r   r   r   rB   »   s    zSocketUDPTest.setUpc                 C   s   | j  ¡  d | _ d S r3   rC   r@   r   r   r   rD   ¿   s    
zSocketUDPTest.tearDownNrE   r   r   r   r   rI   ¹   s   rI   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 r3   )r   r;   r!   r8   r<   r   r=   r>   r@   r   r   r   rB   Å   s    zSocketUDPLITETest.setUpN)rF   rG   rH   rB   r   r   r   r   rJ   Ã   s   rJ   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 r3   )ÚsuperÚ__init__Ú	threadingÚRLockÚ_cleanup_lock©rA   ÚargsÚkwargs©Ú	__class__r   r   rM   Ð   s    z"ThreadSafeCleanupTestCase.__init__c                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r3   )rP   rL   Ú
addCleanuprQ   rT   r   r   rV   Ô   s    z$ThreadSafeCleanupTestCase.addCleanupc                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r3   )rP   rL   Ú
doCleanupsrQ   rT   r   r   rW   Ø   s    z$ThreadSafeCleanupTestCase.doCleanups)rF   rG   rH   Ú__doc__rM   rV   rW   Ú__classcell__r   r   rT   r   rK   É   s   rK   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   rV   r   ÚbindÚ	interfacer   ÚskipTestr@   r   r   r   rB     s    ÿzSocketCANTest.setUpN)rF   rG   rH   rX   rb   ÚbufsizeÚcan_frame_fmtr   ÚcalcsizeZcan_frame_sizeÚbcm_cmd_msg_fmtrB   r   r   r   r   rZ   Ü   s   

rZ   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<   rV   r   r   r=   r>   r   rc   r@   r   r   r   rB     s    zSocketRDSTest.setUpN)rF   rG   rH   rX   rd   rB   r   r   r   r   rh     s   rh   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 r3   )rB   Ú_ThreadableTest__setUpÚ_setUpr@   r   r   r   rM   E  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   ÚserverExplicitReadyJ  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 )Nr   Fc                      s   ˆ j  ¡ rˆ j  ¡ ‚d S r3   )Ú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__rV   Ú__exit__rN   ÚEventrm   Úclient_readyÚdonerp   ÚQueueÚserver_crashedÚidÚrfindÚgetattrÚthreadÚstart_new_threadÚ	clientRunZclient_threadrk   rn   Úwait)rA   rs   Z
methodnamer9   Ztest_methodr   r@   r   rl   Q  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)rm   rƒ   ÚclientSetUpÚBaseExceptionrp   ÚputÚclientTearDownry   rn   r|   r   Ú	TypeError)rA   Z	test_funcÚer   r   r   r‚   s  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 r3   )rz   rn   r€   Úexitr@   r   r   r   rˆ   Œ  s    
zThreadableTest.clientTearDownN)
rF   rG   rH   rX   rM   ro   rl   r‚   r…   rˆ   r   r   r   r   rj     s   %"rj   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©r:   rM   rj   ©rA   r   r   r   r   rM   ’  s    zThreadedTCPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r3   )r   r;   r0   Úclir@   r   r   r   r…   –  s    z!ThreadedTCPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   ©r“   r   rj   rˆ   r@   r   r   r   rˆ   ™  s    
z$ThreadedTCPSocketTest.clientTearDownN)rŽ   ©rF   rG   rH   rM   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   )rI   rM   rj   r’   r   r   r   rM      s    zThreadedUDPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r3   )r   r;   r!   r“   r@   r   r   r   r…   ¤  s    z!ThreadedUDPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   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   )rJ   rM   rj   r’   r   r   r   rM   °  s    z"ThreadedUDPLITESocketTest.__init__c                 C   s   t   t jt jt j¡| _d S r3   )r   r;   r!   r8   r“   r@   r   r   r   r…   ´  s    z%ThreadedUDPLITESocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   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   )rZ   rM   rj   r’   r   r   r   rM   ¾  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 r3   )r   r   r   r   r“   ra   rb   r   r@   r   r   r   r…   Â  s
    z!ThreadedCANSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   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   )rh   rM   rj   r’   r   r   r   rM   Ò  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“   ra   ÚHOSTÚgetsocknameÚcli_addrr   r@   r   r   r   r…   Ö  s    z!ThreadedRDSSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   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ÚTestCaserM   rj   r’   r   r   r   rM   í  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 r3   )r   ÚAF_VSOCKr0   r<   rV   r   ra   ÚVMADDR_CID_ANYÚ	VSOCKPORTr?   ro   ÚacceptÚconnÚconnaddrr@   r   r   r   rB   ñ  s    
z#ThreadedVSOCKSocketStreamTest.setUpc                 C   sX   t  d¡ t tjtj¡| _|  | jj¡ tƒ }|tj	tj
fv rDt}| j |tf¡ d S )Nçš™™™™™¹?)ÚtimeÚsleepr   r¤   r0   r“   rV   r   r   ÚVMADDR_CID_HOSTr¥   ÚVMADDR_CID_LOCALÚconnectr¦   )rA   r-   r   r   r   r…   ú  s    
z)ThreadedVSOCKSocketStreamTest.clientSetUpc              
   C   sT   z| j  d¡}W n2 tyB } z|  t|ƒ¡ W Y d }~n
d }~0 0 |  |t¡ d S ©Né   )r¨   ÚrecvÚPermissionErrorrc   ÚreprÚassertEqualÚMSG)rA   ÚmsgÚexcr   r   r   Ú
testStream  s
    $z(ThreadedVSOCKSocketStreamTest.testStreamc                 C   s   | j  t¡ | j  ¡  d S r3   ©r“   Úsendr¶   r   r@   r   r   r   Ú_testStream  s    z)ThreadedVSOCKSocketStreamTest._testStreamN)rŽ   ©rF   rG   rH   rM   rB   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   rM   r’   r   r   r   rM     s    zSocketConnectedTest.__init__c                 C   s*   t  | ¡ |  ¡  | j ¡ \}}|| _d S r3   )r   rB   ro   r<   r§   Úcli_conn©rA   r¨   Úaddrr   r   r   rB     s    
zSocketConnectedTest.setUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   )r¿   r   r   rD   r@   r   r   r   rD   !  s    
zSocketConnectedTest.tearDownc                 C   s(   t  | ¡ | j t| jf¡ | j| _d S r3   )r   r…   r“   r¯   r›   r>   Ú	serv_connr@   r   r   r   r…   &  s    
zSocketConnectedTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   )rÂ   r   r   rˆ   r@   r   r   r   rˆ   +  s    
z"SocketConnectedTest.clientTearDownN)rŽ   )	rF   rG   rH   rX   rM   rB   rD   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£   rM   rj   r“   r<   r’   r   r   r   rM   2  s    
zSocketPairTest.__init__c                 C   s   t  ¡ S r3   )r   Ú
socketpairr@   r   r   r   rÄ   8  s    zSocketPairTest.socketpairc                 C   s   |   ¡ \| _| _d S r3   )rÄ   r<   r“   r@   r   r   r   rB   <  s    zSocketPairTest.setUpc                 C   s   | j r| j  ¡  d | _ d S r3   rC   r@   r   r   r   rD   ?  s    
zSocketPairTest.tearDownc                 C   s   d S r3   r   r@   r   r   r   r…   D  s    zSocketPairTest.clientSetUpc                 C   s$   | j r| j  ¡  d | _ t | ¡ d S r3   r”   r@   r   r   r   rˆ   G  s    
zSocketPairTest.clientTearDownN)rŽ   )	rF   rG   rH   rM   rÄ   rB   rD   r…   rˆ   r   r   r   r   rÃ   0  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 r3   )Ú	newSocketr<   Ú
bindServerr@   r   r   r   rB   ]  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Ç   a  s    zSocketTestBase.bindServerc                 C   s   | j  ¡  d | _ d S r3   rC   r@   r   r   r   rD   f  s    
zSocketTestBase.tearDownN)rF   rG   rH   rX   rB   rÇ   rD   r   r   r   r   rÅ   T  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 r3   )rL   rB   r<   r?   r@   rT   r   r   rB   n  s    
zSocketListeningTestMixin.setUp)rF   rG   rH   rX   rB   rY   r   r   rT   r   rÊ   k  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 r3   )rL   rM   rj   rQ   rT   r   r   rM   {  s    z ThreadedSocketTestMixin.__init__c                 C   s   |   ¡ | _|  ¡  d S r3   )ÚnewClientSocketr“   Ú
bindClientr@   r   r   r   r…     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 r3   r”   r@   r   r   r   rˆ   Œ  s    
z&ThreadedSocketTestMixin.clientTearDown)
rF   rG   rH   rX   rM   r…   rÌ   rÍ   rˆ   rY   r   r   rT   r   rË   s  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 r3   )rL   rB   ro   r<   r§   r¿   rÀ   rT   r   r   rB   ›  s    
zConnectedStreamTestMixin.setUpc                    s   | j  ¡  d | _ tƒ  ¡  d S r3   )r¿   r   rL   rD   r@   rT   r   r   rD   £  s    
z!ConnectedStreamTestMixin.tearDownc                    s$   t ƒ  ¡  | j | j¡ | j| _d S r3   )rL   r…   r“   r¯   rÉ   rÂ   r@   rT   r   r   r…   ¨  s    
z$ConnectedStreamTestMixin.clientSetUpc                    s6   z| j  ¡  d | _ W n ty&   Y n0 tƒ  ¡  d S r3   )rÂ   r   r   rL   rˆ   r@   rT   r   r   rˆ   ­  s    

z'ConnectedStreamTestMixin.clientTearDown)	rF   rG   rH   rX   rB   rD   r…   rˆ   rY   r   r   rT   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 r3   )ÚtempfileÚmkdtempÚdir_pathrV   ÚosÚrmdirrL   rB   r@   rT   r   r   rB   ¾  s    
zUnixSocketTestBase.setUpc                 C   s,   t j| jd}t ||¡ |  tj|¡ d S )N)Údir)rÐ   ÚmktemprÒ   r   Úbind_unix_socketrV   r   Úunlink)rA   ÚsockÚpathr   r   r   rÈ   Ã  s    zUnixSocketTestBase.bindSock)rF   rG   rH   rX   rB   rÈ   rY   r   r   rT   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 r3   )r   ÚAF_UNIXr0   r@   r   r   r   rÆ   Ë  s    zUnixStreamBase.newSocketN©rF   rG   rH   rX   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 ©Nr   )rL   rB   rÉ   r>   r@   rT   r   r   rB   Ô  s    
zInetTestBase.setUpc                 C   s   t j|| jd d S )N©Úhost)r   r=   rá   ©rA   rÙ   r   r   r   rÈ   Ø  s    zInetTestBase.bindSock)	rF   rG   rH   rX   r›   rá   rB   rÈ   rY   r   r   rT   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 r3   )r   r;   r0   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 r3   )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 r3   )r   r;   r!   r8   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 r3   )r   r;   r0   Ú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)rF   rG   rH   rX   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 r3   )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 r3   )r   rë   r!   r8   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 r3   r   ©rR   rS   r   r   r   Úclient_pass  s    z%skipWithClientIf.<locals>.client_passc                    s*   t  ˆ¡| ƒ}t| tƒs&‡ fdd„|_|S )Nc                    s   ˆ S r3   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 r3   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 r3   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   2  s   ÿz!requireSocket.<locals>.<listcomp>r  r  c                 s   s   | ]
}|V  qd S r3   r   rý   r   r   r   r  5  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   7  s   ÿzcan't create socket({0}): {1}c                 s   s   | ]}t |ƒV  qd S r3   )r  ©rþ   Úor   r   r   r  C  rñ   )r  r   r   r  r   rü   Úformat)rR   Ú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   )rA   r  r   r   r   r   Útest_SocketType_is_socketobjectK  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;   r0   ÚassertInÚfilenor´   ÚassertNotInra   r  rœ   ©rA   r   r   r   r   Ú	test_reprR  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;   r0   r  Úfamilyrô   Úprotorµ   r´   r   )rA   r   Úexpectedr   r   r   Útest_csocket_repr`  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;   r0   r   rµ   r  r   Ú
gc_collectÚReferenceErrorÚfail)rA   r   Úpr   r   r   Útest_weakrefm  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Úgaierror©rA   r·   r   r   r   ÚtestSocketErrorz  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!   rV   r   ra   rœ   r'  r‰   Úsendtorµ   r  Ú	exceptionr  )rA   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 r3   )r   r;   Úhas_ipv6rë   r0   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 r3   )r   ÚIPPROTO_TCPÚIPPROTO_UDPr5  Ú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 r3   )	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_RECVPATHMTUÚIPV6_TCLASSZIPV6_USE_MIN_MTUÚIPV6_PKTINFOÚIPV6_RECVPKTINFOÚIPV6_HOPOPTSÚIPV6_RECVDSTOPTSÚIPV6_DONTFRAGÚIPV6_RECVTCLASSÚIPV6_RTHDRDSTOPTSÚIPV6_PATHMTUÚIPV6_NEXTHOPÚIPV6_DSTOPTSÚ
IPV6_RTHDRÚIPV6_RECVRTHDRÚIPV6_RECVHOPLIMITÚIPV6_HOPLIMITÚIPV6_RTHDR_TYPE_0ÚIPV6_CHECKSUMÚIPV6_RECVHOPOPTSzMissing RFC3542 socket option 'ú')r  r   r   )rA   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   rc   r  ÚfindÚgethostbyaddrÚgetfqdnr#  r´   )rA   Ú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   r[  r  r]  )rA   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   r[  r]  )rA   ZexplanationrÁ   r   r   r   Ú test_host_resolution_bad_address	  s    ÿ(z3GeneralModuleTests.test_host_resolution_bad_addressÚsethostnameztest needs socket.sethostname()rZ  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   rZ  rg  r   ÚerrnoÚEPERMrc   rµ   )rA   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   rl  r  Úintr  ÚassertGreaterÚif_nametoindexrµ   Úif_indextoname)rA   Z
interfacesÚindexrÿ   Z_indexÚ_namer   r   r   ÚtestInterfaceNameIndex,  s    

z)GeneralModuleTests.testInterfaceNameIndexrp  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Ÿ   éè  Ú	_DEADBEEFrl  ì        )ì   ÿÿ l   ÿÿÿÿ )	r'  r   r   rp  ÚOverflowErrorr‰   r   Údictrl  )rA   Úindicesrq  Úindex2r   r   r   ÚtestInvalidInterfaceIndexToName<  s    
*z2GeneralModuleTests.testInvalidInterfaceIndexToNamero  z&socket.if_nametoindex() not available.c                 C   s$   |   ttjd¡ |   ttjd¡ d S )Nr   rv  )r'  r‰   r   ro  r   r@   r   r   r   ÚtestInvalidInterfaceNameToIndexO  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  rF   r   Úgetnameinfor‰   r#  )rA   Úorigr   r   r   ÚtestRefCountGetNameInfoU  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   ÚtestInterpreterCrasha  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é    é   r   )r   r   éÿÿ  i  ÿÿrŸ   igE#i2Tvl        )	r   ÚhtonlÚntohlÚhtonsÚntohsÚitemsrµ   r'  ry  )rA   ZsizesÚfuncÚsizeÚmaskr9   Zswappedr   r   r   ÚtestNtoHi  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   r   rŸ   r‡  rx  rt  éþÿÿÿrw  r   ru  é   )Ú	_testcapiZINT_MINÚINT_MAXr   r‹  rŠ  r‰  rˆ  r'  ry  ÚassertWarnsÚDeprecationWarning)rA   r“  Zs_good_valuesZl_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_valuesÚkr   r   r   ÚtestNtoHErrorsw  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)ÚlinuxrA  )ÚdaytimeZqotdÚdomain)Zechor›  rœ  ZtcpÚgetandroidapilevelé   Zudprt  r’  )rµ   r€  ÚplatformÚ
startswithr   Úgetservbynamer   r   r  r   Z
is_androidÚgetservbyportr'  ry  )rA   Ú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é
   rt  Zspam)	rµ   r   r4   Ú
gettimeoutr7   r5   r'  Ú
ValueErrorr‰   )rA   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ó   ÿÿÿÿrd  )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 r3   r   ©Úa)r;   r®  r   r   rð   á  rñ   z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r3   ©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¬  rd  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   ©rA   r   ÚgÚassertInvalidr   )r;   r®  rA   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ë   r5  úIPv6 not availableú+could not import needed symbols from socketÚwin32ú::é&'  úIPv6 might not be supportedc                    s
   ˆˆ | ƒS r3   r   r¯  )rë   r®  r   r   rð     rñ   z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r3   r±  r¯  ©r   rA   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ë   r5  rc   ÚImportErrorr€  rŸ  r   Úwinerrorrµ   r   ©rA   r5  rŠ   r¸  r   )rë   r   r®  rA   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 r3   r   r¯  )r;   rÆ  r   r   rð   B  rñ   z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r3   r±  r²  r@   r   r   rð   C  s   
ÿz1.0.1.0s     z170.85.170.85s   ªUªUrd  r¬  r´  r³  s      s        rÁ  )r   rÇ  rÆ  r;   rµ   Ú	bytearrayr¶  r   )r;   rÆ  rA   r   ÚtestStringToIPv4>  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ë   r5  rº  r»  r¼  rÁ  r¾  r¿  c                    s
   ˆˆ | ƒS r3   r   r¯  )rë   rÆ  r   r   rð   i  rñ   z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r3   r±  r¯  rÀ  r   r   rð   j  s   
ÿr½  rµ  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
ïÿÿ™— Ups   s   s   )r   rÆ  rë   r5  rc   rÂ  r€  rŸ  r   rÃ  rµ   rÈ  rÄ  r   )rë   r   rÆ  rA   r   ÚtestStringToIPv6X  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«  rY  r   z
%s invalidr   )r   Úfind_unused_portr   r;   r0   rV   r   ra   rœ   r[  rZ  r   rc   r  rµ   )rA   r>   rÙ   rÿ   Z
my_ip_addrr   r   r   ÚtestSockName|  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;   r0   rV   r   Ú
getsockoptr7  r8  ÚassertFalse©rA   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 )Nr   r   zfailed to set reuse mode)
r   r;   r0   rV   r   Ú
setsockoptr7  r8  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 )Nr   ó   spam)r   r;   r0   Ú
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   ra   Ú
_LOCALHOSTr  r   r   r  ri  ÚEBADFÚENOTSOCKr#  )rA   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;   r0   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   rV   r   r   rË  r'  ry  ra   r›   Ú	itertoolsÚcountr   ri  Z
EADDRINUSE)rA   rÙ   r>   Zbig_portZneg_portr9   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_VALSrt  )r   éd   râ  )	r  r   r   rV   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   rV   r   r   rä  r   rÃ  rc   r'  r‰   )rA   r   r¸   Z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)  ri  ÚEAI_SERVICErc   r›   rµ   Úlenr   ÚIPV6_ENABLEDr   r€  r  r;   r0   r  ÚSOL_TCPÚ
AI_PASSIVEÚ	AF_UNSPECr'  ÚUnicodeEncodeErrorrî  )
rA   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_getnameinfo;  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   r[  Úgethostbyname_exrï  rõ  r0   )rA   rœ  r   r   r   Ú	test_idna?  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©rR   r@   r   r   Ú
ok_handlerV  s    z@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlerc                     s   ˆ   ttjd¡ dd  d S ©Nr   r   r   r  r@   r   r   Úraising_handlerX  s    zEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg      ø?r   ó   xr   )r   Úsignalr   rc   rÄ   ÚSIGALRMrÔ  r'  ÚZeroDivisionErrorrÿ  Úsendallr   ÚSOCK_MAX_SIZEr6   r   )rA   Zwith_timeoutr  r  Úcr   Ú	old_alarmr   r@   r   Úcheck_sendall_interruptedP  s4    


.
ÿ

ý
z,GeneralModuleTests.check_sendall_interruptedc                 C   s   |   d¡ d S ©NF©r  r@   r   r   r   Útest_sendall_interruptedo  s    z+GeneralModuleTests.test_sendall_interruptedc                 C   s   |   d¡ d S )NTr  r@   r   r   r   Ú%test_sendall_interrupted_with_timeoutr  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;   r0   r´   r•  ÚResourceWarningr   r!  r  r  ÚwarningrR   Úmakefile)rA   rÙ   r   r3  r   r   r   r   Útest_dealloc_warnu  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;   r0   r  r   rµ   r´   ©rA   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   r   rt  )	r   ra   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%  )rA   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  )rA   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µ   r0   )rA   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   rt  r   )r   r;   r0   ra   r›   r?   )rA   Ú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;   r0   ra   r›   r'  ry  r?   r”  )rA   r“  r4  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   rx  iöÿÿÿ)	r'  ry  r   r  r   ré   rë   r0   ra   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!   r;  rµ   )rA   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   r:  )r   rl  rï  rë   r!   r;  rµ   )rA   ÚifindexÚtest_interfaceru   r;  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   r:  r   )r   rï  r  rë   r!   r;  rµ   )rA   r>  ru   r;  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   r9  r   úff02::1de:c0:face:8d%Ú1234)r   rl  r  ÚNI_NUMERICHOSTÚNI_NUMERICSERVrµ   )rA   r>  r?  r;  Ú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 )NrA  r9  r   r   rC  rD  )r   r  rE  rF  rµ   r  )rA   r>  r;  rG  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;   r0   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Û  r   TF)r   r   r0   r;   rµ   rô   rÔ  Úsetblocking)rA   rK  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 )Nr   c                 s   s   | ]\}}|d vr|V  qdS )>   rÛ  rK  Nr   )rþ   rÿ   Úkindr   r   r   r  :  s   þzEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>rž  )r  rô   r  r  r   )r   r;   r0   ÚdetachÚmaxÚAddressFamilyÚ__members__ÚvaluesÚ
SocketKindrŒ  rµ   r  rô   r  r  )rA   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 r3   ©rU  )rA   rU  r   r   r   rM   K  s    zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S   s   | j S r3   rX  r@   r   r   r   r  N  s    zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rF   rG   rH   rM   r  r   r   r   r   ÚFileJ  s   rY  rŸ   ru  )r   rÓ   r   ÚcurdirÚO_RDONLYr   r'  Ú_GiveupOnSendfileÚ_sendfile_use_sendfilery  r‰   )rA   rY  rÙ   rU  r   r   r   Útest__sendfile_use_sendfileH  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   rV   r   rO  )rA   r   r  ÚstyperU  Ús2r   r   r   Ú_test_socket_filenoZ  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;   r0   rV   r   ra   r   r›   rb  r   r!   rò  rë   ré   rÐ   rÑ   ÚshutilÚrmtreerÜ   rÓ   rÚ   r  r³   )rA   r   Ztmpdirr   r   r   Útest_socket_filenog  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;   r0   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Ö  rf  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 descriptorrt  rÖ  ©r*  r§  r   r;   r0   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 )Nrj  iÖÿÿÿrÖ  rk  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  r1  ri  rØ  r;   r0   )rA   ZWSAENOTSOCKr3  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;   r0   rµ   r1  ri  rÙ  )rA   Zafiler3  r   r   r   Ú%test_socket_fileno_requires_socket_fd¤  s    
.ý$z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)YrF   rG   rH   r  r  r¢   Ú
skipUnlessr  r   r%  r+  r4  r9  r=  rÓ   rÿ   r@  r€  rŸ  r   rò  rX  rc  re  rf  r   r   rk  rs  r}  r~  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+  r2  r5  r6  r8  r<  ÚskipIfr   r@  rB  rH  rI  rJ  rM  rV  r^  rb  re  rg  ri  rl  rm  rn  rp  r   r   r   r   r  I  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 r3   )r   ÚAF_CANr   r   r@   r   r   r   r9  ´  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 r3   )r   rv  Ú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 r3   ©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 r3   )r   r   r!   rv  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   ra   rµ   rœ   )rA   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   ra   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   r   )	r   r   r   r   rÑ  ÚSOL_CAN_RAWr˜  rµ   rÍ  )rA   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È  )rA   Úcan_idZcan_maskZ
can_filterr   r   r   r   Ú
testFilterù  s    ÿzBasicCANTest.testFilterN)rF   rG   rH   r9  r¢   rq  r   r   r  r‘  r’  r”  r—  rš  rŸ  r   r   r   r   rt  ±  s(   ÿ
ÿ
ÿ
ÿrt  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˜   rM   r’   r   r   r   rM     s    zCANTest.__init__c                 C   s&   t |ƒ}| dd¡}t | j|||¡S )zBuild a CAN frame.r^   ó    )rñ  Úljustr   r  re   )Ú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   re   )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   Úrecvfromrd   rµ   Úcfrb   ©rA   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 r3   )r   r©  rd   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 r3   )r   r©  rd   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   Ú_testSendMultiFrames0  s    zCANTest._testSendMultiFramesrv  rw  c                 C   sP   | j  | j¡\}}|  | j|¡ |  |¡\}}}|  | j|¡ |  | j|¡ d S r3   )r“   r©  rd   rµ   rª  r¨  rž  r¤  )rA   rª  rÁ   rž  r¥  r¤  r   r   r   Ú_testBCM7  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"  r   r†  )r   r   r!   rv  rV   r   r¯   rb   rž  Úbytesr¤  r¦  rª  r{  rñ  r   r  rg   r»   rµ   )rA   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   ÚtestBCM@  s6    ÷

zCANTest.testBCMN)rŽ   )rF   rG   rH   rM   Úclassmethodr¦  r¨  r¬  r®  r¯  r°  r³  r¶  r¢   rq  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 ©Nr[   ©rL   rM   rb   rQ   rT   r   r   rM   c  s    zISOTPTest.__init__c                 C   s   t j t j t j t j d S r3   )r   ru  r   r"   r!   r@   r   r   r   r9  g  s    zISOTPTest.testCrucialConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r3   r  r  r   r   r   r‘  m  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 r3   )r   r   r!   r"   r  r   r   r   ÚtestCreateISOTPSocketq  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–  r   rŸ   )r   r   r!   r"   r*  r   ra   r  r   r   r   r—  w  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"   rb   ra   rµ   rœ   r   ri  ÚENODEVrc   ©rA   r   rÁ   rŠ   r   r   r   ÚtestBind}  s    
2ÿzISOTPTest.testBind)rF   rG   rH   rM   r9  r‘  r¢   rq  r   r   rÃ  r—  rÆ  rY   r   r   rT   r   rÀ  `  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Â  rQ   rT   r   r   rM   Ž  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 r3   )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 r3   )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$   rb   rË  rÑ  rÊ  ra   rµ   rœ   r   ri  rÄ  rc   rÅ  r   r   r   rÆ  »  s    
2ÿzJ1939Test.testBind)rF   rG   rH   rM   r¢   rq  r   r   rß  rà  rÆ  rY   r   r   rT   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 r3   )r   ÚAF_RDSr&   r@   r   r   r   r9  Ì  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Ñ  r7  Ú	SO_RCVBUFÚ	SO_SNDBUF)rA   rd   r   r   r   r   ÚtestSocketBufferSizeÔ  s    z!BasicRDSTest.testSocketBufferSizeN)rF   rG   rH   r9  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™   rM   r’   r   r   r   rM   Þ  s    zRDSTest.__init__c                    s   t ƒ  ¡  t ¡ | _d S r3   )rL   rB   rN   rx   Zevtr@   rT   r   r   rB   á  s    
zRDSTest.setUpc                 C   s2   | j  | j¡\}}|  | j|¡ |  | j|¡ d S r3   )r<   r©  rd   rµ   r¤  r   ©rA   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“   r0  r›   r>   r@   r   r   r   Ú_testSendAndRecvê  s    zRDSTest._testSendAndRecvc                 C   sH   | j  | jtj¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r3   )r<   r©  rd   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 r3   )r<   rï  rd   rµ   r¤  )rA   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 r3   )r<   r©  rd   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“   r0  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©  rd   rµ   r¤  )rA   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Ž   )rF   rG   rH   rM   rB   rè  rë  rí  rî  r  r   rñ  ró  rö  r÷  rù  rú  rY   r   r   rT   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 r3   )r   r+   r@   r   r   r   r9  	  s    z%BasicQIPCRTRTest.testCrucialConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r3   )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 ©Nr   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à   r   )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  r   r   )r   r+   r!   r¯   rþ  rœ   r  r   r   r   ÚtestAutoBindSock2	  s    
z!BasicQIPCRTRTest.testAutoBindSockN)	rF   rG   rH   r9  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 r3   )r   r¤   r@   r   r   r   r9  <	  s    z#BasicVSOCKTest.testCrucialConstantsc                 C   s4   t j t j t j t j t j t j t j t j d S r3   )	r   ÚSO_VM_SOCKETS_BUFFER_SIZEÚSO_VM_SOCKETS_BUFFER_MIN_SIZEÚSO_VM_SOCKETS_BUFFER_MAX_SIZEr¥   ÚVMADDR_PORT_ANYr­   ÚVM_SOCKETS_INVALID_VERSIONr	   r@   r   r   r   ÚtestVSOCKConstants?	  s    z!BasicVSOCKTest.testVSOCKConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r3   )r   r¤   r0   r  r   r   r   r‘  I	  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¤   r0   rÍ  r  r  r  rÑ  rµ   )rA   r   Zorig_maxr‚  Zorig_minr   r   r   rå  M	  sD    ÿÿÿ
ÿ
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿz#BasicVSOCKTest.testSocketBufferSizeN)rF   rG   rH   r9  r	  r‘  rå  r   r   r   r   r  7	  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/   r1   r€  rŸ  ÚBTPROTO_HCIZSOL_HCIÚBTPROTO_L2CAPr   ÚBTPROTO_SCOr@   r   r   r   ÚtestBluetoothConstantsl	  s    
z)BasicBluetoothTest.testBluetoothConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r3   )r   r/   r0   r1   r  r   r   r   ÚtestCreateRfcommSocketz	  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 r3   )r   r/   r'   r  r  r   r   r   ÚtestCreateL2capSocket~	  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 r3   )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 r3   )r   r/   r'   r  r  r   r   r   ÚtestCreateScoSocketˆ	  s    z&BasicBluetoothTest.testCreateScoSocketN)rF   rG   rH   r  r  r¢   rs  r€  rŸ  r  r  r   r  r   r   r   r   r  h	  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¾   rM   r’   r   r   r   rM   ‘	  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 r3   ©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µ   )rA   Úseg1Úseg2r·   r   r   r   ÚtestOverFlowRecvœ	  s    zBasicTCPTest.testOverFlowRecvc                 C   s   | j  t¡ d S r3   r  r@   r   r   r   Ú_testOverFlowRecv£	  s    zBasicTCPTest._testOverFlowRecvc                 C   s    | j  d¡\}}|  |t¡ d S r°   )r¿   r©  rµ   r¶   ©rA   r·   rÁ   r   r   r   ÚtestRecvFrom¦	  s    zBasicTCPTest.testRecvFromc                 C   s   | j  t¡ d S r3   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µ   )rA   r  rÁ   r  r·   r   r   r   ÚtestOverFlowRecvFrom®	  s    z!BasicTCPTest.testOverFlowRecvFromc                 C   s   | j  t¡ d S r3   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µ   )rA   r·   Úreadr   r   r   ÚtestSendAll¸	  s    
zBasicTCPTest.testSendAllc                 C   s   d}| j  |¡ d S )Nr$  )rÂ   r  )rA   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;   r0   rV   r   r  r²   rµ   r¶   )rA   rU  rÙ   r·   r   r   r   Ú
testFromFdÆ	  s    

zBasicTCPTest.testFromFdc                 C   s   | j  t¡ d S r3   r  r@   r   r   r   Ú_testFromFdÏ	  s    zBasicTCPTest._testFromFdc                 C   s0   | j  ¡ }|  |j¡ | d¡}|  |t¡ d S r°   )r¿   ÚduprV   r   r²   rµ   r¶   )rA   rÙ   r·   r   r   r   ÚtestDupÒ	  s    

zBasicTCPTest.testDupc                 C   s   | j  t¡ d S r3   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   r   rŸ   )	r“  rÂ   r»   r¶   r'  ry  r/  r”  ÚUINT_MAX©rA   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  rO  rµ   r  Ú_closedr'  r   r²   r   r   r;   r0   rV   r¶   )rA   r  r   rÙ   r·   r   r   r   Ú
testDetachö	  s    



zBasicTCPTest.testDetachc                 C   s   | j  t¡ d S r3   r  r@   r   r   r   Ú_testDetach
  s    zBasicTCPTest._testDetachN)rŽ   )rF   rG   rH   rM   r  r  r  r  r   r!  r"  r#  r&  r'  r)  r*  r,  r-  r.  r0  r   rr  ZtestShutdown_overflowr3  r5  r6  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–   rM   r’   r   r   r   rM   
  s    zBasicUDPTest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r3   ©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“   r0  r¶   r›   r>   r@   r   r   r   Ú_testSendtoAndRecv
  s    zBasicUDPTest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r3   ©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š   r:  r@   r   r   r   r!  
  s    zBasicUDPTest._testRecvFromc                 C   s   |   t| jjd¡ d S ©Nrt  ©r'  r§  r<   r©  r@   r   r   r   ÚtestRecvFromNegative
  s    z!BasicUDPTest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S rš   r:  r@   r   r   r   Ú_testRecvFromNegative#
  s    z"BasicUDPTest._testRecvFromNegativeN)rŽ   ©
rF   rG   rH   rM   r9  r;  r   r!  r?  r@  r   r   r   r   r7  

  s   
r7  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—   rM   r’   r   r   r   rM   +
  s    zBasicUDPLITETest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r3   r8  r*  r   r   r   r9  .
  s    z"BasicUDPLITETest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S rš   r:  r@   r   r   r   r;  3
  s    z#BasicUDPLITETest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r3   r<  r  r   r   r   r   6
  s    zBasicUDPLITETest.testRecvFromc                 C   s   | j  tdt| jf¡ d S rš   r:  r@   r   r   r   r!  ;
  s    zBasicUDPLITETest._testRecvFromc                 C   s   |   t| jjd¡ d S r=  r>  r@   r   r   r   r?  >
  s    z%BasicUDPLITETest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S rš   r:  r@   r   r   r   r@  B
  s    z&BasicUDPLITETest._testRecvFromNegativeN)rŽ   rA  r   r   r   r   rB  '
  s   
rB  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 r3   )rN   rx   Ú
misc_eventrL   rB   r@   rT   r   r   rB   g
  s    
zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r3   )Úcli_sockr»   r*  r   r   r   ÚsendToServerk
  s    zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r3   )rE  rò  Úsendmsg_to_server_defaultsrñ  ©rA   rR   r   r   r   ÚsendmsgToServers
  s    ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r3   )rï  ÚregisterRecvmsgResult)rA   rÙ   rd   rR   Úresultr   r   r   Ú	doRecvmsg{
  s    
zSendrecvmsgBase.doRecvmsgc                 C   s   d S r3   r   ©rA   rK  r   r   r   rJ  …
  s    z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r3   ©rµ   ©rA   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µ   )
rA   rí  ÚeorÚchecksetÚ
checkunsetÚignoreZ
defaultsetZdefaultunsetZinbothr  r   r   r   Ú
checkFlags 
  s&    




ÿzSendrecvmsgBase.checkFlags)Nr   r   r   )rF   rG   rH   r   ÚLOOPBACK_TIMEOUTÚfail_timeoutrB   rF  rG  rI  rL  rJ  rP  rT  rÿ   r   r   rS  rU  rV  r\  rY   r   r   rT   r   rC  `
  s   
rC  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_intorJ  ÚassertGreaterEqualÚassertLessEqualr¼  )rA   rÙ   rd   rR   ÚbufrK  r   r   r   rL  Ú
  s    
zRecvmsgIntoMixin.doRecvmsgN)rF   rG   rH   rL  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 r3   )rL   rV  r   Ú	MSG_TRUNCr@   rT   r   r   rV  æ
  s    z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rF   rG   rH   ÚpropertyrV  rY   r   r   rT   r   rd  ã
  s   rd  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgSCTPFlagsBasec                    s   t ƒ jtjB S r3   )rL   rU  r   ÚMSG_EORr@   rT   r   r   rU  î
  s    z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rF   rG   rH   rf  rU  rY   r   r   rT   r   rg  ë
  s   rg  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 r3   )r<   r@   r   r   r   Ú	serv_sockø
  s    z'SendrecvmsgConnectionlessBase.serv_sockc                 C   s   | j S r3   )r“   r@   r   r   r   rE  ü
  s    z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS rš   )rÉ   r@   r   r   r   rG     s    z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r3   )rE  r0  rÉ   r*  r   r   r   rF    s    z*SendrecvmsgConnectionlessBase.sendToServerN)rF   rG   rH   rf  rj  rE  rG  rF  r   r   r   r   ri  ó
  s   


ri  c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚSendrecvmsgConnectedBasec                 C   s   | j S r3   )r¿   r@   r   r   r   rj    s    z"SendrecvmsgConnectedBase.serv_sockc                 C   s   | j S r3   )rÂ   r@   r   r   r   rE    s    z!SendrecvmsgConnectedBase.cli_sockc                 C   s   d S r3   r   rO  r   r   r   rP    s    z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rF   rG   rH   rf  rj  rE  rP  r   r   r   r   rk    s
   

rk  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    s   t ƒ  ¡  | j | j¡ d S r3   )rL   rB   rj  rÔ  r^  r@   rT   r   r   rB     s    
z"SendrecvmsgServerTimeoutBase.setUp)rF   rG   rH   rB   rY   r   r   rT   r   rl    s   rl  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 r3   ©rµ   rj  r²   rñ  r¶   r@   r   r   r   ÚtestSendmsg(  s    zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r3   ©rµ   rI  r¶   rñ  r@   r   r   r   Ú_testSendmsg,  s    zSendmsgTests._testSendmsgc                 C   s   |   | j ttƒ¡t¡ d S r3   rn  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 r3   r   r	  r   r   r   r  4  rñ   z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rp  r@   r   r   r   Ú_testSendmsgDataGenerator3  s    ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r3   rn  r@   r   r   r   ÚtestSendmsgAncillaryGenerator7  s    z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |   |  tgdd„ dD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r3   r   r	  r   r   r   r  <  rñ   z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   rp  r@   r   r   r   Ú_testSendmsgAncillaryGenerator;  s    ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r3   rn  r@   r   r   r   ÚtestSendmsgArray?  s    zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)rµ   rI  Úarrayr¶   rñ  r@   r   r   r   Ú_testSendmsgArrayC  s    ÿzSendmsgTests._testSendmsgArrayc                 C   s   |   | j ttƒ¡t¡ d S r3   rn  r@   r   r   r   ÚtestSendmsgGatherG  s    zSendmsgTests.testSendmsgGatherc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nr  rp  r@   r   r   r   Ú_testSendmsgGatherK  s    zSendmsgTests._testSendmsgGatherc                 C   s   |   | j d¡d¡ d S ©Nru  ó   done©rµ   rj  r²   r@   r   r   r   ÚtestSendmsgBadArgsN  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‰   rE  rò  rI  Úobjectr¶   rF  r@   r   r   r   Ú_testSendmsgBadArgsR  s.    
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   s   |   | j d¡d¡ d S r}  r  r@   r   r   r   ÚtestSendmsgBadCmsgd  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„  rA  r~  ©r'  r‰   rI  r¶   r  rF  r@   r   r   r   Ú_testSendmsgBadCmsgh  s&    

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   s   |   | j d¡d¡ d S r}  r  r@   r   r   r   ÚtestSendmsgBadMultiCmsgw  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   Ú_testSendmsgBadMultiCmsg}  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   rI  r¶   ÚassertIsNoner1  ri  rF  ©rA   r3  r   r   r   Ú_testSendmsgExcessCmsgRejectŠ  s
    
0z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   s   d S r3   r   r@   r   r   r   ÚtestSendmsgAfterClose’  s    z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r3   )rE  r   r'  r   rI  r¶   r@   r   r   r   Ú_testSendmsgAfterClose–  s    
z#SendmsgTests._testSendmsgAfterCloseN)rF   rG   rH   ro  rq  rr  rs  rt  ru  rv  ry  rz  r|  r€  r‚  rƒ  r†  r  r   rˆ  rõ   rŠ  r‹  rŽ  r  r  r   r   r   r   rm  $  s,   

rm  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 r3   rn  r@   r   r   r   ÚtestSendmsgExplicitNoneAddrŸ  s    z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S rš   rp  r@   r   r   r   Ú_testSendmsgExplicitNoneAddr£  s    z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nrœ  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r6   ©rµ   rj  r²   r  rD  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)rE  rÔ  rI  r   r6   r   ri  ÚENOMEMr#  rD  rn   ©rA   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   rI  r   ÚMSG_DONTWAITr  r1  ri  ÚEAGAINÚEWOULDBLOCKr›  rD  rn   r  r   r   r   Ú_testSendmsgDontWaitÊ  s    2
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rF   rG   rH   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 r3   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   rE  rò  r¶   r@   r   r   r   Ú_testSendmsgNoDestAddrâ  s    ÿ
ÿz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rF   rG   rH   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©rX  ©rL  rj  rñ  r¶   rµ   rP  r   r\  ©rA   r·   rð  rí  rÁ   r   r   r   ÚtestRecvmsgí  s
    zRecvmsgGenericTests.testRecvmsgc                 C   s   |   t¡ d S r3   ©rF  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 r3   r­  r@   r   r   r   Ú_testRecvmsgExplicitDefaults  s    z0RecvmsgGenericTests._testRecvmsgExplicitDefaultsc                 C   sV   |   | jttƒd ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )NrA  Tr©  rª  r«  r   r   r   ÚtestRecvmsgShorter  s    
ÿz&RecvmsgGenericTests.testRecvmsgShorterc                 C   s   |   t¡ d S r3   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 r3   r­  r@   r   r   r   Ú_testRecvmsgTrunc  s    z%RecvmsgGenericTests._testRecvmsgTruncc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr   Tr©  rª  r«  r   r   r   ÚtestRecvmsgShortAncillaryBuf  s    ÿz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufc                 C   s   |   t¡ d S r3   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 r3   r­  r@   r   r   r   Ú_testRecvmsgLongAncillaryBuf1  s    z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j  ¡  |  t| j| j d¡ d S r°   )rj  r   r'  r   rL  r@   r   r   r   ÚtestRecvmsgAfterClose4  s    
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   s   d S r3   r   r@   r   r   r   Ú_testRecvmsgAfterClose9  s    z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sF   z4| j  d¡ |  tj| j| j ttƒ¡ W | j 	¡  n| j 	¡  0 d S )Nr™  )
rj  rÔ  r'  r   r6   rL  rñ  r¶   rD  rn   r@   r   r   r   ÚtestRecvmsgTimeout<  s    ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©Nr–  )r  rD  rƒ   r^  r@   r   r   r   Ú_testRecvmsgTimeoutE  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³  Fre  ©rX  r[  Tr©  )rL  rj  rñ  r¶   r   rì  rµ   rP  r   r\  r   r«  r   r   r   ÚtestRecvmsgPeekH  s.    þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   s   |   t¡ d S r3   r­  r@   r   r   r   Ú_testRecvmsgPeekk  s    z$RecvmsgGenericTests._testRecvmsgPeekrò  c                 C   s`   | j  | j¡ |  | j ttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S r¨  )
rj  rÔ  r^  rL  rñ  r¶   rµ   rP  r   r\  r«  r   r   r   ÚtestRecvmsgFromSendmsgo  s    z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S r{  rp  r@   r   r   r   Ú_testRecvmsgFromSendmsgz  s    z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rF   rG   rH   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©  )rL  rj  rµ   rP  r   r\  r«  r   r   r   ÚtestRecvmsgEOFƒ  s
    z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   s   | j  ¡  d S r3   )rE  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)rL  rj  rñ  r¶   rP  r   rµ   r\  )rA   r  rð  rí  rÁ   r  r·   r   r   r   ÚtestRecvmsgOverflowŽ  s    
ÿz-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   s   |   t¡ d S r3   r­  r@   r   r   r   Ú_testRecvmsgOverflowž  s    z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rF   rG   rH   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 )Ú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 )Nrt  r   r¥  Tr©  )r'  r‰   rj  rï  r§  rñ  r¶   rÈ  r  rµ   rP  r   r\  r«  r   r   r   ÚtestRecvmsgBadArgs¥  s0    ÿ
ÿÿÿÿÿzRecvmsgTests.testRecvmsgBadArgsc                 C   s   |   t¡ d S r3   r­  r@   r   r   r   Ú_testRecvmsgBadArgs»  s    z RecvmsgTests._testRecvmsgBadArgsN)rF   rG   rH   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 writablert  Tr©  )rÈ  rñ  r¶   r'  r‰   rj  r`  r  r§  rµ   rP  r   r\  ©rA   rc  Únbytesrð  rí  rÁ   r   r   r   ÚtestRecvmsgIntoBadArgsÂ  s@    
ÿÿ
ÿÿÿÿ
ÿ
ÿz'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   s   |   t¡ d S r3   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 r3   r   r	  r   r   r   r  å  rñ   z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr©  )	rÈ  rñ  r¶   rj  r`  rµ   rP  r   r\  rÎ  r   r   r   ÚtestRecvmsgIntoGeneratorá  s    ÿz)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   s   |   t¡ d S r3   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 )Nrw  r   Tr©  )
rx  rñ  r¶   rj  r`  rµ   ÚtobytesrP  r   r\  rÎ  r   r   r   ÚtestRecvmsgIntoArrayï  s    z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   s   |   t¡ d S r3   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È  rj  r`  Ú
memoryviewrµ   rñ  rP  r   r\  )rA   Úb1Úb2Zb3rÏ  rð  rí  rÁ   r   r   r   ÚtestRecvmsgIntoScatterü  s    ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   s   |   d¡ d S )NrØ  )rF  r@   r   r   r   Ú_testRecvmsgIntoScatter  s    z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rF   rG   rH   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   r   é  r9   rŸ   rt  )Úsocklen_t_limitr   rß  Úlistr,  rn  rx  Úitemsizerµ   rb  r'  ry  r€  Úmaxsize)rA   ÚtoobigrS  ÚnÚretr   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 )Nr   rà  r   r9   rŸ   rt  )rá  r   r‡  râ  r,  rn  rx  rã  ra  rß  rb  r'  ry  r€  rä  )rA   rå  rS  Úlastræ  rç  r   r   r   ÚtestCMSG_SPACE1  s    

zCmsgMacroTests.testCMSG_SPACE)rF   rG   rH   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 r3   )r,  rÐ   ÚmkstemprV   rÓ   rØ   r   Úwriter  ÚencodeÚappend)rA   ræ  Úfdsr9   rU  rÚ   r   r   r   ÚnewFDsR  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ï  )rA   rñ  ræ  rU  r   r   r   ÚcheckFDs^  s    zSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r3   )rV   ÚcloseRecvmsgFDsrM  r   r   r   rJ  e  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 )Nr   r9   )	r   r7  Ú
SCM_RIGHTSrx  Ú	frombytesrñ  rã  rÓ   r   )rA   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datarñ  rU  r   r   r   r÷  h  s    
ÿ
ÿzSCMRightsTest.closeRecvmsgFDsc                 C   s8   |   |  tgtjtjt d|  |¡¡fg¡ttƒ¡ d S )Nr9   )	rµ   rI  r¶   r   r7  rø  rx  rò  rñ  )rA   ræ  r   r   r   ÚcreateAndSendFDst  s    þÿûzSCMRightsTest.createAndSendFDsr   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©rX  rZ  r[  r9   r   )rµ   r¶   rP  r   r\  r   rQ  r  râ  rb  rñ  rx  Útupler7  rø  r¼  Ú
SIZEOF_INTrù  rö  )rA   ZnumfdsrK  ÚmaxcmsgsÚignoreflagsr·   rð  rí  rÁ   rñ  Úitemrú  rû  rü  r   r   r   ÚcheckRecvmsgFDs~  s&    ÿ

zSCMRightsTest.checkRecvmsgFDsc                 C   s    |   d|  | jttƒd¡¡ d S )Nr   r¸  ©r  rL  rj  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 )Nr9   r   )
rµ   rI  r¶   r   r7  rø  rx  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  rL  rj  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 )Nr   r/  ©r  )	r  rL  rj  rñ  r¶   r   rß  r   rQ  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_LENrA  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Ÿ   r9   ©	rò  rµ   rI  r¶   r   r7  rø  rx  rñ  ©rA   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  rL  rj  rñ  r¶   r   r‡  r   rß  rQ  )rA   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 r3   )rI  r   r  ri  rm  rµ   rñ  )rA   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  rL  rj  rñ  r¶   r   rQ  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   r7  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À  r   )rL  rj  rñ  r¶   rµ   rP  r   r\  r   rQ  rb  r7  rø  Ú
assertLessr   ©rA   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 )Nr9   rt  )r  r¶   r   r7  rø  rx  Ú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Ÿ   r9   )rL  rj  rñ  r¶   rµ   rP  r   r\  r   rQ  rb  rx  r7  rø  rù  rã  rö  )	rA   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Ÿ   r9   rt  )	rò  r  r¶   r   r7  rø  rx  r   rÔ  r  r   r   r   Ú_testFDPassPartialIntInMiddle9  s    þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©rX  rY  r[  )rµ   r¶   rP  r   r\  r   rQ  )rA   rK  r  r·   rð  rí  rÁ   r   r   r   ÚcheckTruncatedHeaderE  s    ÿz"SCMRightsTest.checkTruncatedHeaderc                 C   s"   | j |  | jttƒ¡tjd d S ©Nr  ©r%  rL  rj  rñ  r¶   r   rQ  r@   r   r   r   ÚtestCmsgTruncNoBufSizeO  s    üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   s   |   d¡ d S rß   r
  r@   r   r   r   Ú_testCmsgTruncNoBufSizeX  s    z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j |  | jttƒd¡tjd d S )Nr   r  r'  r@   r   r   r   ÚtestCmsgTrunc0[  s    ÿzSCMRightsTest.testCmsgTrunc0c                 C   s   |   d¡ d S rß   r
  r@   r   r   r   Ú_testCmsgTrunc0`  s    zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S rß   )r%  rL  rj  rñ  r¶   r@   r   r   r   ÚtestCmsgTrunc1f  s    zSCMRightsTest.testCmsgTrunc1c                 C   s   |   d¡ d S rß   r
  r@   r   r   r   Ú_testCmsgTrunc1i  s    zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S r
  )r%  rL  rj  rñ  r¶   r   r@   r   r   r   ÚtestCmsgTrunc2Intl  s    ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   s   |   d¡ d S rß   r
  r@   r   r   r   Ú_testCmsgTrunc2Ints  s    z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S r  )r%  rL  rj  rñ  r¶   r   rß  r@   r   r   r   ÚtestCmsgTruncLen0Minus1v  s    ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   s   |   d¡ d S rß   r
  r@   r   r   r   Ú_testCmsgTruncLen0Minus1z  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©rX  rY  r   r   r9   )rL  rj  rñ  r¶   rµ   rP  r   r\  r   rQ  r7  rø  ra  rb  rx  rù  rã  rö  )rA   ÚancbufÚmaxdataZmindatar·   rð  rí  rÁ   rú  rû  rü  rñ  r   r   r   ÚcheckTruncatedArray€  s&    ÿ
ÿz!SCMRightsTest.checkTruncatedArrayc                 C   s   | j t d¡dd d S )Nr   ©r3  r4  ©r5  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   r   r6  r7  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 )Nr6  ©r5  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Ÿ   r   r6  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)r   r   )r   )r   )9rF   rG   rH   r   rò  rö  rJ  r÷  rý  r  r  r  r  r  r  r   r  rõ   r  r  r  r¢   rs  r€  rŸ  r   r  r  r  r  r  r  r  r  r!  r"  r#  r%  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r5  r8  r9  r:  r;  r=  r>  r?  r@  r   r   r   r   rì  J  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Ÿ   rt  c                 C   s4   i }|D ]&\}}}|   ||f|¡ ||||f< q|S r3   )r  )rA   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 )Nr   Trþ  r   r9   )rj  rÑ  r   r<  rQ  rD  rn   rL  rñ  r¶   rµ   rP  r   r\  rQ  r  rÿ  rR  r¼  r   rx  rù  ra  rb  )rA   Ú
ancbufsizeÚmaxhopr  r·   rð  rí  rÁ   rú  rû  rü  r°  r   r   r   ÚcheckHopLimitÎ  s.    
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitrQ  rR  c                 C   s   | j dd d S ©Nr¸  ©rD  )rF  r@   r   r   r   ÚtestRecvHopLimitê  s    z%RFC3542AncillaryTest.testRecvHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  ©r  rD  rƒ   r^  rF  r¶   r@   r   r   r   Ú_testRecvHopLimitï  s    z&RFC3542AncillaryTest._testRecvHopLimitr‡  c                 C   s   | j t t¡d d S )NrH  )rF  r   r‡  r   r@   r   r   r   ÚtestRecvHopLimitCMSG_SPACE÷  s    z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testRecvHopLimitCMSG_SPACEü  s    z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErò  c                 C   s   | j d| jd d S ©Nr¸  )rD  rE  )rF  Ú	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–  r9   )r  rD  rƒ   r^  rµ   rI  r¶   r   r<  rR  rx  rO  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 )Nr   Trþ  rŸ   r9   r   rº  )rj  rÑ  r   r<  rQ  rJ  rD  rn   rL  rñ  r¶   rµ   rP  r   r\  rQ  rC  rD  r   rx  rù  ra  rb  rR  )rA   rD  rE  r  r·   rð  rí  rÁ   ZancmapZtcdatar°  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimit  s:    
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrJ  rD  c                 C   s   | j dd d S rG  )rS  r@   r   r   r   ÚtestRecvTrafficClassAndHopLimit:  s    z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú _testRecvTrafficClassAndHopLimit@  s    z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©NrŸ   rH  )rS  r   r‡  r   r@   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACEE  s    ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACEM  s    z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s   | j d| jd d S rN  ©rS  rO  r@   r   r   r   ÚtestSetTrafficClassAndHopLimitR  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 rQ  )r  rD  rƒ   r^  rµ   rI  r¶   r   r<  rD  rx  Útraffic_classrR  rO  rñ  r@   r   r   r   Ú_testSetTrafficClassAndHopLimit[  s    ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   s   | j d| jd d S rN  rY  r@   r   r   r   ÚtestOddCmsgSizef  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–  r9   r¡  )r  rD  rƒ   r^  rI  r¶   r   r<  rD  rx  r[  rÔ  rR  rO  r   r  ri  rm  rµ   rñ  )rA   rÏ  rŠ   r   r   r   Ú_testOddCmsgSizep  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 )Nr   r   Tr$  )rj  rÑ  r   r<  rQ  rD  rn   rL  rñ  r¶   rµ   rP  r   r\  rQ  )rA   rD  r  rR   r·   rð  rí  rÁ   r   r   r   ÚcheckHopLimitTruncatedHeader†  s     
ÿ
ÿÿÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©rD  r  ©r_  r   rQ  r@   r   r   r   r(  š  s    ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   r)  ¥  s    z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   r`  ra  r@   r   r   r   ÚtestSingleCmsgTrunc0ª  s    ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSingleCmsgTrunc0±  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   s   | j dd d S )Nr   rH  )r_  r@   r   r   r   ÚtestSingleCmsgTrunc1¹  s    z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSingleCmsgTrunc1½  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rV  )r_  r   r@   r   r   r   ÚtestSingleCmsgTrunc2IntÂ  s    z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSingleCmsgTrunc2IntÆ  s    z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   r   rH  )r_  r   rß  r@   r   r   r   ÚtestSingleCmsgTruncLen0Minus1Ë  s    z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  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 )Nr   Tr2  r   )rj  rÑ  r   r<  rQ  rD  rn   rL  rñ  r¶   rß  r   rµ   rP  r   r\  rQ  rb  rR  r  r  r   r   r   ÚtestSingleCmsgTruncInDataÔ  s     
ÿ
ÿz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  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 )Nr   Tr$  r   r9   rº  )rj  rÑ  r   r<  rQ  rJ  rD  rn   rL  rñ  r¶   rµ   rP  r   r\  rQ  r  rD  rR  r   rx  rù  ra  rb  )rA   rD  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&  )rl  r   r‡  r   rQ  r@   r   r   r   ÚtestSecondCmsgTrunc0  s    ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSecondCmsgTrunc0  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S rß   ©rl  r   r‡  r   r@   r   r   r   ÚtestSecondCmsgTrunc1  s    z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSecondCmsgTrunc1  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S r
  ro  r@   r   r   r   ÚtestSecondCmsgTrunc2Int$  s    ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSecondCmsgTrunc2Int*  s    z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S r  )rl  r   r‡  r   rß  r@   r   r   r   ÚtestSecondCmsgTruncLen0Minus1/  s
    ÿÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSecondCmsgTruncLen0Minus15  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 )Nr   Tr2  r   r9   rº  )rj  rÑ  r   r<  rQ  rJ  rD  rn   rL  rñ  r¶   r‡  r   rß  rµ   rP  r   r\  rQ  rD  rR  ÚpopÚremoverx  rù  ra  rb  r  )
rA   r·   rð  rí  rÁ   Z
cmsg_typesrú  rû  rü  r°  r   r   r   ÚtestSecomdCmsgTruncInData:  s:    
ÿ
ÿ

þ



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r¾  rJ  r@   r   r   r   Ú_testSecomdCmsgTruncInData_  s    z/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)rº  r   )rº  r   )r   )r   )1rF   rG   rH   rO  r[  rC  rF  r  r   rI  rõ   rK  rL  rM  rP  rR  rS  rT  rU  rW  rX  rZ  r\  r]  r^  r_  r(  r)  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  rp  rq  rr  rs  rt  ru  rx  ry  r   r   r   r   rA  ³  sÌ   

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


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


















 
ÿ


ÿ


ÿ


ÿ


ÿ
#rA  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rF   rG   rH   r   r   r   r   rz  g  s   rz  rò  c                   @   s   e Zd ZdS )ÚSendmsgUDPTestNr{  r   r   r   r   r|  l  s   r|  rï  c                   @   s   e Zd ZdS )ÚRecvmsgUDPTestNr{  r   r   r   r   r}  p  s   r}  r`  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPTestNr{  r   r   r   r   r~  t  s   r~  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDP6TestBasec                 C   s    |   |d d… |d d… ¡ d S r=  rN  rO  r   r   r   rP  }  s    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rF   rG   rH   rP  r   r   r   r   r  y  s   r  r7  rë   r!   c                   @   s   e Zd ZdS )ÚSendmsgUDP6TestNr{  r   r   r   r   r  ‚  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgUDP6TestNr{  r   r   r   r   r‚  ˆ  s   r‚  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDP6TestNr{  r   r   r   r   rƒ  Ž  s   rƒ  r<  c                   @   s   e Zd ZdS )ÚRecvmsgRFC3542AncillaryUDP6TestNr{  r   r   r   r   r„  ”  s   r„  c                   @   s   e Zd ZdS )Ú#RecvmsgIntoRFC3542AncillaryUDP6TestNr{  r   r   r   r   r…  œ  s   r…  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPLITETestBaseNr{  r   r   r   r   r†  ¦  s   r†  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITETestNr{  r   r   r   r   r‡  ­  s   r‡  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITETestNr{  r   r   r   r   rˆ  ³  s   rˆ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITETestNr{  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=  rN  rO  r   r   r   rP  Æ  s    z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNr€  r   r   r   r   rŠ  À  s   rŠ  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITE6TestNr{  r   r   r   r   r‹  Ë  s   r‹  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITE6TestNr{  r   r   r   r   rŒ  Ó  s   rŒ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITE6TestNr{  r   r   r   r   r  Û  s   r  c                   @   s   e Zd ZdS )Ú#RecvmsgRFC3542AncillaryUDPLITE6TestNr{  r   r   r   r   rŽ  ã  s   rŽ  c                   @   s   e Zd ZdS )Ú'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNr{  r   r   r   r   r  í  s   	r  c                   @   s   e Zd ZdS )ÚSendrecvmsgTCPTestBaseNr{  r   r   r   r   r  ù  s   r  c                   @   s   e Zd ZdS )ÚSendmsgTCPTestNr{  r   r   r   r   r‘  ý  s   r‘  c                   @   s   e Zd ZdS )ÚRecvmsgTCPTestNr{  r   r   r   r   r’    s   r’  c                   @   s   e Zd ZdS )ÚRecvmsgIntoTCPTestNr{  r   r   r   r   r“    s   r“  c                   @   s   e Zd ZdS )ÚSendrecvmsgSCTPStreamTestBaseNr{  r   r   r   r   r”    s   r”  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr;   r0   rç   c                   @   s   e Zd ZdS )ÚSendmsgSCTPStreamTestNr{  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)rL   r–  rÆ  r   ri  ÚENOTCONNrc   ©rA   rŠ   rT   r   r   rÆ    s    z$RecvmsgSCTPStreamTest.testRecvmsgEOF©rF   rG   rH   rÆ  rY   r   r   rT   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—  )rL   r›  rÆ  r   ri  r˜  rc   r™  rT   r   r   rÆ  +  s    z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFrš  r   r   rT   r   r›  %  s   r›  c                   @   s   e Zd ZdS )ÚSendrecvmsgUnixStreamTestBaseNr{  r   r   r   r   rœ  4  s   rœ  rÜ   c                   @   s   e Zd ZdS )ÚSendmsgUnixStreamTestNr{  r   r   r   r   r  8  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgUnixStreamTestNr{  r   r   r   r   rž  =  s   rž  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUnixStreamTestNr{  r   r   r   r   rŸ  C  s   rŸ  r7  rø  c                   @   s   e Zd ZdS )ÚRecvmsgSCMRightsStreamTestNr{  r   r   r   r   r   I  s   r   c                   @   s   e Zd ZdS )ÚRecvmsgIntoSCMRightsStreamTestNr{  r   r   r   r   r¡  N  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ð   b  rñ   z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rL   rB   r  r	  rV   )rA   Zorig_alrm_handlerrT   r   r   rB   _  s
    
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r3   )r  r¤  ÚITIMER_REAL©rA   Zsecondsr   r   r   ÚsetAlarmn  s    zInterruptedTimeoutBase.setAlarmrŸ   c                 C   s   t  |¡ d S r3   )r  rÿ  r¦  r   r   r   r§  t  s    )rF   rG   rH   rB   r   r]  r6   r   r  Ú
alarm_timer§  rY   r   r   rT   r   r¢  Z  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 r3   )rL   rB   r<   rÔ  r6   r@   rT   r   r   rB     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
  ©rA   r  rR   rS   r3  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)rF   rG   rH   rB   r¬  r­  r¯  r°  r²  r  r   r³  r´  rY   r   r   rT   r   rª  z  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)rL   rB   rÆ   rÂ   rV   r   rN   ÚThreadÚ	doConnectÚstartr<   r§   r¿   r  rÔ  r6   )rA   Z
cli_threadrÁ   rT   r   r   rB   ¯  s    

z InterruptedSendTimeoutTest.setUpc                 C   s   | j  | j¡ d S r3   )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Â   r0  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)rF   rG   rH   rB   r¸  rº  r   Zrequires_mac_verr»  r¼  r  r   r½  rY   r   r   rT   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ç      ð?r   rñ   )r<   r§   r   r“   rø  rµ   r²   )rA   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)rF   rG   rH   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Ã   rM   r’   r   r   r   rM   ö  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ô   r0   r  râ   r   r   r   Ú_check_defaultsù  s    
z#BasicSocketPairTest._check_defaultsc                 C   s   |   | j¡ d S r3   )rÅ  r“   r@   r   r   r   Ú_testDefaults  s    z!BasicSocketPairTest._testDefaultsc                 C   s   |   | j¡ d S r3   )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 r3   ©r“   r»   r¶   r@   r   r   r   r    s    zBasicSocketPairTest._testRecvc                 C   s   | j  t¡ d S r3   ©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Ž   )rF   rG   rH   rM   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 r3   )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_socketpairrL   rB   r@   rT   r   r   rB   %  s
    

zPurePythonSocketPairTest.setUpc                    s    t ƒ  ¡  | jd ur| jt_d S r3   )rL   rD   rÏ  r   rÄ   r@   rT   r   r   rD   0  s    

z!PurePythonSocketPairTest.tearDownc                 C   s   | j  d¡}|  |t¡ d S r°   rÈ  r*  r   r   r   Ú	test_recv6  s    z"PurePythonSocketPairTest.test_recvc                 C   s   | j  t¡ d S r3   rÉ  r@   r   r   r   Ú
_test_recv:  s    z#PurePythonSocketPairTest._test_recvc                 C   s   | j  t¡ d S r3   rÊ  r@   r   r   r   Ú	test_send=  s    z"PurePythonSocketPairTest.test_sendc                 C   s   | j  d¡}|  |t¡ d S r°   rÌ  r*  r   r   r   Ú
_test_send@  s    z#PurePythonSocketPairTest._test_sendc                 C   s$   t  t j¡\}}| ¡  | ¡  d S r3   )r   rÄ   r;   r   ©rA   r“   r4  r   r   r   Ú	test_ipv4D  s    z"PurePythonSocketPairTest.test_ipv4c                 C   s   d S r3   r   r@   r   r   r   Ú
_test_ipv4I  s    z#PurePythonSocketPairTest._test_ipv4r<  ÚIPV6_V6ONLYú IPV6_V6ONLY option not supportedrB  c                 C   s$   t  t j¡\}}| ¡  | ¡  d S r3   )r   rÄ   rë   r   rÕ  r   r   r   Ú	test_ipv6L  s    z"PurePythonSocketPairTest.test_ipv6c                 C   s   d S r3   r   r@   r   r   r   Ú
_test_ipv6U  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;   r0   rL  r¯   ÚBlockingIOErrorÚInterruptedError)rA   r2  ©Zinject_sockZorig_getsocknamer   r   Úinject_getsocketname\  s    

z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)r   rœ   r'  r   rÄ   r   )rA   rß  Úsock1Úsock2r   rÞ  r   Ú$test_injected_authentication_failureX  s,    ,
úz=PurePythonSocketPairTest.test_injected_authentication_failurec                 C   s   d S r3   r   r@   r   r   r   Ú%_test_injected_authentication_failurey  s    z>PurePythonSocketPairTest._test_injected_authentication_failure)rF   rG   rH   rÄ   rB   rD   rÑ  rÒ  rÓ  rÔ  rÖ  r×  r¢   rs  r   r  rq  r   rò  rÚ  rÛ  râ  rã  rY   r   r   rT   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   )rN   rx   Úeventr   rM   r’   r   r   r   rM   ƒ  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)rA   rÙ   r6   Ú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<   rL  rí  rÔ  r@   r   r   r   ÚtestSetBlocking˜  s    z#NonBlockingTCPTests.testSetBlockingc                 C   s   d S r3   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æ  r   )	r“  r1  Z	ULONG_MAXrc   r<   rL  rµ   r¦  rŒ  r2  r   r   r   ÚtestSetBlocking_overflow¯  s    
z,NonBlockingTCPTests.testSetBlocking_overflowrK  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;   r0   rK  rí  r@   r   r   r   ÚtestInitNonBlocking¾  s
    

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   s   d S r3   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¥  )r7   r<   rÔ  r§   rV   r   rŒ  r¦  rÀ   r   r   r   ÚtestInheritFlagsBlockingË  s
    
z,NonBlockingTCPTests.testInheritFlagsBlockingc                 C   s   | j  t| jf¡ d S r3   ©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¥  )r7   r<   rÔ  r§   rV   r   rµ   r¦  )rA   Zdefault_timeoutr¨   rÁ   r   r   r   ÚtestInheritFlagsTimeout×  s    
z+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   s   | j  t| jf¡ d S r3   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<   rL  r«   Ú	monotonicr'  rÜ  r§   r  rå  rn   rø  r   ÚLONG_TIMEOUTr#  rV   r   rŒ  r¦  )rA   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 r3   )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§   rV   r   rL  r'  rÜ  r²   rñ  r¶   rå  rn   rø  r   rû  r#  rµ   )rA   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 r3   )r“   r¯   r›   r>   rå  rƒ   r  r¶   r@   r   r   r   r    s    
zNonBlockingTCPTests._testRecvN)rŽ   )rF   rG   rH   rM   rí  rî  rï  r   rr  rð  Z_testSetBlocking_overflowr¢   rq  r   r   Úrequires_linux_versionró  rô  rõ  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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.
    rt  r   ÚstrictNr
   r#  rŽ   c                 C   s   t j| |d d S r   r  r’   r   r   r   rM   7  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   )rN   rx   ©rþ   r9   r   r   r   r   ;  s   z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r/  ©ÚencodingÚerrorsÚnewline)r,  Úevt1Úevt2Úserv_finishedÚcli_finishedr¾   rB   r¿   r  Ú	read_moderd   r  r  r  Ú	read_filer@   r   r   r   rB   :  s    ÿ
üzFileObjectClassTestCase.setUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r3   )r  rn   r  r   r  Úclosedr¾   rD   r@   r   r   r   rD   D  s
    

z FileObjectClassTestCase.tearDownc                 C   s0   t  | ¡ | jj| j| j| j| j| jd| _	d S )Nr  )
r¾   r…   rÂ   r  Ú
write_moderd   r  r  r  Ú
write_filer@   r   r   r   r…   K  s    
üz#FileObjectClassTestCase.clientSetUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r3   )r	  rn   r  r   r  r  r¾   rˆ   r@   r   r   r   rˆ   S  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 )Nr   r  z!cannot read from timed out object)r¿   rÔ  r  r%  r'  r   r6   r   r  r  r1  )rA   Úctxr   r   r   ÚtestReadAfterTimeoutZ  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   Ú_testReadAfterTimeoutf  s    
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S r{  )r  r%  rñ  Úread_msgrµ   )rA   Ú	first_segZ
second_segr·   r   r   r   ÚtestSmallReadk  s    z%FileObjectClassTestCase.testSmallReadc                 C   s   | j  | j¡ | j  ¡  d S r3   ©r  rî  r  r  r@   r   r   r   Ú_testSmallReadr  s    z&FileObjectClassTestCase._testSmallReadc                 C   s   | j  ¡ }|  || j¡ d S r3   )r  r%  rµ   r  r*  r   r   r   ÚtestFullReadv  s    
z$FileObjectClassTestCase.testFullReadc                 C   s   | j  | j¡ | j  ¡  d S r3   )r  rî  r  r   r@   r   r   r   Ú_testFullRead{  s    z%FileObjectClassTestCase._testFullReadc                 C   s:   t | jƒƒ }| j d¡}|sq(||7 }q|  || j¡ d S rß   )rô   r  r  r%  rµ   )rA   rc  Úcharr   r   r   ÚtestUnbufferedRead  s    
z*FileObjectClassTestCase.testUnbufferedReadc                 C   s   | j  | j¡ | j  ¡  d S r3   r  r@   r   r   r   Ú_testUnbufferedRead‰  s    z+FileObjectClassTestCase._testUnbufferedReadc                 C   s   | j  ¡ }|  || j¡ d S r3   )r  Úreadlinerµ   r  ©rA   Úliner   r   r   ÚtestReadline  s    
z$FileObjectClassTestCase.testReadlinec                 C   s   | j  | j¡ | j  ¡  d S r3   r  r@   r   r   r   Ú_testReadline’  s    z%FileObjectClassTestCase._testReadlinec                 C   s&   | j  ¡  | j ¡ }|  || j¡ d S r3   )r¿   r   r  r%  rµ   r  r*  r   r   r   ÚtestCloseAfterMakefile–  s    

z.FileObjectClassTestCase.testCloseAfterMakefilec                 C   s   | j  | j¡ | j  ¡  d S r3   r  r@   r   r   r   Ú_testCloseAfterMakefile  s    z/FileObjectClassTestCase._testCloseAfterMakefilec                 C   s@   | j  ¡  | j ttƒ¡}t| jtƒr.| 	¡ }|  
|| j¡ d S r3   )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 r3   r  r@   r   r   r   Ú_testMakefileAfterMakefileClose¨  s    z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C   s   |   | jj ¡ d S r3   )r  r  r  r@   r   r   r   ÚtestClosedAttr¬  s    z&FileObjectClassTestCase.testClosedAttrc                 C   s   |   | jj ¡ d S r3   )r  r  r  r@   r   r   r   Ú_testClosedAttr¯  s    z'FileObjectClassTestCase._testClosedAttrc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r3   )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 r3   )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 r3   )r  r   r'  r§  r  r¿   r   rœ   r@   r   r   r   ÚtestRealCloseº  s    

z%FileObjectClassTestCase.testRealClosec                 C   s   d S r3   r   r@   r   r   r   Ú_testRealCloseÀ  s    z&FileObjectClassTestCase._testRealClose)rŽ   )&rF   rG   rH   rX   rd   r  r  r  r
  r¶   r  r  r  rM   rB   rD   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/  r0  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 r3   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µ   )rA   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyê  s    
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   s   d S r3   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†  r   )r¿   rL  rµ   r  ÚreadintorÈ  r%  rñ  r  r  rn   r  rƒ   r«   r¬   )rA   r  rc  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  rn   r  r@   r   r   r   Ú_testSmallReadNonBlocking
  s
    

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s"   | j  d¡ | jr|  | j¡ d S )Nr9  )r	  rƒ   Úserv_skippedrc   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)	r;  rÂ   rL  r   r  r  rî  rn  r,  )rA   ZBIGZLIMITræ  r9   r   r   r   Ú_testWriteNonBlocking  s    
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rF   rG   rH   rX   rd   r1  r2  r3  r4  r5  r6  r8  r:  r<  r=  r   r   r   r   r.  Ä  s   		r.  c                   @   s   e Zd ZdZdS )Ú#LineBufferedFileObjectClassTestCaser   N©rF   rG   rH   rd   r   r   r   r   r>  0  s   r>  c                   @   s   e Zd ZdZdS )Ú$SmallBufferedFileObjectClassTestCaserŸ   Nr?  r   r   r   r   r@  5  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©rF   rG   rH   rX   r
  r¶   r%  r  r  r  r  r   r   r   r   rA  :  s   
rA  c                   @   s*   e Zd ZdZdZeZdZe d¡Z	dZ
dS )Ú#UnicodeWriteFileObjectClassTestCaserB  r
   r"  r   r,  N)rF   rG   rH   rX   r
  r¶   r  r  r%  r  r  r   r   r   r   rD  D  s   
rD  c                   @   s0   e Zd ZdZdZe d¡ZdZe d¡Z	dZ
dS )Ú'UnicodeReadWriteFileObjectClassTestCaserB  r   r   r"  r,  NrC  r   r   r   r   rE  N  s   

rE  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 r3   )r   Úcreate_connectionr›   r>   r“   rÂ   r@   r   r   r   r…   [  s    z!NetworkConnectionTest.clientSetUpN)rF   rG   rH   rX   r…   r   r   r   r   rF  X  s   rF  c                   @   s   e Zd ZdZdS )ÚBasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)rF   rG   rH   rX   r   r   r   r   rH  a  s   rH  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   r6   rH  r   r   r   r¯   h  s    z,NetworkConnectionNoServer.MockSocket.connectN)rF   rG   rH   r¯   r   r   r   r   Ú
MockSocketg  s   rJ  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   rJ  )rA   Z
old_socketr   r   r   Úmocked_socket_modulek  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 r3   )r   rË  r   r;   r0   rV   r   r'  r   r¯   r›   rµ   r1  ri  ZECONNREFUSED)rA   r>   r“   r3  r   r   r   Útest_connectu  s    ,z&NetworkConnectionNoServer.test_connectc                 C   s\   t  ¡ }|  t¡}t t|f¡ W d   ƒ n1 s60    Y  t  ¡ }|  |j	j
|¡ d S r3   )r   rË  r'  r   r   rG  r›   Zget_socket_conn_refused_errsr  r1  ri  )rA   r>   r3  Zexpected_errnosr   r   r   Útest_create_connection}  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š  )rK  r   rG  r›   r6   r   r   rò  ri  ZEAFNOSUPPORTr#  rœ  r   r   r   Útest_create_connection_timeout•  s    
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rF   rG   rH   r   rJ  Ú
contextlibÚcontextmanagerrK  rL  rM  rN  r   r   r   r   rI  e  s   
	rI  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   rM   ¦  s    z(NetworkConnectionAttributesTest.__init__c                 C   s   t  ¡ | _d S r3   )r   rË  Úsource_portr@   r   r   r   r…   ª  s    z+NetworkConnectionAttributesTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   r”   r@   r   r   r   rˆ   ­  s    
z.NetworkConnectionAttributesTest.clientTearDownc                 C   s   | j  ¡ \}}| ¡  d S r3   )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   rG  r›   r>   r   r]  r“   rV   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,  )r6   Úsource_addressr   )r   rG  r›   r>   r   r]  rR  r“   rV   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 )NrA  ©r  r   r4   r5   rG  r›   r>   r“   rV   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–  rW  r@   r   r   r   Ú_testTimeoutNoneÔ  s    
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S rY  )r   rG  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 )NrZ  )	r   rG  r›   r>   r“   rV   r   rµ   r¦  r@   r   r   r   Ú_testTimeoutValueNonamedå  s    z8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)rŽ   )rF   rG   rH   rM   r…   rˆ   rS  Z
testFamilyrT  ZtestSourceAddressrV  ZtestTimeoutDefaultrX  ZtestTimeoutNoner[  ZtestTimeoutValueNamedr\  ZtestTimeoutValueNonamedr]  r   r   r   r   rQ  ¤  s    
	rQ  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   rM   í  s    z'NetworkConnectionBehaviourTest.__init__c                 C   s   d S r3   r   r@   r   r   r   r…   ñ  s    z*NetworkConnectionBehaviourTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r3   r”   r@   r   r   r   rˆ   ô  s    
z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  ¡ \}}|  |j¡ t d¡ | d¡ d S )Nr  ó   done!)r<   r§   rV   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   rG  r›   r>   r“   r²   rµ   )rA   rÙ   r¤  r   r   r   Ú_testInsideTimeout   s    
z1NetworkConnectionBehaviourTest._testInsideTimeoutc                    s4   t jt| jfdd | _‰ |  t j‡ fdd„¡ d S )Nr   r–  c                      s
   ˆ   d¡S )NrÝ  )r²   r   ©rÙ   r   r   rð     rñ   zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r   rG  r›   r>   r“   r'  r6   r@   r   rb  r   Ú_testOutsideTimeout  s    z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)rŽ   )
rF   rG   rH   rM   r…   rˆ   r`  ZtestOutsideTimeoutra  rc  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   r6   ©rA   re  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   r6   r#  r   ©rA   Úokrh  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 )Nr9  c                   @   s   e Zd ZdS )z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr{  r   r   r   r   ÚAlarm(  s   rl  c                    s   ˆ ‚d S r3   r   )r  r§  ©rl  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Ô  rW  r  r	  rÿ  r§   r   r6   r#  r€  Úexc_infoÚ	tracebackÚ
format_exc)rA   rn  r  rh  r   rm  r   ÚtestInterruptedTimeout!  s*    
þz%TCPTimeoutTest.testInterruptedTimeoutN)
rF   rG   rH   rh  rk  r¢   rq  r   r  rr  r   r   r   r   rd  
  s   ÿrd  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   re  F  s    z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)rf  rg  r   r@   r   ÚtestUDPTimeoutE  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   r6   r#  r   ri  r   r   r   rk  L  s    zUDPTimeoutTest.testTimeoutZeroN)rF   rG   rH   rv  rk  r   r   r   r   rs  C  s   rs  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 rt  ru  rí   r@   r   r   re  _  s    z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)rf  rg  r   r@   r   ÚtestUDPLITETimeout^  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)rw  rx  ri  r   r   r   rk  e  s    z"UDPLITETimeoutTest.testTimeoutZeroN)rF   rG   rH   rz  rk  r   r   r   r   ry  Z  s   ry  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 r3   )r  Ú
issubclassr   rW  r   r(  r)  r6   r@   r   r   r   ÚtestExceptionTreeu  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;   r0   r  r   rV   rO  r'  r   rL  )rA   Zsock0rÙ   r   r   r   Útest_setblocking_invalidfd{  s    ÿz)TestExceptions.test_setblocking_invalidfdN)rF   rG   rH   r}  r~  r   r   r   r   r{  s  s   r{  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Ü   r0   ra   r?   r¯   rœ   r§   rµ   Úgetpeername)rA   r“  Ús1ra  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¡  ó   hr   )ÚUNIX_PATH_MAXr   rÜ   r0   ra   rµ   rœ   ©rA   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Ü   r0   r'  r   ra   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Ü   r0   ra   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Ü   r0   ra   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Ü   r0   ra   ZassertRegexrœ   rþ  )rA   Zabstract_addressrƒ  ra  r   r   r   ÚtestAutobind²  s    

z'TestLinuxAbstractNamespace.testAutobindN)
rF   rG   rH   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 r3   )r   rÜ   r0   rÙ   r@   r   r   r   rB   Ã  s    zTestUnixDomain.setUpc                 C   s   | j  ¡  d S r3   )rÙ   r   r@   r   r   r   rD   Æ  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ö  rc   r  r€  Úgetfilesystemencoding©rA   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  rc   r  )rA   rÙ   rÚ   rŠ   r   r   r   ra   Ô  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 r3   )rÓ   rÚ   Úabspathr   ÚTESTFNra   rÙ   rV   rØ   rµ   rœ   r“  r   r   r   ÚtestStrAddrä  s    zTestUnixDomain.testStrAddrc                 C   sF   t j tj¡}|  | j|  |¡¡ |  tj	|¡ |  
| j ¡ |¡ d S r3   )rÓ   rÚ   r•  r   r–  ra   rÙ   r”  rV   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”  ra   rÙ   r%  rV   rØ   rµ   rœ   )rA   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_UNENCODABLErc   rÓ   rÚ   r•  ra   rÙ   rV   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Ù   ra   r@   r   r   r   ÚtestEmptyAddress  s    zTestUnixDomain.testEmptyAddressN)rF   rG   rH   rB   rD   r”  ra   rý  r—  r˜  r›  rœ  r¢   rs  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   rM     s    zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nrw  r   )rx  rñ  r¶   r¿   r®  rµ   rÔ  ©rA   rc  rÏ  r·   r   r   r   ÚtestRecvIntoArray  s    zBufferIOTest.testRecvIntoArrayc                 C   s   t tƒ}| j |¡ d S r3   ©r¼  r¶   rÂ   r»   ©rA   rc  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Ÿ  )rx  rñ  r¶   r¿   r±  rµ   rÔ  ©rA   rc  rÏ  rÁ   r·   r   r   r   ÚtestRecvFromIntoArray0  s    z"BufferIOTest.testRecvFromIntoArrayc                 C   s   t tƒ}| j |¡ d S r3   r¢  r£  r   r   r   Ú_testRecvFromIntoArray8  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   ÚtestRecvFromIntoBytearray<  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   ÚtestRecvFromIntoMemoryviewE  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   ÚtestRecvFromIntoSmallBufferN  s    z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   s   | j  t¡ d S r3   r  r@   r   r   r   Ú_testRecvFromIntoSmallBufferS  s    z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t ƒ }| j |¡ | j |d¡ d S rš   )rÈ  r¿   r±  r£  r   r   r   ÚtestRecvFromIntoEmptyBufferV  s    z(BufferIOTest.testRecvFromIntoEmptyBufferN)rŽ   )rF   rG   rH   rX   rM   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ÚIsADirectoryErrorr³   r   )r   r   r   r   r   ÚisTipcAvailableb  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 )Nr   rŸ   r   r±   )r   r±  r6  rV   r   rÑ  r7  r8  ÚTIPC_ADDR_NAMESEQÚ
TIPC_STYPEÚ
TIPC_LOWERÚ
TIPC_UPPERra   ÚTIPC_ADDR_NAMErm  r0  r¶   r©  rµ   rœ   )rA   r4  r“   ÚsrvaddrZsendaddrr·   Zrecvaddrr   r   r   ÚtestRDMy  s     ÿ
ÿzTIPCTest.testRDMN)rF   rG   rH   r¼  r   r   r   r   rµ  v  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   rM   ‘  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±  r0   r4  rV   r   rÑ  r7  r8  r¶  r·  r¸  r¹  ra   r?   ro   r§   r¨   r©   )rA   r»  r   r   r   rB   •  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±  r0   r“   rV   r   rº  r·  r¸  rm  r¹  r¯   rœ   Úcliaddr)rA   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 r3   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Î  r4  r  r   r'  r   r  râ   r   r   r   Ú_testSocketClass¹  s    
*
&
.z$ContextManagersTest._testSocketClassc                 C   s2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S r°   ©r<   r§   rV   r   r²   r  ©rA   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   rG  rÎ  r4  r  rµ   r²   r  ©rA   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   rG  r   r  r4  r'  r   r  rÅ  r   r   r   Ú_testCreateConnectionCloseÛ  s
    
&z.ContextManagersTest._testCreateConnectionCloseN)rF   rG   rH   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 r3   )r   r;   r0   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Ê  )rA   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)rA   rÙ   rU  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Î  )rA   rÙ   rU  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Ä   rV   r   rµ   rÊ  )rA   rƒ  ra  r   r   r   Útest_socketpair  s
    zInheritanceTest.test_socketpair)rF   rG   rH   r¢   rq  r   r   r   rþ  rË  rÌ  rÍ  rÏ  rs  r   rÒ  rÓ  rÔ  r   r   r   r   rÉ  ã  s   ÿ	

rÉ  rK  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   r0   r¦  r  r   rè  rÓ   ré  rÎ  rç  )rA   r   Únonblockr6   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;   r0   rK  r×  rL  rÔ  r4   r5   )rA   r   Útr   r   r   Útest_SOCK_NONBLOCKB  s:    
ÿ






,

(

,

.

,z'NonblockConstantTest.test_SOCK_NONBLOCKN)Træ  )rF   rG   rH   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 r3   )rr   r   Ú	fromsharer§   r  r   )r£  ÚqZsdataÚmessager   ra  r  r   r   r   ÚremoteProcessServeri  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¶  rR   s
   slapmahfrorâ  rñ   )Úmultiprocessingr{   ÚProcessrÞ  r¹  r<   ÚshareÚpidrœ   r   r‡   r   rG  r²   rð  r  rµ   )	rA   rÜ  r$  r¤  rÁ   rÝ  r   ÚmÚreceivedr   r   r   Ú	testSharew  s&    






zTestSocketSharing.testSharec                 C   s@   | j  t ¡ ¡}|  ttj|d d… ¡ |  ttj|d ¡ d S )Nrt  r-  )r<   râ  rÓ   Úgetpidr'  r§  r   rÛ  )rA   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  )rA   ZorgÚotherr   r   r   ÚcompareSocketsŸ  s    
z TestSocketSharing.compareSocketsc                 C   sD   | j  t ¡ ¡}t |¡}z|  | j |¡ W | ¡  n
| ¡  0 d S r3   )r<   râ  rÓ   rç  r   rÛ  rê  r   )rA   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 r3   )r   r;   rë   r0   r!   r   râ  rÓ   rç  rÛ  rê  r   )rA   ÚfamiliesÚtypesr   rØ  Úsourcer¤  Zsharedr   r   r   Ú	testTypes·  s    

zTestSocketSharing.testTypesN)
rF   rG   rH   r¿  rÞ  ræ  rè  rê  rë  rï  r   r   r   r   rÚ  d  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    ri   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 r3   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 r3   )r   rØ   r–  )r£  r   r   r   ÚtearDownClassè  s    z#SendfileUsingSendTest.tearDownClassc                 C   s8   | j  tj¡ | j  ¡ \}}| | j¡ |  |j¡ |S r3   )r<   rÔ  r   rû  r§   ÚTIMEOUTrV   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  )rA   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   rG  r  rµ   rù  Útell©rA   r“  ÚfilerÙ   ÚmethÚsentr   r   r   Ú_testRegularFile  s    

z&SendfileUsingSendTest._testRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r3   ©rÿ  r   rµ   rñ  rù  rú  ©rA   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 r3   )r<   rœ   ÚioÚBytesIOrú  r   rG  rW  rµ   rù  r  r'  r\  r]  )rA   r“  r  rÙ   r	  r   r   r   Ú_testNonRegularFile  s    

ÿz)SendfileUsingSendTest._testNonRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r3   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   rV   rØ   r   rG  r  rµ   r  )rA   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   ÚtestEmptyFileSend2  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   Ú_testOffset9  s    

z!SendfileUsingSendTest._testOffsetc                 C   sB   |   ¡ }|  |¡}|  t|ƒ| jd ¡ |  || jdd … ¡ d S )Nr  r  r  r   r   r   Ú
testOffsetB  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   rG  r]  r  rµ   r  ©rA   r“  r  rÙ   rß  r  r	  r   r   r   Ú
_testCountJ  s    
ÿ
z SendfileUsingSendTest._testCountc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S )Nr  ©rÿ  r   rµ   rñ  rú  ©rA   rß  r¨   r¤  r   r   r   Ú	testCountV  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–  r   r  r  r  r   r   r   Ú_testCountSmall_  s    
ÿ
z%SendfileUsingSendTest._testCountSmallc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S rß   r  r   r   r   r   ÚtestCountSmallk  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   rG  r  rµ   r  r  r   r   r   Ú_testCountWithOffsett  s    

z*SendfileUsingSendTest._testCountWithOffsetc                 C   sD   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd|d … ¡ d S )Nr$  r%  r  r   r   r   r   ÚtestCountWithOffset~  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   rG  rL  r  r'  r§  rW  ©rA   r“  r  rÙ   r  r   r   r   Ú_testNonBlocking‡  s    


z&SendfileUsingSendTest._testNonBlockingc                 C   s    |   ¡ }| d¡r|  d¡ d S )Nri   z$was not supposed to receive any data)rÿ  r²   r#  ©rA   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   rG  r]  r  rµ   rù  r  r   r   r   Ú_testWithTimeout—  s    
ÿ
z&SendfileUsingSendTest._testWithTimeoutc                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r3   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   rG  rÔ  r  r'  r6   r(  r   r   r   Ú_testWithTimeoutTriggeredSend©  s    


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendc                 C   s    |   ¡ }| d¡ t d¡ d S )Ni€X r   )rÿ  r²   r«   r¬   r*  r   r   r   ÚtestWithTimeoutTriggeredSend±  s    
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendc                 C   s   d S r3   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ì  r0   r(  zbinary modezpositive integerr  r  rª   r   rt  )	r   r   r–  r   r!   r  r*  r§  r‰   )rA   r  r   r  r   r   r   Útest_errors»  s6    
ÿ@

ÿ@

ÿÿÿÿz!SendfileUsingSendTest.test_errorsN)&rF   rG   rH   rX   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/  r0  r1  r   r   r   r   rð  Ë  sD   

		
			
		
rð  rW  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 )Nr]  r  râ   r   r   r   r  Ù  s    z(SendfileUsingSendfileTest.meth_from_sockN)rF   rG   rH   rX   r  r   r   r   r   r2  Ó  s   r2  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'   ra   r²  r   r¢   ZSkipTestr  )rA   Ú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¼  Úfromhexr5  r§   r  rµ   r²   r»   r   ÚMSG_MORE)rA   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(193dbb43c6297b47ea6277ec0ce67119a3f3aa66r6  z
hmac(sha1)rœ  )r¼  r:  r5  rÑ  r   ÚSOL_ALGÚALG_SET_KEYr§   r  rµ   r²   )rA   Ú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=  rC  r±   )r¼  r:  rñ  r5  rÑ  r   r?  r@  r§   Úsendmsg_afalgÚALG_OP_ENCRYPTr;  r  rµ   r²   ÚALG_OP_DECRYPT)rA   rA  rC  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   sL  t  d¡}|d ur,|dkr,|dk r,|  d¡ 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 sF0    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 s¤0    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Linux)rñ  r†  )rñ  rµ  zupstream Linux kernel issueZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r=  rC  Úassoclenrí  )r=  rC  rI  r   )r   Z_get_kernel_versionrc   r¼  r:  rñ  r5  rÑ  r   r?  r@  ÚALG_SET_AEAD_AUTHSIZEr§   rD  rE  r;  r  r²   rµ   r   ÚStructr  rò  Ú
ALG_SET_OPÚ
ALG_SET_IVÚALG_SET_AEAD_ASSOCLENrF  )rA   Zkernel_versionrA  rC  ZplainZassocZexpected_ctZexpected_tagZtaglenrI  r<  r=  ru   Úresr·   Zpack_uint32r   r   r   Útest_aead_aes_gcm7  st    







ÿ
ÿ
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…  )r5  rÓ   ÚurandomrÑ  r   r?  r@  r§   r²   rµ   rñ  )rA   r<  Z
extra_seedr=  ru   Zrnr   r   r   Útest_drbg_pr_sha256|  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=  r   )r=  rI  rt  )r   r)   r'   r'  r‰   rD  rE  râ   r   r   r   Útest_sendmsg_afalg_args‡  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'   rV   r   r'  r²  ra   r*  r§  râ   r   r   r   Útest_length_restriction™  s    (((z,LinuxKernelCryptoAPI.test_length_restrictionN)rF   rG   rH   r5  r   rþ  r>  rB  rH  rP  rS  rT  rU  r   r   r   r   r3  Ý  s   



(

D


r3  Úwinzrequires Windowsc                   @   s   e Zd Zh d£Zdd„ ZdS )ÚTestMSWindowsTCPFlags>   ÚTCP_KEEPIDLEÚTCP_KEEPINTVLÚTCP_KEEPCNTÚTCP_FASTOPENÚ
TCP_MAXSEGÚTCP_NODELAYc                    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µ   )rA   ZprovidedÚunknownr   r@   r   Útest_new_tcp_flagsº  s
    ÿz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rF   rG   rH   r_  ra  r   r   r   r   rW  «  s   rW  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   r   rµ  rë  )r   rË  r   Úcreate_serverrµ   rœ   rò  rë   ©rA   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   rc  rµ   r  r;   rô   r0   r   rò  rë   )rA   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§  rc  rÍ  r7  rh  rµ   rþ  )rA   rÙ   rW  r   r   r   Útest_reuse_portØ  s    
.*z CreateServerTest.test_reuse_portr<  rØ  rÙ  rB  c                 C   sH   t jdt jd$}| t jt j¡s&J ‚W d   ƒ n1 s:0    Y  d S )Nrf  rë  )r   rc  rë   rÍ  r<  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 )Nrf  T©r  Údualstack_ipv6)r   rc  rë   rµ   r  râ   r   r   r   Útest_dualstack_ipv6_familyì  s
    
ÿz+CreateServerTest.test_dualstack_ipv6_familyN)rF   rG   rH   re  rg  rj  r¢   rs  r   r  rq  r   rò  rk  r   Úhas_dualstack_ipv6ro  r   r   r   r   rb  Â  s   	
þÿrb  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ƒ   r6   r²   r  )rÙ   r¨   ru   r·   ©rå  rA   r   r   Úrunù  s    
z3CreateServerFunctionalTest.echo_server.<locals>.runrß  )	rN   rx   rÔ  r6   r·  r¹  rV   r  rn   )rA   rÙ   rs  r€   r   rr  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Ô  r6   r¯   r  rµ   r²   )rA   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   rc  rt  ru  r;   rd  r   r   r   Ú	test_tcp4  s    
z$CreateServerFunctionalTest.test_tcp4rB  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   rc  rë   rt  ru  rd  r   r   r   Ú	test_tcp6  s    
ÿ
z$CreateServerFunctionalTest.test_tcp6rl  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,  Trm  r  )r   rË  r   rc  rë   rt  ru  r;   rd  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,  Trm  rµ  rw  rd  r   r   r   Útest_dual_stack_client_v6+  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rF   rG   rH   r   r]  r6   rt  ru  rv  r¢   rq  r   rò  rx  rs  r   rp  ry  rz  r   r   r   r   rq  õ  s    
	ÿÿrq  Ú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 r3   ©rÓ   r   )Úpipesr  Úfd2r   r   r   Úclose_pipes:  s    
z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipesc                 S   s   | D ]}t  |¡ qd S r3   r~  )rñ  rU  r   r   r   Ú	close_fds?  s    z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   s   g | ]}t  ¡ ‘qS r   )rÓ   Úpipe)rþ   ru   r   r   r   r   D  rñ   z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r¥  c                 S   s   g | ]\}}|‘qS r   r   )rþ   ÚrfdÚwfdr   r   r   r   F  rñ   rŸ   r   râ  )r,  rV   r   rÄ   rÜ   r0   r{  r¶   r|  rñ  rµ   ró  rÓ   rî  r  rï  r%  )rA   r  r‚  r  rñ  rà  rá  r·   Zfds2rí  rÁ   rq  r„  r…  r¤  r   r   r   ÚtestSendAndRecvFds9  s&    &Hz#SendRecvFdsTests.testSendAndRecvFdsN)rF   rG   rH   r†  r   r   r   r   r}  5  s   r}  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S r3   )r   Zthreading_setupr¢   ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModule_  s    rˆ  Ú__main__)Ör¢   Útestr   Ztest.supportr   ri  r  rÞ  r   rø  rÐ   r«   rp  rp   r€  rÓ   rŸ  rx  rO  Úweakrefr   r  r  r-  r   rô  rc  rö  Ú_threadr€   rN   rà  rÂ  r   r›   rï  r¶   r®   r¦   Úsystemr   r  r   r    r#   r%   r(   r*   r,   r.   r2   rP  r7   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£   r:   rI   rJ   rK   rZ   rh   rj   r   r–   rq  r—   r˜   r™   rs  r    r¾   rÃ   rÅ   rÊ   rË   rÎ   rÏ   rÛ   rÞ   rã   rä   rå   ræ   rè   rê   rì   rü   r  r  r  rt  r   rÀ  rÇ  rá  ræ  rû  r  r  r  r7  rB  rC  r_  rd  rg  ri  rk  rl  rm  r‘  r¤  r§  rÅ  rÊ  rÍ  rÞ  rì  rA  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@  rA  rD  rE  r  rF  rH  rI  rQ  r^  rd  rs  ry  r{  r€  r  rž  r·  r¸  r¹  r´  rµ  r½  r¿  rÉ  rÕ  rÿ   rÚ  rð  r2  r3  r   rW  rb  rq  r}  rˆ  rF   Úmainr   r   r   r   Ú<module>   sX  










	

3qÿÿÿ$!$ÿÿ$	
        p
S
Z
*
=

>ÿÿ.ÿ%{ÿ7ww= #P;  k   7þ


þ	



ÿ
þÿþÿ
ÿ
ÿ
ÿþ	
ÿ
ÿ
ÿ
ÿÿ
ÿþÿ

ÿ
ÿþ





ÿ



ÿ
ÿ

ÿ
ÿÿ
 ÿ)ÿþ7#j ! $l


	?G9ÿ7JSÿÿ',Cÿ<e  
ÿ N3@

'