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

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

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

        class NewClass (OldClass, ThreadableTest):
            pass

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

        clientSetUp ()
        clientTearDown ()

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

        def testFoo(self):
            # Server portion

        def _testFoo(self):
            # Client portion

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

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

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

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

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

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

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

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

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

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

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

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

r  c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚBasicUDPTestrŽ   c                 C   s   t j| |d d S r   )r–   rL   r’   r   r   r   rL   ð	  s    zBasicUDPTest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r2   ©r;   r°   rè  r²   r±   r³   r   r   r   ÚtestSendtoAndRecvó	  s    zBasicUDPTest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S rš   ©r“   r,  r²   r›   r=   r?   r   r   r   Ú_testSendtoAndRecvø	  s    zBasicUDPTest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r2   ©r;   r   rè  r²   r±   r  r   r   r   r  û	  s    zBasicUDPTest.testRecvFromc                 C   s   | j  tdt| jf¡ d S rš   r2  r?   r   r   r   r   
  s    zBasicUDPTest._testRecvFromc                 C   s   |   t| jjd¡ d S ©Nr…  ©r$  r  r;   r   r?   r   r   r   ÚtestRecvFromNegative
  s    z!BasicUDPTest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S rš   r2  r?   r   r   r   Ú_testRecvFromNegative
  s    z"BasicUDPTest._testRecvFromNegativeN)rŽ   ©
rE   rF   rG   rL   r1  r3  r  r  r7  r8  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 )ÚBasicUDPLITETestrŽ   c                 C   s   t j| |d d S r   )r—   rL   r’   r   r   r   rL   
  s    zBasicUDPLITETest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r2   r0  r³   r   r   r   r1  
  s    z"BasicUDPLITETest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S rš   r2  r?   r   r   r   r3  
  s    z#BasicUDPLITETest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r2   r4  r  r   r   r   r  
  s    zBasicUDPLITETest.testRecvFromc                 C   s   | j  tdt| jf¡ d S rš   r2  r?   r   r   r   r  
  s    zBasicUDPLITETest._testRecvFromc                 C   s   |   t| jjd¡ d S r5  r6  r?   r   r   r   r7  "
  s    z%BasicUDPLITETest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S rš   r2  r?   r   r   r   r8  &
  s    z&BasicUDPLITETest._testRecvFromNegativeN)rŽ   r9  r   r   r   r   r:  
  s   
r:  c                       s‚   e Zd ZejZ‡ fdd„Zdd„ ZdZdd„ Z	dd	„ Z
d
d„ Zdd„ ZdZdD ]ZeeeedƒO ZqNdZdZdZddd„Z‡  ZS )ÚSendrecvmsgBasec                    s   t  ¡ | _tƒ  ¡  d S r2   )rM   rx   Ú
misc_eventrK   rA   r?   rS   r   r   rA   K
  s    
zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r2   )Úcli_sockr·   r³   r   r   r   ÚsendToServerO
  s    zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r2   )r=  ré  Úsendmsg_to_server_defaultsrè  ©r@   rQ   r   r   r   ÚsendmsgToServerW
  s    ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r2   )ræ  ÚregisterRecvmsgResult)r@   rÕ   rc   rQ   Úresultr   r   r   Ú	doRecvmsg_
  s    
zSendrecvmsgBase.doRecvmsgc                 C   s   d S r2   r   ©r@   rC  r   r   r   rB  i
  s    z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r2   ©r±   ©r@   Zaddr1Zaddr2r   r   r   ÚcheckRecvmsgAddresso
  s    z#SendrecvmsgBase.checkRecvmsgAddressr   )Ú
MSG_CTRUNCÚMSG_OOBNc           
      C   s¬   | j }| j}|r&|| jO }|| jO }n|d urB|| jO }|| jO }|| M }|| M }||O }||O }||@ | @ }|r†td |¡ƒ‚||B | @ }	|  ||	@ ||	@ ¡ d S )Nz6contradictory set, unset requirements for flags {0:#x})Úmsg_flags_common_setÚmsg_flags_common_unsetÚmsg_flags_eor_indicatorÚmsg_flags_non_eor_indicatorÚ	Exceptionr  r±   )
r@   rä  ÚeorÚchecksetÚ
checkunsetÚignoreZ
defaultsetZdefaultunsetZinbothr‚  r   r   r   Ú
checkFlags„
  s&    




ÿzSendrecvmsgBase.checkFlags)Nr   r   r   )rE   rF   rG   r   ÚLOOPBACK_TIMEOUTÚfail_timeoutrA   r>  r?  rA  rD  rB  rH  rL  rû   r   r   rK  rM  rN  rT  rX   r   r   rS   r   r;  D
  s   
r;  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_intorB  ÚassertGreaterEqualÚassertLessEqualr³  )r@   rÕ   rc   rQ   ÚbufrC  r   r   r   rD  ¾
  s    
zRecvmsgIntoMixin.doRecvmsgN)rE   rF   rG   rD  r   r   r   r   rW  »
  s   rW  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgDgramFlagsBasec                    s   t ƒ jtjB S r2   )rK   rN  r   Ú	MSG_TRUNCr?   rS   r   r   rN  Ê
  s    z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rE   rF   rG   ÚpropertyrN  rX   r   r   rS   r   r\  Ç
  s   r\  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgSCTPFlagsBasec                    s   t ƒ jtjB S r2   )rK   rM  r   ÚMSG_EORr?   rS   r   r   rM  Ò
  s    z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rE   rF   rG   r^  rM  rX   r   r   rS   r   r_  Ï
  s   r_  c                   @   s8   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zd	S )
ÚSendrecvmsgConnectionlessBasec                 C   s   | j S r2   )r;   r?   r   r   r   Ú	serv_sockÜ
  s    z'SendrecvmsgConnectionlessBase.serv_sockc                 C   s   | j S r2   )r“   r?   r   r   r   r=  à
  s    z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS rš   )rÅ   r?   r   r   r   r?  ä
  s    z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r2   )r=  r,  rÅ   r³   r   r   r   r>  è
  s    z*SendrecvmsgConnectionlessBase.sendToServerN)rE   rF   rG   r^  rb  r=  r?  r>  r   r   r   r   ra  ×
  s   


ra  c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚSendrecvmsgConnectedBasec                 C   s   | j S r2   )r»   r?   r   r   r   rb  ò
  s    z"SendrecvmsgConnectedBase.serv_sockc                 C   s   | j S r2   )r¾   r?   r   r   r   r=  ö
  s    z!SendrecvmsgConnectedBase.cli_sockc                 C   s   d S r2   r   rG  r   r   r   rH  ú
  s    z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rE   rF   rG   r^  rb  r=  rH  r   r   r   r   rc  ì
  s
   

rc  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    s   t ƒ  ¡  | j | j¡ d S r2   )rK   rA   rb  rÊ  rV  r?   rS   r   r   rA     s    
z"SendrecvmsgServerTimeoutBase.setUp)rE   rF   rG   rA   rX   r   r   rS   r   rd     s   rd  c                   @   s¼   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zeedƒdd„ ƒZejd d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*S )+ÚSendmsgTestsc                 C   s   |   | j ttƒ¡t¡ d S r2   ©r±   rb  r°   rè  r²   r?   r   r   r   ÚtestSendmsg  s    zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r2   ©r±   rA  r²   rè  r?   r   r   r   Ú_testSendmsg  s    zSendmsgTests._testSendmsgc                 C   s   |   | j ttƒ¡t¡ d S r2   rf  r?   r   r   r   ÚtestSendmsgDataGenerator  s    z%SendmsgTests.testSendmsgDataGeneratorc                 C   s&   |   |  dd„ tfD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r2   r   r  r   r   r   rÿ     rí   z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rh  r?   r   r   r   Ú_testSendmsgDataGenerator  s    ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r2   rf  r?   r   r   r   ÚtestSendmsgAncillaryGenerator  s    z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |   |  tgdd„ dD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r2   r   r  r   r   r   rÿ      rí   z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   rh  r?   r   r   r   Ú_testSendmsgAncillaryGenerator  s    ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r2   rf  r?   r   r   r   ÚtestSendmsgArray#  s    zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)r±   rA  Úarrayr²   rè  r?   r   r   r   Ú_testSendmsgArray'  s    ÿzSendmsgTests._testSendmsgArrayc                 C   s   |   | j ttƒ¡t¡ d S r2   rf  r?   r   r   r   ÚtestSendmsgGather+  s    zSendmsgTests.testSendmsgGatherc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nr  rh  r?   r   r   r   Ú_testSendmsgGather/  s    zSendmsgTests._testSendmsgGatherc                 C   s   |   | j d¡d¡ d S ©Nr‡  ó   done©r±   rb  r°   r?   r   r   r   ÚtestSendmsgBadArgs2  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   rv  )r$  r‰   r=  ré  rA  Úobjectr²   r>  r?   r   r   r   Ú_testSendmsgBadArgs6  s.    
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   s   |   | j d¡d¡ d S ru  rw  r?   r   r   r   ÚtestSendmsgBadCmsgH  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|  r7  rv  ©r$  r‰   rA  r²   ry  r>  r?   r   r   r   Ú_testSendmsgBadCmsgL  s&    

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   s   |   | j d¡d¡ d S ru  rw  r?   r   r   r   ÚtestSendmsgBadMultiCmsg[  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í   rv  r}  r?   r   r   r   Ú_testSendmsgBadMultiCmsga  s    

ÿ
ÿz%SendmsgTests._testSendmsgBadMultiCmsgc                 C   s   |   | j d¡d¡ d S ru  rw  r?   r   r   r   ÚtestSendmsgExcessCmsgRejecti  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  rv  )
r   r   r$  r   rA  r²   ÚassertIsNoner-  rc  r>  ©r@   r.  r   r   r   Ú_testSendmsgExcessCmsgRejectn  s
    
0z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   s   d S r2   r   r?   r   r   r   ÚtestSendmsgAfterClosev  s    z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r2   )r=  r   r$  r   rA  r²   r?   r   r   r   Ú_testSendmsgAfterClosez  s    
z#SendmsgTests._testSendmsgAfterCloseN)rE   rF   rG   rg  ri  rj  rk  rl  rm  rn  rq  rr  rt  rx  rz  r{  r~  r  r   r€  rñ   r‚  rƒ  r†  r‡  rˆ  r   r   r   r   re    s,   

re  c                   @   sR   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zeej	d	vd
ƒdd„ ƒZ
e
jdd„ ƒZdS )ÚSendmsgStreamTestsc                 C   s   |   | j ttƒ¡t¡ d S r2   rf  r?   r   r   r   ÚtestSendmsgExplicitNoneAddrƒ  s    z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S rš   rh  r?   r   r   r   Ú_testSendmsgExplicitNoneAddr‡  s    z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nr“  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r5   ©r±   rb  r°   r  r<  rƒ   rV  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)r=  rÊ  rA  r   r5   r   rc  ÚENOMEMr   r<  rm   ©r@   rÛ  r   r   r   Ú_testSendmsgTimeout  s    z&SendmsgStreamTests._testSendmsgTimeout>   r  z<MSG_DONTWAIT not known to work on this platform when sendingc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S rŒ  r  r?   r   r   r   ÚtestSendmsgDontWait¦  s    z&SendmsgStreamTests.testSendmsgDontWaitc                 C   sz   zh|   t¡$}|  dgg tj¡ qW d   ƒ n1 s60    Y  |  |jjtjtj	tj
f¡ W | j ¡  n| j ¡  0 d S ©Nr  )r$  r   rA  r   ÚMSG_DONTWAITr  r-  rc  ÚEAGAINÚEWOULDBLOCKr“  r<  rm   r…  r   r   r   Ú_testSendmsgDontWait®  s    2
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rE   rF   rG   rŠ  r‹  r  r•  rø   rr  r•  r–  rñ   r›  r   r   r   r   r‰    s   
ÿ
r‰  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSendmsgConnectionlessTestsc                 C   s   d S r2   r   r?   r   r   r   ÚtestSendmsgNoDestAddrÁ  s    z0SendmsgConnectionlessTests.testSendmsgNoDestAddrc                 C   s2   |   t| jjtg¡ |   t| jjtgg dd ¡ d S rš   )r$  r   r=  ré  r²   r?   r   r   r   Ú_testSendmsgNoDestAddrÆ  s    ÿ
ÿz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rE   rF   rG   r  rž  r   r   r   r   rœ  ¼  s   rœ  c                   @   sÎ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zeed!ƒd"d#„ ƒZejd$d%„ ƒZeejd&ƒd'd(„ ƒZejd)d*„ ƒZd+S ),ÚRecvmsgGenericTestsc                 C   sR   |   | jttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S ©NT©rP  ©rD  rb  rè  r²   r±   rH  r   rT  ©r@   r´   rç  rä  r½   r   r   r   ÚtestRecvmsgÑ  s
    zRecvmsgGenericTests.testRecvmsgc                 C   s   |   t¡ d S r2   ©r>  r²   r?   r   r   r   Ú_testRecvmsgÙ  s    z RecvmsgGenericTests._testRecvmsgc                 C   sV   |   | jttƒdd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr   Tr¡  r¢  r£  r   r   r   ÚtestRecvmsgExplicitDefaultsÜ  s    
ÿz/RecvmsgGenericTests.testRecvmsgExplicitDefaultsc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgExplicitDefaultså  s    z0RecvmsgGenericTests._testRecvmsgExplicitDefaultsc                 C   sV   |   | jttƒd ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr7  Tr¡  r¢  r£  r   r   r   ÚtestRecvmsgShorterè  s    
ÿz&RecvmsgGenericTests.testRecvmsgShorterc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgShorterñ  s    z'RecvmsgGenericTests._testRecvmsgShorterc                 C   s^   |   | jttƒd ¡\}}}}|  |td d… ¡ |  || j¡ |  |g ¡ | j|dd d S )Nr  éýÿÿÿFr¡  r¢  r£  r   r   r   ÚtestRecvmsgTruncô  s    
ÿz$RecvmsgGenericTests.testRecvmsgTruncc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgTruncý  s    z%RecvmsgGenericTests._testRecvmsgTruncc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nro   Tr¡  r¢  r£  r   r   r   ÚtestRecvmsgShortAncillaryBuf   s    ÿz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgShortAncillaryBuf	  s    z1RecvmsgGenericTests._testRecvmsgShortAncillaryBufc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Né (  Tr¡  r¢  r£  r   r   r   ÚtestRecvmsgLongAncillaryBuf  s    ÿz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgLongAncillaryBuf  s    z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j  ¡  |  t| j| j d¡ d S r®   )rb  r   r$  r   rD  r?   r   r   r   ÚtestRecvmsgAfterClose  s    
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   s   d S r2   r   r?   r   r   r   Ú_testRecvmsgAfterClose  s    z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sF   z4| j  d¡ |  tj| j| j ttƒ¡ W | j 	¡  n| j 	¡  0 d S )Nr‘  )
rb  rÊ  r$  r   r5   rD  rè  r²   r<  rm   r?   r   r   r   ÚtestRecvmsgTimeout   s    ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©NrŽ  )r  r<  rƒ   rV  r?   r   r   r   Ú_testRecvmsgTimeout)  s    z'RecvmsgGenericTests._testRecvmsgTimeoutrã  c                 C   s  |   | jttƒd dtj¡\}}}}|  |td d… ¡ |  || j¡ |  |g ¡ | j	|dt
tddƒd |   | jttƒdtj¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd |   | jttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S )	Nr  r   r«  Fr]  ©rP  rS  Tr¡  )rD  rb  rè  r²   r   rã  r±   rH  r   rT  r   r£  r   r   r   ÚtestRecvmsgPeek,  s.    þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgPeekO  s    z$RecvmsgGenericTests._testRecvmsgPeekré  c                 C   s`   | j  | j¡ |  | j ttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S r   )
rb  rÊ  rV  rD  rè  r²   r±   rH  r   rT  r£  r   r   r   ÚtestRecvmsgFromSendmsgS  s    z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S rs  rh  r?   r   r   r   Ú_testRecvmsgFromSendmsg^  s    z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rE   rF   rG   r¤  r¦  r§  r¨  r©  rª  r¬  r­  r®  r¯  r±  r²  r³  r´  rµ  r·  r  r   r¹  rñ   rº  r»  r¼  r   r   r   r   rŸ  Í  s0   						
"



rŸ  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚRecvmsgGenericStreamTestsc                 C   sN   |   | jd¡\}}}}|  |d¡ |  || j¡ |  |g ¡ | j|d d d S )Nr¯   rí   r¡  )rD  rb  r±   rH  r   rT  r£  r   r   r   ÚtestRecvmsgEOFg  s
    z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   s   | j  ¡  d S r2   )r=  r   r?   r   r   r   Ú_testRecvmsgEOFo  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)rD  rb  rè  r²   rH  r   r±   rT  )r@   r  rç  rä  r½   r  r´   r   r   r   ÚtestRecvmsgOverflowr  s    
ÿz-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgOverflow‚  s    z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rE   rF   rG   r¾  r¿  rÀ  rÁ  r   r   r   r   r½  c  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 )Nr…  r   r›  Tr¡  )r$  r‰   rb  ræ  r  rè  r²   r¾  ry  r±   rH  r   rT  r£  r   r   r   ÚtestRecvmsgBadArgs‰  s0    ÿ
ÿÿÿÿÿzRecvmsgTests.testRecvmsgBadArgsc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgBadArgsŸ  s    z RecvmsgTests._testRecvmsgBadArgsN)rE   rF   rG   rÃ  rÄ  r   r   r   r   rÂ  †  s   rÂ  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚRecvmsgIntoTestsc                 C   sL  t ttƒƒ}|  t| jj¡ |  t| jjttƒdd¡ |  t| jj|dd¡ |  t| jjtƒ gdd¡ |  t| jjdgdd¡ |  t| jj|tƒ gdd¡ |  t| jj|gdd¡ |  t| jj|gtƒ d¡ |  t| jj|gdtƒ ¡ | j |gdd¡\}}}}|  	|ttƒ¡ |  	|t tƒ¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nr   s   I'm not writabler…  Tr¡  )r¾  rè  r²   r$  r‰   rb  rX  ry  r  r±   rH  r   rT  ©r@   r[  Únbytesrç  rä  r½   r   r   r   ÚtestRecvmsgIntoBadArgs¦  s@    
ÿÿ
ÿÿÿÿ
ÿ
ÿz'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgIntoBadArgsÂ  s    z(RecvmsgIntoTests._testRecvmsgIntoBadArgsc                 C   sx   t ttƒƒ}| j dd„ |fD ƒ¡\}}}}|  |ttƒ¡ |  |t tƒ¡ |  || j¡ |  |g ¡ | j|dd d S )Nc                 s   s   | ]
}|V  qd S r2   r   r  r   r   r   rÿ   É  rí   z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr¡  )	r¾  rè  r²   rb  rX  r±   rH  r   rT  rÆ  r   r   r   ÚtestRecvmsgIntoGeneratorÅ  s    ÿz)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgIntoGeneratorÐ  s    z*RecvmsgIntoTests._testRecvmsgIntoGeneratorc                 C   sx   t   ddgttƒ ¡}| j |g¡\}}}}|  |ttƒ¡ |  | ¡ t¡ |  || j¡ |  |g ¡ | j	|dd d S )Nro  r   Tr¡  )
rp  rè  r²   rb  rX  r±   ÚtobytesrH  r   rT  rÆ  r   r   r   ÚtestRecvmsgIntoArrayÓ  s    z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   s   |   t¡ d S r2   r¥  r?   r   r   r   Ú_testRecvmsgIntoArrayÝ  s    z&RecvmsgIntoTests._testRecvmsgIntoArrayc                 C   sª   t dƒ}t dƒ}t dƒ}| j |t|ƒdd… |g¡\}}}}|  |tdƒ¡ |  |t dƒ¡ |  |t dƒ¡ |  |t d	ƒ¡ |  || j¡ |  |g ¡ | j|d
d d S )Ns   ----s
   0123456789s   --------------rŸ   é	   ó   Mary had a little lambs   Marys
   01 had a 9s   little lamb---Tr¡  )	r¾  rb  rX  Ú
memoryviewr±   rè  rH  r   rT  )r@   Úb1Úb2Zb3rÇ  rç  rä  r½   r   r   r   ÚtestRecvmsgIntoScatterà  s    ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   s   |   d¡ d S )NrÐ  )r>  r?   r   r   r   Ú_testRecvmsgIntoScatterï  s    z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rE   rF   rG   rÈ  rÉ  rÊ  rË  rÍ  rÎ  rÔ  rÕ  r   r   r   r   rÅ  £  s   
rÅ  c                   @   s`   e Zd ZzddlZW n ey*   dZY n0 edejƒZee	dƒdd„ ƒZ
ee	dƒdd	„ ƒZdS )
ÚCmsgMacroTestsr   NiÿÿÿÚCMSG_LENc                 C   s¾   | j t d¡ d }ttdƒƒtt|d |ƒƒ }|  t d¡t d¡jd ¡ |D ]2}t |¡}|  |t d¡ |¡ |  	|| j ¡ qT|  
ttjd¡ |  
ttj|¡ |  
ttjtj¡ d S )Nr   ro   é  r8   rŸ   r…  )Úsocklen_t_limitr   r×  Úlistr"  rh  rp  Úitemsizer±   rZ  r$  r  rr  Úmaxsize)r@   ÚtoobigrI  Únr,   r   r   r   ÚtestCMSG_LEN   s    
zCmsgMacroTests.testCMSG_LENr  c                 C   sä   | j t d¡ d }ttdƒƒtt|d |ƒƒ }t d¡}|  |t d¡jd ¡ |D ]T}t |¡}|  ||¡ |  |t 	|¡¡ |  ||t 	d¡ ¡ |  
|| j ¡ |}qX|  ttjd¡ |  ttj|¡ |  ttjtj¡ d S )Nro   rØ  r   r8   rŸ   r…  )rÙ  r   r  rÚ  r"  rh  rp  rÛ  rY  r×  rZ  r$  r  rr  rÜ  )r@   rÝ  rI  ZlastrÞ  r,   r   r   r   ÚtestCMSG_SPACE  s    

zCmsgMacroTests.testCMSG_SPACE)rE   rF   rG   r‰  r¸  rÙ  ÚminrŠ  r  r   rß  rà  r   r   r   r   rÖ  ó  s   

rÖ  c                   @   sH  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdddd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zeedƒdd„ ƒZejdd„ ƒZdd„ Zdd „ Ze ejd!kd"¡e ed#¡eedƒd$d%„ ƒƒƒZeje ejd!kd"¡e ed#¡d&d'„ ƒƒƒZe ejd!kd"¡e ed#¡eedƒd(d)„ ƒƒƒZeje ejd!kd"¡e ed#¡d*d+„ ƒƒƒZd,d-„ Ze ejd!kd.¡d/d0„ ƒZd1d2„ Z d3d4„ Z!d5d6„ Z"eedƒd7d8„ ƒZ#e#jd9d:„ ƒZ$ded;d<„Z%d=d>„ Z&d?d@„ Z'dAdB„ Z(dCdD„ Z)dEdF„ Z*dGdH„ Z+dIdJ„ Z,dKdL„ Z-dMdN„ Z.dOdP„ Z/dfdQdR„Z0dSdT„ Z1dUdV„ Z2dWdX„ Z3dYdZ„ Z4d[d\„ Z5d]d^„ Z6d_d`„ Z7dadb„ Z8dcS )gÚSCMRightsTesti«ªÿÿc                 C   s\   g }t |ƒD ]J}t ¡ \}}|  tj|¡ |  tj|¡ t |t|ƒ 	¡ ¡ | 
|¡ q|S r2   )r"  rÌ   ÚmkstemprU   rÏ   rÔ   r   Úwriter  ÚencodeÚappend)r@   rÞ  Úfdsr8   rK  rÖ   r   r   r   ÚnewFDs6  s    zSCMRightsTest.newFDsc                 C   sB   t |ƒD ]4\}}t |dtj¡ |  t |d¡t|ƒ ¡ ¡ qd S )Nr   r¯   )Ú	enumeraterÏ   ÚlseekÚSEEK_SETr±   r  r  rå  )r@   rç  rÞ  rK  r   r   r   ÚcheckFDsB  s    zSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r2   )rU   ÚcloseRecvmsgFDsrE  r   r   r   rB  I  s    z#SCMRightsTest.registerRecvmsgResultc                 C   sn   |d D ]`\}}}|t jkr|t jkrt d¡}| |d t|ƒt|ƒ|j  … ¡ |D ]}t |¡ qXqd S )Nro   r8   )	r   r2  Ú
SCM_RIGHTSrp  Ú	frombytesrè  rÛ  rÏ   r   )r@   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datarç  rK  r   r   r   rí  L  s    
ÿ
ÿzSCMRightsTest.closeRecvmsgFDsc                 C   s8   |   |  tgtjtjt d|  |¡¡fg¡ttƒ¡ d S )Nr8   )	r±   rA  r²   r   r2  rî  rp  rè  rè  )r@   rÞ  r   r   r   ÚcreateAndSendFDsX  s    þÿûzSCMRightsTest.createAndSendFDsro   r   c                 C   sä   |\}}}}|   |t¡ |  || j¡ | j|dtj|d |  |t¡ |  	t
|ƒ|¡ t d¡}	|D ]`}
|  |
t¡ |
\}}}|   |tj¡ |   |tj¡ |  |t¡ |   t
|ƒt d¡ |	 |¡ qd|   t
|	ƒ|¡ |  |	¡ d S )NT©rP  rR  rS  r8   r   )r±   r²   rH  r   rT  r   rI  r  rÚ  rZ  rè  rp  Útupler2  rî  r³  Ú
SIZEOF_INTrï  rì  )r@   ZnumfdsrC  ÚmaxcmsgsÚignoreflagsr´   rç  rä  r½   rç  Úitemrð  rñ  rò  r   r   r   ÚcheckRecvmsgFDsb  s&    ÿ

zSCMRightsTest.checkRecvmsgFDsc                 C   s    |   d|  | jttƒd¡¡ d S )Nro   r°  ©rú  rD  rb  rè  r²   r?   r   r   r   ÚtestFDPassSimple}  s    ÿzSCMRightsTest.testFDPassSimplec                 C   s<   |   |  tgtjtjt d|  d¡¡ ¡ fg¡t	tƒ¡ d S )Nr8   ro   )
r±   rA  r²   r   r2  rî  rp  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ú  rD  rb  rè  r²   r   r  rö  r?   r   r   r   ÚtestFDPassCMSG_SPACE“  s
    ÿÿz"SCMRightsTest.testFDPassCMSG_SPACEc                 C   s   |   d¡ d S rÿ  r   r?   r   r   r   Ú_testFDPassCMSG_SPACEš  s    z#SCMRightsTest._testFDPassCMSG_SPACEc              
   C   s0   | j d|  | jttƒt dt ¡¡tjd d S )Nro   r+  ©rø  )	rú  rD  rb  rè  r²   r   r×  rö  rI  r?   r   r   r   ÚtestFDPassCMSG_LENž  s    ÿúz SCMRightsTest.testFDPassCMSG_LENc                 C   s   |   d¡ d S rÛ   r   r?   r   r   r   Ú_testFDPassCMSG_LEN¨  s    z!SCMRightsTest._testFDPassCMSG_LENr<  zskipping, see issue #12958zskipping, see issue #22397c                 C   s$   | j d|  | jttƒd¡dd d S )NrŸ   r°  )r÷  rû  r?   r   r   r   ÚtestFDPassSeparate«  s    þz SCMRightsTest.testFDPassSeparatec                 C   sX   |   d¡\}}|  |  tgtjtjt d|g¡ftjtjt d|g¡fg¡ttƒ¡ d S ©NrŸ   r8   ©	rè  r±   rA  r²   r   r2  rî  rp  rè  ©r@   Zfd0Úfd1r   r   r   Ú_testFDPassSeparateµ  s    þþýùz!SCMRightsTest._testFDPassSeparatec                 C   s@   d}| j ||  | jttƒt t¡t t| ¡ ¡dtj	d d S )NrŸ   )r÷  rø  )
rú  rD  rb  rè  r²   r   r  rö  r×  rI  )r@   Znum_fdsr   r   r   ÚtestFDPassSeparateMinSpaceÃ  s    ÿÿüz(SCMRightsTest.testFDPassSeparateMinSpacec                 C   sX   |   d¡\}}|  |  tgtjtjt d|g¡ftjtjt d|g¡fg¡ttƒ¡ d S r  r	  r
  r   r   r   Ú_testFDPassSeparateMinSpaceÐ  s    þþýùz)SCMRightsTest._testFDPassSeparateMinSpacec              
   C   sf   z|   |g|¡}W n> tyP } z&|  |jt¡ |   |g¡}W Y d }~n
d }~0 0 |  |t|ƒ¡ d S r2   )rA  r   r  rc  rg  r±   rè  )r@   r´   rç  rÇ  rŠ   r   r   r   ÚsendAncillaryIfPossibleÞ  s    "z%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725c                 C   s&   | j d|  | jttƒd¡tjd d S )Nr   r°  r  )rú  rD  rb  rè  r²   r   rI  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   r2  rî  r?   r   r   r   Ú_testFDPassEmptyñ  s    
þzSCMRightsTest._testFDPassEmptyc                 C   s˜   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ |D ]6\}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ q\d S )Nr°  Tr¸  ro   )rD  rb  rè  r²   r±   rH  r   rT  r   rI  rZ  r2  rî  Ú
assertLessrö  ©r@   r´   rç  rä  r½   rð  rñ  rò  r   r   r   ÚtestFDPassPartialIntö  s    ÿz"SCMRightsTest.testFDPassPartialIntc              	   C   s4   |   ttjtjt d| jg¡ ¡ d d… fg¡ d S )Nr8   r…  )r  r²   r   r2  rî  rp  ÚbadfdrÌ  r?   r   r   r   Ú_testFDPassPartialInt  s    þþz#SCMRightsTest._testFDPassPartialIntc           	      C   sÐ   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ t d¡}|D ]J\}}}|  |tj¡ |  |tj¡ | |d t|ƒt|ƒ|j  … ¡ qf|  
t|ƒd¡ |  |¡ d S )Nr°  Tr¸  rŸ   r8   )rD  rb  rè  r²   r±   rH  r   rT  r   rI  rZ  rp  r2  rî  rï  rÛ  rì  )	r@   r´   rç  rä  r½   rç  rð  rñ  rò  r   r   r   ÚtestFDPassPartialIntInMiddle
  s     ÿ
ÿ
z*SCMRightsTest.testFDPassPartialIntInMiddlec              
   C   sZ   |   d¡\}}|  ttjtjt d|| jg¡ ¡ d d… ftjtjt d|g¡fg¡ d S )NrŸ   r8   r…  )	rè  r  r²   r   r2  rî  rp  r  rÌ  r
  r   r   r   Ú_testFDPassPartialIntInMiddle  s    þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©rP  rQ  rS  )r±   r²   rH  r   rT  r   rI  )r@   rC  rø  r´   rç  rä  r½   r   r   r   ÚcheckTruncatedHeader)  s    ÿz"SCMRightsTest.checkTruncatedHeaderc                 C   s"   | j |  | jttƒ¡tjd d S ©Nr  ©r  rD  rb  rè  r²   r   rI  r?   r   r   r   ÚtestCmsgTruncNoBufSize3  s    üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   s   |   d¡ d S rÛ   r   r?   r   r   r   Ú_testCmsgTruncNoBufSize<  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   Ú_testCmsgTrunc0D  s    zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S rÛ   )r  rD  rb  rè  r²   r?   r   r   r   ÚtestCmsgTrunc1J  s    zSCMRightsTest.testCmsgTrunc1c                 C   s   |   d¡ d S rÛ   r   r?   r   r   r   Ú_testCmsgTrunc1M  s    zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S r  )r  rD  rb  rè  r²   rö  r?   r   r   r   ÚtestCmsgTrunc2IntP  s    ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   s   |   d¡ d S rÛ   r   r?   r   r   r   Ú_testCmsgTrunc2IntW  s    z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S rû  )r  rD  rb  rè  r²   r   r×  r?   r   r   r   ÚtestCmsgTruncLen0Minus1Z  s    ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   s   |   d¡ d S rÛ   r   r?   r   r   r   Ú_testCmsgTruncLen0Minus1^  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©rP  rQ  r   ro   r8   )rD  rb  rè  r²   r±   rH  r   rT  r   rI  r2  rî  rY  rZ  rp  rï  rÛ  rì  )r@   ÚancbufÚmaxdataZmindatar´   rç  rä  r½   rð  rñ  rò  rç  r   r   r   ÚcheckTruncatedArrayd  s&    ÿ
ÿz!SCMRightsTest.checkTruncatedArrayc                 C   s   | j t d¡dd d S )Nr   ©r)  r*  ©r+  r   r×  r?   r   r   r   ÚtestCmsgTruncLen0|  s    zSCMRightsTest.testCmsgTruncLen0c                 C   s   |   d¡ d S rÛ   r   r?   r   r   r   Ú_testCmsgTruncLen0  s    z SCMRightsTest._testCmsgTruncLen0c                 C   s   | j t d¡d dd d S )Nr   ro   r,  r-  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 )Nr,  ©r+  r   r×  rö  r?   r   r   r   ÚtestCmsgTruncLen1ˆ  s    ÿzSCMRightsTest.testCmsgTruncLen1c                 C   s   |   d¡ d S r  r   r?   r   r   r   Ú_testCmsgTruncLen1Œ  s    z SCMRightsTest._testCmsgTruncLen1c                 C   s(   | j t dt ¡d dt d d d S )NrŸ   ro   r,  r2  r?   r   r   r   ÚtestCmsgTruncLen2Minus1  s    
ÿz%SCMRightsTest.testCmsgTruncLen2Minus1c                 C   s   |   d¡ d S r  r   r?   r   r   r   Ú_testCmsgTruncLen2Minus1“  s    z&SCMRightsTest._testCmsgTruncLen2Minus1N)ro   r   )r   )r   )9rE   rF   rG   r  rè  rì  rB  rí  ró  rú  rü  rý  rþ  r  r  r   r  rñ   r  r  r  r¢   rj  rr  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  r3  r4  r5  r6  r   r   r   r   râ  .  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Ÿ   r…  c                 C   s4   i }|D ]&\}}}|   ||f|¡ ||||f< q|S r2   )r  )r@   rç  Údrð  rñ  rò  r   r   r   ÚancillaryMapping¨  s
    z%RFC3542AncillaryTest.ancillaryMappingr±  r   c                 C   s  | j  tjtjd¡ | j ¡  |  | j tt	ƒ|¡\}}}}|  
|t	¡ |  || j¡ | j|dtj|d |  
t|ƒd¡ |  |d t¡ |d \}}	}
|  
|tj¡ |  
|	tj¡ |  |
t¡ |  
t|
ƒt¡ t d¡}| |
¡ |  |d d¡ |  |d |¡ d S )Nro   Trô  r   r8   )rb  rÇ  r   r7  r>  r<  rm   rD  rè  r²   r±   rH  r   rT  rI  r  rõ  rL  r³  rö  rp  rï  rY  rZ  )r@   Ú
ancbufsizeÚmaxhoprø  r´   rç  rä  r½   rð  rñ  rò  r¦  r   r   r   ÚcheckHopLimit²  s.    
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitr>  rL  c                 C   s   | j dd d S ©Nr°  ©r:  )r<  r?   r   r   r   ÚtestRecvHopLimitÎ  s    z%RFC3542AncillaryTest.testRecvHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  ©r  r<  rƒ   rV  r>  r²   r?   r   r   r   Ú_testRecvHopLimitÓ  s    z&RFC3542AncillaryTest._testRecvHopLimitr  c                 C   s   | j t t¡d d S )Nr>  )r<  r   r  rö  r?   r   r   r   ÚtestRecvHopLimitCMSG_SPACEÛ  s    z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testRecvHopLimitCMSG_SPACEà  s    z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEré  c                 C   s   | j d| jd d S ©Nr°  )r:  r;  )r<  Ú	hop_limitr?   r   r   r   ÚtestSetHopLimitê  s    z$RFC3542AncillaryTest.testSetHopLimitc                 C   sL   |   | jj| jd¡ |  |  tgtjtj	t
 
d| jg¡fg¡ttƒ¡ d S ©NrŽ  r8   )r  r<  rƒ   rV  r±   rA  r²   r   r7  rL  rp  rE  rè  r?   r   r   r   Ú_testSetHopLimitñ  s    ÿÿüz%RFC3542AncillaryTest._testSetHopLimitc                 C   sB  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒ|¡\}}}}|  |t
¡ |  || j¡ | j|dtj|d |  t	|ƒd¡ |  |¡}|tjtjf }	|  t	|	ƒt¡ t d¡}
|
 |	¡ |  |
d d¡ |  |
d d¡ |tjtjf }|  t	|ƒt¡ t d¡}
|
 |¡ |  |
d d¡ |  |
d |¡ d S )Nro   Trô  rŸ   r8   r   r±  )rb  rÇ  r   r7  r>  rI  r<  rm   rD  rè  r²   r±   rH  r   rT  rI  r9  rH  rö  rp  rï  rY  rZ  rL  )r@   r:  r;  rø  r´   rç  rä  r½   ZancmapZtcdatar¦  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimitú  s:    
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrI  rH  c                 C   s   | j dd d S r=  )rI  r?   r   r   r   ÚtestRecvTrafficClassAndHopLimit  s    z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú _testRecvTrafficClassAndHopLimit$  s    z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©NrŸ   r>  )rI  r   r  rö  r?   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACE)  s    ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACE1  s    z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s   | j d| jd d S rD  ©rI  rE  r?   r   r   r   ÚtestSetTrafficClassAndHopLimit6  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 rG  )r  r<  rƒ   rV  r±   rA  r²   r   r7  rH  rp  Útraffic_classrL  rE  rè  r?   r   r   r   Ú_testSetTrafficClassAndHopLimit?  s    ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   s   | j d| jd d S rD  rO  r?   r   r   r   ÚtestOddCmsgSizeJ  s    ÿz$RFC3542AncillaryTest.testOddCmsgSizec                 C   sæ   |   | jj| jd¡ zJ|  tgtjtjt	 	d| j
g¡ ¡ d ftjtjt	 	d| jg¡fg¡}W n€ tyà } zh|  |jt¡ |  tgtjtjt	 	d| j
g¡ftjtjt	 	d| jg¡fg¡}|  |ttƒ¡ W Y d }~n
d }~0 0 d S )NrŽ  r8   r˜  )r  r<  rƒ   rV  rA  r²   r   r7  rH  rp  rQ  rÌ  rL  rE  r   r  rc  rg  r±   rè  )r@   rÇ  rŠ   r   r   r   Ú_testOddCmsgSizeT  s2    ÿÿþþÿÿþþz%RFC3542AncillaryTest._testOddCmsgSizec                 C   s   | j  tjtjd¡ | j ¡  |d u r*dn|f}| j| j tt	ƒg|¢R Ž \}}}}|  
|t	¡ |  || j¡ |  
|g ¡ | j|dtj|d d S )Nro   r   Tr  )rb  rÇ  r   r7  r>  r<  rm   rD  rè  r²   r±   rH  r   rT  rI  )r@   r:  rø  rQ   r´   rç  rä  r½   r   r   r   ÚcheckHopLimitTruncatedHeaderj  s     
ÿ
ÿÿÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©r:  rø  ©rU  r   rI  r?   r   r   r   r  ~  s    ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   r  ‰  s    z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   rV  rW  r?   r   r   r   ÚtestSingleCmsgTrunc0Ž  s    ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSingleCmsgTrunc0•  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   s   | j dd d S )Nro   r>  )rU  r?   r   r   r   ÚtestSingleCmsgTrunc1  s    z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSingleCmsgTrunc1¡  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rL  )rU  rö  r?   r   r   r   ÚtestSingleCmsgTrunc2Int¦  s    z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSingleCmsgTrunc2Intª  s    z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   ro   r>  )rU  r   r×  r?   r   r   r   ÚtestSingleCmsgTruncLen0Minus1¯  s    z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSingleCmsgTruncLen0Minus1³  s    z3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1c                 C   sÂ   | j  tjtjd¡ | j ¡  |  | j tt	ƒt 
t¡d ¡\}}}}|  |t	¡ |  || j¡ | j|dtjd |  t|ƒd¡ |r¾|d \}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ d S )Nro   Tr(  r   )rb  rÇ  r   r7  r>  r<  rm   rD  rè  r²   r×  rö  r±   rH  r   rT  rI  rZ  rL  r  r  r   r   r   ÚtestSingleCmsgTruncInData¸  s     
ÿ
ÿz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSingleCmsgTruncInDataÎ  s    z/RFC3542AncillaryTest._testSingleCmsgTruncInDatac                 C   s  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒ|¡\}}}}|  |t
¡ |  || j¡ | j|dtj|d |  t	|ƒd¡ |d \}}}	|  |tj¡ |  |tjtjh¡ |  t	|	ƒt¡ t d¡}
|
 |	¡ |  |
d d¡ |  |
d d¡ d S )Nro   Tr  r   r8   r±  )rb  rÇ  r   r7  r>  rI  r<  rm   rD  rè  r²   r±   rH  r   rT  rI  r  rH  rL  rö  rp  rï  rY  rZ  )r@   r:  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  )rb  r   r  rö  rI  r?   r   r   r   ÚtestSecondCmsgTrunc0ó  s    ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSecondCmsgTrunc0ù  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S rÛ   ©rb  r   r  rö  r?   r   r   r   ÚtestSecondCmsgTrunc1þ  s    z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSecondCmsgTrunc1  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S r  re  r?   r   r   r   ÚtestSecondCmsgTrunc2Int  s    ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSecondCmsgTrunc2Int  s    z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S rû  )rb  r   r  rö  r×  r?   r   r   r   ÚtestSecondCmsgTruncLen0Minus1  s
    ÿÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¶  r@  r?   r   r   r   Ú_testSecondCmsgTruncLen0Minus1  s    z3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c           
      C   sT  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒt t¡t t¡ d ¡\}}}}|  |t
¡ |  || j¡ | j|dtjd tjtjh}| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ t d¡}	|	 |¡ |  |	d d¡ |  |	d d¡ |rD| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ |  |g ¡ d S )Nro   Tr(  r   r8   r±  )rb  rÇ  r   r7  r>  rI  r<  rm   rD  rè  r²   r  rö  r×  r±   rH  r   rT  rI  rH  rL  ÚpopÚremoverp  rï  rY  rZ  r  )
r@   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¶  r@  r?   r   r   r   Ú_testSecomdCmsgTruncInDataC  s    z/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r±  r   )r±  r   )r   )r   )1rE   rF   rG   rE  rQ  r9  r<  r  r   r?  rñ   rA  rB  rC  rF  rH  rI  rJ  rK  rM  rN  rP  rR  rS  rT  rU  r  r  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  rf  rg  rh  ri  rj  rk  rn  ro  r   r   r   r   r7  —  sÌ   

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


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


















 
ÿ


ÿ


ÿ


ÿ


ÿ
#r7  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rE   rF   rG   r   r   r   r   rp  K  s   rp  ré  c                   @   s   e Zd ZdS )ÚSendmsgUDPTestNrq  r   r   r   r   rr  P  s   rr  ræ  c                   @   s   e Zd ZdS )ÚRecvmsgUDPTestNrq  r   r   r   r   rs  T  s   rs  rX  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPTestNrq  r   r   r   r   rt  X  s   rt  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDP6TestBasec                 C   s    |   |d d… |d d… ¡ d S r5  rF  rG  r   r   r   rH  a  s    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rE   rF   rG   rH  r   r   r   r   ru  ]  s   ru  r-  rç   r    c                   @   s   e Zd ZdS )ÚSendmsgUDP6TestNrq  r   r   r   r   rw  f  s   rw  c                   @   s   e Zd ZdS )ÚRecvmsgUDP6TestNrq  r   r   r   r   rx  l  s   rx  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDP6TestNrq  r   r   r   r   ry  r  s   ry  r7  c                   @   s   e Zd ZdS )ÚRecvmsgRFC3542AncillaryUDP6TestNrq  r   r   r   r   rz  x  s   rz  c                   @   s   e Zd ZdS )Ú#RecvmsgIntoRFC3542AncillaryUDP6TestNrq  r   r   r   r   r{  €  s   r{  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPLITETestBaseNrq  r   r   r   r   r|  Š  s   r|  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITETestNrq  r   r   r   r   r}  ‘  s   r}  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITETestNrq  r   r   r   r   r~  —  s   r~  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITETestNrq  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 r5  rF  rG  r   r   r   rH  ª  s    z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNrv  r   r   r   r   r€  ¤  s   r€  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITE6TestNrq  r   r   r   r   r  ¯  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITE6TestNrq  r   r   r   r   r‚  ·  s   r‚  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITE6TestNrq  r   r   r   r   rƒ  ¿  s   rƒ  c                   @   s   e Zd ZdS )Ú#RecvmsgRFC3542AncillaryUDPLITE6TestNrq  r   r   r   r   r„  Ç  s   r„  c                   @   s   e Zd ZdS )Ú'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNrq  r   r   r   r   r…  Ñ  s   	r…  c                   @   s   e Zd ZdS )ÚSendrecvmsgTCPTestBaseNrq  r   r   r   r   r†  Ý  s   r†  c                   @   s   e Zd ZdS )ÚSendmsgTCPTestNrq  r   r   r   r   r‡  á  s   r‡  c                   @   s   e Zd ZdS )ÚRecvmsgTCPTestNrq  r   r   r   r   rˆ  å  s   rˆ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoTCPTestNrq  r   r   r   r   r‰  ê  s   r‰  c                   @   s   e Zd ZdS )ÚSendrecvmsgSCTPStreamTestBaseNrq  r   r   r   r   rŠ  ð  s   rŠ  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr:   r/   rã   c                   @   s   e Zd ZdS )ÚSendmsgSCTPStreamTestNrq  r   r   r   r   r‹  õ  s   r‹  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚRecvmsgSCTPStreamTestc              
      sT   zt t| ƒ ¡  W n< tyN } z$|jtjkr0‚ |  d¡ W Y d }~n
d }~0 0 d S ©Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rK   rŒ  r¾  r   rc  ÚENOTCONNrb   ©r@   rŠ   rS   r   r   r¾    s    z$RecvmsgSCTPStreamTest.testRecvmsgEOF©rE   rF   rG   r¾  rX   r   r   rS   r   rŒ  û  s   rŒ  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚRecvmsgIntoSCTPStreamTestc              
      sT   zt t| ƒ ¡  W n< tyN } z$|jtjkr0‚ |  d¡ W Y d }~n
d }~0 0 d S r  )rK   r‘  r¾  r   rc  rŽ  rb   r  rS   r   r   r¾    s    z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr  r   r   rS   r   r‘  	  s   r‘  c                   @   s   e Zd ZdS )ÚSendrecvmsgUnixStreamTestBaseNrq  r   r   r   r   r’    s   r’  rØ   c                   @   s   e Zd ZdS )ÚSendmsgUnixStreamTestNrq  r   r   r   r   r“    s   r“  c                   @   s   e Zd ZdS )ÚRecvmsgUnixStreamTestNrq  r   r   r   r   r”  !  s   r”  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUnixStreamTestNrq  r   r   r   r   r•  '  s   r•  r2  rî  c                   @   s   e Zd ZdS )ÚRecvmsgSCMRightsStreamTestNrq  r   r   r   r   r–  -  s   r–  c                   @   s   e Zd ZdS )ÚRecvmsgIntoSCMRightsStreamTestNrq  r   r   r   r   r—  2  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ì   F  rí   z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rK   rA   rþ  rÿ  rU   )r@   Zorig_alrm_handlerrS   r   r   rA   C  s
    
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r2   )rþ  rš  ÚITIMER_REAL©r@   Zsecondsr   r   r   ÚsetAlarmR  s    zInterruptedTimeoutBase.setAlarmrŸ   c                 C   s   t  |¡ d S r2   )rþ  rõ  rœ  r   r   r   r  X  s    )rE   rF   rG   rA   r   rU  r5   r   rþ  Ú
alarm_timer  rX   r   r   rS   r   r˜  >  s   

r˜  Úsiginterruptrõ  rš  z+Don't have signal.alarm or signal.setitimerc                       sl   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	e
j
dƒdd„ ƒZe	e
j
dƒdd„ ƒZ‡  ZS )ÚInterruptedRecvTimeoutTestc                    s   t ƒ  ¡  | j | j¡ d S r2   )rK   rA   r;   rÊ  r5   r?   rS   r   r   rA   e  s    
z InterruptedRecvTimeoutTest.setUpc              	   O   sd   zR|   | j¡ |  t¡}||i |¤Ž W d   ƒ n1 s<0    Y  W |   d¡ n|   d¡ 0 d S rš   )r  rž  r$  r   ©r@   r€  rQ   rR   r.  r   r   r   ÚcheckInterruptedRecvi  s
    .z/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C   s   |   | jjd¡ d S r®   )r¢  r;   r°   r?   r   r   r   ÚtestInterruptedRecvTimeouts  s    z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C   s   |   | jjtdƒ¡ d S r®   )r¢  r;   Ú	recv_intor¾  r?   r   r   r   ÚtestInterruptedRecvIntoTimeoutv  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   s   |   | jjd¡ d S r®   )r¢  r;   r   r?   r   r   r   ÚtestInterruptedRecvfromTimeouty  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.testInterruptedRecvmsgTimeoutrX  c                 C   s   |   | jjtdƒg¡ d S r®   )r¢  r;   rX  r¾  r?   r   r   r   Ú!testInterruptedRecvmsgIntoTimeoutƒ  s    z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rE   rF   rG   rA   r¢  r£  r¥  r¦  r¨  r  r   r©  rª  rX   r   r   rS   r   r   ^  s   



r   c                       st   e Zd Z‡ fdd„Zdd„ Zdd„ Ze dd¡d	d
„ ƒZe dd¡dd„ ƒZ	e dd¡e
ejdƒdd„ ƒƒZ‡  ZS )ÚInterruptedSendTimeoutTestc                    sp   t ƒ  ¡  |  ¡ | _|  | jj¡ tj| jd}| 	¡  | j
 ¡ \| _}|  | jj¡ | ¡  | j | j¡ d S )N)Útarget)rK   rA   rÂ   r¾   rU   r   rM   ÚThreadÚ	doConnectÚstartr;   r§   r»   r   rÊ  r5   )r@   Z
cli_threadr½   rS   r   r   rA   “  s    

z InterruptedSendTimeoutTest.setUpc                 C   s   | j  | j¡ d S r2   )r¾   r­   rÅ   r?   r   r   r   r®  ¡  s    z$InterruptedSendTimeoutTest.doConnectc              	   O   sf   zT|   t¡,}|  | j¡ ||i |¤Ž qW d   ƒ n1 s>0    Y  W |  d¡ n|  d¡ 0 d S rš   )r$  r   r  rž  r¡  r   r   r   ÚcheckInterruptedSend¤  s
    0z/InterruptedSendTimeoutTest.checkInterruptedSendr›  r«  c                 C   s   |   | jjd¡ d S r—  )r°  r¾   r·   r?   r   r   r   ÚtestInterruptedSendTimeout±  s    z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutc                 C   s   |   | jjd| j¡ d S r—  )r°  r¾   r,  rÅ   r?   r   r   r   ÚtestInterruptedSendtoTimeoutµ  s    ÿz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutré  c                 C   s   |   | jjdg¡ d S r—  )r°  r¾   ré  r?   r   r   r   ÚtestInterruptedSendmsgTimeout¾  s    z8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rE   rF   rG   rA   r®  r°  r   Zrequires_mac_verr±  r²  r  r   r³  rX   r   r   rS   r   r«  Š  s   	





r«  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTCPCloserTestc                 C   sh   | j  ¡ \}}| ¡  | j}t |gg g d¡\}}}|  ||g¡ |  | d¡d¡ | ¡  | ¡  d S )Nç      ð?ro   rí   )r;   r§   r   r“   rï  r±   r°   )r@   r¨   r½   Úsdr  rä  r  r   r   r   Ú	testCloseÆ  s    zTCPCloserTest.testClosec                 C   s    | j  t| jf¡ t d¡ d S ©Nrµ  )r“   r­   r›   r=   r«   r¬   r?   r   r   r   Ú
_testCloseÓ  s    zTCPCloserTest._testCloseN)rE   rF   rG   r·  r¹  r   r   r   r   r´  Ä  s   r´  c                   @   sN   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚBasicSocketPairTestrŽ   c                 C   s   t j| |d d S r   )r¿   rL   r’   r   r   r   rL   Ú  s    zBasicSocketPairTest.__init__c                 C   s\   |   |tj¡ ttdƒr*|  |jtj¡ n|  |jtj¡ |  |jtj¡ |  |j	d¡ d S )NrØ   r   )
r  r   r   r±   r  rØ   r:   rð   r/   r  rÞ   r   r   r   Ú_check_defaultsÝ  s    
z#BasicSocketPairTest._check_defaultsc                 C   s   |   | j¡ d S r2   )r»  r“   r?   r   r   r   Ú_testDefaultsæ  s    z!BasicSocketPairTest._testDefaultsc                 C   s   |   | j¡ d S r2   )r»  r;   r?   r   r   r   ÚtestDefaultsé  s    z BasicSocketPairTest.testDefaultsc                 C   s   | j  d¡}|  |t¡ d S r®   )r;   r°   r±   r²   r³   r   r   r   r  ì  s    zBasicSocketPairTest.testRecvc                 C   s   | j  t¡ d S r2   )r“   r·   r²   r?   r   r   r   r  ð  s    zBasicSocketPairTest._testRecvc                 C   s   | j  t¡ d S r2   )r;   r·   r²   r?   r   r   r   ÚtestSendó  s    zBasicSocketPairTest.testSendc                 C   s   | j  d¡}|  |t¡ d S r®   )r“   r°   r±   r²   r³   r   r   r   Ú	_testSendö  s    zBasicSocketPairTest._testSendN)rŽ   )rE   rF   rG   rL   r»  r¼  r½  r  r  r¾  r¿  r   r   r   r   rº  Ø  s   
	rº  c                   @   s¶   e Zd Zd&dd„Zdd„ Zdd„ Zdd	„ Zejd
d„ ƒZ	e e¡Z
e eedƒd¡e ddd¡dd„ ƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )'ÚNonBlockingTCPTestsrŽ   c                 C   s   t  ¡ | _tj| |d d S r   )rM   rx   Úeventr   rL   r’   r   r   r   rL   ý  s    
zNonBlockingTCPTests.__init__c                 C   sh   |   | j ¡ |¡ |dk}|   | ¡ |¡ td urd|d u }t |tjtj¡}|   t|tj@ ƒ |¡ d S )Nç        )	r±   r;   rœ  Úgetblockingr   ÚF_GETFLrÏ   Ú
O_NONBLOCKÚbool)r@   rÕ   r5   ÚblockingZfd_blockingÚflagr   r   r   Úassert_sock_timeout  s    z'NonBlockingTCPTests.assert_sock_timeoutc                 C   s    | j  d¡ |  | j d ¡ | j  d¡ |  | j d¡ | j  d ¡ |  | j d ¡ | j  d¡ |  | j d¡ | j  d¡ |  | j d¡ | j  d¡ |  | j d¡ d S )NTFrÂ  r   r›  )r;   rB  rÉ  rÊ  r?   r   r   r   ÚtestSetBlocking  s    z#NonBlockingTCPTests.testSetBlockingc                 C   s   d S r2   r   r?   r   r   r   Ú_testSetBlocking&  s    z$NonBlockingTCPTests._testSetBlockingc                 C   sb   dd l }|j|jkr|  d¡ | j d¡ |  | j ¡ d¡ | j |jd ¡ |  | j ¡ ¡ d S )Nr   zneeds UINT_MAX < ULONG_MAXFrÂ  ro   )	r‰  r)  Z	ULONG_MAXrb   r;   rB  r±   rœ  r„  r*  r   r   r   ÚtestSetBlocking_overflow)  s    
z,NonBlockingTCPTests.testSetBlocking_overflowrA  ztest needs socket.SOCK_NONBLOCKrŸ   é   é   c                 C   s4   | j  ¡  t tjtjtjB ¡| _ |  | j d¡ d S rš   )r;   r   r   r:   r/   rA  rÉ  r?   r   r   r   ÚtestInitNonBlocking8  s
    

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   s   d S r2   r   r?   r   r   r   Ú_testInitNonBlockingB  s    z(NonBlockingTCPTests._testInitNonBlockingc                 C   s`   t d ƒD | j d¡ | j ¡ \}}|  |j¡ |  | ¡ ¡ W d   ƒ n1 sR0    Y  d S )Nr›  )r6   r;   rÊ  r§   rU   r   r„  rœ  r¼   r   r   r   ÚtestInheritFlagsBlockingE  s
    
z,NonBlockingTCPTests.testInheritFlagsBlockingc                 C   s   | j  t| jf¡ d S r2   ©r“   r­   r›   r=   r?   r   r   r   Ú_testInheritFlagsBlockingN  s    z-NonBlockingTCPTests._testInheritFlagsBlockingc                 C   sf   d}t |ƒF | j d¡ | j ¡ \}}|  |j¡ |  | ¡ |¡ W d   ƒ n1 sX0    Y  d S )Ng      4@r›  )r6   r;   rÊ  r§   rU   r   r±   rœ  )r@   Zdefault_timeoutr¨   r½   r   r   r   ÚtestInheritFlagsTimeoutQ  s    
z+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   s   | j  t| jf¡ d S r2   rÒ  r?   r   r   r   Ú_testInheritFlagsTimeout\  s    z,NonBlockingTCPTests._testInheritFlagsTimeoutc                 C   sÊ   | j  d¡ t ¡ }|  t¡ | j  ¡ \}}W d   ƒ n1 sB0    Y  t ¡ | }|  |d¡ | j 	¡  t
 
| j gg g tj¡\}}}| j |vrž|  d¡ | j  ¡ \}}|  |j¡ |  | ¡ ¡ d S )NFrµ  z'Error trying to do accept after select.)r;   rB  r«   Ú	monotonicr$  ÚBlockingIOErrorr§   r  rÁ  rm   rï  r   ÚLONG_TIMEOUTr   rU   r   r„  rœ  )r@   Z
start_timer¨   r½   Zdtr  rä  r  r   r   r   Ú
testAccept_  s    ,


zNonBlockingTCPTests.testAcceptc                 C   s    | j  ¡  | j t| jf¡ d S r2   )rÁ  rƒ   r“   r­   r›   r=   r?   r   r   r   Ú_testAcceptu  s    
zNonBlockingTCPTests._testAcceptc                 C   s°   | j  ¡ \}}|  |j¡ | d¡ |  t¡ | tt	ƒ¡}W d   ƒ n1 sR0    Y  | j
 ¡  t |gg g tj¡\}}}||vr’|  d¡ | tt	ƒ¡}|  |t	¡ d S )NFz0Error during select call to non-blocking socket.)r;   r§   rU   r   rB  r$  r×  r°   rè  r²   rÁ  rm   rï  r   rØ  r   r±   )r@   r¨   r½   r´   r  rä  r  r   r   r   r  |  s    
,

zNonBlockingTCPTests.testRecvc                 C   s,   | j  t| jf¡ | j ¡  | j  t¡ d S r2   )r“   r­   r›   r=   rÁ  rƒ   r  r²   r?   r   r   r   r    s    
zNonBlockingTCPTests._testRecvN)rŽ   )rE   rF   rG   rL   rÉ  rÊ  rË  r   ri  rÌ  Z_testSetBlocking_overflowr¢   rh  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.
    r…  r   ÚstrictNr	   r  rŽ   c                 C   s   t j| |d d S r   r  r’   r   r   r   rL   ±  s    z FileObjectClassTestCase.__init__c                 C   sR   dd„ t dƒD ƒ\| _| _| _| _t | ¡ | jj| j	| j
| j| j| jd| _d S )Nc                 S   s   g | ]}t  ¡ ‘qS r   )rM   rx   ©rú   r8   r   r   r   rü   µ  s   z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r+  ©ÚencodingÚerrorsÚnewline)r"  Úevt1Úevt2Úserv_finishedÚcli_finishedrº   rA   r»   r  Ú	read_moderc   rà  rá  râ  Ú	read_filer?   r   r   r   rA   ´  s    ÿ
üzFileObjectClassTestCase.setUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r2   )rå  rm   rè  r   r  Úclosedrº   rC   r?   r   r   r   rC   ¾  s
    

z FileObjectClassTestCase.tearDownc                 C   s0   t  | ¡ | jj| j| j| j| j| jd| _	d S )Nrß  )
rº   r…   r¾   r  Ú
write_moderc   rà  rá  râ  Ú
write_filer?   r   r   r   r…   Å  s    
üz#FileObjectClassTestCase.clientSetUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r2   )ræ  rm   rë  r   r  ré  rº   rˆ   r?   r   r   r   rˆ   Í  s
    

z&FileObjectClassTestCase.clientTearDownc                 C   sx   | j  d¡ | j d¡ |  tj| jjd¡ |  t¡}| j d¡ W d   ƒ n1 sX0    Y  |  dt	|j
ƒ¡ d S )Nro   r  z!cannot read from timed out object)r»   rÊ  rè  r  r$  r   r5   r   r  r  r-  )r@   Úctxr   r   r   ÚtestReadAfterTimeoutÔ  s    *z,FileObjectClassTestCase.testReadAfterTimeoutc                 C   s.   | j  | jdd… ¡ | j  ¡  | j ¡  d S )Nr   r  )rë  rä  Ú	write_msgÚflushrå  rƒ   r?   r   r   r   Ú_testReadAfterTimeoutà  s    
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S rs  )rè  r  rè  Úread_msgr±   )r@   Ú	first_segZ
second_segr´   r   r   r   ÚtestSmallReadå  s    z%FileObjectClassTestCase.testSmallReadc                 C   s   | j  | j¡ | j  ¡  d S r2   ©rë  rä  rî  rï  r?   r   r   r   Ú_testSmallReadì  s    z&FileObjectClassTestCase._testSmallReadc                 C   s   | j  ¡ }|  || j¡ d S r2   )rè  r  r±   rñ  r³   r   r   r   ÚtestFullReadð  s    
z$FileObjectClassTestCase.testFullReadc                 C   s   | j  | j¡ | j  ¡  d S r2   )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±   )r@   r[  Úcharr   r   r   ÚtestUnbufferedReadù  s    
z*FileObjectClassTestCase.testUnbufferedReadc                 C   s   | j  | j¡ | j  ¡  d S r2   rô  r?   r   r   r   Ú_testUnbufferedRead  s    z+FileObjectClassTestCase._testUnbufferedReadc                 C   s   | j  ¡ }|  || j¡ d S r2   )rè  Úreadliner±   rñ  ©r@   Úliner   r   r   ÚtestReadline  s    
z$FileObjectClassTestCase.testReadlinec                 C   s   | j  | j¡ | j  ¡  d S r2   rô  r?   r   r   r   Ú_testReadline  s    z%FileObjectClassTestCase._testReadlinec                 C   s&   | j  ¡  | j ¡ }|  || j¡ d S r2   )r»   r   rè  r  r±   rñ  r³   r   r   r   ÚtestCloseAfterMakefile  s    

z.FileObjectClassTestCase.testCloseAfterMakefilec                 C   s   | j  | j¡ | j  ¡  d S r2   rô  r?   r   r   r   Ú_testCloseAfterMakefile  s    z/FileObjectClassTestCase._testCloseAfterMakefilec                 C   s@   | j  ¡  | j ttƒ¡}t| jtƒr.| 	¡ }|  
|| j¡ d S r2   )rè  r   r»   r°   rè  r²   rï   rñ  r  Údecoder±   r³   r   r   r   ÚtestMakefileAfterMakefileClose  s
    
z6FileObjectClassTestCase.testMakefileAfterMakefileClosec                 C   s   | j  | j¡ | j  ¡  d S r2   rô  r?   r   r   r   Ú_testMakefileAfterMakefileClose"  s    z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C   s   |   | jj ¡ d S r2   )r  rè  ré  r?   r   r   r   ÚtestClosedAttr&  s    z&FileObjectClassTestCase.testClosedAttrc                 C   s   |   | jj ¡ d S r2   )r  rë  ré  r?   r   r   r   Ú_testClosedAttr)  s    z'FileObjectClassTestCase._testClosedAttrc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r2   )r±   rè  r  rç  rû   r»   r  r?   r   r   r   ÚtestAttributes,  s    z&FileObjectClassTestCase.testAttributesc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r2   )r±   rë  r  rê  rû   r¾   r  r?   r   r   r   Ú_testAttributes0  s    z'FileObjectClassTestCase._testAttributesc                 C   s8   | j  ¡  |  t| j j¡ | j ¡  |  t| jj¡ d S r2   )rè  r   r$  r  r  r»   r   rœ   r?   r   r   r   ÚtestRealClose4  s    

z%FileObjectClassTestCase.testRealClosec                 C   s   d S r2   r   r?   r   r   r   Ú_testRealClose:  s    z&FileObjectClassTestCase._testRealClose)rŽ   )&rE   rF   rG   rW   rc   rà  rá  râ  rç  r²   rñ  rê  rî  rL   rA   rC   r…   rˆ   rí  rð  ró  rõ  rö  r÷  rù  rú  rþ  rÿ  r   r  r  r  r  r  r  r  r	  r
  r   r   r   r   rÜ  ›  sD   


rÜ  c                   @   sd   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )Ú!UnbufferedFileObjectClassTestCasea‡  Repeat the tests from FileObjectClassTestCase with bufsize==0.

    In this case (and in this case only), it should be possible to
    create a file object, read a line from it, create another file
    object, read another line from it, without loss of data in the
    first file object's buffer.  Note that http.client relies on this
    when reading multiple requests from the same socket.r   c                 C   sL   | j  ¡ }|  |d| j ¡ | j dd¡| _ | j  ¡ }|  |d| j ¡ d S )Nó   A. r	   r   ó   B. )rè  rû  r±   rî  r»   r  rü  r   r   r   ÚtestUnbufferedReadlineJ  s
    

z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinec                 C   s2   | j  d| j ¡ | j  d| j ¡ | j  ¡  d S )Nr  r  rô  r?   r   r   r   Ú_testUnbufferedReadlineR  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   ÚtestMakefileCloseW  s
    

z3UnbufferedFileObjectClassTestCase.testMakefileClosec                 C   s   | j  | j¡ | j  ¡  d S r2   rô  r?   r   r   r   Ú_testMakefileClose`  s    z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t  | j¡}| j ¡  t  | j¡}|  |d |¡ d S rÛ   )rr  rq  r»   rè  r   r±   )r@   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyd  s    
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   s   d S r2   r   r?   r   r   r   Ú_testMakefileCloseSocketDestroyj  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      à?rx  ro   )r»   rB  r±   rè  Úreadintor¾  r  rè  rñ  rã  rm   rä  rƒ   r«   r¬   )r@   rò  r[  rÞ  r´   r   r   r   ÚtestSmallReadNonBlockingq  s     

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingc                 C   s>   | j  d¡ | j | j¡ | j ¡  | j ¡  | j d¡ d S )Nrµ  ç      @)	rã  rƒ   rë  rä  rî  rï  rä  rm   rå  r?   r   r   r   Ú_testSmallReadNonBlocking„  s
    

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s"   | j  d¡ | jr|  | j¡ d S )Nr  )ræ  rƒ   Úserv_skippedrb   r?   r   r   r   ÚtestWriteNonBlocking  s    z6UnbufferedFileObjectClassTestCase.testWriteNonBlockingc                 C   st   d | _ | j d¡ dtj }d}| j |¡}|  |d¡ t|ƒD ](}| j |¡}|d u r\ qp|  |d¡ q@d| _ d S )NFrý  r›  r   z$failed to saturate the socket buffer)	r  r¾   rB  r   r  rë  rä  rh  r"  )r@   ZBIGZLIMITrÞ  r8   r   r   r   Ú_testWriteNonBlocking”  s    
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rE   rF   rG   rW   rc   r  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S )Ú#LineBufferedFileObjectClassTestCasero   N©rE   rF   rG   rc   r   r   r   r   r  ª  s   r  c                   @   s   e Zd ZdZdS )Ú$SmallBufferedFileObjectClassTestCaserŸ   Nr  r   r   r   r   r  ¯  s   r  c                   @   s*   e Zd ZdZdZe d¡ZdZeZ	dZ
dS )Ú"UnicodeReadFileObjectClassTestCaseú=Tests for socket.makefile() in text mode (rather than binary)r   r   r  r(  N©rE   rF   rG   rW   rç  r²   r  rñ  rê  rî  râ  r   r   r   r   r  ´  s   
r  c                   @   s*   e Zd ZdZdZeZdZe d¡Z	dZ
dS )Ú#UnicodeWriteFileObjectClassTestCaser  r	   r  r   r(  N)rE   rF   rG   rW   rç  r²   rñ  rê  r  rî  râ  r   r   r   r   r!  ¾  s   
r!  c                   @   s0   e Zd ZdZdZe d¡ZdZe d¡Z	dZ
dS )Ú'UnicodeReadWriteFileObjectClassTestCaser  r   r   r  r(  Nr   r   r   r   r   r"  È  s   

r"  c                   @   s   e Zd ZdZdd„ ZdS )ÚNetworkConnectionTestzProve network connection.c                 C   s   t  t| jf¡| _| j| _d S r2   )r   Úcreate_connectionr›   r=   r“   r¾   r?   r   r   r   r…   Õ  s    z!NetworkConnectionTest.clientSetUpN)rE   rF   rG   rW   r…   r   r   r   r   r#  Ò  s   r#  c                   @   s   e Zd ZdZdS )ÚBasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)rE   rF   rG   rW   r   r   r   r   r%  Û  s   r%  c                   @   sD   e Zd ZG dd„ dejƒZejdd„ ƒZdd„ Zdd„ Z	d	d
„ Z
dS )ÚNetworkConnectionNoServerc                   @   s   e Zd Zdd„ ZdS )z$NetworkConnectionNoServer.MockSocketc                 G   s   t  d¡‚d S )Nz	timed out)r   r5   r@  r   r   r   r­   â  s    z,NetworkConnectionNoServer.MockSocket.connectN)rE   rF   rG   r­   r   r   r   r   Ú
MockSocketá  s   r'  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   r'  )r@   Z
old_socketr   r   r   Úmocked_socket_moduleå  s
    z.NetworkConnectionNoServer.mocked_socket_modulec                 C   sr   t  ¡ }t tjtj¡}|  |j¡ |  t¡}| 	t
|f¡ W d   ƒ n1 sR0    Y  |  |jjtj¡ d S r2   )r   rÁ  r   r:   r/   rU   r   r$  r   r­   r›   r±   r-  rc  ZECONNREFUSED)r@   r=   r“   r.  r   r   r   Útest_connectï  s    ,z&NetworkConnectionNoServer.test_connectc                 C   s\   t  ¡ }|  t¡}t t|f¡ W d   ƒ n1 s60    Y  t  ¡ }|  |j	j
|¡ d S r2   )r   rÁ  r$  r   r   r$  r›   Zget_socket_conn_refused_errsr  r-  rc  )r@   r=   r.  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’  )r(  r   r$  r›   r5   r   r   ré  rc  ZEAFNOSUPPORTr   r”  r   r   r   Útest_create_connection_timeout  s    
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rE   rF   rG   r   r'  Ú
contextlibÚcontextmanagerr(  r)  r*  r+  r   r   r   r   r&  ß  s   
	r&  c                   @   sv   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeZd
d„ ZeZ	dd„ Z
eZdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZdS )ÚNetworkConnectionAttributesTestrŽ   c                 C   s   t j| |d t | ¡ d S r   r‘   r’   r   r   r   rL      s    z(NetworkConnectionAttributesTest.__init__c                 C   s   t  ¡ | _d S r2   )r   rÁ  Úsource_portr?   r   r   r   r…   $  s    z+NetworkConnectionAttributesTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   '  s    
z.NetworkConnectionAttributesTest.clientTearDownc                 C   s   | j  ¡ \}}| ¡  d S r2   )r;   r§   r   r¼   r   r   r   Ú_justAccept,  s    z+NetworkConnectionAttributesTest._justAcceptc                 C   s:   t jt| jftjd| _|  | jj¡ |  	| jj
d¡ d S )NrŽ  rŸ   )r   r$  r›   r=   r   rU  r“   rU   r   r±   r  r?   r   r   r   Ú_testFamily1  s
    ÿz+NetworkConnectionAttributesTest._testFamilyc                 C   sJ   t jt| jftjd| jfd| _|  | jj	¡ |  
| j ¡ d | j¡ d S )Nr(  )r5   Úsource_addressro   )r   r$  r›   r=   r   rU  r/  r“   rU   r   r±   rœ   r?   r   r   r   Ú_testSourceAddress8  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 )Nr7  ©r  r   r3   r4   r$  r›   r=   r“   rU   r   r±   rœ  r?   r   r   r   Ú_testTimeoutDefaultB  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Ž  r4  r?   r   r   r   Ú_testTimeoutNoneN  s    
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S r6  )r   r$  r›   r=   r“   r±   rœ  r?   r   r   r   Ú_testTimeoutValueNamedZ  s    z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t  t| jfd¡| _|  | jj¡ |  | j ¡ d¡ d S )Nr7  )	r   r$  r›   r=   r“   rU   r   r±   rœ  r?   r   r   r   Ú_testTimeoutValueNonamed_  s    z8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)rŽ   )rE   rF   rG   rL   r…   rˆ   r0  Z
testFamilyr1  ZtestSourceAddressr3  ZtestTimeoutDefaultr5  ZtestTimeoutNoner8  ZtestTimeoutValueNamedr9  ZtestTimeoutValueNonamedr:  r   r   r   r   r.    s    
	r.  c                   @   sB   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeZd
d„ Zdd„ Z	dS )ÚNetworkConnectionBehaviourTestrŽ   c                 C   s   t j| |d t | ¡ d S r   r‘   r’   r   r   r   rL   g  s    z'NetworkConnectionBehaviourTest.__init__c                 C   s   d S r2   r   r?   r   r   r   r…   k  s    z*NetworkConnectionBehaviourTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r2   r”   r?   r   r   r   rˆ   n  s    
z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  ¡ \}}|  |j¡ t d¡ | d¡ d S )Nr  ó   done!)r;   r§   rU   r   r«   r¬   r·   r¼   r   r   r   ÚtestInsideTimeouts  s    
z0NetworkConnectionBehaviourTest.testInsideTimeoutc                 C   s0   t  t| jf¡ | _}| d¡}|  |d¡ d S )NrÓ  r<  )r   r$  r›   r=   r“   r°   r±   )r@   rÕ   r›  r   r   r   Ú_testInsideTimeoutz  s    
z1NetworkConnectionBehaviourTest._testInsideTimeoutc                    s4   t jt| jfdd | _‰ |  t j‡ fdd„¡ d S )Nro   rŽ  c                      s
   ˆ   d¡S )NrÓ  )r°   r   ©rÕ   r   r   rì     rí   zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r   r$  r›   r=   r“   r$  r5   r?   r   r?  r   Ú_testOutsideTimeout  s    z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)rŽ   )
rE   rF   rG   rL   r…   rˆ   r=  ZtestOutsideTimeoutr>  r@  r   r   r   r   r;  e  s   
r;  c                   @   s6   e Zd Zdd„ Zdd„ Ze eedƒd¡dd„ ƒZ	d	S )
ÚTCPTimeoutTestc                    s    ‡ fdd„}ˆ   tj|d¡ d S )Nc                     s   ˆ j  d¡ ˆ j  ¡  d S r¸  )r;   rÊ  r§   ré   r?   r   r   Úraise_timeout‡  s    z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)©r$  r   r5   ©r@   rB  r   r?   r   ÚtestTCPTimeout†  s    
ÿzTCPTimeoutTest.testTCPTimeoutc                 C   sx   d}z| j  d¡ | j  ¡ }W nF tjy<   |  d¡ Y n* tyP   d}Y n   |  d¡ Y n0 |st|  d¡ d S )NFrÂ  z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r;   rÊ  r§   r   r5   r   r   ©r@   Úokr_  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 )Nr  c                   @   s   e Zd ZdS )z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNrq  r   r   r   r   ÚAlarm¢  s   rI  c                    s   ˆ ‚d S r2   r   )rþ  rž  ©rI  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Ê  rO  rþ  rÿ  rõ  r§   r   r5   r   rr  Úexc_infoÚ	tracebackÚ
format_exc)r@   rK  r  r_  r   rJ  r   ÚtestInterruptedTimeout›  s*    
þz%TCPTimeoutTest.testInterruptedTimeoutN)
rE   rF   rG   rE  rH  r¢   rh  r   rþ  rO  r   r   r   r   rA  „  s   ÿrA  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   rB  À  s    z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)rC  rD  r   r?   r   ÚtestUDPTimeout¿  s    
ÿzUDPTimeoutTest.testUDPTimeoutc                 C   sz   d}z| j  d¡ | j  d¡}W nF tjy>   |  d¡ Y n* tyR   d}Y n   |  d¡ Y n0 |sv|  d¡ d S )NFrÂ  r¯   z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)ú1recv() returned success when we did not expect it©r;   rÊ  r°   r   r5   r   r   rF  r   r   r   rH  Æ  s    zUDPTimeoutTest.testTimeoutZeroN)rE   rF   rG   rS  rH  r   r   r   r   rP  ½  s   rP  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 rQ  rR  ré   r?   r   r   rB  Ù  s    z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)rC  rD  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)rT  rU  rF  r   r   r   rH  ß  s    z"UDPLITETimeoutTest.testTimeoutZeroN)rE   rF   rG   rW  rH  r   r   r   r   rV  Ô  s   rV  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestExceptionsc                 C   sJ   |   tttƒ¡ |   ttjtƒ¡ |   ttjtƒ¡ |   ttjtƒ¡ d S r2   )r  Ú
issubclassr   rO  r   r%  r&  r5   r?   r   r   r   ÚtestExceptionTreeï  s    z TestExceptions.testExceptionTreec                 C   sv   t   t jt jd¡}t   t jt jd| ¡ ¡}| ¡  |  |j¡ |  t¡ | 	d¡ W d   ƒ n1 sh0    Y  d S )Nr   F)
r   r:   r/   r  r   rU   rE  r$  r   rB  )r@   Zsock0rÕ   r   r   r   Útest_setblocking_invalidfdõ  s    ÿz)TestExceptions.test_setblocking_invalidfdN)rE   rF   rG   rZ  r[  r   r   r   r   rX  í  s   rX  r  zLinux specific testc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestLinuxAbstractNamespaceél   c              
   C   sÔ   d}t   t jt j¡¬}| |¡ | ¡  t   t jt j¡j}| | ¡ ¡ | ¡ d 0}|  | ¡ |¡ |  | 	¡ |¡ W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )Ns    python-test-hello ÿr   )
r   rØ   r/   r`   r>   r­   rœ   r§   r±   Úgetpeername)r@   rŠ  Ús1rW  Zs3r   r   r   ÚtestLinuxAbstractNamespace  s    
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec                 C   s`   dd| j d   }t tjtj¡*}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  d S )Nr˜  ó   hro   )ÚUNIX_PATH_MAXr   rØ   r/   r`   r±   rœ   ©r@   rŠ  r   r   r   r   ÚtestMaxName  s    
z&TestLinuxAbstractNamespace.testMaxNamec                 C   sR   dd| j   }t tjtj¡ }|  t|j|¡ W d   ƒ n1 sD0    Y  d S )Nú Úh)rb  r   rØ   r/   r$  r   r`   rc  r   r   r   ÚtestNameOverflow  s    z+TestLinuxAbstractNamespace.testNameOverflowc                 C   sF   t   t jt j¡}z&| d¡ |  | ¡ d¡ W | ¡  n
| ¡  0 d S )Nz python test ó    python test )r   rØ   r/   r`   r±   rœ   r   r  r   r   r   ÚtestStrName  s
    
z&TestLinuxAbstractNamespace.testStrNamec                 C   sR   t   t jt j¡.}| tdƒ¡ |  | ¡ d¡ W d   ƒ n1 sD0    Y  d S )Nrh  )r   rØ   r/   r`   r¾  r±   rœ   r  r   r   r   ÚtestBytearrayName&  s    z,TestLinuxAbstractNamespace.testBytearrayNameN)	rE   rF   rG   rb  r`  rd  rg  ri  rj  r   r   r   r   r\    s   	r\  ztest needs socket.AF_UNIXc                   @   sT   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S )ÚTestUnixDomainc                 C   s   t   t jt j¡| _d S r2   )r   rØ   r/   rÕ   r?   r   r   r   rA   /  s    zTestUnixDomain.setUpc                 C   s   | j  ¡  d S r2   )rÕ   r   r?   r   r   r   rC   2  s    zTestUnixDomain.tearDownc              
   C   s:   zt  |¡W S  ty4   |  d |t ¡ ¡¡ Y n0 d S )NzBPathname {0!a} cannot be represented in file system encoding {1!r})rÏ   Úfsencoderí  rb   r  rr  Úgetfilesystemencoding©r@   rÖ   r   r   r   Úencoded5  s    þÿzTestUnixDomain.encodedc              
   C   sZ   zt  ||¡ W nD tyT } z,t|ƒdkr>|  d |¡¡ n‚ W Y d }~n
d }~0 0 d S )NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r   rÓ   r   r  rb   r  )r@   rÕ   rÖ   rŠ   r   r   r   r`   @  s    ÿÿzTestUnixDomain.bindc                 C   s   |   | j ¡ d¡ d S )N)r(  N)r  rÕ   rœ   r?   r   r   r   rô  L  s    zTestUnixDomain.testUnboundc                 C   s@   t j tj¡}|  | j|¡ |  tj|¡ |  	| j 
¡ |¡ d S r2   )rÏ   rÖ   Úabspathr   ÚTESTFNr`   rÕ   rU   rÔ   r±   rœ   rn  r   r   r   ÚtestStrAddrP  s    zTestUnixDomain.testStrAddrc                 C   sF   t j tj¡}|  | j|  |¡¡ |  tj	|¡ |  
| j ¡ |¡ d S r2   )rÏ   rÖ   rp  r   rq  r`   rÕ   ro  rU   rÔ   r±   rœ   rn  r   r   r   ÚtestBytesAddrW  s    zTestUnixDomain.testBytesAddrc                 C   sR   t j tj¡}|  |¡}|  | j| dd¡¡ |  	tj
|¡ |  | j ¡ |¡ d S )NÚasciiÚsurrogateescape)rÏ   rÖ   rp  r   ZTESTFN_UNICODEro  r`   rÕ   r  rU   rÔ   r±   rœ   )r@   rÖ   rð  r   r   r   ÚtestSurrogateescapeBind^  s
    
z&TestUnixDomain.testSurrogateescapeBindc                 C   sT   t jd u r|  d¡ tj t j¡}|  | j|¡ |  t j	|¡ |  
| j ¡ |¡ d S )Nz!No unencodable filename available)r   ZTESTFN_UNENCODABLErb   rÏ   rÖ   rp  r`   rÕ   rU   rÔ   r±   rœ   rn  r   r   r   ÚtestUnencodableAddrg  s    

z"TestUnixDomain.testUnencodableAddrN)rE   rF   rG   rA   rC   ro  r`   rô  rr  rs  rv  rw  r   r   r   r   rk  ,  s   	rk  c                   @   s†   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZeZdd„ Z	eZ
dd„ Zdd„ Zdd„ ZeZdd„ ZeZdd„ Zdd„ Zdd„ ZeZdS )ÚBufferIOTestzF
    Test the buffer versions of socket.recv() and socket.send().
    rŽ   c                 C   s   t j| |d d S r   r  r’   r   r   r   rL   v  s    zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nro  r   )rp  rè  r²   r»   r¤  r±   rÌ  ©r@   r[  rÇ  r´   r   r   r   ÚtestRecvIntoArrayy  s    zBufferIOTest.testRecvIntoArrayc                 C   s   t tƒ}| j |¡ d S r2   ©r³  r²   r¾   r·   ©r@   r[  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²   rz  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²   rz  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 ry  )rp  rè  r²   r»   r§  r±   rÌ  ©r@   r[  rÇ  r½   r´   r   r   r   ÚtestRecvFromIntoArray—  s    z"BufferIOTest.testRecvFromIntoArrayc                 C   s   t tƒ}| j |¡ d S r2   r|  r}  r   r   r   Ú_testRecvFromIntoArrayŸ  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   ÚtestRecvFromIntoMemoryview¬  s
    z'BufferIOTest.testRecvFromIntoMemoryviewc                 C   s    t dƒ}|  t| jj|d¡ d S )Nr]   r¯   )r¾  r$  r  r»   r§  r}  r   r   r   ÚtestRecvFromIntoSmallBufferµ  s    z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   s   | j  t¡ d S r2   r  r?   r   r   r   Ú_testRecvFromIntoSmallBufferº  s    z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t ƒ }| j |¡ | j |d¡ d S rš   )r¾  r»   r§  r}  r   r   r   ÚtestRecvFromIntoEmptyBuffer½  s    z(BufferIOTest.testRecvFromIntoEmptyBufferN)rŽ   )rE   rF   rG   rW   rL   r{  r~  r  Z_testRecvIntoBytearrayr€  Z_testRecvIntoMemoryviewr‚  rƒ  r„  Z_testRecvFromIntoBytearrayr…  Z_testRecvFromIntoMemoryviewr†  r‡  rˆ  Z_testRecvFromIntoEmptyBufferr   r   r   r   rx  r  s$   
rx  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   ÚisTipcAvailableÉ  s    

2rŽ  z6TIPC module is not loaded, please 'sudo modprobe tipc'c                   @   s   e Zd Zdd„ ZdS )ÚTIPCTestc                 C   sº   t   t jt j¡}t   t jt j¡}|  |j¡ |  |j¡ | t jt jd¡ t jt	t
tf}| |¡ t jt	t
ttt
 d ƒ df}| t|¡ | d¡\}}|  | ¡ |¡ |  |t¡ d S )Nro   rŸ   r   r¯   )r   r‹  r1  rU   r   rÇ  r2  r3  ÚTIPC_ADDR_NAMESEQÚ
TIPC_STYPEÚ
TIPC_LOWERÚ
TIPC_UPPERr`   ÚTIPC_ADDR_NAMErg  r,  r²   r   r±   rœ   )r@   r*  r“   ÚsrvaddrZsendaddrr´   Zrecvaddrr   r   r   ÚtestRDMà  s     ÿ
ÿzTIPCTest.testRDMN)rE   rF   rG   r–  r   r   r   r   r  Ý  s   r  c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTIPCThreadableTestrŽ   c                 C   s   t jj| |d t | ¡ d S r   r¡   r’   r   r   r   rL   ø  s    zTIPCThreadableTest.__init__c                 C   s„   t   t jt j¡| _|  | jj¡ | j t jt jd¡ t j	t
ttf}| j |¡ | j ¡  |  ¡  | j ¡ \| _| _|  | jj¡ d S rÛ   )r   r‹  r/   r*  rU   r   rÇ  r2  r3  r  r‘  r’  r“  r`   r>   rn   r§   r¨   r©   )r@   r•  r   r   r   rA   ü  s    ÿ
zTIPCThreadableTest.setUpc                 C   sd   t  d¡ t tjtj¡| _|  | jj¡ tjt	t
ttt
 d ƒ df}| j |¡ | j ¡ | _d S )Nrª   rŸ   r   )r«   r¬   r   r‹  r/   r“   rU   r   r”  r‘  r’  rg  r“  r­   rœ   Úcliaddr)r@   r½   r   r   r   r…     s    
ÿzTIPCThreadableTest.clientSetUpc                 C   s,   | j  d¡}|  |t¡ |  | j| j¡ d S r®   )r¨   r°   r±   r²   r˜  r©   r³   r   r   r   rµ     s    zTIPCThreadableTest.testStreamc                 C   s   | j  t¡ | j  ¡  d S r2   r¶   r?   r   r   r   r¸     s    zTIPCThreadableTest._testStreamN)rŽ   r¹   r   r   r   r   r—  õ  s
   
r—  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚContextManagersTestc                 C   sÄ   t   ¡ }|  |j¡ W d   ƒ n1 s*0    Y  |  |j¡ t   ¡ }| ¡  W d   ƒ n1 sf0    Y  |  |j¡ t   ¡  }|  t|jd¡ W d   ƒ n1 sª0    Y  |  |j¡ d S ©Nr)  )r   rÄ  r,  r  r   r$  r   r  rÞ   r   r   r   Ú_testSocketClass   s    
*
&
.z$ContextManagersTest._testSocketClassc                 C   s2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S r®   ©r;   r§   rU   r   r°   r  ©r@   r¨   r½   r›  r   r   r   ÚtestCreateConnectionBase.  s    
z,ContextManagersTest.testCreateConnectionBasec                 C   sl   | j  ¡ }t |¡8}|  |j¡ | d¡ |  | d¡d¡ W d   ƒ n1 sR0    Y  |  	|j¡ d S )Nr)  r¯   )
r;   rœ   r   r$  rÄ  r,  r  r±   r°   r  ©r@   rŠ  rÕ   r   r   r   Ú_testCreateConnectionBase4  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   r$  r   r  r,  r$  r   r  rŸ  r   r   r   Ú_testCreateConnectionCloseB  s
    
&z.ContextManagersTest._testCreateConnectionCloseN)rE   rF   rG   r›  rž  r   r¡  r¢  r   r   r   r   r™    s
   r™  c                   @   s„   e Zd Ze eedƒd¡e ddd¡dd„ ƒƒZ	dd	„ Z
d
d„ Zdd„ Ze edu d¡dd„ ƒZe edu d¡dd„ ƒZdd„ ZdS )ÚInheritanceTestrÑ  zSOCK_CLOEXEC not definedrŸ   rÍ  rÎ  c                 C   sX   t   t jt jt jB ¡.}|  |jt j¡ |  | ¡ ¡ W d   ƒ n1 sJ0    Y  d S r2   )r   r:   r/   rÑ  r±   rð   rÄ  Úget_inheritabler  r   r   r   Útest_SOCK_CLOEXECK  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_inheritableT  s    z(InheritanceTest.test_default_inheritablec              	   C   st   t   ¡ }|T | ¡ }| ¡  |  |  | ¡ d¡ W d   ƒ n1 sH0    Y  W d   ƒ n1 sf0    Y  d S r  )r   r#  r   r±   r¤  )r@   rÕ   Znewsockr   r   r   Útest_dupY  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_inheritablea  s    

z$InheritanceTest.test_set_inheritableNrž   c                 C   s‚   t   ¡ }|b | ¡ }|  | ¡ d¡ t |tj¡}|tj M }t |tj|¡ |  | ¡ d¡ W d   ƒ n1 st0    Y  d S )NFT)r   r  r±   r¤  r   ÚF_GETFDÚ
FD_CLOEXECZF_SETFD)r@   rÕ   rK  rä  r   r   r   Útest_get_inheritable_cloexecj  s    z,InheritanceTest.test_get_inheritable_cloexecc                 C   s|   t   ¡ }|\ | ¡ }|  t |tj¡tj@ tj¡ | d¡ |  t |tj¡tj@ d¡ W d   ƒ n1 sn0    Y  d S )NTr   )r   r  r±   r   rª  r«  r¨  )r@   rÕ   rK  r   r   r   Útest_set_inheritable_cloexecx  s    ÿ
ÿz,InheritanceTest.test_set_inheritable_cloexecc                 C   sH   t  ¡ \}}|  |j¡ |  |j¡ |  | ¡ d¡ |  | ¡ d¡ d S r  )r   rÀ   rU   r   r±   r¤  )r@   r_  rW  r   r   r   Útest_socketpair…  s
    zInheritanceTest.test_socketpair)rE   rF   rG   r¢   rh  r   r   r   rÛ  r¥  r¦  r§  r©  rj  r   r¬  r­  r®  r   r   r   r   r£  J  s   ÿ	

r£  rA  zSOCK_NONBLOCK not definedc                   @   s,   e Zd Zddd„Ze ddd¡dd	„ ƒZd
S )ÚNonblockConstantTestTrÂ  c                 C   sº   |rj|   |jtj¡ |   | ¡ |¡ |  t |tjtj	¡tj	@ ¡ |dkrZ|  
| ¡ ¡ q¶|  | ¡ ¡ nL|   |jtj¡ |   | ¡ d ¡ |  
t |tjtj	¡tj	@ ¡ |  | ¡ ¡ d S rš   )r±   rð   r   r/   rœ  r  r   rÄ  rÏ   rÅ  rÄ  rÃ  )r@   r   Únonblockr5   r   r   r   ÚcheckNonblock  s    ÿ	ÿz"NonblockConstantTest.checkNonblockrŸ   rÍ  rÎ  c                 C   sÈ  t   t jt jt jB ¡Ž}|  |¡ | d¡ | j|dd | d¡ |  |¡ | d ¡ | j|dd | d¡ | j|dd | d¡ | j|dd W d   ƒ n1 sª0    Y  t  ¡ }t  d¡ t   ¡ }|  |¡ W d   ƒ n1 sî0    Y  t  d ¡ t   ¡ }|  |d¡ W d   ƒ n1 s.0    Y  t  d¡ t   ¡ }| j|dd W d   ƒ n1 sp0    Y  t  d ¡ t   ¡ }|  |d¡ W d   ƒ n1 s°0    Y  t  |¡ d S )NTF)r°  g       @rŽ  rÂ  )	r   r:   r/   rA  r±  rB  rÊ  r3   r4   )r@   r   Útr   r   r   Útest_SOCK_NONBLOCK©  s:    
ÿ






,

(

,

.

,z'NonblockConstantTest.test_SOCK_NONBLOCKN)TrÂ  )rE   rF   rG   r±  r   rÛ  r³  r   r   r   r   r¯    s   
r¯  r9  r:  zneed multiprocessingc                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestSocketSharingc                 C   sD   |  ¡ }|  ¡ }t |¡}| ¡ \}}| |¡ | ¡  | ¡  d S r2   )rr   r   Ú	fromsharer§   r  r   )rš  ÚqZsdataÚmessager   rW  r  r   r   r   ÚremoteProcessServerÐ  s    

z%TestSocketSharing.remoteProcessServerc           	      C   s°   t  ¡ }t j| j|fd}| ¡  | j |j¡}| j ¡ }| j 	¡  | 
|¡ d}| 
|¡ t |¡}g }| d¡}|szq†| |¡ qj| 	¡  d |¡}|  ||¡ | ¡  d S )N©r¬  rQ   s
   slapmahfrorØ  rí   )Úmultiprocessingr{   ÚProcessr¸  r¯  r;   ÚshareÚpidrœ   r   r‡   r   r$  r°   ræ  r   r±   )	r@   r¶  r!  r›  r½   r·  r   ÚmÚreceivedr   r   r   Ú	testShareÞ  s&    






zTestSocketSharing.testSharec                 C   s@   | j  t ¡ ¡}|  ttj|d d… ¡ |  ttj|d ¡ d S )Nr…  r)  )r;   r¼  rÏ   Úgetpidr$  r  r   rµ  )r@   r›  r   r   r   ÚtestShareLength  s    z!TestSocketSharing.testShareLengthc                 C   sb   |   | ¡ d ¡ |   | ¡ | ¡ ¡ |   |j|j¡ |   |j|j¡ |jdkr^|   |j|j¡ d S rš   )r±   rœ  r  rð   r  )r@   ZorgÚotherr   r   r   ÚcompareSockets  s    
z TestSocketSharing.compareSocketsc                 C   sD   | j  t ¡ ¡}t |¡}z|  | j |¡ W | ¡  n
| ¡  0 d S r2   )r;   r¼  rÏ   rÁ  r   rµ  rÄ  r   )r@   r›  r   r   r   r   ÚtestShareLocal  s
    
z TestSocketSharing.testShareLocalc              
   C   s¬   t jt jg}t jt jg}|D ]Š}|D ]€}zt   ||¡}W n tyN   Y q$Y n0 zH| t ¡ ¡}t  	|¡}z|  
||¡ W | ¡  n
| ¡  0 W | ¡  q$| ¡  0 q$qd S r2   )r   r:   rç   r/   r    r   r¼  rÏ   rÁ  rµ  rÄ  r   )r@   ÚfamiliesÚtypesr   r²  Úsourcer›  Zsharedr   r   r   Ú	testTypes  s    

zTestSocketSharing.testTypesN)
rE   rF   rG   r¶  r¸  rÀ  rÂ  rÄ  rÅ  rÉ  r   r   r   r   r´  Ë  s   
#r´  c                   @   s  e Zd ZdZdZdZdZejZ	e
dd„ ƒZe
dd„ ƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;S )<ÚSendfileUsingSendTestz>
    Test the send() implementation of socket.sendfile().
    i    rh   rí   c                 C   s¦   dd„ }d  dd„ t| jƒD ƒ¡}ttjdƒ.}|| j| jƒD ]}| |¡ q>W d   ƒ n1 sb0    Y  ttjdƒ}| ¡ | _	W d   ƒ n1 s˜0    Y  d S )Nc                 s   s&   | |kr|V  | |8 } q | r"| V  d S r2   r   )ÚtotalÚstepr   r   r   Úchunks>  s
    
z0SendfileUsingSendTest.setUpClass.<locals>.chunksrí   c                 S   s   g | ]}t  tj¡ ¡ ‘qS r   )ÚrandomÚchoiceÚstringÚascii_lettersrå  rÞ  r   r   r   rü   F  s   ÿz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r  r	   )
r   r"  ÚBUFSIZEr   r   rq  ÚFILESIZErä  r  ÚFILEDATA)rš  rÍ  Úchunkr   Zcsizer   r   r   Ú
setUpClass<  s    
ÿ*
z SendfileUsingSendTest.setUpClassc                 C   s   t  t j¡ d S r2   )r   rÔ   rq  )rš  r   r   r   ÚtearDownClassO  s    z#SendfileUsingSendTest.tearDownClassc                 C   s8   | j  tj¡ | j  ¡ \}}| | j¡ |  |j¡ |S r2   )r;   rÊ  r   rØ  r§   ÚTIMEOUTrU   r   r¼   r   r   r   Úaccept_connS  s
    z!SendfileUsingSendTest.accept_connc                 C   s,   g }|  | j¡}|sq"| |¡ qd |¡S r  )r°   rÒ  ræ  r   )r@   r¨   r¿  rÕ  r   r   r   Ú	recv_dataZ  s    zSendfileUsingSendTest.recv_datac                 C   s
   t |dƒS )NÚ_sendfile_use_send©r   rÞ   r   r   r   Úmeth_from_sockc  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   rq  r   r$  rÝ  r±   rÓ  Útell©r@   rŠ  ÚfilerÕ   ÚmethÚsentr   r   r   Ú_testRegularFilej  s    

z&SendfileUsingSendTest._testRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r2   ©rÙ  rÚ  r±   rè  rÓ  rÔ  ©r@   r¨   r›  r   r   r   ÚtestRegularFiles  s    
z%SendfileUsingSendTest.testRegularFilec              	   C   s¤   | j  ¡ }t | j¡}t |¡p}|L}| |¡}|  || j	¡ |  | 
¡ | j	¡ |  tj|j|¡ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  d S r2   )r;   rœ   ÚioÚBytesIOrÔ  r   r$  rM  r±   rÓ  rß  r$  rR  rS  )r@   rŠ  rá  rÕ   rã  r   r   r   Ú_testNonRegularFile{  s    

ÿz)SendfileUsingSendTest._testNonRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r2   rå  ræ  r   r   r   ÚtestNonRegularFile…  s    
z(SendfileUsingSendTest.testNonRegularFilec              	   C   sÖ   | j  ¡ }tjd }t|dƒ |  tj|¡ W d   ƒ n1 sB0    Y  t|dƒ}t |¡b}|>}|  	|¡}||ƒ}|  
|d¡ |  
| ¡ d¡ W d   ƒ n1 sª0    Y  W d   ƒ n1 sÈ0    Y  d S )NÚ2r  r	   r   )r;   rœ   r   rq  r   rU   rÔ   r   r$  rÝ  r±   rß  )r@   rŠ  Úfilenamerá  rÕ   râ  rã  r   r   r   Ú_testEmptyFileSend  s    

,

z(SendfileUsingSendTest._testEmptyFileSendc                 C   s"   |   ¡ }|  |¡}|  |d¡ d S r  )rÙ  rÚ  r±   ræ  r   r   r   ÚtestEmptyFileSend™  s    
z'SendfileUsingSendTest.testEmptyFileSendc              	   C   s¢   | j  ¡ }ttjdƒ}t |¡n}|J}|  |¡}||dd}|  || j	d ¡ |  | 
¡ | j	¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  d S )Nr	   éˆ  )ÚoffsetrÞ  rà  r   r   r   Ú_testOffset   s    

z!SendfileUsingSendTest._testOffsetc                 C   sB   |   ¡ }|  |¡}|  t|ƒ| jd ¡ |  || jdd … ¡ d S )Nrð  rå  ræ  r   r   r   Ú
testOffset©  s    
z SendfileUsingSendTest.testOffsetc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   rŽ  éGKL ©rÕ  ©r;   rœ   r   r   rq  r   r$  rU  rÝ  r±   rß  ©r@   rŠ  rá  rÕ   rÕ  râ  rã  r   r   r   Ú
_testCount±  s    
ÿ
z SendfileUsingSendTest._testCountc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S )Nrô  ©rÙ  rÚ  r±   rè  rÔ  ©r@   rÕ  r¨   r›  r   r   r   Ú	testCount½  s
    
zSendfileUsingSendTest.testCountc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   rŽ  ro   rõ  rö  r÷  r   r   r   Ú_testCountSmallÆ  s    
ÿ
z%SendfileUsingSendTest._testCountSmallc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S rÛ   rù  rú  r   r   r   ÚtestCountSmallÒ  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   rq  r   r$  rÝ  r±   rß  r÷  r   r   r   Ú_testCountWithOffsetÛ  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   rq  r   r$  rB  rÝ  r$  r  rM  ©r@   rŠ  rá  rÕ   râ  r   r   r   Ú_testNonBlockingî  s    


z&SendfileUsingSendTest._testNonBlockingc                 C   s    |   ¡ }| d¡r|  d¡ d S )Nrh   z$was not supposed to receive any data)rÙ  r°   r   ©r@   r¨   r   r   r   ÚtestNonBlocking÷  s    
z%SendfileUsingSendTest.testNonBlockingc              	   C   s’   | j  ¡ }ttjdƒ}tj|tjd}|T |0 |  |¡}||ƒ}|  	|| j
¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  d S )Nr	   rŽ  )r;   rœ   r   r   rq  r   r$  rU  rÝ  r±   rÓ  rà  r   r   r   Ú_testWithTimeoutþ  s    
ÿ
z&SendfileUsingSendTest._testWithTimeoutc                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r2   rå  ræ  r   r   r   ÚtestWithTimeout  s    
z%SendfileUsingSendTest.testWithTimeoutc              	   C   sˆ   | j  ¡ }ttjdƒ^}t |¡4}| d¡ |  |¡}|  	tj
||¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  d S )Nr	   g{®Gáz„?)r;   rœ   r   r   rq  r   r$  rÊ  rÝ  r$  r5   r  r   r   r   Ú_testWithTimeoutTriggeredSend  s    


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendc                 C   s    |   ¡ }| d¡ t d¡ d S )Ni€X ro   )rÙ  r°   r«   r¬   r  r   r   r   ÚtestWithTimeoutTriggeredSend  s    
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendc                 C   s   d S r2   r   r?   r   r   r   Ú_test_errors  s    z"SendfileUsingSendTest._test_errorsc              	   C   s˜  t tjdƒX}tjtjd*}|  |¡}|  td||¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  t tjdƒR}t ¡ *}|  |¡}|  td||¡ W d   ƒ n1 sº0    Y  W d   ƒ n1 sØ0    Y  t tjdƒ”}t ¡ j}|  |¡}| jtd||dd | jtd||d	d | jtd||d
d | jtd||dd W d   ƒ n1 sj0    Y  W d   ƒ n1 sŠ0    Y  d S )Nr	   rã  r/   r  zbinary modezpositive integerrì  rõ  rª   r   r…  )	r   r   rq  r   r    rÝ  r   r  r‰   )r@   rá  r   râ  r   r   r   Útest_errors"  s6    
ÿ@

ÿ@

ÿÿÿÿz!SendfileUsingSendTest.test_errorsN)&rE   rF   rG   rW   rÓ  rÒ  rÔ  r   rU  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Ê  2  sD   

		
			
		
rÊ  rM  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 )NrS  rÜ  rÞ   r   r   r   rÝ  @  s    z(SendfileUsingSendfileTest.meth_from_sockN)rE   rF   rG   rW   rÝ  r   r   r   r   r  :  s   r  zAF_ALG requiredc                   @   s|   e Zd Zdd„ Ze dd¡dd„ ƒZdd„ Ze dd	¡d
d„ ƒZe dd¡dd„ ƒZ	e dd	¡dd„ ƒZ
dd„ Zdd„ ZdS )ÚLinuxKernelCryptoAPIc              
   C   sl   t   t jt jd¡}z| ||f¡ W n> tyb } z&| ¡  t t|ƒ||¡‚W Y d }~nd }~0 0 |S d S rš   )	r   r(   r&   r`   rŒ  r   r¢   ZSkipTestr  )r@   Útyprû   rÕ   rŠ   r   r   r   Ú
create_algG  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³  Úfromhexr  r§   r  r±   r°   r·   r   ÚMSG_MORE©r@   r  ÚalgoÚopru   r   r   r   Útest_sha256T  s    

0
z LinuxKernelCryptoAPI.test_sha256c              	   C   s˜   t  d¡}|  dd¡n}| tjtjd¡ | ¡ \}}|, | d¡ |  	| 
d¡|¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S )NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79r  z
hmac(sha1)s   Jefes   what do ya want for nothing?r“  )r³  r  r  rÇ  r   ÚSOL_ALGÚALG_SET_KEYr§   r  r±   r°   r  r   r   r   Útest_hmac_sha1f  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  r  r¯   )r³  r  rè  r  rÇ  r   r  r  r§   Úsendmsg_afalgÚALG_OP_ENCRYPTr  r  r±   r°   ÚALG_OP_DECRYPT)r@   Úkeyr  r´   Z
ciphertextZmsglenr  r  ru   Z
multiplierZlongmsgÚencZdecr   r   r   Útest_aes_cbcq  sL    



ÿ
0ÿ0
ÿ.ÿ.z!LinuxKernelCryptoAPI.test_aes_cbcrÏ  c                 C   s   t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t|ƒ}t|ƒ}|  dd¡°}	|	 tjtj|¡ |	 tjtjd |¡ |	 	¡ \}
}|
€ |
j
tj||tjd	 |
 |tj¡ |
 |¡ |
 |t|ƒ | ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 s0    Y  |	 	¡ \}
}|
p || }|
j
|gtj||d
 |
 |t|ƒ | ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 s¬0    Y  t d¡j}|	 	¡ \}
}|
ž || }|
 |gtjtj|tjƒgtjtj|t|ƒƒ| gtjtj||ƒgf¡ |
 t|ƒ| ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 sx0    Y  |	 	¡ \}
}|
X || | }|
j
|gtj||d
 |
 t|ƒ| ¡}|  |||d … ¡ W d   ƒ n1 sò0    Y  W d   ƒ n1 s0    Y  d S )NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r  r  Úassoclenrä  )r  r  r$  r
   )r³  r  rè  r  rÇ  r   r  r  ÚALG_SET_AEAD_AUTHSIZEr§   r  r  r  r  r°   r±   r   ÚStructr”  ré  Ú
ALG_SET_OPÚ
ALG_SET_IVÚALG_SET_AEAD_ASSOCLENr   )r@   r!  r  ZplainZassocZexpected_ctZexpected_tagZtaglenr$  r  r  ru   Úresr´   Zpack_uint32r   r   r   Útest_aead_aes_gcmš  sl    





ÿ
ÿ
6ÿ6þþ6ÿz&LinuxKernelCryptoAPI.test_aead_aes_gcmc              	   C   s–   |   dd¡v}t d¡}| tjtj|¡ | ¡ \}}|* | d¡}|  	t
|ƒd¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )NÚrngZdrbg_pr_sha256rw  )r  rÏ   ÚurandomrÇ  r   r  r  r§   r°   r±   rè  )r@   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  ro   )r  r$  r…  )r   r(   r&   r$  r‰   r  r  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&   rU   r   r$  rŒ  r`   r   r  rÞ   r   r   r   Útest_length_restrictionö  s    (((z,LinuxKernelCryptoAPI.test_length_restrictionN)rE   rF   rG   r  r   rÛ  r  r  r#  r+  r.  r/  r0  r   r   r   r   r  D  s   



(

>


r  Úwinzrequires Windowsc                   @   s   e Zd Zh d£Zdd„ ZdS )ÚTestMSWindowsTCPFlags>   ÚTCP_KEEPCNTÚ
TCP_MAXSEGÚTCP_FASTOPENÚTCP_NODELAYÚTCP_KEEPINTVLÚTCP_KEEPIDLEc                    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   )ÚknownTCPFlagsr9  r?   r   r   rü     rí   zANew TCP flags were discovered. See bpo-32394 for more information)rÑ   r   r±   )r@   ZprovidedÚunknownr   r?   r   Útest_new_tcp_flags  s
    ÿz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rE   rF   rG   r:  r<  r   r   r   r   r2    s   r2  c                   @   s‚   e Zd Zdd„ Zdd„ Zdd„ Ze ee	dƒ p:ee	dƒ d	¡e 
ejd
¡dd„ ƒƒZe e ¡  d¡e 
ejd
¡dd„ ƒƒZdS )ÚCreateServerTestc                 C   sÄ   t  ¡ }t d|f¡8}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 sT0    Y  t jrÀtjd|ftjd8}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 s¶0    Y  d S )Nr  r   ro   r«  râ  )r   rÁ  r   Úcreate_serverr±   rœ   ré  rç   ©r@   r=   rÕ   r   r   r   Útest_address!  s    2
ÿzCreateServerTest.test_addressc                 C   s¤   t  d¡0}|  |jt j¡ |  |jt j¡ W d   ƒ n1 s@0    Y  tjr t jdt j	d0}|  |jt j	¡ |  |jt j¡ W d   ƒ n1 s–0    Y  d S )Nr  ©r«  r   râ  )
r   r>  r±   r  r:   rð   r/   r   ré  rç   )r@   rÕ   r   r   r   r   Útest_family_and_type,  s    .z%CreateServerTest.test_family_and_typec                 C   sØ   t tdƒsD|  t¡ tjddd W d   ƒ qÔ1 s80    Y  nt d¡,}| tjtj¡}|  |d¡ W d   ƒ n1 s€0    Y  tjddd,}| tjtj¡}|  	|d¡ W d   ƒ n1 sÊ0    Y  d S )NÚSO_REUSEPORT)rÝ  r   T)Ú
reuse_portr   )
r   r   r$  r  r>  rÃ  r2  rC  r±   rõ  )r@   rÕ   rR  r   r   r   Útest_reuse_port5  s    
.*z CreateServerTest.test_reuse_portr7  ÚIPV6_V6ONLYz IPV6_V6ONLY option not supportedr=  c                 C   s4   t jdt jd}W d   ƒ n1 s&0    Y  d S )NrA  râ  )r   r>  rç   rÞ   r   r   r   Útest_ipv6_only_defaultA  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 )NrA  T©r  Údualstack_ipv6)r   r>  rç   r±   r  rÞ   r   r   r   Útest_dualstack_ipv6_familyI  s
    
ÿz+CreateServerTest.test_dualstack_ipv6_familyN)rE   rF   rG   r@  rB  rE  r¢   rj  r   r  rh  r   ré  rG  r   Úhas_dualstack_ipv6rK  r   r   r   r   r=    s   	
þÿr=  c                   @   s   e Zd ZejZdd„ Zdd„ Zdd„ Ze	 
ejd¡dd	„ ƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZdS )ÚCreateServerFunctionalTestc                    sV   ‡ ‡fdd„}t  ¡ ‰ | ˆj¡ t j||fd}| ¡  ˆ |jˆj¡ ˆ  ¡  d S )Nc              	      s˜   | € |   ¡ \}}|P ˆ  ˆj¡ | d¡}|sNW d   ƒ W d   ƒ d S | |¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S r®   )r§   rƒ   r5   r°   r  )rÕ   r¨   ru   r´   ©rÁ  r@   r   r   ÚrunV  s    
z3CreateServerFunctionalTest.echo_server.<locals>.runr¹  )	rM   rx   rÊ  r5   r­  r¯  rU   r   rm   )r@   rÕ   rO  r€   r   rN  r   Úecho_serverU  s    
z&CreateServerFunctionalTest.echo_serverc                 C   sb   t j |dB}| | j¡ | |¡ | d¡ |  | d¡d¡ W d   ƒ n1 sT0    Y  d S )Nrâ  r)  r¯   )r   rÊ  r5   r­   r  r±   r°   )r@   r½   r  rÕ   r   r   r   Úecho_clientg  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   r>  rP  rQ  r:   r?  r   r   r   Ú	test_tcp4n  s    
z$CreateServerFunctionalTest.test_tcp4r=  c                 C   s\   t  ¡ }tjd|ftjd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sN0    Y  d S )Nr(  râ  r«  ©r   rÁ  r   r>  rç   rP  rQ  r?  r   r   r   Ú	test_tcp6t  s    
ÿ
z$CreateServerFunctionalTest.test_tcp6rH  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(  TrI  r  )r   rÁ  r   r>  rç   rP  rQ  r:   r?  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(  TrI  r«  rS  r?  r   r   r   Útest_dual_stack_client_v6ˆ  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rE   rF   rG   r   rU  r5   rP  rQ  rR  r¢   rh  r   ré  rT  rj  r   rL  rU  rV  r   r   r   r   rM  R  s    
	ÿÿrM  Úsend_fdsÚrecv_fdsc                   @   s   e Zd Zdd„ ZdS )ÚSendRecvFdsTestsc              	   C   sn  dd„ }dd„ }dd„ t dƒD ƒ}|  ||¡ dd„ |D ƒ}t tjtj¡\}}|v |R t |tg|¡ t |t	tƒd	 t	|ƒd	 ¡\}}}	}
|  ||¡ W d   ƒ n1 s²0    Y  W d   ƒ n1 sÐ0    Y  |  
|t¡ |  
t	|ƒt	|ƒ¡ |  
|	d
¡ t|ƒD ]&\}}|\}}t |t|ƒ ¡ ¡ qt|ƒD ]*\}}t |d¡}|  
|t|ƒ ¡ ¡ q>d S )Nc                 S   s&   | D ]\}}t  |¡ t  |¡ qd S r2   ©rÏ   r   )Úpipesr  Úfd2r   r   r   Úclose_pipes—  s    
z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipesc                 S   s   | D ]}t  |¡ qd S r2   rZ  )rç  rK  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ü   ¡  rí   z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r›  c                 S   s   g | ]\}}|‘qS r   r   )rú   ÚrfdÚwfdr   r   r   rü   £  rí   rŸ   r   rØ  )r"  rU   r   rÀ   rØ   r/   rW  r²   rX  rè  r±   ré  rÏ   rä  r  rå  r  )r@   r]  r^  r[  rç  Zsock1Zsock2r´   Zfds2rä  r½   rk  r`  ra  r›  r   r   r   ÚtestSendAndRecvFds–  s&    &Hz#SendRecvFdsTests.testSendAndRecvFdsN)rE   rF   rG   rb  r   r   r   r   rY  ’  s   rY  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S r2   )r   Zthreading_setupr¢   ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModule¼  s    rd  Ú__main__)Ôr¢   Útestr   Ztest.supportr   rc  rè  rÔ  r   rï  rÌ   r«   rM  rp   rr  rÏ   r•  rp  r,  Úweakrefr   rþ  r÷  r#  r   rÎ  rY  rÐ  Ú_threadr€   rM   rº  r¸  r   r›   rå  r²   r¦   Úsystemr   r  r   r   r"   r$   r'   r)   r+   r-   r1   r-  r6   ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_CAN_J1939ZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKr   ZHAVE_SOCKET_UDPLITEZHAVE_SOCKET_BLUETOOTHrÛ  rö  r£   r9   rH   rI   rJ   rY   rg   ri   r   r–   rh  r—   r˜   r™   rj  r    rº   r¿   rÁ   rÆ   rÇ   rÊ   rË   r×   rÚ   rß   rà   rá   râ   rä   ræ   rè   rø   r  r	  r
  rk  r—  r·  r¾  rØ  rÝ  rò  rú  r  r  r/  r:  r;  rW  r\  r_  ra  rc  rd  re  r‰  rœ  rŸ  r½  rÂ  rÅ  rÖ  râ  r7  rp  rr  rs  rt  ru  ré  rw  rx  ry  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"  ry  r#  r%  r&  r.  r;  rA  rP  rV  rX  r\  rk  rx  r‘  r’  r“  rŽ  r  r—  r™  r£  r¯  rû   r´  rÊ  r  r  r–  r2  r=  rM  rY  rd  rE   Úmainr   r   r   r   Ú<module>   sT  










	

3qÿÿÿ!ÿÿ$	
        c
S
Z
*
=

>ÿÿ.ÿ%{ÿ7ww= #P;  k   7þ


þ	



ÿ
þÿþÿ
ÿ
ÿ
ÿþ	
ÿ
ÿ
ÿ
ÿÿ
ÿþÿ

ÿ
ÿþ





ÿ



ÿ
ÿ

ÿ
ÿÿ
 ÿ)ÿþ7# ! $l


	?G9ÿ)ESÿÿ',Cÿ<e  
ÿ D3@

'