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 ©NFT)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 r   )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 r   )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 ©Nr   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 r&   )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 r&   )r   Ú
AF_QIPCRTRr!   r   r   r   r   r   r   r   Ú_have_socket_qipcrtrq   s    r-   c                  C   s   t ƒ d u} | S ©N)r   )Úretr   r   r   Ú_have_socket_vsock{   s    
r0   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS r   )r   ÚAF_BLUETOOTHÚSOCK_STREAMÚBTPROTO_RFCOMMr   r   r   r   r   r   r   Ú_have_socket_bluetooth   s    r4   c              	   c   s8   t  ¡ }zt  | ¡ d V  W t  |¡ nt  |¡ 0 d S r.   )r   ÚgetdefaulttimeoutÚsetdefaulttimeout)ÚtimeoutZold_timeoutr   r   r   Úsocket_setdefaulttimeoutŽ   s
    
r8   Ú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 r.   )r   ÚAF_INETr2   Úservr   Ú	bind_portÚportÚlisten©Úselfr   r   r   ÚsetUp¯   s    zSocketTCPTest.setUpc                 C   s   | j  ¡  d | _ d S r.   ©r=   r   rA   r   r   r   ÚtearDown´   s    
zSocketTCPTest.tearDownN©Ú__name__Ú
__module__Ú__qualname__rC   rE   r   r   r   r   r;   ­   s   r;   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSocketUDPTestc                 C   s$   t   t jt j¡| _t | j¡| _d S r.   )r   r<   r!   r=   r   r>   r?   rA   r   r   r   rC   º   s    zSocketUDPTest.setUpc                 C   s   | j  ¡  d | _ d S r.   rD   rA   r   r   r   rE   ¾   s    
zSocketUDPTest.tearDownNrF   r   r   r   r   rJ   ¸   s   rJ   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 r.   )r   r<   r!   r9   r=   r   r>   r?   rA   r   r   r   rC   Ä   s    zSocketUDPLITETest.setUpN)rG   rH   rI   rC   r   r   r   r   rK   Â   s   rK   c                       s4   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚThreadSafeCleanupTestCasec                    s    t ƒ j|i |¤Ž t ¡ | _d S r.   )ÚsuperÚ__init__Ú	threadingÚRLockÚ_cleanup_lock©rB   ÚargsÚkwargs©Ú	__class__r   r   rN   Ï   s    z"ThreadSafeCleanupTestCase.__init__c                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r.   )rQ   rM   Ú
addCleanuprR   rU   r   r   rW   Ó   s    z$ThreadSafeCleanupTestCase.addCleanupc                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r.   )rQ   rM   Ú
doCleanupsrR   rU   r   r   rX   ×   s    z$ThreadSafeCleanupTestCase.doCleanups)rG   rH   rI   rN   rW   rX   Ú__classcell__r   r   rU   r   rL   È   s   rL   c                   @   sD   e 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 )
ÚSocketCANTestÚ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   rW   r   ÚbindÚ	interfacer   ÚskipTestrA   r   r   r   rC     s    ÿzSocketCANTest.setUpN)rG   rH   rI   rb   ÚbufsizeÚcan_frame_fmtr   ÚcalcsizeZcan_frame_sizeÚbcm_cmd_msg_fmtrC   r   r   r   r   rZ   Û   s   

rZ   c                   @   s   e Zd ZdZdd„ ZdS )ÚSocketRDSTesté    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=   rW   r   r   r>   r?   r   rc   rA   r   r   r   rC     s    zSocketRDSTest.setUpN)rG   rH   rI   rd   rC   r   r   r   r   rh     s   rh   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 )ÚThreadableTestc                 C   s   | j | _| j| _ d S r.   )rC   Ú_ThreadableTest__setUpÚ_setUprA   r   r   r   rN   D  s    zThreadableTest.__init__c                 C   s   | j  ¡  d S r.   )Úserver_readyÚsetrA   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 r.   )ÚqueueÚqsizeÚgetr   rA   r   r   Úraise_queued_exception[  s    
z5ThreadableTest._setUp.<locals>.raise_queued_exceptionÚ.Ú_T)r   Zwait_threads_exitZwait_threadsÚ	__enter__rW   Ú__exit__rO   ÚEventrm   Úclient_readyÚdonerq   ÚQueueÚserver_crashedÚidÚrfindÚgetattrÚthreadÚstart_new_threadÚ	clientRunZclient_threadrk   rn   Úwait)rB   rt   Z
methodnamer:   Ztest_methodr   rA   r   rl   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)rm   r„   ÚclientSetUpÚBaseExceptionrq   ÚputÚclientTearDownrz   rn   r}   r   Ú	TypeError)rB   Z	test_funcÚer   r   r   rƒ   r  s(    

þ

$zThreadableTest.clientRunc                 C   s   t dƒ‚d S )Nz clientSetUp must be implemented.)ÚNotImplementedErrorrA   r   r   r   r†   ˆ  s    zThreadableTest.clientSetUpc                 C   s   | j  ¡  t ¡  d S r.   )r{   rn   r   ÚexitrA   r   r   r   r‰   ‹  s    
zThreadableTest.clientTearDownN)	rG   rH   rI   rN   ro   rl   rƒ   r†   r‰   r   r   r   r   rj     s   &"rj   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedTCPSocketTestÚrunTestc                 C   s   t j| |d t | ¡ d S ©N)Ú
methodName©r;   rN   rj   ©rB   r‘   r   r   r   rN   ‘  s    zThreadedTCPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r.   )r   r<   r2   ÚclirA   r   r   r   r†   •  s    z!ThreadedTCPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   ©r”   r   rj   r‰   rA   r   r   r   r‰   ˜  s    
z$ThreadedTCPSocketTest.clientTearDownN)r   ©rG   rH   rI   rN   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   )rJ   rN   rj   r“   r   r   r   rN   Ÿ  s    zThreadedUDPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r.   )r   r<   r!   r”   rA   r   r   r   r†   £  s    z!ThreadedUDPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   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   )rK   rN   rj   r“   r   r   r   rN   ¯  s    z"ThreadedUDPLITESocketTest.__init__c                 C   s   t   t jt jt j¡| _d S r.   )r   r<   r!   r9   r”   rA   r   r   r   r†   ³  s    z%ThreadedUDPLITESocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   ¶  s    
z(ThreadedUDPLITESocketTest.clientTearDownN)r   r–   r   r   r   r   r˜   «  s   
r˜   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedCANSocketTestr   c                 C   s   t j| |d t | ¡ d S r   )rZ   rN   rj   r“   r   r   r   rN   ½  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 r.   )r   r   r   r   r”   ra   rb   r   rA   r   r   r   r†   Á  s
    z!ThreadedCANSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   Ê  s    
z$ThreadedCANSocketTest.clientTearDownN)r   r–   r   r   r   r   r™   »  s   
	r™   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedRDSSocketTestr   c                 C   s   t j| |d t | ¡ d S r   )rh   rN   rj   r“   r   r   r   rN   Ñ  s    zThreadedRDSSocketTest.__init__c                 C   sL   t   t jt jd¡| _z | j tdf¡ | j ¡ | _W n tyF   Y n0 d S ©Nr   )	r   r'   r(   r”   ra   ÚHOSTÚgetsocknameÚcli_addrr   rA   r   r   r   r†   Õ  s    z!ThreadedRDSSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   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ÚTestCaserN   rj   r“   r   r   r   rN   ì  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 r.   )r   ÚAF_VSOCKr2   r=   rW   r   ra   ÚVMADDR_CID_ANYÚ	VSOCKPORTr@   ro   ÚacceptÚconnÚconnaddrrA   r   r   r   rC   ð  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¥   r2   r”   rW   r   r   Úconnectr§   )rB   Zcidr   r   r   r†   ù  s
    
z)ThreadedVSOCKSocketStreamTest.clientSetUpc                 C   s   | j  d¡}|  |t¡ d S ©Né   )r©   ÚrecvÚassertEqualÚMSG©rB   Úmsgr   r   r   Ú
testStream   s    z(ThreadedVSOCKSocketStreamTest.testStreamc                 C   s   | j  t¡ | j  ¡  d S r.   ©r”   Úsendr³   r   rA   r   r   r   Ú_testStream  s    z)ThreadedVSOCKSocketStreamTest._testStreamN)r   ©rG   rH   rI   rN   rC   r†   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 )ÚSocketConnectedTestr   c                 C   s   t j| |d d S r   )rŽ   rN   r“   r   r   r   rN     s    zSocketConnectedTest.__init__c                 C   s*   t  | ¡ |  ¡  | j ¡ \}}|| _d S r.   )rŽ   rC   ro   r=   r¨   Úcli_conn©rB   r©   Úaddrr   r   r   rC     s    
zSocketConnectedTest.setUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   )r¼   r   rŽ   rE   rA   r   r   r   rE     s    
zSocketConnectedTest.tearDownc                 C   s(   t  | ¡ | j t| jf¡ | j| _d S r.   )rŽ   r†   r”   r®   rœ   r?   Ú	serv_connrA   r   r   r   r†     s    
zSocketConnectedTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   )r¿   r   rŽ   r‰   rA   r   r   r   r‰   $  s    
z"SocketConnectedTest.clientTearDownN)r   ©rG   rH   rI   rN   rC   rE   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   rN   +  s    zSocketPairTest.__init__c                 C   s   t  ¡ \| _| _d S r.   )r   Ú
socketpairr=   r”   rA   r   r   r   rC   /  s    zSocketPairTest.setUpc                 C   s   | j  ¡  d | _ d S r.   rD   rA   r   r   r   rE   2  s    
zSocketPairTest.tearDownc                 C   s   d S r.   r   rA   r   r   r   r†   6  s    zSocketPairTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   9  s    
zSocketPairTest.clientTearDownN)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S )ÚSocketTestBasec                 C   s   |   ¡ | _|  ¡  d S r.   )Ú	newSocketr=   Ú
bindServerrA   r   r   r   rC   N  s    
zSocketTestBase.setUpc                 C   s   |   | j¡ | j ¡ | _d S r.   )ÚbindSockr=   r   Ú	serv_addrrA   r   r   r   rÅ   R  s    zSocketTestBase.bindServerc                 C   s   | j  ¡  d | _ d S r.   rD   rA   r   r   r   rE   W  s    
zSocketTestBase.tearDownN)rG   rH   rI   rC   rÅ   rE   r   r   r   r   rÃ   E  s   	rÃ   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSocketListeningTestMixinc                    s   t ƒ  ¡  | j ¡  d S r.   )rM   rC   r=   r@   rA   rU   r   r   rC   _  s    
zSocketListeningTestMixin.setUp©rG   rH   rI   rC   rY   r   r   rU   r   rÈ   \  s   rÈ   c                       s<   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z‡  ZS )ÚThreadedSocketTestMixinc                    s    t ƒ j|i |¤Ž t | ¡ d S r.   )rM   rN   rj   rR   rU   r   r   rN   l  s    z ThreadedSocketTestMixin.__init__c                 C   s   |   ¡ | _|  ¡  d S r.   )ÚnewClientSocketr”   Ú
bindClientrA   r   r   r   r†   p  s    
z#ThreadedSocketTestMixin.clientSetUpc                 C   s   |   ¡ S r.   )rÄ   rA   r   r   r   rË   t  s    z'ThreadedSocketTestMixin.newClientSocketc                 C   s   |   | j¡ | j ¡ | _d S r.   )rÆ   r”   r   rž   rA   r   r   r   rÌ   x  s    z"ThreadedSocketTestMixin.bindClientc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   }  s    
z&ThreadedSocketTestMixin.clientTearDown)	rG   rH   rI   rN   r†   rË   rÌ   r‰   rY   r   r   rU   r   rÊ   d  s
   rÊ   c                       s@   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚConnectedStreamTestMixinc                    s*   t ƒ  ¡  |  ¡  | j ¡ \}}|| _d S r.   )rM   rC   ro   r=   r¨   r¼   r½   rU   r   r   rC   Œ  s    
zConnectedStreamTestMixin.setUpc                    s   | j  ¡  d | _ tƒ  ¡  d S r.   )r¼   r   rM   rE   rA   rU   r   r   rE   ”  s    
z!ConnectedStreamTestMixin.tearDownc                    s$   t ƒ  ¡  | j | j¡ | j| _d S r.   )rM   r†   r”   r®   rÇ   r¿   rA   rU   r   r   r†   ™  s    
z$ConnectedStreamTestMixin.clientSetUpc                    s6   z| j  ¡  d | _ W n ty&   Y n0 tƒ  ¡  d S r.   )r¿   r   r   rM   r‰   rA   rU   r   r   r‰   ž  s    

z'ConnectedStreamTestMixin.clientTearDown)rG   rH   rI   rC   rE   r†   r‰   rY   r   r   rU   r   rÍ   ƒ  s   	rÍ   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚUnixSocketTestBasec                    s(   t  ¡ | _|  tj| j¡ tƒ  ¡  d S r.   )ÚtempfileÚmkdtempÚdir_pathrW   ÚosÚrmdirrM   rC   rA   rU   r   r   rC   ¯  s    
zUnixSocketTestBase.setUpc                 C   s,   t j| jd}t ||¡ |  tj|¡ d S )N)Údir)rÏ   ÚmktemprÑ   r   Úbind_unix_socketrW   r   Úunlink)rB   ÚsockÚpathr   r   r   rÆ   ´  s    zUnixSocketTestBase.bindSock)rG   rH   rI   rC   rÆ   rY   r   r   rU   r   rÎ   §  s   rÎ   c                   @   s   e Zd Zdd„ ZdS )ÚUnixStreamBasec                 C   s   t   t jt j¡S r.   )r   ÚAF_UNIXr2   rA   r   r   r   rÄ   ¼  s    zUnixStreamBase.newSocketN©rG   rH   rI   rÄ   r   r   r   r   rÚ   ¹  s   rÚ   c                       s(   e Zd ZeZ‡ fdd„Zdd„ Z‡  ZS )ÚInetTestBasec                    s   t ƒ  ¡  | jd | _d S ©Nrp   )rM   rC   rÇ   r?   rA   rU   r   r   rC   Å  s    
zInetTestBase.setUpc                 C   s   t j|| jd d S )N©Úhost)r   r>   rà   ©rB   rØ   r   r   r   rÆ   É  s    zInetTestBase.bindSock)rG   rH   rI   rœ   rà   rC   rÆ   rY   r   r   rU   r   rÝ   À  s   rÝ   c                   @   s   e Zd Zdd„ ZdS )ÚTCPTestBasec                 C   s   t   t jt j¡S r.   )r   r<   r2   rA   r   r   r   rÄ   Ï  s    zTCPTestBase.newSocketNrÜ   r   r   r   r   râ   Ì  s   râ   c                   @   s   e Zd Zdd„ ZdS )ÚUDPTestBasec                 C   s   t   t jt j¡S r.   )r   r<   r!   rA   r   r   r   rÄ   Õ  s    zUDPTestBase.newSocketNrÜ   r   r   r   r   rã   Ò  s   rã   c                   @   s   e Zd Zdd„ ZdS )ÚUDPLITETestBasec                 C   s   t   t jt jt j¡S r.   )r   r<   r!   r9   rA   r   r   r   rÄ   Û  s    zUDPLITETestBase.newSocketNrÜ   r   r   r   r   rä   Ø  s   rä   c                   @   s   e Zd Zdd„ ZdS )ÚSCTPStreamBasec                 C   s   t   t jt jt j¡S r.   )r   r<   r2   ÚIPPROTO_SCTPrA   r   r   r   rÄ   á  s    ÿzSCTPStreamBase.newSocketNrÜ   r   r   r   r   rå   Þ  s   rå   c                   @   s   e Zd ZejZdS )ÚInet6TestBaseN)rG   rH   rI   r   ÚHOSTv6rà   r   r   r   r   rç   æ  s   rç   c                   @   s   e Zd Zdd„ ZdS )ÚUDP6TestBasec                 C   s   t   t jt j¡S r.   )r   ÚAF_INET6r!   rA   r   r   r   rÄ   î  s    zUDP6TestBase.newSocketNrÜ   r   r   r   r   ré   ë  s   ré   c                   @   s   e Zd Zdd„ ZdS )ÚUDPLITE6TestBasec                 C   s   t   t jt jt j¡S r.   )r   rê   r!   r9   rA   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 )Nc                  _   s   d S r.   r   ©rS   rT   r   r   r   Úclient_pass  s    z%skipWithClientIf.<locals>.client_passc                    s*   t  ˆ¡| ƒ}t| tƒs&‡ fdd„|_|S )Nc                    s   ˆ S r.   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 r.   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 )Nc                    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 r.   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 )
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 r.   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 r.   )r  ©rý   Úor   r   r   r  4  rð   )r  r   r   r  r   rû   Úformat)rS   Ú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   )rB   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<   r2   ÚassertInÚfilenoÚreprÚassertNotInra   r  r   ©rB   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<   r2   r  Úfamilyró   Úprotor²   r  r   )rB   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<   r2   r   r²   r  r   Ú
gc_collectÚReferenceErrorÚfail)rB   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!   rW   r   ra   r   r'  rŠ   Úsendtor²   r  Ú	exceptionr  )rB   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 r.   )r   r<   Úhas_ipv6rê   r2   r!   r   ÚSOCK_RDMr(   Ú
SOL_SOCKETÚSO_REUSEADDRrA   r   r   r   ÚtestCrucialConstants¡  s    z'GeneralModuleTests.testCrucialConstantsc                 C   s   t j t j t jrt j d S r.   )r   ÚIPPROTO_TCPÚIPPROTO_UDPr3  ÚIPPROTO_IPV6rA   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 r.   )	r   ZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPræ   rA   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_RECVRTHDRÚIPV6_HOPOPTSÚIPV6_PKTINFOÚIPV6_CHECKSUMÚIPV6_DONTFRAGÚ
IPV6_RTHDRÚIPV6_RTHDRDSTOPTSÚIPV6_RECVPKTINFOÚIPV6_RECVDSTOPTSÚIPV6_HOPLIMITÚIPV6_RECVHOPOPTSÚIPV6_RECVPATHMTUZIPV6_USE_MIN_MTUÚIPV6_RECVHOPLIMITÚIPV6_RTHDR_TYPE_0ÚIPV6_TCLASSÚIPV6_PATHMTUÚIPV6_DSTOPTSÚIPV6_RECVTCLASSÚIPV6_NEXTHOPzMissing RFC3542 socket option 'ú')r  r   r   )rB   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 failureru   r   zError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r   ÚgethostnameÚgethostbynamer   rc   r  ÚfindÚgethostbyaddrÚgetfqdnr#  r  )rB   Ú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   rY  r  r[  )rB   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   rY  r[  )rB   Zexplanationr¾   r   r   r   Ú test_host_resolution_bad_addressú  s    ÿ(z3GeneralModuleTests.test_host_resolution_bad_addressÚsethostnameztest needs socket.sethostname()rX  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   rX  rd  r   ÚerrnoÚEPERMrc   r²   )rB   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   ri  r  Úintr  ÚassertGreaterÚif_nametoindexr²   Úif_indextoname)rB   Z
interfacesÚindexrþ   Z_indexÚ_namer   r   r   ÚtestInterfaceNameIndex  s    

z)GeneralModuleTests.testInterfaceNameIndexrm  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   rm  rŠ   rA   r   r   r   ÚtestInvalidInterfaceIndexToName-  s    z2GeneralModuleTests.testInvalidInterfaceIndexToNamerl  z&socket.if_nametoindex() not available.c                 C   s$   |   ttjd¡ |   ttjd¡ d S rq  )r'  rŠ   r   rl  r   rA   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)Úsysrt  rG   r   ÚgetnameinforŠ   r#  )rB   Ú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   rv  r   rA   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é    é   rp   )r   rp   éÿÿ  i  ÿÿr    igE#i2Tvl        )	r   ÚhtonlÚntohlÚhtonsÚntohsÚitemsr²   r'  ÚOverflowError)rB   ZsizesÚfuncÚsizeÚmaskr:   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   rp   r    r|  ì   ÿÿ éÿÿÿÿéþÿÿÿl        rp   éè  é   )Ú	_testcapiZINT_MINÚINT_MAXr   r€  r  r~  r}  r'  r‚  ÚassertWarnsÚDeprecationWarning)rB   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²   ru  ÚplatformÚ
startswithr   Úgetservbynamer   r   r–  r   Z
is_androidÚgetservbyportr'  r‚  )rB   Ú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   r5   Ú
gettimeoutr8   r6   r'  Ú
ValueErrorrŠ   )rB   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ó   ÿÿÿÿra  )r²   r   r¢  rA   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 r.   r   ©Úa)r<   r§  r   r   rï   Å  rð   z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r.   ©r'  r   r   ©rƒ  r©  rA   r   r   rï   Ç  s   
ÿr£  r¤  s   ÿ ÿ z255.0.255.0s   ªªªªz170.170.170.170ó   ú1.2.3.4r¥  ra  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   ©rB   r   ÚgÚassertInvalidr   )r<   r§  rB   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ê   r3  úIPv6 not availableú+could not import needed symbols from socketÚwin32ú::é&'  úIPv6 might not be supportedc                    s
   ˆˆ | ƒS r.   r   r¨  )rê   r§  r   r   rï   ó  rð   z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r.   rª  r¨  ©r   rB   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ê   r3  rc   ÚImportErrorru  r˜  r   Úwinerrorr²   r   ©rB   r3  r‹   r±  r   )rê   r   r§  rB   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 r.   r   r¨  )r<   r¿  r   r   rï   &  rð   z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r.   rª  r«  rA   r   r   rï   '  s   
ÿz1.0.1.0s     z170.85.170.85s   ªUªUra  r¥  r­  r¬  s      s        rº  )r   rÀ  r¿  r<   r²   Ú	bytearrayr¯  r   )r<   r¿  rB   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ê   r3  r³  r´  rµ  rº  r·  r¸  c                    s
   ˆˆ | ƒS r.   r   r¨  )rê   r¿  r   r   rï   M  rð   z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r.   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ê   r3  rc   r»  ru  r˜  r   r¼  r²   rÁ  r½  r   )rê   r   r¿  rB   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¤  rW  r   z
%s invalidrp   )r   Úfind_unused_portr   r<   r2   rW   r   ra   r   rY  rX  r   rc   r  r²   )rB   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<   r2   rW   r   Ú
getsockoptr5  r6  ÚassertFalse©rB   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 )Nrp   r   zfailed to set reuse mode)
r   r<   r2   rW   r   Ú
setsockoptr5  r6  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 )Nrp   ó   spam)r   r<   r2   Ú
settimeoutr'  r   r¸   rá   r   r   r   ÚtestSendAfterClose‚  s    (z%GeneralModuleTests.testSendAfterClosec              
   C   s‚   t   ¡ }| t jdf¡ t j | ¡ d ¡  z| ¡  W n: tyr } z"|  |jtjtj	f¡ W Y d }~nd }~0 0 |  
d¡ d S )Nr   ©r  z#close() should raise EBADF/ENOTSOCK)r   ra   Ú
_LOCALHOSTr  r   r   r  rf  ÚEBADFÚENOTSOCKr#  )rB   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<   r2   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   rW   r   r   rÄ  r'  r‚  ra   rœ   Ú	itertoolsÚcountr   rf  Z
EADDRINUSE)rB   rØ   r?   Zbig_portZneg_portr:   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ˆ  )rp   éd   rÛ  )	r  r   r   rW   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   rW   r   r   rÝ  r   r¼  rc   r'  rŠ   )rB   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)  rf  ÚEAI_SERVICErc   rœ   r²   Úlenr   ÚIPV6_ENABLEDr   ru  r–  r<   r2   r  ÚSOL_TCPÚ
AI_PASSIVEÚ	AF_UNSPECr'  ÚUnicodeEncodeErrorrè  )
rB   r  ÚinfoZinfosr  ró   rv   Ú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   rv  rA   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   rY  Úgethostbyname_exré  rï  r2   )rB   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©rS   rA   r   r   Ú
ok_handler:  s    z@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlerc                     s   ˆ   ttjd¡ dd  d S ©Nr   rp   rù  rü  rA   r   r   Úraising_handler<  s    zEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg      ø?rp   ó   xr   )r   Úsignalr   rc   rÂ   ÚSIGALRMrÍ  r'  ÚZeroDivisionErrorrø  Úsendallr   ÚSOCK_MAX_SIZEr7   r   )rB   Zwith_timeoutrý  rÿ  Úcr   Ú	old_alarmr   rA   r   Úcheck_sendall_interrupted4  s4    


.
ÿ

ý
z,GeneralModuleTests.check_sendall_interruptedc                 C   s   |   d¡ d S ©NF©r  rA   r   r   r   Útest_sendall_interruptedS  s    z+GeneralModuleTests.test_sendall_interruptedc                 C   s   |   d¡ d S )NTr
  rA   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<   r2   r  rŽ  ÚResourceWarningr   r!  r  r  ÚwarningrS   Úmakefile)rB   rØ   r   r1  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<   r2   r  r   r²   r  ©rB   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   rp   rˆ  )	r   ra   rœ   r   r  r'  r   r@   rŠ   rá   r   r   r   Útest_socket_close{  s    *(þ((z$GeneralModuleTests.test_socket_closec                 C   sš   dD ]}| j |dp t ¡ H}| |¡}|  |j|¡ W d   ƒ n1 sN0    Y  W d   ƒ n1 sl0    Y  W d   ƒ q1 sŠ0    Y  qd S )N)r   r	   ÚrwÚwÚwb©Úmode)ÚsubTestr   r  r²   r  )rB   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  )rB   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²   r2   )rB   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<   r2   ra   rœ   r@   )rB   Ú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<   r2   ra   rœ   r'  r‚  r@   r  )rB   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   rv  r   rè   rê   r2   ra   r  r   r   r   Útest_flowinfo¶  s
    
ÿz GeneralModuleTests.test_flowinfoc                 C   s0   t  ddt jt jt j¡\^ }}|  |d¡ d S )Núff02::1de:c0:face:8Dr   )úff02::1de:c0:face:8dr   r   r   )r   ré  rê   r!   r9  r²   )rB   rv   Ú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   r3  )r   ri  ré  rê   r!   r9  r²   )rB   ÚifindexÚtest_interfacerv   r4  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é*   r6  r   r3  r   )r   ré  r  rê   r!   r9  r²   )rB   r7  rv   r4  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   r2  r   úff02::1de:c0:face:8d%Ú1234)r   ri  rv  ÚNI_NUMERICHOSTÚNI_NUMERICSERVr²   )rB   r7  r8  r4  Únameinfor   r   r   Ú&test_getnameinfo_ipv6_scopeid_symbolicç  s    z9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolicc                 C   s@   d}ddd|f}t  |t jt jB ¡}|  |dt|ƒ df¡ d S )Nr:  r2  r   r   r<  r=  )r   rv  r>  r?  r²   r  )rB   r7  r4  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<   r2   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Ô  rp   TF)r€   r   r2   r<   r²   ró   rÍ  Úsetblocking)rB   rD  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 )Nrp   c                 s   s   | ]\}}|d vr|V  qdS )>   rÔ  rD  Nr   )rý   rþ   Úkindr   r   r   r    s   þzEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>r—  )r  ró   r  r  r   )r   r<   r2   ÚdetachÚmaxÚAddressFamilyÚ__members__ÚvaluesÚ
SocketKindr  r²   r  ró   r  r  )rB   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 r.   ©rN  )rB   rN  r   r   r   rN   /  s    zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S   s   | j S r.   rQ  rA   r   r   r   r  2  s    zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rG   rH   rI   rN   r  r   r   r   r   ÚFile.  s   rR  r    rŠ  )r   rÒ   r   ÚcurdirÚO_RDONLYr   r'  Ú_GiveupOnSendfileÚ_sendfile_use_sendfiler‚  rŠ   )rB   rR  rØ   rN  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   rW   r   rH  )rB   r   r  ÚstyperN  Ú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<   r2   rW   r   ra   r   rœ   r[  r   r!   rì  rê   rè   rÏ   rÐ   ÚshutilÚrmtreerÛ   rÒ   rÙ   r  ÚPermissionError)rB   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<   r2   rA   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`  rA   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<   r2   rA   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 )Nrd  iÖÿÿÿrÏ  re  rA   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  r0  rf  rÑ  r<   r2   )rB   ZWSAENOTSOCKr1  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 rX  )rÏ   ÚNamedTemporaryFiler'  r   r   r  r<   r2   r²   r0  rf  rÒ  )rB   Zafiler1  r   r   r   Ú%test_socket_fileno_requires_socket_fdˆ  s    
.ý$z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)YrG   rH   rI   r  r  r£   Ú
skipUnlessr  r   r%  r*  r2  r7  r;  rÒ   rþ   r>  ru  r˜  r   rì  rV  r`  rb  rc  r   r   rh  rp  rr  rs  rx  ry  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/  r1  r5  ÚskipIfr   r9  r;  rA  rB  rC  rF  rO  rW  r[  r_  ra  rc  rf  rg  rh  rj  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 r.   )r   ÚAF_CANr   r   rA   r   r   r   r7  ˜  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 r.   )r   rp  Ú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_FRAMErA   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 r.   ©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 r.   )r   r   r!   rp  r  r   r   r   ÚtestCreateBCMSocketÁ  s    z BasicCANTest.testCreateBCMSocketc                 C   sV   t   t jt jt j¡.}d}| |¡ |  | ¡ |¡ W d   ƒ n1 sH0    Y  d S )N)r+  )r   r   r   r   ra   r²   r   )rB   r   Úaddressr   r   r   ÚtestBindAnyÇ  s    
zBasicCANTest.testBindAnyc                 C   sJ   t   t jt jt j¡"}|  td|jd¡ W d   ƒ n1 s<0    Y  d S )Núinterface name too long)Á   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   r   r   r   r#  r   ra   r  r   r   r   ÚtestTooLongInterfaceNameÍ  s    ÿz%BasicCANTest.testTooLongInterfaceNameÚCAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c              	   C   sl   t   t jt jt j¡D}dD ].}| t jt j|¡ |  || t jt j¡¡ qW d   ƒ n1 s^0    Y  d S )N)r   rp   )	r   r   r   r   rÊ  ÚSOL_CAN_RAWr’  r²   rÆ  )rB   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Á  )rB   Úcan_idZcan_maskZ
can_filterr   r   r   r   Ú
testFilterÝ  s    ÿzBasicCANTest.testFilterN)rG   rH   rI   r7  r£   rk  r   r   r‰  r‹  rŒ  rŽ  r‘  r”  r™  r   r   r   r   rn  •  s(   ÿ
ÿ
ÿ
ÿrn  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™   rN   r“   r   r   r   rN   ì  s    zCANTest.__init__c                 C   s&   t |ƒ}| dd¡}t | j|||¡S )Nr^   ó    )rë  Úljustr   r—  re   )Úclsr˜  ÚdataÚcan_dlcr   r   r   Úbuild_can_frameï  s    zCANTest.build_can_framec                 C   s&   t  | j|¡\}}}|||d |… fS r.   )r   r   re   )r  Úframer˜  rŸ  rž  r   r   r   Údissect_can_frameö  s    zCANTest.dissect_can_framec                 C   s6   | j  | j¡\}}|  | j|¡ |  |d | j¡ d S r›   )r   Úrecvfromrd   r²   Úcfrb   ©rB   r¤  r¾   r   r   r   ÚtestSendFrameü  s    zCANTest.testSendFramec                 C   s    |   dd¡| _| j | j¡ d S )Nr   s   ©r   r¤  r”   r¸   rA   r   r   r   Ú_testSendFrame  s    zCANTest._testSendFramec                 C   s$   | j  | j¡\}}|  | j|¡ d S r.   )r   r£  rd   r²   r¤  r¥  r   r   r   ÚtestSendMaxFrame  s    zCANTest.testSendMaxFramec                 C   s    |   dd¡| _| j | j¡ d S )Nr   s   r§  rA   r   r   r   Ú_testSendMaxFrame	  s    zCANTest._testSendMaxFramec                 C   sD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r.   )r   r£  rd   r²   Úcf1Úcf2r¥  r   r   r   ÚtestSendMultiFrames  s    zCANTest.testSendMultiFramesc                 C   s<   |   dd¡| _| j | j¡ |   dd¡| _| j | j¡ d S )Né   s   D3"é   s   ™"3)r   r«  r”   r¸   r¬  rA   r   r   r   Ú_testSendMultiFrames  s    zCANTest._testSendMultiFramesrp  rq  c                 C   sP   | j  | j¡\}}|  | j|¡ |  |¡\}}}|  | j|¡ |  | j|¡ d S r.   )r”   r£  rd   r²   r¤  r¢  r˜  rž  )rB   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"  rp   )r   r   r!   rp  rW   r   r®   rb   r˜  Úbytesrž  r   r¤  ru  r   r—  rg   r¸   r²   rë  )rB   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   )rG   rH   rI   rN   Úclassmethodr   r¢  r¦  r¨  r©  rª  r­  r°  r£   rk  r   r   r±  r¸  r   r   r   r   rš  é  s&   


ÿ
ÿrš  z!CAN ISOTP required for this test.c                       sV   e Zd Z‡ fdd„Zdd„ Zdd„ Ze ee	dƒd¡d	d
„ ƒZ
dd„ Zdd„ Z‡  ZS )Ú	ISOTPTestc                    s   t ƒ j|i |¤Ž d| _d S ©Nr[   ©rM   rN   rb   rR   rU   r   r   rN   G  s    zISOTPTest.__init__c                 C   s   t j t j t j t j d S r.   )r   ro  r   r"   r!   rA   r   r   r   r7  K  s    zISOTPTest.testCrucialConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r.   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 r.   )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  rp   r    )r   r   r!   r"   r#  r   ra   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"   rb   ra   r²   r   r   rf  ÚENODEVrc   ©rB   r   r¾   r‹   r   r   r   ÚtestBinda  s    
2ÿzISOTPTest.testBind)rG   rH   rI   rN   r7  r‹  r£   rk  r   r   r½  r‘  rÀ  rY   r   r   rU   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¼  rR   rU   r   r   rN   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 r.   )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_MAXrA   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 r.   )r   r   r!   r$   r  r   r   r   ÚtestCreateJ1939Socket™  s    zJ1939Test.testCreateJ1939Socketc              
   C   s°   zft   t jt jt j¡>}| jt jt jt jf}| |¡ |  	| 
¡ |¡ W d   ƒ n1 sZ0    Y  W nD tyª } z,|jtjkr”|  d| j ¡ n‚ W Y d }~n
d }~0 0 d S r_   )r   r   r!   r$   rb   rÅ  rË  rÄ  ra   r²   r   r   rf  r¾  rc   r¿  r   r   r   rÀ  Ÿ  s    
2ÿzJ1939Test.testBind)rG   rH   rI   rN   r£   rk  r   r   rÙ  rÚ  rÀ  rY   r   r   rU   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 r.   )r   ÚAF_RDSr'   rA   r   r   r   r7  °  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Ê  r5  Ú	SO_RCVBUFÚ	SO_SNDBUF)rB   rd   r   r   r   r   ÚtestSocketBufferSize¸  s    z!BasicRDSTest.testSocketBufferSizeN)rG   rH   rI   r7  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š   rN   r“   r   r   r   rN   Â  s    zRDSTest.__init__c                    s   t ƒ  ¡  t ¡ | _d S r.   )rM   rC   rO   ry   ZevtrA   rU   r   r   rC   Å  s    
zRDSTest.setUpc                 C   s2   | j  | j¡\}}|  | j|¡ |  | j|¡ d S r.   )r=   r£  rd   r²   rž  rž   ©rB   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?   rA   r   r   r   Ú_testSendAndRecvÎ  s    zRDSTest._testSendAndRecvc                 C   sH   | j  | jtj¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r.   )r=   r£  rd   r   ÚMSG_PEEKr²   rž  rá  r   r   r   ÚtestPeekÒ  s    zRDSTest.testPeekc                 C   s"   d| _ | j | j dt| jf¡ d S rã  rä  rA   r   r   r   Ú	_testPeekØ  s    zRDSTest._testPeekÚrecvmsgc                 C   s(   | j  | j¡\}}}}|  | j|¡ d S r.   )r=   ré  rd   r²   rž  )rB   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?   rA   r   r   r   Ú_testSendAndRecvMsgá  s    zRDSTest._testSendAndRecvMsgc                 C   sD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r.   )r=   r£  rd   r²   Údata1Údata2rá  r   r   r   ÚtestSendAndRecvMultiæ  s    zRDSTest.testSendAndRecvMultic                 C   s@   d| _ | j | j dt| jf¡ d| _| j | jdt| jf¡ d S )Ns   baconr   s   egg)rî  r”   r/  rœ   r?   rï  rA   r   r   r   Ú_testSendAndRecvMultií  s    zRDSTest._testSendAndRecvMultic                 C   sL   t   | jgg g d¡\}}}|  | j|¡ | j | j¡\}}|  | j|¡ d S )Ng      @)Úselectr=   r  r£  rd   r²   rž  )rB   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ä  rA   r   r   r   Ú_testSelectú  s    zRDSTest._testSelect)r   )rG   rH   rI   rN   rC   râ  rå  rç  rè  r  r   rë  rí  rð  rñ  ró  rô  rY   r   r   rU   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 r.   )r   r,   rA   r   r   r   r7  	  s    z%BasicQIPCRTRTest.testCrucialConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r.   )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 ©Nrp   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ß   rp   )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û  rp   r   )r   r,   r!   r®   rø  r   r  r   r   r   ÚtestAutoBindSock	  s    
z!BasicQIPCRTRTest.testAutoBindSockN)	rG   rH   rI   r7  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 r.   )r   r¥   rA   r   r   r   r7   	  s    z#BasicVSOCKTest.testCrucialConstantsc                 C   s4   t j t j t j t j t j t j t j t j d S r.   )	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   rA   r   r   r   ÚtestVSOCKConstants#	  s    z!BasicVSOCKTest.testVSOCKConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r.   )r   r¥   r2   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¥   r2   rÆ  r   rþ  rÿ  rÊ  r²   )rB   r   Zorig_maxrw  Zorig_minr   r   r   rß  1	  sD    ÿÿÿ
ÿ
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿz#BasicVSOCKTest.testSocketBufferSizeN)rG   rH   rI   r7  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_LOCALr1   r3   ru  r˜  ÚBTPROTO_HCIZSOL_HCIÚBTPROTO_L2CAPr™  ÚBTPROTO_SCOrA   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 r.   )r   r1   r2   r3   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 r.   )r   r1   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 r.   )r   r1   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 r.   )r   r1   r(   r	  r  r   r   r   ÚtestCreateScoSocketl	  s    z&BasicBluetoothTest.testCreateScoSocketN)rG   rH   rI   r
  r  r£   rm  ru  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»   rN   r“   r   r   r   rN   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 r.   ©r¿   r¸   r³   rA   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²   )rB   Úseg1Úseg2rµ   r   r   r   ÚtestOverFlowRecv€	  s    zBasicTCPTest.testOverFlowRecvc                 C   s   | j  t¡ d S r.   r  rA   r   r   r   Ú_testOverFlowRecv‡	  s    zBasicTCPTest._testOverFlowRecvc                 C   s    | j  d¡\}}|  |t¡ d S r¯   )r¼   r£  r²   r³   ©rB   rµ   r¾   r   r   r   ÚtestRecvFromŠ	  s    zBasicTCPTest.testRecvFromc                 C   s   | j  t¡ d S r.   r  rA   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²   )rB   r  r¾   r  rµ   r   r   r   ÚtestOverFlowRecvFrom’	  s    z!BasicTCPTest.testOverFlowRecvFromc                 C   s   | j  t¡ d S r.   r  rA   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²   )rB   rµ   Úreadr   r   r   ÚtestSendAllœ	  s    
zBasicTCPTest.testSendAllc                 C   s   d}| j  |¡ d S )Nr  )r¿   r  )rB   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<   r2   rW   r   r  r±   r²   r³   )rB   rN  rØ   rµ   r   r   r   Ú
testFromFdª	  s    

zBasicTCPTest.testFromFdc                 C   s   | j  t¡ d S r.   r  rA   r   r   r   Ú_testFromFd³	  s    zBasicTCPTest._testFromFdc                 C   s0   | j  ¡ }|  |j¡ | d¡}|  |t¡ d S r¯   )r¼   ÚduprW   r   r±   r²   r³   )rB   rØ   rµ   r   r   r   ÚtestDup¶	  s    

zBasicTCPTest.testDupc                 C   s   | j  t¡ d S r.   r  rA   r   r   r   Ú_testDup½	  s    zBasicTCPTest._testDupc                 C   s&   | j  d¡}|  |t¡ | j ¡  d S r¯   )r¼   r±   r²   r³   r{   r„   r´   r   r   r   ÚtestShutdownÀ	  s    zBasicTCPTest.testShutdownc                 C   s   | j  t¡ | j  d¡ d S r  )r¿   r¸   r³   ÚshutdownrA   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   rp   r    )	rŒ  r¿   r¸   r³   r'  r‚  r*  r  ÚUINT_MAX©rB   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  rH  r²   r  Ú_closedr'  r   r±   r   r   r<   r2   rW   r³   )rB   r  r   rØ   rµ   r   r   r   Ú
testDetachÚ	  s    



zBasicTCPTest.testDetachc                 C   s   | j  t¡ d S r.   r  rA   r   r   r   Ú_testDetachê	  s    zBasicTCPTest._testDetachN)r   )rG   rH   rI   rN   r  r  r  r  r  r  r  r  r!  r"  r$  r%  r'  r(  r)  r+  r   rl  ZtestShutdown_overflowr.  r0  r1  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—   rN   r“   r   r   r   rN   ð	  s    zBasicUDPTest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r.   ©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?   rA   r   r   r   Ú_testSendtoAndRecvø	  s    zBasicUDPTest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r.   ©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›   r5  rA   r   r   r   r   
  s    zBasicUDPTest._testRecvFromc                 C   s   |   t| jjd¡ d S ©Nrˆ  ©r'  r   r=   r£  rA   r   r   r   ÚtestRecvFromNegative
  s    z!BasicUDPTest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S r›   r5  rA   r   r   r   Ú_testRecvFromNegative
  s    z"BasicUDPTest._testRecvFromNegativeN)r   ©
rG   rH   rI   rN   r4  r6  r  r  r:  r;  r   r   r   r   r2  î	  s   
r2  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˜   rN   r“   r   r   r   rN   
  s    zBasicUDPLITETest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r.   r3  r´   r   r   r   r4  
  s    z"BasicUDPLITETest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S r›   r5  rA   r   r   r   r6  
  s    z#BasicUDPLITETest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r.   r7  r  r   r   r   r  
  s    zBasicUDPLITETest.testRecvFromc                 C   s   | j  tdt| jf¡ d S r›   r5  rA   r   r   r   r  
  s    zBasicUDPLITETest._testRecvFromc                 C   s   |   t| jjd¡ d S r8  r9  rA   r   r   r   r:  "
  s    z%BasicUDPLITETest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S r›   r5  rA   r   r   r   r;  &
  s    z&BasicUDPLITETest._testRecvFromNegativeN)r   r<  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 r.   )rO   ry   Ú
misc_eventrM   rC   rA   rU   r   r   rC   K
  s    
zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r.   )Úcli_sockr¸   r´   r   r   r   ÚsendToServerO
  s    zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r.   )r@  rì  Úsendmsg_to_server_defaultsrë  ©rB   rS   r   r   r   ÚsendmsgToServerW
  s    ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r.   )ré  ÚregisterRecvmsgResult)rB   rØ   rd   rS   Úresultr   r   r   Ú	doRecvmsg_
  s    
zSendrecvmsgBase.doRecvmsgc                 C   s   d S r.   r   ©rB   rF  r   r   r   rE  i
  s    z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r.   ©r²   ©rB   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²   )
rB   rç  ÚeorÚchecksetÚ
checkunsetÚignoreZ
defaultsetZdefaultunsetZinbothr…  r   r   r   Ú
checkFlags„
  s&    




ÿzSendrecvmsgBase.checkFlags)Nr   r   r   )rG   rH   rI   r   ÚLOOPBACK_TIMEOUTÚfail_timeoutrC   rA  rB  rD  rG  rE  rK  rO  rþ   r€   r   rN  rP  rQ  rW  rY   r   r   rU   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_intorE  ÚassertGreaterEqualÚassertLessEqualr¶  )rB   rØ   rd   rS   ÚbufrF  r   r   r   rG  ¾
  s    
zRecvmsgIntoMixin.doRecvmsgN)rG   rH   rI   rG  r   r   r   r   rZ  »
  s   rZ  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgDgramFlagsBasec                    s   t ƒ jtjB S r.   )rM   rQ  r   Ú	MSG_TRUNCrA   rU   r   r   rQ  Ê
  s    z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rG   rH   rI   ÚpropertyrQ  rY   r   r   rU   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 r.   )rM   rP  r   ÚMSG_EORrA   rU   r   r   rP  Ò
  s    z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rG   rH   rI   ra  rP  rY   r   r   rU   r   rb  Ï
  s   rb  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 r.   )r=   rA   r   r   r   Ú	serv_sockÜ
  s    z'SendrecvmsgConnectionlessBase.serv_sockc                 C   s   | j S r.   )r”   rA   r   r   r   r@  à
  s    z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS r›   )rÇ   rA   r   r   r   rB  ä
  s    z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r.   )r@  r/  rÇ   r´   r   r   r   rA  è
  s    z*SendrecvmsgConnectionlessBase.sendToServerN)rG   rH   rI   ra  re  r@  rB  rA  r   r   r   r   rd  ×
  s   


rd  c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚSendrecvmsgConnectedBasec                 C   s   | j S r.   )r¼   rA   r   r   r   re  ò
  s    z"SendrecvmsgConnectedBase.serv_sockc                 C   s   | j S r.   )r¿   rA   r   r   r   r@  ö
  s    z!SendrecvmsgConnectedBase.cli_sockc                 C   s   d S r.   r   rJ  r   r   r   rK  ú
  s    z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rG   rH   rI   ra  re  r@  rK  r   r   r   r   rf  ì
  s
   

rf  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    s   t ƒ  ¡  | j | j¡ d S r.   )rM   rC   re  rÍ  rY  rA   rU   r   r   rC     s    
z"SendrecvmsgServerTimeoutBase.setUprÉ   r   r   rU   r   rg     s   rg  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 r.   ©r²   re  r±   rë  r³   rA   r   r   r   ÚtestSendmsg  s    zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r.   ©r²   rD  r³   rë  rA   r   r   r   Ú_testSendmsg  s    zSendmsgTests._testSendmsgc                 C   s   |   | j ttƒ¡t¡ d S r.   ri  rA   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 r.   r   r  r   r   r   r    rð   z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rk  rA   r   r   r   Ú_testSendmsgDataGenerator  s    ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r.   ri  rA   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 r.   r   r  r   r   r   r     rð   z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   rk  rA   r   r   r   Ú_testSendmsgAncillaryGenerator  s    ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r.   ri  rA   r   r   r   ÚtestSendmsgArray#  s    zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)r²   rD  Úarrayr³   rë  rA   r   r   r   Ú_testSendmsgArray'  s    ÿzSendmsgTests._testSendmsgArrayc                 C   s   |   | j ttƒ¡t¡ d S r.   ri  rA   r   r   r   ÚtestSendmsgGather+  s    zSendmsgTests.testSendmsgGatherc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nr  rk  rA   r   r   r   Ú_testSendmsgGather/  s    zSendmsgTests._testSendmsgGatherc                 C   s   |   | j d¡d¡ d S ©NrŠ  ó   done©r²   re  r±   rA   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   ry  )r'  rŠ   r@  rì  rD  Úobjectr³   rA  rA   r   r   r   Ú_testSendmsgBadArgs6  s.    
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   s   |   | j d¡d¡ d S rx  rz  rA   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  r:  ry  ©r'  rŠ   rD  r³   r|  rA  rA   r   r   r   Ú_testSendmsgBadCmsgL  s&    

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   s   |   | j d¡d¡ d S rx  rz  rA   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ð   ry  r€  rA   r   r   r   Ú_testSendmsgBadMultiCmsga  s    

ÿ
ÿz%SendmsgTests._testSendmsgBadMultiCmsgc                 C   s   |   | j d¡d¡ d S rx  rz  rA   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„  ry  )
r   r   r'  r   rD  r³   ÚassertIsNoner0  rf  rA  ©rB   r1  r   r   r   Ú_testSendmsgExcessCmsgRejectn  s
    
0z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   s   d S r.   r   rA   r   r   r   ÚtestSendmsgAfterClosev  s    z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r.   )r@  r   r'  r   rD  r³   rA   r   r   r   Ú_testSendmsgAfterClosez  s    
z#SendmsgTests._testSendmsgAfterCloseN)rG   rH   rI   rj  rl  rm  rn  ro  rp  rq  rt  ru  rw  r{  r}  r~  r  r  r   rƒ  rô   r…  r†  r‰  rŠ  r‹  r   r   r   r   rh    s,   

rh  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 r.   ri  rA   r   r   r   ÚtestSendmsgExplicitNoneAddrƒ  s    z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S r›   rk  rA   r   r   r   Ú_testSendmsgExplicitNoneAddr‡  s    z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nr–  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r7   ©r²   re  r±   r  r?  r„   rY  rA   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Í  rD  r   r7   r   rf  ÚENOMEMr#  r?  rn   ©rB   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’  rA   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   rD  r   ÚMSG_DONTWAITr  r0  rf  ÚEAGAINÚEWOULDBLOCKr–  r?  rn   rˆ  r   r   r   Ú_testSendmsgDontWait®  s    2
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rG   rH   rI   r  rŽ  r“  r˜  rû   ru  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 r.   r   rA   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³   rA   r   r   r   Ú_testSendmsgNoDestAddrÆ  s    ÿ
ÿz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rG   rH   rI   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©rS  ©rG  re  rë  r³   r²   rK  rž   rW  ©rB   rµ   rê  rç  r¾   r   r   r   ÚtestRecvmsgÑ  s
    zRecvmsgGenericTests.testRecvmsgc                 C   s   |   t¡ d S r.   ©rA  r³   rA   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 r.   r¨  rA   r   r   r   Ú_testRecvmsgExplicitDefaultså  s    z0RecvmsgGenericTests._testRecvmsgExplicitDefaultsc                 C   sV   |   | jttƒd ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr:  Tr¤  r¥  r¦  r   r   r   ÚtestRecvmsgShorterè  s    
ÿz&RecvmsgGenericTests.testRecvmsgShorterc                 C   s   |   t¡ d S r.   r¨  rA   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 r.   r¨  rA   r   r   r   Ú_testRecvmsgTruncý  s    z%RecvmsgGenericTests._testRecvmsgTruncc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nrp   Tr¤  r¥  r¦  r   r   r   ÚtestRecvmsgShortAncillaryBuf   s    ÿz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufc                 C   s   |   t¡ d S r.   r¨  rA   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 r.   r¨  rA   r   r   r   Ú_testRecvmsgLongAncillaryBuf  s    z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j  ¡  |  t| j| j d¡ d S r¯   )re  r   r'  r   rG  rA   r   r   r   ÚtestRecvmsgAfterClose  s    
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   s   d S r.   r   rA   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”  )
re  rÍ  r'  r   r7   rG  rë  r³   r?  rn   rA   r   r   r   ÚtestRecvmsgTimeout   s    ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©Nr‘  )r  r?  r„   rY  rA   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`  ©rS  rV  Tr¤  )rG  re  rë  r³   r   ræ  r²   rK  rž   rW  r€   r¦  r   r   r   ÚtestRecvmsgPeek,  s.    þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   s   |   t¡ d S r.   r¨  rA   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£  )
re  rÍ  rY  rG  rë  r³   r²   rK  rž   rW  r¦  r   r   r   ÚtestRecvmsgFromSendmsgS  s    z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S rv  rk  rA   r   r   r   Ú_testRecvmsgFromSendmsg^  s    z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rG   rH   rI   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¤  )rG  re  r²   rK  rž   rW  r¦  r   r   r   ÚtestRecvmsgEOFg  s
    z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   s   | j  ¡  d S r.   )r@  r   rA   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)rG  re  rë  r³   rK  rž   r²   rW  )rB   r  rê  rç  r¾   r  rµ   r   r   r   ÚtestRecvmsgOverflowr  s    
ÿz-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   s   |   t¡ d S r.   r¨  rA   r   r   r   Ú_testRecvmsgOverflow‚  s    z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rG   rH   rI   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Š   re  ré  r   rë  r³   rÁ  r|  r²   rK  rž   rW  r¦  r   r   r   ÚtestRecvmsgBadArgs‰  s0    ÿ
ÿÿÿÿÿzRecvmsgTests.testRecvmsgBadArgsc                 C   s   |   t¡ d S r.   r¨  rA   r   r   r   Ú_testRecvmsgBadArgsŸ  s    z RecvmsgTests._testRecvmsgBadArgsN)rG   rH   rI   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Š   re  r[  r|  r   r²   rK  rž   rW  ©rB   r^  Únbytesrê  rç  r¾   r   r   r   ÚtestRecvmsgIntoBadArgs¦  s@    
ÿÿ
ÿÿÿÿ
ÿ
ÿz'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   s   |   t¡ d S r.   r¨  rA   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 r.   r   r  r   r   r   r  É  rð   z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr¤  )	rÁ  rë  r³   re  r[  r²   rK  rž   rW  rÉ  r   r   r   ÚtestRecvmsgIntoGeneratorÅ  s    ÿz)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   s   |   t¡ d S r.   r¨  rA   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 )Nrr  r   Tr¤  )
rs  rë  r³   re  r[  r²   ÚtobytesrK  rž   rW  rÉ  r   r   r   ÚtestRecvmsgIntoArrayÓ  s    z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   s   |   t¡ d S r.   r¨  rA   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Á  re  r[  Ú
memoryviewr²   rë  rK  rž   rW  )rB   Úb1Úb2Zb3rÊ  rê  rç  r¾   r   r   r   ÚtestRecvmsgIntoScatterà  s    ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   s   |   d¡ d S )NrÓ  )rA  rA   r   r   r   Ú_testRecvmsgIntoScatterï  s    z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rG   rH   rI   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   rp   é  r:   r    rˆ  )Úsocklen_t_limitr   rÚ  Úlistr%  rk  rs  Úitemsizer²   r]  r'  r‚  ru  Úmaxsize)rB   ÚtoobigrL  Ú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 )Nrp   rÛ  r   r:   r    rˆ  )rÜ  r   r‚  rÝ  r%  rk  rs  rÞ  r\  rÚ  r]  r'  r‚  ru  rß  )rB   rà  rL  Zlastrá  r/   r   r   r   ÚtestCMSG_SPACE  s    

zCmsgMacroTests.testCMSG_SPACE)rG   rH   rI   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 r.   )r%  rÏ   ÚmkstemprW   rÒ   r×   r   Úwriter  ÚencodeÚappend)rB   rá  Úfdsr:   rN  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è  )rB   rê  rá  rN  r   r   r   ÚcheckFDsB  s    zSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r.   )rW   ÚcloseRecvmsgFDsrH  r   r   r   rE  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 )Nrp   r:   )	r   r5  Ú
SCM_RIGHTSrs  Ú	frombytesrë  rÞ  rÒ   r   )rB   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datarê  rN  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 )Nr:   )	r²   rD  r³   r   r5  rñ  rs  rë  rë  )rB   rá  r   r   r   ÚcreateAndSendFDsX  s    þÿûzSCMRightsTest.createAndSendFDsrp   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©rS  rU  rV  r:   r   )r²   r³   rK  rž   rW  r   rL  r  rÝ  r]  rë  rs  Útupler5  rñ  r¶  Ú
SIZEOF_INTrò  rï  )rB   ZnumfdsrF  Ú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 )Nrp   r³  ©rý  rG  re  rë  r³   rA   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 )Nr:   rp   )
r²   rD  r³   r   r5  rñ  rs  rë  rÏ  rë  rA   r   r   r   Ú_testFDPassSimple‚  s    þþúzSCMRightsTest._testFDPassSimplec                 C   s    |   d|  | jttƒd¡¡ d S )Nr.  r³  rþ  rA   r   r   r   ÚtestMultipleFDPass‹  s    ÿz SCMRightsTest.testMultipleFDPassc                 C   s   |   d¡ d S ©Nr.  ©rö  rA   r   r   r   Ú_testMultipleFDPass  s    z!SCMRightsTest._testMultipleFDPassr‚  c                 C   s*   |   d|  | jttƒt dt ¡¡¡ d S r  )rý  rG  re  rë  r³   r   r‚  rù  rA   r   r   r   ÚtestFDPassCMSG_SPACE“  s
    ÿÿz"SCMRightsTest.testFDPassCMSG_SPACEc                 C   s   |   d¡ d S r  r  rA   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 )Nrp   r.  ©rû  )	rý  rG  re  rë  r³   r   rÚ  rù  rL  rA   r   r   r   ÚtestFDPassCMSG_LENž  s    ÿúz SCMRightsTest.testFDPassCMSG_LENc                 C   s   |   d¡ d S rÞ   r  rA   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þ  rA   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    r:   ©	rë  r²   rD  r³   r   r5  rñ  rs  rë  ©rB   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ý  rG  re  rë  r³   r   r‚  rù  rÚ  rL  )rB   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 r.   )rD  r   r  rf  rj  r²   rë  )rB   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ý  rG  re  rë  r³   r   rL  rA   r   r   r   ÚtestFDPassEmptyé  s
    ÿþzSCMRightsTest.testFDPassEmptyc                 C   s   |   ttjtjdfg¡ d S ©Nrð   )r  r³   r   r5  rñ  rA   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»  rp   )rG  re  rë  r³   r²   rK  rž   rW  r   rL  r]  r5  rñ  Ú
assertLessrù  ©rB   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 )Nr:   rˆ  )r  r³   r   r5  rñ  rs  ÚbadfdrÏ  rA   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    r:   )rG  re  rë  r³   r²   rK  rž   rW  r   rL  r]  rs  r5  rñ  rò  rÞ  rï  )	rB   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    r:   rˆ  )	rë  r  r³   r   r5  rñ  rs  r  rÏ  r  r   r   r   Ú_testFDPassPartialIntInMiddle  s    þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©rS  rT  rV  )r²   r³   rK  rž   rW  r   rL  )rB   rF  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  rG  re  rë  r³   r   rL  rA   r   r   r   ÚtestCmsgTruncNoBufSize3  s    üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   s   |   d¡ d S rÞ   r  rA   r   r   r   Ú_testCmsgTruncNoBufSize<  s    z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j |  | jttƒd¡tjd d S )Nr   r  r   rA   r   r   r   ÚtestCmsgTrunc0?  s    ÿzSCMRightsTest.testCmsgTrunc0c                 C   s   |   d¡ d S rÞ   r  rA   r   r   r   Ú_testCmsgTrunc0D  s    zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S rÞ   )r  rG  re  rë  r³   rA   r   r   r   ÚtestCmsgTrunc1J  s    zSCMRightsTest.testCmsgTrunc1c                 C   s   |   d¡ d S rÞ   r  rA   r   r   r   Ú_testCmsgTrunc1M  s    zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S r  )r  rG  re  rë  r³   rù  rA   r   r   r   ÚtestCmsgTrunc2IntP  s    ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   s   |   d¡ d S rÞ   r  rA   r   r   r   Ú_testCmsgTrunc2IntW  s    z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S rþ  )r  rG  re  rë  r³   r   rÚ  rA   r   r   r   ÚtestCmsgTruncLen0Minus1Z  s    ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   s   |   d¡ d S rÞ   r  rA   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©rS  rT  r   rp   r:   )rG  re  rë  r³   r²   rK  rž   rW  r   rL  r5  rñ  r\  r]  rs  rò  rÞ  rï  )rB   Ú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Ú  rA   r   r   r   ÚtestCmsgTruncLen0|  s    zSCMRightsTest.testCmsgTruncLen0c                 C   s   |   d¡ d S rÞ   r  rA   r   r   r   Ú_testCmsgTruncLen0  s    z SCMRightsTest._testCmsgTruncLen0c                 C   s   | j t d¡d dd d S )Nr   rp   r/  r0  rA   r   r   r   ÚtestCmsgTruncLen0Plus1‚  s    z$SCMRightsTest.testCmsgTruncLen0Plus1c                 C   s   |   d¡ d S r  r  rA   r   r   r   Ú_testCmsgTruncLen0Plus1…  s    z%SCMRightsTest._testCmsgTruncLen0Plus1c                 C   s   | j t t¡td d S )Nr/  ©r.  r   rÚ  rù  rA   r   r   r   ÚtestCmsgTruncLen1ˆ  s    ÿzSCMRightsTest.testCmsgTruncLen1c                 C   s   |   d¡ d S r  r  rA   r   r   r   Ú_testCmsgTruncLen1Œ  s    z SCMRightsTest._testCmsgTruncLen1c                 C   s(   | j t dt ¡d dt d d d S )Nr    rp   r/  r5  rA   r   r   r   ÚtestCmsgTruncLen2Minus1  s    
ÿz%SCMRightsTest.testCmsgTruncLen2Minus1c                 C   s   |   d¡ d S r  r  rA   r   r   r   Ú_testCmsgTruncLen2Minus1“  s    z&SCMRightsTest._testCmsgTruncLen2Minus1N)rp   r   )r   )r   )9rG   rH   rI   r  rë  rï  rE  rð  rö  rý  rÿ  r   r  r  r  r   r  rô   r  r  r	  r£   rm  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.  r1  r2  r3  r4  r6  r7  r8  r9  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 r.   )r  )rB   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 )Nrp   Tr÷  r   r:   )re  rÊ  r   r:  rM  r?  rn   rG  rë  r³   r²   rK  rž   rW  rL  r  rø  rJ  r¶  rù  rs  rò  r\  r]  )rB   Ú
ancbufsizeÚmaxhoprû  rµ   rê  rç  r¾   ró  rô  rõ  r©  r   r   r   ÚcheckHopLimit²  s.    
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitrM  rJ  c                 C   s   | j dd d S ©Nr³  ©r=  )r?  rA   r   r   r   ÚtestRecvHopLimitÎ  s    z%RFC3542AncillaryTest.testRecvHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  ©r  r?  r„   rY  rA  r³   rA   r   r   r   Ú_testRecvHopLimitÓ  s    z&RFC3542AncillaryTest._testRecvHopLimitr‚  c                 C   s   | j t t¡d d S )NrA  )r?  r   r‚  rù  rA   r   r   r   ÚtestRecvHopLimitCMSG_SPACEÛ  s    z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testRecvHopLimitCMSG_SPACEà  s    z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErì  c                 C   s   | j d| jd d S ©Nr³  )r=  r>  )r?  Ú	hop_limitrA   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‘  r:   )r  r?  r„   rY  r²   rD  r³   r   r:  rJ  rs  rH  rë  rA   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 )Nrp   Tr÷  r    r:   r   r´  )re  rÊ  r   r:  rM  rR  r?  rn   rG  rë  r³   r²   rK  rž   rW  rL  r<  rO  rù  rs  rò  r\  r]  rJ  )rB   r=  r>  rû  rµ   rê  rç  r¾   ZancmapZtcdatar©  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimitú  s:    
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrR  rO  c                 C   s   | j dd d S r@  )rL  rA   r   r   r   ÚtestRecvTrafficClassAndHopLimit  s    z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú _testRecvTrafficClassAndHopLimit$  s    z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©Nr    rA  )rL  r   r‚  rù  rA   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACE)  s    ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACE1  s    z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s   | j d| jd d S rG  ©rL  rH  rA   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 rJ  )r  r?  r„   rY  r²   rD  r³   r   r:  rO  rs  Útraffic_classrJ  rH  rë  rA   r   r   r   Ú_testSetTrafficClassAndHopLimit?  s    ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   s   | j d| jd d S rG  rR  rA   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‘  r:   r›  )r  r?  r„   rY  rD  r³   r   r:  rO  rs  rT  rÏ  rJ  rH  r   r  rf  rj  r²   rë  )rB   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 )Nrp   r   Tr  )re  rÊ  r   r:  rM  r?  rn   rG  rë  r³   r²   rK  rž   rW  rL  )rB   r=  rû  rS   rµ   rê  rç  r¾   r   r   r   ÚcheckHopLimitTruncatedHeaderj  s     
ÿ
ÿÿÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©r=  rû  ©rX  r   rL  rA   r   r   r   r!  ~  s    ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   r"  ‰  s    z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   rY  rZ  rA   r   r   r   ÚtestSingleCmsgTrunc0Ž  s    ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testSingleCmsgTrunc0•  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   s   | j dd d S )Nrp   rA  )rX  rA   r   r   r   ÚtestSingleCmsgTrunc1  s    z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testSingleCmsgTrunc1¡  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rO  )rX  rù  rA   r   r   r   ÚtestSingleCmsgTrunc2Int¦  s    z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testSingleCmsgTrunc2Intª  s    z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   rp   rA  )rX  r   rÚ  rA   r   r   r   ÚtestSingleCmsgTruncLen0Minus1¯  s    z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   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 )Nrp   Tr+  r   )re  rÊ  r   r:  rM  r?  rn   rG  rë  r³   rÚ  rù  r²   rK  rž   rW  rL  r]  rJ  r  r  r   r   r   ÚtestSingleCmsgTruncInData¸  s     
ÿ
ÿz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   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 )Nrp   Tr  r   r:   r´  )re  rÊ  r   r:  rM  rR  r?  rn   rG  rë  r³   r²   rK  rž   rW  rL  r  rO  rJ  rù  rs  rò  r\  r]  )rB   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  )re  r   r‚  rù  rL  rA   r   r   r   ÚtestSecondCmsgTrunc0ó  s    ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testSecondCmsgTrunc0ù  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S rÞ   ©re  r   r‚  rù  rA   r   r   r   ÚtestSecondCmsgTrunc1þ  s    z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testSecondCmsgTrunc1  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S r  rh  rA   r   r   r   ÚtestSecondCmsgTrunc2Int  s    ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   r   r   r   Ú_testSecondCmsgTrunc2Int  s    z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S rþ  )re  r   r‚  rù  rÚ  rA   r   r   r   ÚtestSecondCmsgTruncLen0Minus1  s
    ÿÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¹  rC  rA   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 )Nrp   Tr+  r   r:   r´  )re  rÊ  r   r:  rM  rR  r?  rn   rG  rë  r³   r‚  rù  rÚ  r²   rK  rž   rW  rL  rO  rJ  ÚpopÚremovers  rò  r\  r]  r  )
rB   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¹  rC  rA   r   r   r   Ú_testSecomdCmsgTruncInDataC  s    z/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r´  r   )r´  r   )r   )r   )1rG   rH   rI   rH  rT  r<  r?  r  r   rB  rô   rD  rE  rF  rI  rK  rL  rM  rN  rP  rQ  rS  rU  rV  rW  rX  r!  r"  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  ri  rj  rk  rl  rm  rn  rq  rr  r   r   r   r   r:  —  sÌ   

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


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


















 
ÿ


ÿ


ÿ


ÿ


ÿ
#r:  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rG   rH   rI   r   r   r   r   rs  K  s   rs  rì  c                   @   s   e Zd ZdS )ÚSendmsgUDPTestNrt  r   r   r   r   ru  P  s   ru  ré  c                   @   s   e Zd ZdS )ÚRecvmsgUDPTestNrt  r   r   r   r   rv  T  s   rv  r[  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPTestNrt  r   r   r   r   rw  X  s   rw  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDP6TestBasec                 C   s    |   |d d… |d d… ¡ d S r8  rI  rJ  r   r   r   rK  a  s    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rG   rH   rI   rK  r   r   r   r   rx  ]  s   rx  r0  rê   r!   c                   @   s   e Zd ZdS )ÚSendmsgUDP6TestNrt  r   r   r   r   rz  f  s   rz  c                   @   s   e Zd ZdS )ÚRecvmsgUDP6TestNrt  r   r   r   r   r{  l  s   r{  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDP6TestNrt  r   r   r   r   r|  r  s   r|  r:  c                   @   s   e Zd ZdS )ÚRecvmsgRFC3542AncillaryUDP6TestNrt  r   r   r   r   r}  x  s   r}  c                   @   s   e Zd ZdS )Ú#RecvmsgIntoRFC3542AncillaryUDP6TestNrt  r   r   r   r   r~  €  s   r~  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPLITETestBaseNrt  r   r   r   r   r  Š  s   r  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITETestNrt  r   r   r   r   r€  ‘  s   r€  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITETestNrt  r   r   r   r   r  —  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITETestNrt  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 r8  rI  rJ  r   r   r   rK  ª  s    z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNry  r   r   r   r   rƒ  ¤  s   rƒ  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITE6TestNrt  r   r   r   r   r„  ¯  s   r„  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITE6TestNrt  r   r   r   r   r…  ·  s   r…  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITE6TestNrt  r   r   r   r   r†  ¿  s   r†  c                   @   s   e Zd ZdS )Ú#RecvmsgRFC3542AncillaryUDPLITE6TestNrt  r   r   r   r   r‡  Ç  s   r‡  c                   @   s   e Zd ZdS )Ú'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNrt  r   r   r   r   rˆ  Ñ  s   	rˆ  c                   @   s   e Zd ZdS )ÚSendrecvmsgTCPTestBaseNrt  r   r   r   r   r‰  Ý  s   r‰  c                   @   s   e Zd ZdS )ÚSendmsgTCPTestNrt  r   r   r   r   rŠ  á  s   rŠ  c                   @   s   e Zd ZdS )ÚRecvmsgTCPTestNrt  r   r   r   r   r‹  å  s   r‹  c                   @   s   e Zd ZdS )ÚRecvmsgIntoTCPTestNrt  r   r   r   r   rŒ  ê  s   rŒ  c                   @   s   e Zd ZdS )ÚSendrecvmsgSCTPStreamTestBaseNrt  r   r   r   r   r  ð  s   r  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr<   r2   ræ   c                   @   s   e Zd ZdS )ÚSendmsgSCTPStreamTestNrt  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)rM   r  rÁ  r   rf  ÚENOTCONNrc   ©rB   r‹   rU   r   r   rÁ    s    z$RecvmsgSCTPStreamTest.testRecvmsgEOF©rG   rH   rI   rÁ  rY   r   r   rU   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  )rM   r”  rÁ  r   rf  r‘  rc   r’  rU   r   r   rÁ    s    z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr“  r   r   rU   r   r”  	  s   r”  c                   @   s   e Zd ZdS )ÚSendrecvmsgUnixStreamTestBaseNrt  r   r   r   r   r•    s   r•  rÛ   c                   @   s   e Zd ZdS )ÚSendmsgUnixStreamTestNrt  r   r   r   r   r–    s   r–  c                   @   s   e Zd ZdS )ÚRecvmsgUnixStreamTestNrt  r   r   r   r   r—  !  s   r—  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUnixStreamTestNrt  r   r   r   r   r˜  '  s   r˜  r5  rñ  c                   @   s   e Zd ZdS )ÚRecvmsgSCMRightsStreamTestNrt  r   r   r   r   r™  -  s   r™  c                   @   s   e Zd ZdS )ÚRecvmsgIntoSCMRightsStreamTestNrt  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>)rM   rC   r  r  rW   )rB   Zorig_alrm_handlerrU   r   r   rC   C  s
    
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r.   )r  r  ÚITIMER_REAL©rB   Zsecondsr   r   r   ÚsetAlarmR  s    zInterruptedTimeoutBase.setAlarmr    c                 C   s   t  |¡ d S r.   )r  rø  rŸ  r   r   r   r   X  s    )rG   rH   rI   rC   r   rX  r7   r   r  Ú
alarm_timer   rY   r   r   rU   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 r.   )rM   rC   r=   rÍ  r7   rA   rU   r   r   rC   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  ©rB   rƒ  rS   rT   r1  r   r   r   ÚcheckInterruptedRecvi  s
    .z/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C   s   |   | jjd¡ d S r¯   )r¥  r=   r±   rA   r   r   r   ÚtestInterruptedRecvTimeouts  s    z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C   s   |   | jjtdƒ¡ d S r¯   )r¥  r=   Ú	recv_intorÁ  rA   r   r   r   ÚtestInterruptedRecvIntoTimeoutv  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   s   |   | jjd¡ d S r¯   )r¥  r=   r£  rA   r   r   r   ÚtestInterruptedRecvfromTimeouty  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutc                 C   s   |   | jjtdƒ¡ d S r¯   )r¥  r=   Úrecvfrom_intorÁ  rA   r   r   r   Ú"testInterruptedRecvfromIntoTimeout|  s    z=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutré  c                 C   s   |   | jjd¡ d S r¯   )r¥  r=   ré  rA   r   r   r   ÚtestInterruptedRecvmsgTimeout  s    z8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr[  c                 C   s   |   | jjtdƒg¡ d S r¯   )r¥  r=   r[  rÁ  rA   r   r   r   Ú!testInterruptedRecvmsgIntoTimeoutƒ  s    z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rG   rH   rI   rC   r¥  r¦  r¨  r©  r«  r  r   r¬  r­  rY   r   r   rU   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)rM   rC   rÄ   r¿   rW   r   rO   ÚThreadÚ	doConnectÚstartr=   r¨   r¼   r  rÍ  r7   )rB   Z
cli_threadr¾   rU   r   r   rC   “  s    

z InterruptedSendTimeoutTest.setUpc                 C   s   | j  | j¡ d S r.   )r¿   r®   rÇ   rA   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¸   rA   r   r   r   ÚtestInterruptedSendTimeout±  s    z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutc                 C   s   |   | jjd| j¡ d S rš  )r³  r¿   r/  rÇ   rA   r   r   r   ÚtestInterruptedSendtoTimeoutµ  s    ÿz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrì  c                 C   s   |   | jjdg¡ d S rš  )r³  r¿   rì  rA   r   r   r   ÚtestInterruptedSendmsgTimeout¾  s    z8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rG   rH   rI   rC   r±  r³  r   Zrequires_mac_verr´  rµ  r  r   r¶  rY   r   r   rU   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ç      ð?rp   rð   )r=   r¨   r   r”   rò  r²   r±   )rB   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­   rA   r   r   r   Ú
_testCloseÓ  s    zTCPCloserTest._testCloseN)rG   rH   rI   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Á   rN   r“   r   r   r   rN   Ú  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ó   r2   r  rá   r   r   r   Ú_check_defaultsÝ  s    
z#BasicSocketPairTest._check_defaultsc                 C   s   |   | j¡ d S r.   )r¾  r”   rA   r   r   r   Ú_testDefaultsæ  s    z!BasicSocketPairTest._testDefaultsc                 C   s   |   | j¡ d S r.   )r¾  r=   rA   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 r.   )r”   r¸   r³   rA   r   r   r   r  ð  s    zBasicSocketPairTest._testRecvc                 C   s   | j  t¡ d S r.   )r=   r¸   r³   rA   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   )rG   rH   rI   rN   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   )rO   ry   ÚeventrŽ   rN   r“   r   r   r   rN   ý  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)rB   rØ   r7   Ú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=   rE  rÌ  rÍ  rA   r   r   r   ÚtestSetBlocking  s    z#NonBlockingTCPTests.testSetBlockingc                 C   s   d S r.   r   rA   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Å  rp   )	rŒ  r,  Z	ULONG_MAXrc   r=   rE  r²   rŸ  r‡  r-  r   r   r   ÚtestSetBlocking_overflow)  s    
z,NonBlockingTCPTests.testSetBlocking_overflowrD  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<   r2   rD  rÌ  rA   r   r   r   ÚtestInitNonBlocking8  s
    

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   s   d S r.   r   rA   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ž  )r8   r=   rÍ  r¨   rW   r   r‡  rŸ  r½   r   r   r   ÚtestInheritFlagsBlockingE  s
    
z,NonBlockingTCPTests.testInheritFlagsBlockingc                 C   s   | j  t| jf¡ d S r.   ©r”   r®   rœ   r?   rA   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ž  )r8   r=   rÍ  r¨   rW   r   r²   rŸ  )rB   Zdefault_timeoutr©   r¾   r   r   r   ÚtestInheritFlagsTimeoutQ  s    
z+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   s   | j  t| jf¡ d S r.   rÕ  rA   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=   rE  r¬   Ú	monotonicr'  ÚBlockingIOErrorr¨   r  rÄ  rn   rò  r   ÚLONG_TIMEOUTr#  rW   r   r‡  rŸ  )rB   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 r.   )rÄ  r„   r”   r®   rœ   r?   rA   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¨   rW   r   rE  r'  rÚ  r±   rë  r³   rÄ  rn   rò  r   rÛ  r#  r²   )rB   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 r.   )r”   r®   rœ   r?   rÄ  r„   r  r³   rA   r   r   r   r    s    
zNonBlockingTCPTests._testRecvN)r   )rG   rH   rI   rN   rÌ  rÍ  rÎ  r   rl  rÏ  Z_testSetBlocking_overflowr£   rk  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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.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"d6d7„ Z#d8d9„ Z$dS );ÚFileObjectClassTestCaserˆ  r   ÚstrictNr	   r  r   c                 C   s   t j| |d d S r   r  r“   r   r   r   rN   ±  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   )rO   ry   ©rý   r:   r   r   r   rÿ   µ  s   z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r.  ©ÚencodingÚerrorsÚnewline)r%  Úevt1Úevt2Úserv_finishedÚcli_finishedr»   rC   r¼   r  Ú	read_moderd   rã  rä  rå  Ú	read_filerA   r   r   r   rC   ´  s    ÿ
üzFileObjectClassTestCase.setUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r.   )rè  rn   rë  r   r  Úclosedr»   rE   rA   r   r   r   rE   ¾  s
    

z FileObjectClassTestCase.tearDownc                 C   s0   t  | ¡ | jj| j| j| j| j| jd| _	d S )Nrâ  )
r»   r†   r¿   r  Ú
write_moderd   rã  rä  rå  Ú
write_filerA   r   r   r   r†   Å  s    
üz#FileObjectClassTestCase.clientSetUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r.   )ré  rn   rî  r   r  rì  r»   r‰   rA   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 )Nrp   r  z!cannot read from timed out object)r¼   rÍ  rë  r   r'  r   r7   r   r  r  r0  )rB   Ú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„   rA   r   r   r   Ú_testReadAfterTimeoutà  s    
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S rv  )rë  r   rë  Úread_msgr²   )rB   Ú	first_segZ
second_segrµ   r   r   r   ÚtestSmallReadå  s    z%FileObjectClassTestCase.testSmallReadc                 C   s   | j  | j¡ | j  ¡  d S r.   ©rî  rç  rñ  rò  rA   r   r   r   Ú_testSmallReadì  s    z&FileObjectClassTestCase._testSmallReadc                 C   s   | j  ¡ }|  || j¡ d S r.   )rë  r   r²   rô  r´   r   r   r   ÚtestFullReadð  s    
z$FileObjectClassTestCase.testFullReadc                 C   s   | j  | j¡ | j  ¡  d S r.   )rî  rç  rñ  r   rA   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²   )rB   r^  Úcharr   r   r   ÚtestUnbufferedReadù  s    
z*FileObjectClassTestCase.testUnbufferedReadc                 C   s   | j  | j¡ | j  ¡  d S r.   r÷  rA   r   r   r   Ú_testUnbufferedRead  s    z+FileObjectClassTestCase._testUnbufferedReadc                 C   s   | j  ¡ }|  || j¡ d S r.   )rë  Úreadliner²   rô  ©rB   Úliner   r   r   ÚtestReadline  s    
z$FileObjectClassTestCase.testReadlinec                 C   s   | j  | j¡ | j  ¡  d S r.   r÷  rA   r   r   r   Ú_testReadline  s    z%FileObjectClassTestCase._testReadlinec                 C   s&   | j  ¡  | j ¡ }|  || j¡ d S r.   )r¼   r   rë  r   r²   rô  r´   r   r   r   ÚtestCloseAfterMakefile  s    

z.FileObjectClassTestCase.testCloseAfterMakefilec                 C   s   | j  | j¡ | j  ¡  d S r.   r÷  rA   r   r   r   Ú_testCloseAfterMakefile  s    z/FileObjectClassTestCase._testCloseAfterMakefilec                 C   s@   | j  ¡  | j ttƒ¡}t| jtƒr.| 	¡ }|  
|| j¡ d S r.   )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 r.   r÷  rA   r   r   r   Ú_testMakefileAfterMakefileClose"  s    z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C   s   |   | jj ¡ d S r.   )r  rë  rì  rA   r   r   r   ÚtestClosedAttr&  s    z&FileObjectClassTestCase.testClosedAttrc                 C   s   |   | jj ¡ d S r.   )r  rî  rì  rA   r   r   r   Ú_testClosedAttr)  s    z'FileObjectClassTestCase._testClosedAttrc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r.   )r²   rë  r  rê  rþ   r¼   r  rA   r   r   r   ÚtestAttributes,  s    z&FileObjectClassTestCase.testAttributesc                 C   s,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r.   )r²   rî  r  rí  rþ   r¿   r  rA   r   r   r   Ú_testAttributes0  s    z'FileObjectClassTestCase._testAttributesc                 C   s8   | j  ¡  |  t| j j¡ | j ¡  |  t| jj¡ d S r.   )rë  r   r'  r   r  r¼   r   r   rA   r   r   r   ÚtestRealClose4  s    

z%FileObjectClassTestCase.testRealClosec                 C   s   d S r.   r   rA   r   r   r   Ú_testRealClose:  s    z&FileObjectClassTestCase._testRealClose)r   )%rG   rH   rI   rd   rã  rä  rå  rê  r³   rô  rí  rñ  rN   rC   rE   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ß  ›  sB   


rß  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d„ Z
dd„ Zdd„ Zdd„ ZdS )Ú!UnbufferedFileObjectClassTestCaser   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÷  rA   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 r.   r÷  rA   r   r   r   Ú_testMakefileClose`  s    z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t  | j¡}| j ¡  t  | j¡}|  |d |¡ d S rÞ   )ru  rt  r¼   rë  r   r²   )rB   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyd  s    
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   s   d S r.   r   rA   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      à?r{  rp   )r¼   rE  r²   rë  ÚreadintorÁ  r   rë  rô  ræ  rn   rç  r„   r¬   r­   )rB   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ç  rn   rè  rA   r   r   r   Ú_testSmallReadNonBlocking„  s
    

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s"   | j  d¡ | jr|  | j¡ d S )Nr  )ré  r„   Úserv_skippedrc   rA   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¿   rE  r   r  rî  rç  rk  r%  )rB   ZBIGZLIMITrá  r:   r   r   r   Ú_testWriteNonBlocking”  s    
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rG   rH   rI   rd   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 )Ú#LineBufferedFileObjectClassTestCaserp   N©rG   rH   rI   rd   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e d¡ZdZeZdZ	dS )Ú"UnicodeReadFileObjectClassTestCaser   r   r  r+  N©
rG   rH   rI   rê  r³   r  rô  rí  rñ  rå  r   r   r   r   r!  ´  s
   
r!  c                   @   s&   e Zd ZdZeZdZe d¡ZdZ	dS )Ú#UnicodeWriteFileObjectClassTestCaser	   r  r   r+  N)
rG   rH   rI   rê  r³   rô  rí  r  rñ  rå  r   r   r   r   r#  ¾  s
   
r#  c                   @   s,   e Zd ZdZe d¡ZdZe d¡ZdZ	dS )Ú'UnicodeReadWriteFileObjectClassTestCaser   r   r  r+  Nr"  r   r   r   r   r$  È  s
   

r$  c                   @   s   e Zd Zdd„ ZdS )ÚNetworkConnectionTestc                 C   s   t  t| jf¡| _| j| _d S r.   )r   Úcreate_connectionrœ   r?   r”   r¿   rA   r   r   r   r†   Õ  s    z!NetworkConnectionTest.clientSetUpN)rG   rH   rI   r†   r   r   r   r   r%  Ò  s   r%  c                   @   s   e Zd ZdS )ÚBasicTCPTest2Nrt  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   r7   rC  r   r   r   r®   â  s    z,NetworkConnectionNoServer.MockSocket.connectN)rG   rH   rI   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 r.   )r   r)  )rB   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 r.   )r   rÄ  r   r<   r2   rW   r   r'  r   r®   rœ   r²   r0  rf  ZECONNREFUSED)rB   r?   r”   r1  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 r.   )r   rÄ  r'  r   r   r&  rœ   Zget_socket_conn_refused_errsr  r0  rf  )rB   r?   r1  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œ   r7   r   r   rì  rf  ZEAFNOSUPPORTr#  r—  r   r   r   Útest_create_connection_timeout  s    
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rG   rH   rI   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   rN      s    z(NetworkConnectionAttributesTest.__init__c                 C   s   t  ¡ | _d S r.   )r   rÄ  Úsource_portrA   r   r   r   r†   $  s    z+NetworkConnectionAttributesTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   '  s    
z.NetworkConnectionAttributesTest.clientTearDownc                 C   s   | j  ¡ \}}| ¡  d S r.   )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   rX  r”   rW   r   r²   r  rA   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+  )r7   Úsource_addressrp   )r   r&  rœ   r?   r   rX  r1  r”   rW   r   r²   r   rA   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 )Nr:  ©r  r   r5   r6   r&  rœ   r?   r”   rW   r   r²   rŸ  rA   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‘  r6  rA   r   r   r   Ú_testTimeoutNoneN  s    
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S r8  )r   r&  rœ   r?   r”   r²   rŸ  rA   r   r   r   Ú_testTimeoutValueNamedZ  s    z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t  t| jfd¡| _|  | jj¡ |  | j ¡ d¡ d S )Nr9  )	r   r&  rœ   r?   r”   rW   r   r²   rŸ  rA   r   r   r   Ú_testTimeoutValueNonamed_  s    z8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r   )rG   rH   rI   rN   r†   r‰   r2  Z
testFamilyr3  ZtestSourceAddressr5  ZtestTimeoutDefaultr7  ZtestTimeoutNoner:  ZtestTimeoutValueNamedr;  ZtestTimeoutValueNonamedr<  r   r   r   r   r0    s    
	r0  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   rN   g  s    z'NetworkConnectionBehaviourTest.__init__c                 C   s   d S r.   r   rA   r   r   r   r†   k  s    z*NetworkConnectionBehaviourTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   n  s    
z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  ¡ \}}|  |j¡ t d¡ | d¡ d S )Nr  ó   done!)r=   r¨   rW   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²   )rB   rØ   rž  r   r   r   Ú_testInsideTimeoutz  s    
z1NetworkConnectionBehaviourTest._testInsideTimeoutc                    s4   t jt| jfdd | _‰ |  t j‡ fdd„¡ d S )Nrp   r‘  c                      s
   ˆ   d¡S )NrÖ  )r±   r   ©rØ   r   r   rï     rð   zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r   r&  rœ   r?   r”   r'  r7   rA   r   rA  r   Ú_testOutsideTimeout  s    z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)r   )
rG   rH   rI   rN   r†   r‰   r?  ZtestOutsideTimeoutr@  rB  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ì   rA   r   r   Úraise_timeout‡  s    z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)©r'  r   r7   ©rB   rD  r   rA   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   r7   r#  r   ©rB   Úokrb  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>.AlarmNrt  r   r   r   r   ÚAlarm¢  s   rK  c                    s   ˆ ‚d S r.   r   )r  r¡  ©rK  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Í  rR  r  r  rø  r¨   r   r7   r#  ru  Úexc_infoÚ	tracebackÚ
format_exc)rB   rM  r  rb  r   rL  r   ÚtestInterruptedTimeout›  s*    
þz%TCPTimeoutTest.testInterruptedTimeoutN)
rG   rH   rI   rG  rJ  r£   rk  r   r  rQ  r   r   r   r   rC  „  s   ÿrC  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ì   rA   r   r   rD  À  s    z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)rE  rF  r   rA   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   r7   r#  r   rH  r   r   r   rJ  Æ  s    zUDPTimeoutTest.testTimeoutZeroN)rG   rH   rI   rU  rJ  r   r   r   r   rR  ½  s   rR  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 rS  rT  rì   rA   r   r   rD  Ù  s    z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)rE  rF  r   rA   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)rV  rW  rH  r   r   r   rJ  ß  s    z"UDPLITETimeoutTest.testTimeoutZeroN)rG   rH   rI   rY  rJ  r   r   r   r   rX  Ô  s   rX  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 r.   )r  Ú
issubclassr   rR  r   r(  r)  r7   rA   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<   r2   r  r   rW   rH  r'  r   rE  )rB   Zsock0rØ   r   r   r   Útest_setblocking_invalidfdõ  s    ÿz)TestExceptions.test_setblocking_invalidfdN)rG   rH   rI   r\  r]  r   r   r   r   rZ  í  s   rZ  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Û   r2   ra   r@   r®   r   r¨   r²   Úgetpeername)rB   r  Ús1rZ  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›  ó   hrp   )ÚUNIX_PATH_MAXr   rÛ   r2   ra   r²   r   ©rB   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)rd  r   rÛ   r2   r'  r   ra   re  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Û   r2   ra   r²   r   r   r  r   r   r   ÚtestStrName  s
    
z&TestLinuxAbstractNamespace.testStrNamec                 C   sR   t   t jt j¡.}| tdƒ¡ |  | ¡ d¡ W d   ƒ n1 sD0    Y  d S )Nrj  )r   rÛ   r2   ra   rÁ  r²   r   r  r   r   r   ÚtestBytearrayName&  s    z,TestLinuxAbstractNamespace.testBytearrayNameN)	rG   rH   rI   rd  rb  rf  ri  rk  rl  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 r.   )r   rÛ   r2   rØ   rA   r   r   r   rC   /  s    zTestUnixDomain.setUpc                 C   s   | j  ¡  d S r.   )rØ   r   rA   r   r   r   rE   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ð  rc   r
  ru  Úgetfilesystemencoding©rB   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  rc   r
  )rB   rØ   rÙ   r‹   r   r   r   ra   @  s    ÿÿzTestUnixDomain.bindc                 C   s   |   | j ¡ d¡ d S )N)r+  N)r  rØ   r   rA   r   r   r   r÷  L  s    zTestUnixDomain.testUnboundc                 C   s@   t j tj¡}|  | j|¡ |  tj|¡ |  	| j 
¡ |¡ d S r.   )rÒ   rÙ   Úabspathr   ÚTESTFNra   rØ   rW   r×   r²   r   rp  r   r   r   ÚtestStrAddrP  s    zTestUnixDomain.testStrAddrc                 C   sF   t j tj¡}|  | j|  |¡¡ |  tj	|¡ |  
| j ¡ |¡ d S r.   )rÒ   rÙ   rr  r   rs  ra   rØ   rq  rW   r×   r²   r   rp  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Ù   rr  r   ZTESTFN_UNICODErq  ra   rØ   r  rW   r×   r²   r   )rB   rÙ   ró  r   r   r   ÚtestSurrogateescapeBind^  s
    
z&TestUnixDomain.testSurrogateescapeBindc                 C   sT   t jd u r|  d¡ tj t j¡}|  | j|¡ |  t j	|¡ |  
| j ¡ |¡ d S )Nz!No unencodable filename available)r   ZTESTFN_UNENCODABLErc   rÒ   rÙ   rr  ra   rØ   rW   r×   r²   r   rp  r   r   r   ÚtestUnencodableAddrg  s    

z"TestUnixDomain.testUnencodableAddrN)rG   rH   rI   rC   rE   rq  ra   r÷  rt  ru  rx  ry  r   r   r   r   rm  ,  s   	rm  c                   @   s‚   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
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 )ÚBufferIOTestr   c                 C   s   t j| |d d S r   r  r“   r   r   r   rN   v  s    zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nrr  r   )rs  rë  r³   r¼   r§  r²   rÏ  ©rB   r^  rÊ  rµ   r   r   r   ÚtestRecvIntoArrayy  s    zBufferIOTest.testRecvIntoArrayc                 C   s   t tƒ}| j |¡ d S r.   ©r¶  r³   r¿   r¸   ©rB   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³   r|  r   r   r   ÚtestRecvIntoBytearray…  s
    z"BufferIOTest.testRecvIntoBytearrayc                 C   sH   t dƒ}| j t|ƒ¡}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r¯   )rÁ  r¼   r§  rÔ  r²   rë  r³   r|  r   r   r   ÚtestRecvIntoMemoryviewŽ  s
    z#BufferIOTest.testRecvIntoMemoryviewc                 C   s^   t   ddgttƒ ¡}| j |¡\}}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S r{  )rs  rë  r³   r¼   rª  r²   rÏ  ©rB   r^  rÊ  r¾   rµ   r   r   r   ÚtestRecvFromIntoArray—  s    z"BufferIOTest.testRecvFromIntoArrayc                 C   s   t tƒ}| j |¡ d S r.   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 r.   r  rA   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   )rG   rH   rI   rN   r}  r€  r  Z_testRecvIntoBytearrayr‚  Z_testRecvIntoMemoryviewr„  r…  r†  Z_testRecvFromIntoBytearrayr‡  Z_testRecvFromIntoMemoryviewrˆ  r‰  rŠ  Z_testRecvFromIntoEmptyBufferr   r   r   r   rz  r  s"   
rz  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 )NÚAF_TIPCFz/proc/modulesztipc T)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 )Nrp   r    r   r°   )r   r  r4  rW   r   rÊ  r5  r6  ÚTIPC_ADDR_NAMESEQÚ
TIPC_STYPEÚ
TIPC_LOWERÚ
TIPC_UPPERra   ÚTIPC_ADDR_NAMErj  r/  r³   r£  r²   r   )rB   r-  r”   ÚsrvaddrZsendaddrrµ   Zrecvaddrr   r   r   ÚtestRDMà  s     ÿ
ÿzTIPCTest.testRDMN)rG   rH   rI   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   rN   ø  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  r2   r-  rW   r   rÊ  r5  r6  r’  r“  r”  r•  ra   r@   ro   r¨   r©   rª   )rB   r—  r   r   r   rC   ü  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  r2   r”   rW   r   r–  r“  r”  rj  r•  r®   r   Úcliaddr)rB   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 r.   r·   rA   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¨   rW   r   r±   r  ©rB   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  ©rB   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)rG   rH   rI   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 r.   )r   r<   r2   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¦  )rB   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 r   )r   r  r²   r¦  r   ÚF_GETFDÚ
FD_CLOEXECZF_SETFD)rB   rØ   rN  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ª  )rB   rØ   rN  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Â   rW   r   r²   r¦  )rB   ra  rZ  r   r   r   Útest_socketpair…  s
    zInheritanceTest.test_socketpair)rG   rH   rI   r£   rk  r   r   r   rÞ  r§  r¨  r©  r«  rm  r   r®  r¯  r°  r   r   r   r   r¥  J  s   ÿ	

r¥  rD  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   r2   rŸ  r  r   rÇ  rÒ   rÈ  rÇ  rÆ  )rB   r   Únonblockr7   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<   r2   rD  r³  rE  rÍ  r5   r6   )rB   r   Útr   r   r   Útest_SOCK_NONBLOCK©  s:    
ÿ






,

(

,

.

,z'NonblockConstantTest.test_SOCK_NONBLOCKN)TrÅ  )rG   rH   rI   r³  r   rÞ  rµ  r   r   r   r   r±    s   
r±  r<  r=  zneed multiprocessingc                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestSocketSharingc                 C   sD   |  ¡ }|  ¡ }t |¡}| ¡ \}}| |¡ | ¡  | ¡  d S r.   )rs   r   Ú	fromsharer¨   r  r   )r  ÚqZsdataÚmessager   rZ  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¯  rS   s
   slapmahfrorÛ  rð   )Úmultiprocessingr|   ÚProcessrº  r²  r=   ÚshareÚpidr   r   rˆ   r   r&  r±   ré  r  r²   )	rB   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·  )rB   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  )rB   ZorgÚotherr   r   r   ÚcompareSockets  s    
z TestSocketSharing.compareSocketsc                 C   sD   | j  t ¡ ¡}t |¡}z|  | j |¡ W | ¡  n
| ¡  0 d S r.   )r=   r¾  rÒ   rÃ  r   r·  rÆ  r   )rB   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 r.   )r   r<   rê   r2   r!   r   r¾  rÒ   rÃ  r·  rÆ  r   )rB   ÚfamiliesÚtypesr   r´  Úsourcerž  Zsharedr   r   r   Ú	testTypes  s    

zTestSocketSharing.testTypesN)
rG   rH   rI   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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.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"d6d7„ Z#d8d9„ Z$d:S );ÚSendfileUsingSendTesti    ri   rð   c                 C   s¦   dd„ }d  dd„ t| jƒD ƒ¡}ttjdƒ.}|| j| jƒD ]}| |¡ q>W d   ƒ n1 sb0    Y  ttjdƒ}| ¡ | _	W d   ƒ n1 s˜0    Y  d S )Nc                 s   s&   | |kr|V  | |8 } q | r"| V  d S r.   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   rs  ÚFILESIZErç  r   ÚFILEDATA)r  rÏ  Úchunkr   Zcsizer   r   r   Ú
setUpClass<  s    
ÿ*
z SendfileUsingSendTest.setUpClassc                 C   s   t  t j¡ d S r.   )r   r×   rs  )r  r   r   r   ÚtearDownClassO  s    z#SendfileUsingSendTest.tearDownClassc                 C   s8   | j  tj¡ | j  ¡ \}}| | j¡ |  |j¡ |S r.   )r=   rÍ  r   rÛ  r¨   ÚTIMEOUTrW   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  )rB   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   rs  r   r&  rß  r²   rÕ  Útell©rB   r  ÚfilerØ   ÚmethÚsentr   r   r   Ú_testRegularFilej  s    

z&SendfileUsingSendTest._testRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r.   ©rÛ  rÜ  r²   rë  rÕ  rÖ  ©rB   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 r.   )r=   r   ÚioÚBytesIOrÖ  r   r&  rP  r²   rÕ  rá  r'  rU  rV  )rB   r  rã  rØ   rå  r   r   r   Ú_testNonRegularFile{  s    

ÿz)SendfileUsingSendTest._testNonRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r.   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   rs  r   rW   r×   r   r&  rß  r²   rá  )rB   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   rs  r   r&  rX  rß  r²   rá  ©rB   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Ö  ©rB   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‘  rp   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   rs  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   rs  r   r&  rE  rß  r'  r   rP  ©rB   r  rã  rØ   rä  r   r   r   Ú_testNonBlockingî  s    


z&SendfileUsingSendTest._testNonBlockingc                 C   s    |   ¡ }| d¡r|  d¡ d S )Nri   z$was not supposed to receive any data)rÛ  r±   r#  ©rB   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   rs  r   r&  rX  rß  r²   rÕ  râ  r   r   r   Ú_testWithTimeoutþ  s    
ÿ
z&SendfileUsingSendTest._testWithTimeoutc                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r.   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   rs  r   r&  rÍ  rß  r'  r7   r  r   r   r   Ú_testWithTimeoutTriggeredSend  s    


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendc                 C   s    |   ¡ }| d¡ t d¡ d S )Ni€X rp   )rÛ  r±   r¬   r­   r  r   r   r   ÚtestWithTimeoutTriggeredSend  s    
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendc                 C   s   d S r.   r   rA   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æ  r2   r!  zbinary modezpositive integerrî  r÷  r«   r   rˆ  )	r   r   rs  r   r!   rß  r#  r   rŠ   )rB   rã  r   rä  r   r   r   Útest_errors"  s6    
ÿ@

ÿ@

ÿÿÿÿz!SendfileUsingSendTest.test_errorsN)%rG   rH   rI   rÕ  rÔ  rÖ  r   rX  rÚ  r¹  rØ  rÙ  rÛ  rÜ  rß  ræ  ré  rì  rí  rð  rñ  rô  rõ  rú  rý  rþ  rÿ  r  r  r  r  r  r	  r
  r  r  r  r   r   r   r   rÌ  2  sB   

		
			
		
rÌ  rP  z%os.sendfile() required for this test.c                   @   s   e Zd Zdd„ ZdS )ÚSendfileUsingSendfileTestc                 C   s
   t |dƒS )NrV  rÞ  rá   r   r   r   rß  @  s    z(SendfileUsingSendfileTest.meth_from_sockN)rG   rH   rI   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(   ra   rŽ  r   r£   ZSkipTestr  )rB   Ú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©rB   r  ÚalgoÚoprv   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)rB   Úkeyr  rµ   Z
ciphertextZmsglenr  r  rv   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"  )rB   r#  r  ZplainZassocZexpected_ctZexpected_tagZtaglenr&  r  r  rv   Ú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_sha256rz  )r  rÒ   ÚurandomrÊ  r   r  r  r¨   r±   r²   rë  )rB   r  Z
extra_seedr  rv   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  rp   )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(   rW   r   r'  rŽ  ra   r#  r   rá   r   r   r   Útest_length_restrictionö  s    (((z,LinuxKernelCryptoAPI.test_length_restrictionN)rG   rH   rI   r  r   rÞ  r  r  r%  r-  r0  r1  r2  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_KEEPINTVLÚTCP_KEEPCNTÚ
TCP_MAXSEGÚTCP_KEEPIDLEÚTCP_NODELAYÚTCP_FASTOPENc                    s6   dd„ t tƒD ƒ}‡ fdd„|D ƒ}ˆ  g |d¡ d S )Nc                 S   s   g | ]}|  d ¡r|‘qS )ZTCP)r™  ©rý   r   r   r   r   rÿ     rð   z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>c                    s   g | ]}|ˆ j vr|‘qS r   )ÚknownTCPFlagsr;  rA   r   r   rÿ     rð   zANew TCP flags were discovered. See bpo-32394 for more information)rÔ   r   r²   )rB   ZprovidedÚunknownr   rA   r   Útest_new_tcp_flags  s
    ÿz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rG   rH   rI   r<  r>  r   r   r   r   r4    s   r4  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   rp   r®  rå  )r   rÄ  r   Úcreate_serverr²   r   rì  rê   ©rB   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ó   r2   r   rì  rê   )rB   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Æ  r5  rE  r²   rø  )rB   rØ   rU  r   r   r   Útest_reuse_port5  s    
.*z CreateServerTest.test_reuse_portr:  Ú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 )NrC  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 )NrC  T©r  Údualstack_ipv6)r   r@  rê   r²   r  rá   r   r   r   Útest_dualstack_ipv6_familyI  s
    
ÿz+CreateServerTest.test_dualstack_ipv6_familyN)rG   rH   rI   rB  rD  rG  r£   rm  r   r  rk  r   rì  rI  r   Úhas_dualstack_ipv6rM  r   r   r   r   r?    s   	
þÿr?  c                   @   s   e Zd ZejZdd„ Zdd„ Zdd„ Ze	 
ejd¡dd	„ ƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZdS )ÚCreateServerFunctionalTestc                    sV   ‡ ‡fdd„}t  ¡ ‰ | ˆj¡ t j||fd}| ¡  ˆ |jˆj¡ ˆ  ¡  d S )Nc              	      s˜   | € |   ¡ \}}|P ˆ  ˆj¡ | d¡}|sNW d   ƒ W d   ƒ d S | |¡ W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S r¯   )r¨   r„   r7   r±   r  )rØ   r©   rv   rµ   ©rÄ  rB   r   r   ÚrunV  s    
z3CreateServerFunctionalTest.echo_server.<locals>.runr»  )	rO   ry   rÍ  r7   r°  r²  rW   r  rn   )rB   rØ   rQ  r   r   rP  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Í  r7   r®   r  r²   r±   )rB   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@  rR  rS  r<   rA  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ê   rR  rS  rA  r   r   r   Ú	test_tcp6t  s    
ÿ
z$CreateServerFunctionalTest.test_tcp6rJ  c                 C   s^   t  ¡ }tjd|ftjdd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sP0    Y  d S )Nr+  TrK  r  )r   rÄ  r   r@  rê   rR  rS  r<   rA  r   r   r   Útest_dual_stack_client_v4~  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v4c                 C   s^   t  ¡ }tjd|ftjdd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sP0    Y  d S )Nr+  TrK  r®  rU  rA  r   r   r   Útest_dual_stack_client_v6ˆ  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rG   rH   rI   r   rX  r7   rR  rS  rT  r£   rk  r   rì  rV  rm  r   rN  rW  rX  r   r   r   r   rO  R  s    
	ÿÿrO  Úsend_fdsÚrecv_fdsc                   @   s   e Zd Zdd„ ZdS )ÚSendRecvFdsTestsc              	   C   sn  dd„ }dd„ }dd„ t dƒD ƒ}|  ||¡ dd„ |D ƒ}t tjtj¡\}}|v |R t |tg|¡ t |t	tƒd	 t	|ƒd	 ¡\}}}	}
|  ||¡ W d   ƒ n1 s²0    Y  W d   ƒ n1 sÐ0    Y  |  
|t¡ |  
t	|ƒt	|ƒ¡ |  
|	d
¡ t|ƒD ]&\}}|\}}t |t|ƒ ¡ ¡ qt|ƒD ]*\}}t |d¡}|  
|t|ƒ ¡ ¡ q>d S )Nc                 S   s&   | D ]\}}t  |¡ t  |¡ qd S r.   ©rÒ   r   )Úpipesr  Úfd2r   r   r   Úclose_pipes—  s    
z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipesc                 S   s   | D ]}t  |¡ qd S r.   r\  )rê  rN  r   r   r   Ú	close_fdsœ  s    z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   s   g | ]}t  ¡ ‘qS r   )rÒ   Úpipe)rý   rv   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%  rW   r   rÂ   rÛ   r2   rY  r³   rZ  rë  r²   rì  rÒ   rç  r  rè  r   )rB   r_  r`  r]  rê  Zsock1Zsock2rµ   Zfds2rç  r¾   rn  rb  rc  rž  r   r   r   ÚtestSendAndRecvFds–  s&    &Hz#SendRecvFdsTests.testSendAndRecvFdsN)rG   rH   rI   rd  r   r   r   r   r[  ’  s   r[  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S r.   )r   Zthreading_setupr£   ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModule¼  s    rf  Ú__main__)Ôr£   Útestr   Ztest.supportr   rf  rê  r×  r   rò  rÏ   r¬   rO  rq   ru  rÒ   r˜  rs  r.  Úweakrefr   r  rú  r&  r   rÐ  r\  rÒ  Ú_threadr   rO   r¼  r»  r   rœ   rè  r³   r§   Úsystemr   r  r   r    r#   r%   r)   r+   r-   r0   r4   r/  r8   ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_CAN_J1939ZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKr   ZHAVE_SOCKET_UDPLITEZHAVE_SOCKET_BLUETOOTHrÞ  rù  r¤   r;   rJ   rK   rL   rZ   rh   rj   rŽ   r—   rk  r˜   r™   rš   rm  r¡   r»   rÁ   rÃ   rÈ   rÊ   rÍ   rÎ   rÚ   rÝ   râ   rã   rä   rå   rç   ré   rë   rû   r  r  r  rn  rš  rº  rÁ  rÛ  rà  rõ  rý  r  r  r2  r=  r>  rZ  r_  rb  rd  rf  rg  rh  rŒ  rŸ  r¢  rÀ  rÅ  rÈ  rÙ  rå  r:  rs  ru  rv  rw  rx  rì  rz  r{  r|  r}  r~  r  r€  r  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r  rŽ  r  r”  r•  r–  r—  r˜  r™  rš  r›  r£  r®  r·  r½  rÃ  rß  r  r  r   r!  r#  r$  r|  r%  r'  r(  r0  r=  rC  rR  rX  rZ  r^  rm  rz  r“  r”  r•  r  r‘  r™  r›  r¥  r±  rþ   r¶  rÌ  r  r  r™  r4  r?  rO  r[  rf  rG   Ú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@

'