a
    òñ"h¸ç ã                   @   s°  d dl Z d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZzd dlZW n e y   dZY n0 zd dl!Z!W n e y.   dZ!Y n0 ej"Z"d #d¡Z$dZ%e &¡ d	kZ'zd dl(Z(W n e yt   dZ(Y n0 d
d„ Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1ej2dd„ ƒZ3e*ƒ Z4e+ƒ Z5e,ƒ Z6e-ƒ Z7e.ƒ Z8e/ƒ Z9e0ƒ Z:e;edƒZ<e1ƒ Z=e d¡j>Z?G d d!„ d!e j@ƒZAG d"d#„ d#e j@ƒZBG d$d%„ d%eBƒZCG d&d'„ d'ƒZDG d(d)„ d)e j@ƒZEG d*d+„ d+e j@ƒZFG d,d-„ d-ƒZGG d.d/„ d/eAeGƒZHG d0d1„ d1eBeGƒZIe  Je<d2¡G d3d4„ d4eCeGƒƒZKG d5d6„ d6eEeGƒZLG d7d8„ d8eFeGƒZMe  Ne!du d9¡e  Je:d:¡e  Je)ƒ d;kd<¡G d=d>„ d>e j@eGƒƒƒƒZOG d?d@„ d@eHƒZPG dAdB„ dBe j@eGƒZQG dCdD„ dDe j@ƒZRG dEdF„ dFeRƒZSG dGdH„ dHeDeReGƒZTG dIdJ„ dJeSeTƒZUG dKdL„ dLeRƒZVG dMdN„ dNeVƒZWG dOdP„ dPeRƒZXG dQdR„ dReXƒZYG dSdT„ dTeXƒZZG dUdV„ dVeXƒZ[G dWdX„ dXeXƒZ\G dYdZ„ dZeXƒZ]G d[d\„ d\e]ƒZ^G d]d^„ d^e]ƒZ_d_d`„ Z`dadb„ Zadcdd„ ZbG dedf„ dfe j@ƒZce  Je4dg¡G dhdi„ die j@ƒƒZde  Je4dg¡G djdk„ dkeLƒƒZee  Je5dl¡G dmdn„ dne j@ƒƒZfe  Je6do¡G dpdq„ dqe j@ƒƒZge  Je7dr¡G dsdt„ dte j@ƒƒZhe  Je7dr¡G dudv„ dveMƒƒZie  Je9dw¡G dxdy„ dye j@ƒƒZje  Ne!du d9¡e  Je:d:¡G dzd{„ d{e j@ƒƒƒZke  Je=d|¡G d}d~„ d~e j@ƒƒZlG dd€„ d€ePƒZmG dd‚„ d‚eIƒZne  Je<d2¡G dƒd„„ d„eKƒƒZoG d…d†„ d†eDƒZpG d‡dˆ„ dˆepƒZqG d‰dŠ„ dŠepƒZrG d‹dŒ„ dŒepƒZsG ddŽ„ dŽepƒZtG dd„ depƒZuG d‘d’„ d’epƒZvG d“d”„ d”evƒZwG d•d–„ d–ewƒZxG d—d˜„ d˜ewƒZyG d™dš„ dšepƒZzG d›dœ„ dœezƒZ{G ddž„ džezƒZ|G dŸd „ d eqezƒZ}G d¡d¢„ d¢e j@ƒZ~G d£d¤„ d¤evƒZG d¥d¦„ d¦evƒZ€G d§d¨„ d¨ereteTeZƒZeaejd©ƒG dªd«„ d«eyeƒƒZ‚eaejd¬ƒG d­d®„ d®e|eƒƒZƒeaejd¯ƒG d°d±„ d±e}eƒƒZ„G d²d³„ d³ereteTe^ƒZ…eaejd©ƒe  Jej†d´¡ebdµd¶ƒG d·d¸„ d¸eye…ƒƒƒƒZ‡eaejd¬ƒe  Jej†d´¡ebdµd¶ƒG d¹dº„ dºe|e…ƒƒƒƒZˆeaejd¯ƒe  Jej†d´¡ebdµd¶ƒG d»d¼„ d¼e}e…ƒƒƒƒZ‰eaejd¬ƒe  Jej†d´¡eaed½ƒebdµd¶ƒG d¾d¿„ d¿e€e…ƒƒƒƒƒZŠeaejd¯ƒe  Jej†d´¡eaed½ƒebdµd¶ƒG dÀdÁ„ dÁeqe€e…ƒƒƒƒƒZ‹e  Je<d2¡G dÂdÃ„ dÃereteTe[ƒƒZŒe  Je<d2¡eaejd©ƒG dÄdÅ„ dÅeyeŒƒƒƒZe  Je<d2¡eaejd¬ƒG dÆdÇ„ dÇe|eŒƒƒƒZŽe  Je<d2¡eaejd¯ƒG dÈdÉ„ dÉe}eŒƒƒƒZe  Je<d2¡G dÊdË„ dËereteTe_ƒƒZeaejd©ƒe  Jej†d´¡e  Je<d2¡ebdµd¶ƒG dÌdÍ„ dÍeyeƒƒƒƒƒZ‘eaejd¬ƒe  Jej†d´¡e  Je<d2¡ebdµd¶ƒG dÎdÏ„ dÏe|eƒƒƒƒƒZ’eaejd¯ƒe  Jej†d´¡e  Je<d2¡ebdµd¶ƒG dÐdÑ„ dÑe}eƒƒƒƒƒZ“eaejd¬ƒe  Jej†d´¡e  Je<d2¡eaed½ƒebdµd¶ƒG dÒdÓ„ dÓe€eƒƒƒƒƒƒZ”eaejd¯ƒe  Jej†d´¡e  Je<d2¡eaed½ƒebdµd¶ƒG dÔdÕ„ dÕeqe€eƒƒƒƒƒƒZ•G dÖd×„ d×eueUeYƒZ–eaejd©ƒG dØdÙ„ dÙexe–ƒƒZ—eaejd¬ƒG dÚdÛ„ dÛe|e{e–ƒƒZ˜eaejd¯ƒG dÜdÝ„ dÝe}e{e–ƒƒZ™G dÞdß„ dßeseueUe\ƒZšeaejd©ƒe  Ne'dà¡ebdádâdãƒG dädå„ dåexešƒƒƒƒZ›eaejd¬ƒe  Ne'dà¡ebdádâdãƒG dædç„ dçe|e{ešƒƒƒƒZœeaejd¯ƒe  Ne'dà¡ebdádâdãƒG dèdé„ dée}e{ešƒƒƒƒZG dêdë„ dëeueUeWƒZžeaejd©ƒeaedìƒG dídî„ dîexežƒƒƒZŸeaejd¬ƒeaedìƒG dïdð„ dðe|e{ežƒƒƒZ eaejd¯ƒeaedìƒG dñdò„ dòe}e{ežƒƒƒZ¡eaejd©d¬ƒeaedìdódôƒG dõdö„ döeežƒƒƒZ¢eaejd©d¯ƒeaedìdódôƒG d÷dø„ døeqeežƒƒƒZ£G dùdú„ dúƒZ¤eaedûƒe  Je;edüƒpäe;edýƒdþ¡G dÿd „ d e¤eZƒƒƒZ¥eaedûƒe  Je;edüƒp"e;edýƒdþ¡G dd„ de¤eDeSeYƒƒƒZ¦G dd„ deHƒZ§G dd„ deQƒZ¨G dd„ deQƒZ©G d	d
„ d
eHƒZªG dd„ dePƒZ«G dd„ de«ƒZ¬G dd„ de«ƒZ­G dd„ de«ƒZ®G dd„ de«ƒZ¯G dd„ de«ƒZ°G dd„ de«ƒZ±G dd„ de²ƒZ³G dd„ de³emƒZ´G dd„ de j@ƒZµG dd „ d eAeGƒZ¶G d!d"„ d"eAeGƒZ·G d#d$„ d$eAƒZ¸G d%d&„ d&eBƒZ¹e  Je<d2¡G d'd(„ d(eCƒƒZºG d)d*„ d*e j@ƒZ»e  Jejd+kd,¡G d-d.„ d.e j@ƒƒZ¼e  Je;edìƒd/¡G d0d1„ d1e j@ƒƒZ½G d2d3„ d3ePƒZ¾d4Z¿d5ZÀd6ZÁd7d8„ ZÂe  JeÂƒ d9¡G d:d;„ d;e j@ƒƒZÃe  JeÂƒ d9¡G d<d=„ d=e j@eGƒƒZÄG d>d?„ d?eHƒZÅG d@dA„ dAe j@ƒZÆe  Je;edBƒdC¡G dDdE„ dEe j@ƒƒZÇe  JejÈdFkdG¡e  JedH¡G dIdJ„ dJeAƒƒƒZÉG dKdL„ dLeHƒZÊe  Je;edMƒdN¡G dOdP„ dPeÊƒƒZËe  Je8dQ¡G dRdS„ dSe j@ƒƒZÌe  Jej ÍdT¡dU¡G dVdW„ dWe j@ƒƒZÎG dXdY„ dYe j@ƒZÏG dZd[„ d[e j@ƒZÐeaed\ƒeaed]ƒeaedìƒG d^d_„ d_e j@ƒƒƒƒZÑd`da„ ZÒeÓdbkr¬e  Ô¡  dS (c  é    N)Úsupport)Úsocket_helper)ÚproxyFu   Michael Gilfix was hereáˆ´
úutf-8éÒ  ÚAIXc                  C   s‚   t d u rd S ttdƒsd S z>tddƒ } t  | tjd¡}W d   ƒ n1 sL0    Y  W n tyl   Y d S 0 t d|¡d S d S )NÚIOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsockÚrbz    ÚIr   )	ÚfcntlÚhasattrÚsocketÚopenÚioctlr   ÚOSErrorÚstructÚunpack)ÚfÚr© r   ú8/opt/python-3.9.21/usr/lib/python3.9/test/test_socket.pyÚget_cid2   s    
2r   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS ©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                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚSocketPairTestr   c                 C   s*   t jj| |d t | ¡ d | _d | _d S r   )r£   r¤   rN   rj   r”   r=   r“   r   r   r   rN   +  s    
zSocketPairTest.__init__c                 C   s   t  ¡ S r.   )r   Ú
socketpairrA   r   r   r   rÁ   1  s    zSocketPairTest.socketpairc                 C   s   |   ¡ \| _| _d S r.   )rÁ   r=   r”   rA   r   r   r   rC   5  s    zSocketPairTest.setUpc                 C   s   | j r| j  ¡  d | _ d S r.   rD   rA   r   r   r   rE   8  s    
zSocketPairTest.tearDownc                 C   s   d S r.   r   rA   r   r   r   r†   =  s    zSocketPairTest.clientSetUpc                 C   s$   | j r| j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   @  s    
zSocketPairTest.clientTearDownN)r   )	rG   rH   rI   rN   rÁ   rC   rE   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   V  s    
zSocketTestBase.setUpc                 C   s   |   | j¡ | j ¡ | _d S r.   )ÚbindSockr=   r   Ú	serv_addrrA   r   r   r   rÄ   Z  s    zSocketTestBase.bindServerc                 C   s   | j  ¡  d | _ d S r.   rD   rA   r   r   r   rE   _  s    
zSocketTestBase.tearDownN)rG   rH   rI   rC   rÄ   rE   r   r   r   r   rÂ   M  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   g  s    
zSocketListeningTestMixin.setUp©rG   rH   rI   rC   rY   r   r   rU   r   rÇ   d  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   t  s    z ThreadedSocketTestMixin.__init__c                 C   s   |   ¡ | _|  ¡  d S r.   )ÚnewClientSocketr”   Ú
bindClientrA   r   r   r   r†   x  s    
z#ThreadedSocketTestMixin.clientSetUpc                 C   s   |   ¡ S r.   )rÃ   rA   r   r   r   rÊ   |  s    z'ThreadedSocketTestMixin.newClientSocketc                 C   s   |   | j¡ | j ¡ | _d S r.   )rÅ   r”   r   rž   rA   r   r   r   rË   €  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É   l  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þ   0  s   ÿzcan't create socket({0}): {1}c                 s   s   | ]}t |ƒV  qd S r.   )r  ©rü   Úor   r   r   r  <  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_socketobjectD  s
    z2GeneralModuleTests.test_SocketType_is_socketobjectc                 C   sî   t   t jt j¡}|¦ |  d| ¡  t|ƒ¡ |  dt j t|ƒ¡ |  dt j t|ƒ¡ |  dt|ƒ¡ |  dt|ƒ¡ | d¡ |  dt|ƒ¡ |  t| 	¡ ƒt|ƒ¡ W d   ƒ n1 sÀ0    Y  |  dt|ƒ¡ |  dt|ƒ¡ d S )	Nzfd=%iz	family=%sztype=%szproto=0Úraddr©ú	127.0.0.1r   Úladdrz[closed])
r   r<   r2   ÚassertInÚfilenoÚreprÚassertNotInra   r  r   ©rB   r   r   r   r   Ú	test_reprK  s    
6zGeneralModuleTests.test_reprNzneed _socket modulec                 C   sz   t  t jt j¡}z6d| ¡ |j|j|jf }|  t	|ƒ|¡ W | 
¡  n
| 
¡  0 d|j|j|jf }|  t	|ƒ|¡ d S )Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)r  r   r<   r2   r  Úfamilyrò   Úprotor²   r  r   )rB   r   Úexpectedr   r   r   Útest_csocket_reprY  s    ÿÿz$GeneralModuleTests.test_csocket_reprc                 C   s†   t   t jt j¡,}t|ƒ}|  | ¡ | ¡ ¡ W d   ƒ n1 sB0    Y  d }t ¡  z| ¡  W n tyv   Y n0 |  	d¡ d S )NzSocket proxy still exists)
r   r<   r2   r   r²   r  r   Ú
gc_collectÚReferenceErrorÚfail)rB   r   Úpr   r   r   Útest_weakreff  s    2zGeneralModuleTests.test_weakrefc                 C   s®   d}| j t|d d t‚W d   ƒ n1 s00    Y  | j t|d d tj‚W d   ƒ n1 sh0    Y  | j t|d d tj‚W d   ƒ n1 s 0    Y  d S )Nz$Error raising socket exception (%s).r   ©rµ   zsocket.herrorzsocket.gaierror)ÚassertRaisesr   r   ÚherrorÚgaierrorr´   r   r   r   ÚtestSocketErrors  s    "$z"GeneralModuleTests.testSocketErrorc                 C   s  t   t jt j¡}|  |j¡ | d¡ | ¡ }|  t¡}| 	d|¡ W d   ƒ n1 sZ0    Y  |  
t|jƒd¡ |  t¡}| 	d|¡ W d   ƒ n1 s¢0    Y  |  
t|jƒd¡ |  t¡}| 	dd ¡ W d   ƒ n1 sê0    Y  |  dt|jƒ¡ |  t¡}| 	dd|¡ W d   ƒ n1 s60    Y  |  
t|jƒd¡ |  t¡}| 	dd|¡ W d   ƒ n1 s‚0    Y  |  
t|jƒd¡ |  t¡}| 	ddd ¡ W d   ƒ n1 sÎ0    Y  |  dt|jƒ¡ |  t¡}| 	dd	|¡ W d   ƒ n1 s0    Y  |  d
t|jƒ¡ |  t¡}| 	dd d ¡ W d   ƒ n1 sf0    Y  |  d
t|jƒ¡ |  t¡}| 	d¡ W d   ƒ n1 s®0    Y  |  dt|jƒ¡ |  t¡ }| 	dd|d¡ W d   ƒ n1 sü0    Y  |  dt|jƒ¡ d S )N)Ú r   u   â˜ z*a bytes-like object is required, not 'str'y              @z.a bytes-like object is required, not 'complex'ó   fooznot NoneTyper   Úbarzan integer is requiredz	(1 given)é   z	(4 given))r   r<   r!   rW   r   ra   r   r&  rŠ   Úsendtor²   r  Ú	exceptionr  )rB   r   ÚsocknameÚcmr   r   r   ÚtestSendtoErrors}  sT    
*ÿ*ÿ*.ÿ.ÿ...*0z#GeneralModuleTests.testSendtoErrorsc                 C   s@   t j t jrt j t j t j t j t j t j t j	 t j
 d S 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_RECVPATHMTUÚIPV6_RECVHOPLIMITÚIPV6_RECVPKTINFOÚ
IPV6_RTHDRÚIPV6_CHECKSUMÚIPV6_RECVRTHDRÚIPV6_RTHDR_TYPE_0ÚIPV6_TCLASSÚIPV6_DONTFRAGÚIPV6_PATHMTUÚIPV6_HOPOPTSÚIPV6_NEXTHOPÚIPV6_PKTINFOÚIPV6_DSTOPTSÚIPV6_HOPLIMITÚIPV6_RECVDSTOPTSÚIPV6_RECVHOPOPTSZIPV6_USE_MIN_MTUÚIPV6_RTHDRDSTOPTSÚIPV6_RECVTCLASSz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   ÚhostnameÚipZhnameÚaliasesÚipaddrsZall_host_namesZfqhnr   r   r   ÚtestHostnameResæ  s    
z"GeneralModuleTests.testHostnameResc                 C   sL   t jddfD ]}|  t |¡|¡ qt jfD ]}|  |t |¡d ¡ q,d S )Nz10.0.0.1ú255.255.255.255r    )r   ZHOSTv4r²   r   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  re  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   rj  r  Úintr  ÚassertGreaterÚif_nametoindexr²   Úif_indextoname)rB   Z
interfacesÚindexrý   Z_indexÚ_namer   r   r   ÚtestInterfaceNameIndex%  s    

z)GeneralModuleTests.testInterfaceNameIndexrn  z&socket.if_indextoname() not available.c              	   C   sú   |   ttjd¡ |   ttjd¡ |   ttjdd ¡ |   ttjd¡ ttdƒrött ¡ ƒ}|D ]L}|d }||vr^|   ttf¡ t |¡ W d   ƒ q^1 s 0    Y  q^dD ]D}||vr°|   ttf¡ t |¡ W d   ƒ q°1 sê0    Y  q°d S )	Nr   éÿÿÿÿr    éè  Ú	_DEADBEEFrj  ì        )ì   ÿÿ l   ÿÿÿÿ )	r&  r   r   rn  ÚOverflowErrorrŠ   r   Údictrj  )rB   Úindicesro  Úindex2r   r   r   ÚtestInvalidInterfaceIndexToName5  s    
*z2GeneralModuleTests.testInvalidInterfaceIndexToNamerm  z&socket.if_nametoindex() not available.c                 C   s$   |   ttjd¡ |   ttjd¡ d S )Nr   rt  )r&  rŠ   r   rm  r   rA   r   r   r   ÚtestInvalidInterfaceNameToIndexH  s    z2GeneralModuleTests.testInvalidInterfaceNameToIndexÚgetrefcountztest needs sys.getrefcount()c                 C   sJ   zt  t¡}t td¡ W n* tyD   t  t¡|kr@|  d¡ Y n0 d S )Nr   z$socket.getnameinfo loses a reference)Úsysr}  rG   r   ÚgetnameinforŠ   r"  )rB   Úorigr   r   r   ÚtestRefCountGetNameInfoN  s    
z*GeneralModuleTests.testRefCountGetNameInfoc                 C   s(   zt  dd¡ W n ty"   Y n0 d S )N)r]   r   r   r   r   )r   r  r   rA   r   r   r   ÚtestInterpreterCrashZ  s    z'GeneralModuleTests.testInterpreterCrashc              	   C   sŽ   t jdt jdt jdt jdi}| ¡ D ]d\}}d|> d }dD ]$}|  ||@ ||||@ ƒƒ|@ ¡ q<||ƒ}|  ||@ |¡ |  t|d¡ q$d S )Né    é   rp   )r   rp   éÿÿ  i  ÿÿr    igE#i2Tvl        )	r   ÚhtonlÚntohlÚhtonsÚntohsÚitemsr²   r&  rw  )rB   ZsizesÚfuncÚsizeÚmaskr:   Zswappedr   r   r   ÚtestNtoHb  s    ÿ"zGeneralModuleTests.testNtoHc                 C   s
  dd l }g d¢}|dg }ddddd> g}||jd |jd g }d	|jg}|D ]}t |¡ t |¡ qP|D ]}t |¡ t |¡ qn|D ]$}|  t	tj|¡ |  t	tj|¡ qŒ|D ]$}|  t	tj|¡ |  t	tj|¡ q¶|D ]$}|  
ttj|¡ |  
ttj|¡ qàd S )
Nr   )r   rp   r    r…  rv  rr  éþÿÿÿru  rp   rs  é   )Ú	_testcapiZINT_MINÚINT_MAXr   r‰  rˆ  r‡  r†  r&  rw  ÚassertWarnsÚDeprecationWarning)rB   r‘  Zs_good_valuesZl_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_valuesÚkr   r   r   ÚtestNtoHErrorsp  s.    

ÿ


z!GeneralModuleTests.testNtoHErrorsc              	   C   s   | j }tj d¡stjdv r"d}nd}|D ].}zt |d¡}W  q^W q* tyV   Y q*0 q*t‚ttdƒrtt ¡ dkrˆt |¡}|||ƒ zt |d¡}W n ty®   d }Y n0 |||ƒ t	j
sÐ|t |¡|ƒ |t |d¡|ƒ |d urü|t |d¡|ƒ |  ttjd	¡ |  ttjd
¡ d S )N)ÚfreebsdZnetbsdZgnukfreebsd)Úlinuxr?  )ÚdaytimeZqotdÚdomain)Zechor™  rš  ZtcpÚgetandroidapilevelé   Zudprr  r  )r²   r~  ÚplatformÚ
startswithr   Úgetservbynamer   r   r›  r   Z
is_androidÚgetservbyportr&  rw  )rB   ÚeqZservicesZservicer?   Zport2Zudpportr   r   r   ÚtestGetServBy‰  s<    ÿ


ÿ



z GeneralModuleTests.testGetServByc              	   C   s0  |   t ¡ d ¡ t ¡  }|   | ¡ d ¡ W d   ƒ n1 s>0    Y  tdƒª |   t ¡ d¡ t ¡  }|   | ¡ d¡ W d   ƒ n1 s0    Y  t d ¡ |   t ¡ d ¡ t ¡  }|   | ¡ d ¡ W d   ƒ n1 sâ0    Y  W d   ƒ n1 s0    Y  |  ttjd¡ |  ttjd¡ d S )Né
   rr  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ó   ÿÿÿÿrb  )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ª  rb  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   ÚImportErrorr~  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ªUrb  rª  r²  r±  s      s        r¿  )r   rÅ  rÄ  r<   r²   Ú	bytearrayr´  r   )r<   rÄ  rB   r   ÚtestStringToIPv47  s$    





z#GeneralModuleTests.testStringToIPv4c              
      s  z&ddl m‰m‰ m} |s$ˆ d¡ W n tyB   ˆ d¡ Y n0 tjdkr–zˆˆ dƒ W n8 ty” } z |j	dkr€ˆ d¡ W Y d }~n
d }~0 0 ‡ ‡fd	d
„‰‡‡fdd
„}ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆtdƒƒ¡ |dƒ |dƒ |dƒ d S )Nr   )rÄ  ré   r3  r¸  r¹  rº  r¿  r¼  r½  c                    s
   ˆˆ | ƒS r.   r   r­  )ré   rÄ  r   r   rî   b  rï   z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r.   r¯  r­  r¾  r   r   rî   c  s   
ÿr»  r³  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
ïÿÿ™— Ups   s   s   )r   rÄ  ré   r3  rc   rÀ  r~  r  r   rÁ  r²   rÆ  rÂ  r   )ré   r   rÄ  rB   r   ÚtestStringToIPv6Q  s0    

 þz#GeneralModuleTests.testStringToIPv6c                 C   sœ   t  ¡ }t tjtj¡}|  |j¡ | d|f¡ | ¡ }zt 	t 
¡ ¡}W n tyh   |  d¡ Y n0 |  |d d|fd|d  ¡ |  |d |¡ d S )Nr©  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   ÚtestSockNameu  s    zGeneralModuleTests.testSockNamec                 C   s@   t   t jt j¡}|  |j¡ | t jt j¡}|  |dkd¡ d S )Nr   zinitial mode is reuse)	r   r<   r2   rW   r   Ú
getsockoptr5  r6  ÚassertFalse©rB   r×   Zreuser   r   r   ÚtestGetSockOpt‡  s    z!GeneralModuleTests.testGetSockOptc                 C   sR   t   t jt j¡}|  |j¡ | t jt jd¡ | t jt j¡}|  	|dkd¡ d S )Nrp   r   zfailed to set reuse mode)
r   r<   r2   rW   r   Ú
setsockoptr5  r6  rË  rÌ  rÍ  r   r   r   ÚtestSetSockOpt  s
    z!GeneralModuleTests.testSetSockOptc                 C   sN   t   t jt j¡}| d¡ W d   ƒ n1 s00    Y  |  t|jd¡ d S )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  rg  Ú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&  rw  ra   rœ   Ú	itertoolsÚcountr   rg  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_VALSrr  )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(  rg  ÚEAI_SERVICErc   rœ   r²   Úlenr   ÚIPV6_ENABLEDr   r~  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   r  rA   r   r   r   Útest_getnameinfo4  s    z#GeneralModuleTests.test_getnameinfoÚnetworkznetwork is not enabledc                 C   sd   t  d¡ t d¡ W d   ƒ n1 s*0    Y  d}t |¡ t |¡ t |dtjtj¡ d S )Nz
python.orgu!   Ð¸ÑÐ¿Ñ‹Ñ‚Ð°Ð½Ð¸Ðµ.pythontest.netr   )r   Ztransient_internetr   rY  Úgethostbyname_exrî  rô  r2   )rB   rš  r   r   r   Ú	test_idna8  s    (

zGeneralModuleTests.test_idnac              
      s2  t tdƒrt tdƒsˆ  d¡ ‡ fdd„}‡ fdd„}t ¡ \}}t tj|¡}z²|r`| d¡ ˆ  t¡* t 	d	¡ | 
d
tj ¡ W d   ƒ n1 sš0    Y  |rØt tj|¡ t 	d	¡ ˆ  tj|j
d
tj ¡ W t 	d¡ t tj|¡ | ¡  | ¡  n*t 	d¡ t tj|¡ | ¡  | ¡  0 d S )NÚalarmrÁ   z9signal.alarm and socket.socketpair required for this testc                     s   ˆ   ttjd¡ d S r›   ©r&  r¥  ÚmathÚacosh©rS   rA   r   r   Ú
ok_handlerO  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_handlerQ  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_interruptedI  s4    


.
ÿ

ý
z,GeneralModuleTests.check_sendall_interruptedc                 C   s   |   d¡ d S ©NF©r  rA   r   r   r   Útest_sendall_interruptedh  s    z+GeneralModuleTests.test_sendall_interruptedc                 C   s   |   d¡ d S )NTr  rA   r   r   r   Ú%test_sendall_interrupted_with_timeoutk  s    z8GeneralModuleTests.test_sendall_interrupted_with_timeoutc                 C   sÎ   t   t jt j¡}t|ƒ}|  t¡}d }t ¡  W d   ƒ n1 sD0    Y  |  |t	|j
jd ƒ¡ t   t jt j¡}| d¡}t|ƒ}d }t ¡  |  t¡ d }t ¡  W d   ƒ n1 sÀ0    Y  d S )Nr   r	   )r   r<   r2   r  r“  ÚResourceWarningr   r   r  r  ÚwarningrS   Úmakefile)rB   r×   r   r1  r   r   r   r   Útest_dealloc_warnn  s    &
z$GeneralModuleTests.test_dealloc_warnc                 C   sV   t   t jt j¡2}| d¡}| ¡  |  t|ƒd¡ W d   ƒ n1 sH0    Y  d S )Nr	   z<_io.BufferedReader name=-1>)r   r<   r2   r  r   r²   r  ©rB   r×   Úfpr   r   r   Útest_name_closed_socketio  s    
z,GeneralModuleTests.test_name_closed_socketioc                 C   s–   t   ¡ z}|jddd}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ | ¡  |  t	|j¡ |  t	|j¡ |  t	|j¡ W d   ƒ n1 sˆ0    Y  d S )Nr	   r   )Ú	buffering)
r   r  r  ÚreadablerÌ  ÚwritableÚseekabler   r&  r¥  r  r   r   r   Útest_unusable_closed_socketio…  s    
z0GeneralModuleTests.test_unusable_closed_socketioc                 C   s2  t   ¡ }z†| tdf¡ t  | ¡ ¡ |  t¡ | d¡ W d   ƒ n1 sP0    Y  W |  t¡ | ¡  W d   ƒ qÄ1 s„0    Y  n4|  t¡ | ¡  W d   ƒ n1 s¸0    Y  0 |  t¡ t  d ¡ W d   ƒ n1 sî0    Y  |  t¡ t  d¡ W d   ƒ n1 s$0    Y  d S )Nr   rp   rr  )	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   rr  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&  rw  r@   r’  )rB   r‘  r3  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   rv  iöÿÿÿ)	r&  rw  r   r  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   r9  )r   rj  rî  ré   r!   r9  r²   )rB   ÚifindexÚtest_interfacerv   r:  r   r   r   Ú&test_getaddrinfo_ipv6_scopeid_symbolicÜ  s    üz9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicz.Numeric scope id does not work or undocumentedc                 C   sD   d}t  dt|ƒ dt jt jt j¡\^ }}|  |ddd|f¡ d S )Né*   r<  r   r9  r   )r   rî  r  ré   r!   r9  r²   )rB   r=  rv   r:  r   r   r   Ú%test_getaddrinfo_ipv6_scopeid_numericë  s    
üz8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericc                 C   sH   t  ¡ d \}}ddd|f}t  |t jt jB ¡}|  |d| df¡ d S )Nr   r8  r   úff02::1de:c0:face:8d%Ú1234)r   rj  r  ÚNI_NUMERICHOSTÚNI_NUMERICSERVr²   )rB   r=  r>  r:  Únameinfor   r   r   Ú&test_getnameinfo_ipv6_scopeid_symbolicü  s    z9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolicc                 C   s@   d}ddd|f}t  |t jt jB ¡}|  |dt|ƒ df¡ d S )Nr@  r8  r   r   rB  rC  )r   r  rD  rE  r²   r  )rB   r=  r:  rF  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   rJ  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 )>   rJ  rÙ  Nr   )rü   rý   Úkindr   r   r   r  3  s   þzEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>rœ  )r  rò   r  r  r   )r   r<   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.   ©rT  )rB   rT  r   r   r   rN   D  s    zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S   s   | j S r.   rW  rA   r   r   r   r  G  s    zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rG   rH   rI   rN   r  r   r   r   r   ÚFileC  s   rX  r    rs  )r   rÑ   r   ÚcurdirÚO_RDONLYr   r&  Ú_GiveupOnSendfileÚ_sendfile_use_sendfilerw  rŠ   )rB   rX  r×   rT  r   r   r   Útest__sendfile_use_sendfileA  s    

,0z.GeneralModuleTests.test__sendfile_use_sendfilec                 C   st   |   |j|¡ |   |j|¡ | ¡ }tj|d}|  |j¡ | ¡  |   |j|¡ |   |j|¡ |   | ¡ |¡ d S ©NrÔ  )r²   r  rò   r  r   rW   r   rN  )rB   r   r  ÚstyperT  Ús2r   r   r   Ú_test_socket_filenoS  s    z&GeneralModuleTests._test_socket_filenoc                 C   sP  t   t jt j¡}|  |j¡ | tjdf¡ |  |t jt j¡ t	t dƒr†t   t jt j
¡}|  |j¡ | tjdf¡ |  |t jt j
¡ tjrÎt   t jt j¡}|  |j¡ | tjdddf¡ |  |t jt j¡ t	t dƒrLt ¡ }|  tj|¡ t   t jt j¡}|  |j¡ z| tj |d¡¡ W n ty8   Y n0 |  |t jt j¡ d S )Nr   r!   rÚ   r   )r   r<   r2   rW   r   ra   r   rœ   ra  r   r!   rñ  ré   rç   rÎ   rÏ   ÚshutilÚrmtreerÚ   rÑ   rØ   r  ÚPermissionError)rB   r   Ztmpdirr   r   r   Útest_socket_fileno`  s4    

ÿz%GeneralModuleTests.test_socket_filenoc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nzinteger argument expectedg     @E@rÔ  ©r)  rŠ   r   r<   r2   rA   r   r   r   Ú test_socket_fileno_rejects_float  s    z3GeneralModuleTests.test_socket_fileno_rejects_floatc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nzinteger is requiredÚfoorÔ  rf  rA   r   r   r   Ú&test_socket_fileno_rejects_other_typesƒ  s    z9GeneralModuleTests.test_socket_fileno_rejects_other_typesc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Núnegative file descriptorrr  rÔ  ©r)  r¥  r   r<   r2   rA   r   r   r   Ú)test_socket_fileno_rejects_invalid_socket‡  s    z<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlyc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nrj  iÖÿÿÿrÔ  rk  rA   r   r   r   Ú#test_socket_fileno_rejects_negative‹  s    z6GeneralModuleTests.test_socket_fileno_rejects_negativec                 C   s°   d}|   t¡ }tjt ¡ d W d   ƒ n1 s40    Y  |  |jjtj|f¡ |   t¡(}tjtj	tj
t ¡ d W d   ƒ n1 sŒ0    Y  |  |jjtj|f¡ d S )Ni6'  rÔ  )r&  r   r   r   Zmake_bad_fdr  r/  rg  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 r^  )rÎ   ÚNamedTemporaryFiler&  r   r   r  r<   r2   r²   r/  rg  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>  r~  r  r   rñ  rV  ra  rc  rd  r   r   ri  rq  r{  r|  r  r‚  rŽ  r   Úcpython_onlyr–  r¢  r¦  r«  r·  rÃ  rÇ  rÈ  rÊ  rÎ  rÐ  rÓ  rØ  rÚ  rÞ  rá  rä  rù  rú  Zis_resource_enabledrý  r  r  r  r  r  r  r  r&  r*  r1  r4  r5  r7  r;  ÚskipIfr   r?  rA  rG  rH  rI  rL  rU  r]  ra  re  rg  ri  rl  rm  rn  rp  r   r   r   r   r  B  s  

,

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


,ÿ
ÿ
ÿ
>ÿ
ÿ
"
ÿNÿ




	
þ
ÿ

r  z!SocketCan required for this test.c                   @   s”   e Zd Zdd„ Ze eedƒd¡dd„ ƒZdd„ Z	e eedƒd¡d	d
„ ƒZ
dd„ Zdd„ Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚBasicCANTestc                 C   s   t j t j t j d S 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   rv  ÚCAN_BCM_TX_SETUPÚCAN_BCM_TX_DELETEÚCAN_BCM_TX_READÚCAN_BCM_TX_SENDÚCAN_BCM_RX_SETUPÚCAN_BCM_RX_DELETEÚCAN_BCM_RX_READÚCAN_BCM_TX_STATUSÚCAN_BCM_TX_EXPIREDÚCAN_BCM_RX_STATUSÚCAN_BCM_RX_TIMEOUTÚCAN_BCM_RX_CHANGEDÚCAN_BCM_SETTIMERÚCAN_BCM_STARTTIMERÚCAN_BCM_TX_COUNTEVTÚCAN_BCM_TX_ANNOUNCEÚCAN_BCM_TX_CP_CAN_IDÚCAN_BCM_RX_FILTER_IDÚCAN_BCM_RX_CHECK_DLCÚCAN_BCM_RX_NO_AUTOTIMERÚCAN_BCM_RX_ANNOUNCE_RESUMEÚCAN_BCM_TX_RESET_MULTI_IDXÚCAN_BCM_RX_RTR_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!   rv  r  r   r   r   ÚtestCreateBCMSocketÖ  s    z BasicCANTest.testCreateBCMSocketc                 C   sV   t   t jt jt j¡.}d}| |¡ |  | ¡ |¡ W d   ƒ n1 sH0    Y  d S )N)r*  )r   r   r   r   ra   r²   r   )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£   rq  r   r   r  r‘  r’  r”  r—  rš  rŸ  r   r   r   r   rt  ª  s(   ÿ
ÿ
ÿ
ÿrt  c                   @   s’   e Zd Zddd„Zedd„ ƒZedd„ ƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚCANTestr   c                 C   s   t j| |d d S r   )r™   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._testSendMultiFramesrv  rw  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   Ú_testBCM0  s
    zCANTest._testBCMc                 C   sÀ   t   t jt jt j¡}|  |j¡ | | jf¡ d| _t	g d¢ƒ| _
|  | j| j
¡| _t j}d}d}d } } }}d}	d}
t | j||||||||	|
¡
}|| j }| |¡}|  |t|ƒ¡ d S )Né#  )éÀ   éÿ   éî   r   i"  rp   )r   r   r!   rv  rW   r   r®   rb   rž  Úbytesr¤  r¦  rª  r{  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   ÚtestBCM9  s4    ÷

zCANTest.testBCMN)r   )rG   rH   rI   rN   Úclassmethodr¦  r¨  r¬  r®  r¯  r°  r³  r¶  r£   rq  r   r   r·  r¾  r   r   r   r   r   þ  s&   


ÿ
ÿr   z!CAN ISOTP required for this test.c                       sV   e Zd Z‡ fdd„Zdd„ Zdd„ Ze ee	dƒd¡d	d
„ ƒZ
dd„ Zdd„ Z‡  ZS )Ú	ISOTPTestc                    s   t ƒ j|i |¤Ž d| _d S ©Nr[   ©rM   rN   rb   rR   rU   r   r   rN   \  s    zISOTPTest.__init__c                 C   s   t j t j t j t j d S r.   )r   ru  r   r"   r!   rA   r   r   r   r7  `  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‘  f  s    zISOTPTest.testCreateSocketr"   z(socket.CAN_ISOTP required for this test.c                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r.   )r   r   r!   r"   r  r   r   r   ÚtestCreateISOTPSocketj  s    zISOTPTest.testCreateISOTPSocketc              	   C   sn   t   t jt jt j¡F}|  td¡ | d¡ W d   ƒ n1 sB0    Y  W d   ƒ n1 s`0    Y  d S )Nr•  )r–  rp   r    )r   r   r!   r"   r)  r   ra   r  r   r   r   r—  p  s    z"ISOTPTest.testTooLongInterfaceNamec              
   C   s¨   z^t   t jt jt j¡6}| jddf}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  W nD ty¢ } z,|j	t	j
krŒ|  d| j ¡ n‚ W Y d }~n
d }~0 0 d S )Nr¸  iV  r`   )r   r   r!   r"   rb   ra   r²   r   r   rg  ÚENODEVrc   ©rB   r   r¾   r‹   r   r   r   ÚtestBindv  s    
2ÿzISOTPTest.testBind)rG   rH   rI   rN   r7  r‘  r£   rq  r   r   rÃ  r—  rÆ  rY   r   r   rU   r   rÀ  Y  s   ÿ
rÀ  z!CAN J1939 required for this test.c                       sX   e Zd Z‡ fdd„Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZ	d	d
„ Z
‡  ZS )Ú	J1939Testc                    s   t ƒ j|i |¤Ž d| _d S rÁ  rÂ  rR   rU   r   r   rN   ‡  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   ÚtestJ1939Constants‹  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   rg  rÄ  rc   rÅ  r   r   r   rÆ  ´  s    
2ÿzJ1939Test.testBind)rG   rH   rI   rN   r£   rq  r   r   rß  rà  rÆ  rY   r   r   rU   r   rÇ  „  s   ÿ
!ÿ
rÇ  z#RDS sockets required for this test.c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBasicRDSTestc                 C   s   t j t j d S 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  5	  s    z#BasicVSOCKTest.testCrucialConstantsc                 C   s4   t j t j t j t j t j t j t j t j d S 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   ÚtestVSOCKConstants8	  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‘  B	  s    zBasicVSOCKTest.testCreateSocketc                 C   sú   t   t jt j¡Ö}| t jt j¡}| t jt j¡}| t jt j¡}| t jt j|d ¡ | t jt j|d ¡ | t jt j|d ¡ |  |d | t jt j¡¡ |  |d | t jt j¡¡ |  |d | t jt j¡¡ W d   ƒ n1 sì0    Y  d S ©Nr    )	r   r¥   r2   rË  r  r  r  rÏ  r²   )rB   r   Zorig_maxr€  Zorig_minr   r   r   rå  F	  sD    ÿÿÿ
ÿ
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿz#BasicVSOCKTest.testSocketBufferSizeN)rG   rH   rI   r7  r
  r‘  rå  r   r   r   r   r  0	  s   
r  z)Bluetooth sockets required for this test.c                   @   sv   e Zd Zdd„ Zdd„ Ze ejdkd¡dd„ ƒZ	e ejdkd	¡d
d„ ƒZ
e ejdkpdej d¡d¡dd„ ƒZdS )ÚBasicBluetoothTestc                 C   sJ   t j t j t j t j tjdkrFt j t j t j	 tj 
d¡sFt j d S )Nrº  r—  )r   Z
BDADDR_ANYZBDADDR_LOCALr1   r3   r~  r  ÚBTPROTO_HCIZSOL_HCIÚBTPROTO_L2CAPrž  ÚBTPROTO_SCOrA   r   r   r   ÚtestBluetoothConstantse	  s    
z)BasicBluetoothTest.testBluetoothConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r.   )r   r1   r2   r3   r  r   r   r   ÚtestCreateRfcommSockets	  s    z)BasicBluetoothTest.testCreateRfcommSocketrº  z&windows does not support L2CAP socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r.   )r   r1   r(   r  r  r   r   r   ÚtestCreateL2capSocketw	  s    z(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r.   )r   r1   r   r  r  r   r   r   ÚtestCreateHciSocket|	  s    z&BasicBluetoothTest.testCreateHciSocketr—  z.windows and freebsd do not support SCO socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r.   )r   r1   r(   r  r  r   r   r   ÚtestCreateScoSocket	  s    z&BasicBluetoothTest.testCreateScoSocketN)rG   rH   rI   r  r  r£   rs  r~  r  r  r  rž  r  r   r   r   r   r  a	  s   

ÿr  c                   @   s¾   e Zd Zd+dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Ze e¡Zejd$d%„ ƒZd&d'„ Zd(d)„ Zd*S ),ÚBasicTCPTestr   c                 C   s   t j| |d d S r   ©r»   rN   r“   r   r   r   rN   Š	  s    zBasicTCPTest.__init__c                 C   s   | j  d¡}|  |t¡ d S r¯   )r¼   r±   r²   r³   r´   r   r   r   ÚtestRecv	  s    zBasicTCPTest.testRecvc                 C   s   | j  t¡ d S 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   rT  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&  rw  r0  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  rN  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/  r1  r   rr  ZtestShutdown_overflowr4  r6  r7  r   r   r   r   r  ˆ	  s,   

		


r  c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚBasicUDPTestr   c                 C   s   t j| |d d S r   )r—   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›   r;  rA   r   r   r   r"  
  s    zBasicUDPTest._testRecvFromc                 C   s   |   t| jjd¡ d S ©Nrr  ©r&  r¥  r=   r©  rA   r   r   r   ÚtestRecvFromNegative
  s    z!BasicUDPTest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S r›   r;  rA   r   r   r   Ú_testRecvFromNegative
  s    z"BasicUDPTest._testRecvFromNegativeN)r   ©
rG   rH   rI   rN   r:  r<  r!  r"  r@  rA  r   r   r   r   r8  
  s   
r8  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.   r9  r´   r   r   r   r:  '
  s    z"BasicUDPLITETest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S r›   r;  rA   r   r   r   r<  ,
  s    z#BasicUDPLITETest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r.   r=  r   r   r   r   r!  /
  s    zBasicUDPLITETest.testRecvFromc                 C   s   | j  tdt| jf¡ d S r›   r;  rA   r   r   r   r"  4
  s    zBasicUDPLITETest._testRecvFromc                 C   s   |   t| jjd¡ d S r>  r?  rA   r   r   r   r@  7
  s    z%BasicUDPLITETest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S r›   r;  rA   r   r   r   rA  ;
  s    z&BasicUDPLITETest._testRecvFromNegativeN)r   rB  r   r   r   r   rC   
  s   
rC  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   `
  s    
zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r.   )Úcli_sockr¸   r´   r   r   r   ÚsendToServerd
  s    zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r.   )rF  rò  Úsendmsg_to_server_defaultsrð  ©rB   rS   r   r   r   ÚsendmsgToServerl
  s    ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r.   )rï  ÚregisterRecvmsgResult)rB   r×   rd   rS   Úresultr   r   r   Ú	doRecvmsgt
  s    
zSendrecvmsgBase.doRecvmsgc                 C   s   d S r.   r   ©rB   rL  r   r   r   rK  ~
  s    z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r.   ©r²   ©rB   Zaddr1Zaddr2r   r   r   ÚcheckRecvmsgAddress„
  s    z#SendrecvmsgBase.checkRecvmsgAddressr   )Ú
MSG_CTRUNCÚMSG_OOBNc           
      C   s¬   | j }| j}|r&|| jO }|| jO }n|d urB|| jO }|| jO }|| M }|| M }||O }||O }||@ | @ }|r†td |¡ƒ‚||B | @ }	|  ||	@ ||	@ ¡ d S )Nz6contradictory set, unset requirements for flags {0:#x})Úmsg_flags_common_setÚmsg_flags_common_unsetÚmsg_flags_eor_indicatorÚmsg_flags_non_eor_indicatorÚ	Exceptionr	  r²   )
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   rG  rH  rJ  rM  rK  rQ  rU  rý   r€   r   rT  rV  rW  r]  rY   r   r   rU   r   rD  Y
  s   
rD  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_intorK  ÚassertGreaterEqualÚassertLessEqualr¼  )rB   r×   rd   rS   ÚbufrL  r   r   r   rM  Ó
  s    
zRecvmsgIntoMixin.doRecvmsgN)rG   rH   rI   rM  r   r   r   r   r`  Ð
  s   r`  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgDgramFlagsBasec                    s   t ƒ jtjB S r.   )rM   rW  r   Ú	MSG_TRUNCrA   rU   r   r   rW  ß
  s    z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rG   rH   rI   ÚpropertyrW  rY   r   r   rU   r   re  Ü
  s   re  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgSCTPFlagsBasec                    s   t ƒ jtjB S r.   )rM   rV  r   ÚMSG_EORrA   rU   r   r   rV  ç
  s    z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rG   rH   rI   rg  rV  rY   r   r   rU   r   rh  ä
  s   rh  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   rF  õ
  s    z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS r›   )rÆ   rA   r   r   r   rH  ù
  s    z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r.   )rF  r.  rÆ   r´   r   r   r   rG  ý
  s    z*SendrecvmsgConnectionlessBase.sendToServerN)rG   rH   rI   rg  rk  rF  rH  rG  r   r   r   r   rj  ì
  s   


rj  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   rk    s    z"SendrecvmsgConnectedBase.serv_sockc                 C   s   | j S r.   )r¿   rA   r   r   r   rF    s    z!SendrecvmsgConnectedBase.cli_sockc                 C   s   d S r.   r   rP  r   r   r   rQ    s    z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rG   rH   rI   rg  rk  rF  rQ  r   r   r   r   rl    s
   

rl  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    s   t ƒ  ¡  | j | j¡ d S r.   )rM   rC   rk  rÒ  r_  rA   rU   r   r   rC     s    
z"SendrecvmsgServerTimeoutBase.setUprÈ   r   r   rU   r   rm    s   rm  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²   rk  r±   rð  r³   rA   r   r   r   ÚtestSendmsg!  s    zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r.   ©r²   rJ  r³   rð  rA   r   r   r   Ú_testSendmsg%  s    zSendmsgTests._testSendmsgc                 C   s   |   | j ttƒ¡t¡ d S r.   ro  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>rq  rA   r   r   r   Ú_testSendmsgDataGenerator,  s    ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r.   ro  rA   r   r   r   ÚtestSendmsgAncillaryGenerator0  s    z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |   |  tgdd„ dD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r.   r   r  r   r   r   r  5  rï   z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   rq  rA   r   r   r   Ú_testSendmsgAncillaryGenerator4  s    ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r.   ro  rA   r   r   r   ÚtestSendmsgArray8  s    zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)r²   rJ  Úarrayr³   rð  rA   r   r   r   Ú_testSendmsgArray<  s    ÿzSendmsgTests._testSendmsgArrayc                 C   s   |   | j ttƒ¡t¡ d S r.   ro  rA   r   r   r   ÚtestSendmsgGather@  s    zSendmsgTests.testSendmsgGatherc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nr  rq  rA   r   r   r   Ú_testSendmsgGatherD  s    zSendmsgTests._testSendmsgGatherc                 C   s   |   | j d¡d¡ d S ©Nrs  ó   done©r²   rk  r±   rA   r   r   r   ÚtestSendmsgBadArgsG  s    zSendmsgTests.testSendmsgBadArgsc                 C   s²   |   t| jj¡ |   t| jd¡ |   t| jtƒ ¡ |   t| jtƒ g¡ |   t| jttƒ g¡ |   t| jtgtƒ ¡ |   t| jtgg tƒ ¡ |   t| jtgg dtƒ ¡ |  d¡ d S )Ns   not in an iterabler   r  )r&  rŠ   rF  rò  rJ  Úobjectr³   rG  rA   r   r   r   Ú_testSendmsgBadArgsK  s.    
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   s   |   | j d¡d¡ d S r~  r€  rA   r   r   r   ÚtestSendmsgBadCmsg]  s    zSendmsgTests.testSendmsgBadCmsgc                 C   s¬   |   t| jtgtƒ g¡ |   t| jtgtƒ ddfg¡ |   t| jtgdtƒ dfg¡ |   t| jtgddtƒ fg¡ |   t| jtgdg¡ |   t| jtgdg¡ |  d¡ d S )Nr   ó   data)r   r   )r   r   r…  r@  r  ©r&  rŠ   rJ  r³   r‚  rG  rA   r   r   r   Ú_testSendmsgBadCmsga  s&    

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   s   |   | j d¡d¡ d S r~  r€  rA   r   r   r   ÚtestSendmsgBadMultiCmsgp  s    z$SendmsgTests.testSendmsgBadMultiCmsgc                 C   s@   |   t| jtgg d¢¡ |   t| jtgdtƒ g¡ |  d¡ d S )N©r   r   rï   r  r†  rA   r   r   r   Ú_testSendmsgBadMultiCmsgv  s    

ÿ
ÿz%SendmsgTests._testSendmsgBadMultiCmsgc                 C   s   |   | j d¡d¡ d S r~  r€  rA   r   r   r   ÚtestSendmsgExcessCmsgReject~  s    z(SendmsgTests.testSendmsgExcessCmsgRejectc                 C   sb   t tdƒsT|  t¡"}|  tgddg¡ W d   ƒ n1 s<0    Y  |  |jj¡ |  	d¡ d S )Nrˆ  rŠ  r  )
r   r   r&  r   rJ  r³   ÚassertIsNoner/  rg  rG  ©rB   r1  r   r   r   Ú_testSendmsgExcessCmsgRejectƒ  s
    
0z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   s   d S r.   r   rA   r   r   r   ÚtestSendmsgAfterClose‹  s    z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r.   )rF  r   r&  r   rJ  r³   rA   r   r   r   Ú_testSendmsgAfterClose  s    
z#SendmsgTests._testSendmsgAfterCloseN)rG   rH   rI   rp  rr  rs  rt  ru  rv  rw  rz  r{  r}  r  rƒ  r„  r‡  r  r   r‰  ró   r‹  rŒ  r  r  r‘  r   r   r   r   rn    s,   

rn  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.   ro  rA   r   r   r   ÚtestSendmsgExplicitNoneAddr˜  s    z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S r›   rq  rA   r   r   r   Ú_testSendmsgExplicitNoneAddrœ  s    z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nrœ  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r7   ©r²   rk  r±   r  rE  r„   r_  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)rF  rÒ  rJ  r   r7   r   rg  ÚENOMEMr"  rE  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   rJ  r   ÚMSG_DONTWAITr  r/  rg  ÚEAGAINÚEWOULDBLOCKrœ  rE  rn   rŽ  r   r   r   Ú_testSendmsgDontWaitÃ  s    2
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rG   rH   rI   r“  r”  r™  rž  rú   r~  r  rŸ  ró   r¤  r   r   r   r   r’  ”  s   
ÿ
r’  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSendmsgConnectionlessTestsc                 C   s   d S 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   rF  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©rY  ©rM  rk  rð  r³   r²   rQ  rž   r]  ©rB   rµ   rð  rì  r¾   r   r   r   ÚtestRecvmsgæ  s
    zRecvmsgGenericTests.testRecvmsgc                 C   s   |   t¡ d S r.   ©rG  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¯   )rk  r   r&  r   rM  rA   r   r   r   ÚtestRecvmsgAfterClose-  s    
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   s   d S r.   r   rA   r   r   r   Ú_testRecvmsgAfterClose2  s    z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sF   z4| j  d¡ |  tj| j| j ttƒ¡ W | j 	¡  n| j 	¡  0 d S )Nrš  )
rk  rÒ  r&  r   r7   rM  rð  r³   rE  rn   rA   r   r   r   ÚtestRecvmsgTimeout5  s    ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©Nr—  )r  rE  r„   r_  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´  Frf  ©rY  r\  Trª  )rM  rk  rð  r³   r   rì  r²   rQ  rž   r]  r€   r¬  r   r   r   ÚtestRecvmsgPeekA  s.    þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   s   |   t¡ d S r.   r®  rA   r   r   r   Ú_testRecvmsgPeekd  s    z$RecvmsgGenericTests._testRecvmsgPeekrò  c                 C   s`   | j  | j¡ |  | j ttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S r©  )
rk  rÒ  r_  rM  rð  r³   r²   rQ  rž   r]  r¬  r   r   r   ÚtestRecvmsgFromSendmsgh  s    z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S r|  rq  rA   r   r   r   Ú_testRecvmsgFromSendmsgs  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ª  )rM  rk  r²   rQ  rž   r]  r¬  r   r   r   ÚtestRecvmsgEOF|  s
    z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   s   | j  ¡  d S r.   )rF  r   rA   r   r   r   Ú_testRecvmsgEOF„  s    z)RecvmsgGenericStreamTests._testRecvmsgEOFc                 C   sœ   |   | jttƒd ¡\}}}}|  || j¡ |  |g ¡ | j|dd |   | jd¡\}}}}|  || j¡ |  |g ¡ | j|dd || }|  |t¡ d S )Nr  Frª  r°   T)rM  rk  rð  r³   rQ  rž   r²   r]  )rB   r  rð  rì  r¾   r  rµ   r   r   r   ÚtestRecvmsgOverflow‡  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Æ  x  s   rÆ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRecvmsgTestsc                 C   s   |   t| jj¡ |   t| jjddd¡ |   t| jjttƒdd¡ |   t| jjtdƒgdd¡ |   t| jjtƒ dd¡ |   t| jjttƒtƒ d¡ |   t| jjttƒdtƒ ¡ | j ttƒdd¡\}}}}|  	|t¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nrr  r   r£  Trª  )r&  rŠ   rk  rï  r¥  rð  r³   rÆ  r‚  r²   rQ  rž   r]  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 writablerr  Trª  )rÆ  rð  r³   r&  rŠ   rk  ra  r‚  r¥  r²   rQ  rž   r]  ©rB   rd  Ú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³   rk  ra  r²   rQ  rž   r]  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 )Nrx  r   Trª  )
ry  rð  r³   rk  ra  r²   ÚtobytesrQ  rž   r]  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Æ  rk  ra  Ú
memoryviewr²   rð  rQ  rž   r]  )rB   Úb1Úb2Zb3rÐ  rð  rì  r¾   r   r   r   ÚtestRecvmsgIntoScatterõ  s    ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   s   |   d¡ d S )NrÙ  )rG  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    rr  )Úsocklen_t_limitr   rà  Úlistr+  rl  ry  Úitemsizer²   rc  r&  rw  r~  Úmaxsize)rB   ÚtoobigrR  Ú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    rr  )râ  r   rˆ  rã  r+  rl  ry  rä  rb  rà  rc  r&  rw  r~  rå  )rB   ræ  rR  Ú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:   rT  rØ   r   r   r   ÚnewFDsK  s    zSCMRightsTest.newFDsc                 C   sB   t |ƒD ]4\}}t |dtj¡ |  t |d¡t|ƒ ¡ ¡ qd S )Nr   r°   )Ú	enumeraterÑ   ÚlseekÚSEEK_SETr²   r&  r  rï  )rB   rñ  rç  rT  r   r   r   ÚcheckFDsW  s    zSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r.   )rW   ÚcloseRecvmsgFDsrN  r   r   r   rK  ^  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_RIGHTSry  Ú	frombytesrð  rä  rÑ   r   )rB   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datarñ  rT  r   r   r   r÷  a  s    
ÿ
ÿzSCMRightsTest.closeRecvmsgFDsc                 C   s8   |   |  tgtjtjt d|  |¡¡fg¡ttƒ¡ d S )Nr:   )	r²   rJ  r³   r   r5  rø  ry  rò  rð  )rB   rç  r   r   r   ÚcreateAndSendFDsm  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©rY  r[  r\  r:   r   )r²   r³   rQ  rž   r]  r   rR  r  rã  rc  rð  ry  Útupler5  rø  r¼  Ú
SIZEOF_INTrù  rö  )rB   ZnumfdsrL  ÚmaxcmsgsÚignoreflagsrµ   rð  rì  r¾   rñ  Úitemrú  rû  rü  r   r   r   ÚcheckRecvmsgFDsw  s&    ÿ

zSCMRightsTest.checkRecvmsgFDsc                 C   s    |   d|  | jttƒd¡¡ d S )Nrp   r¹  ©r  rM  rk  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²   rJ  r³   r   r5  rø  ry  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  rM  rk  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  rM  rk  rð  r³   r   rà  r   rR  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²   rJ  r³   r   r5  rø  ry  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  rM  rk  rð  r³   r   rˆ  r   rà  rR  )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.   )rJ  r   r  rg  rk  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  rM  rk  rð  r³   r   rR  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   )rM  rk  rð  r³   r²   rQ  rž   r]  r   rR  rc  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:   rr  )r  r³   r   r5  rø  ry  Ú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:   )rM  rk  rð  r³   r²   rQ  rž   r]  r   rR  rc  ry  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:   rr  )	rò  r  r³   r   r5  rø  ry  r   rÕ  r  r   r   r   Ú_testFDPassPartialIntInMiddle2  s    þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©rY  rZ  r\  )r²   r³   rQ  rž   r]  r   rR  )rB   rL  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%  rM  rk  rð  r³   r   rR  rA   r   r   r   ÚtestCmsgTruncNoBufSizeH  s    üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   s   |   d¡ d S rÝ   r
  rA   r   r   r   Ú_testCmsgTruncNoBufSizeQ  s    z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j |  | jttƒd¡tjd d S )Nr   r  r'  rA   r   r   r   ÚtestCmsgTrunc0T  s    ÿzSCMRightsTest.testCmsgTrunc0c                 C   s   |   d¡ d S rÝ   r
  rA   r   r   r   Ú_testCmsgTrunc0Y  s    zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S rÝ   )r%  rM  rk  rð  r³   rA   r   r   r   ÚtestCmsgTrunc1_  s    zSCMRightsTest.testCmsgTrunc1c                 C   s   |   d¡ d S rÝ   r
  rA   r   r   r   Ú_testCmsgTrunc1b  s    zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S r  )r%  rM  rk  rð  r³   r   rA   r   r   r   ÚtestCmsgTrunc2Inte  s    ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   s   |   d¡ d S rÝ   r
  rA   r   r   r   Ú_testCmsgTrunc2Intl  s    z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S r  )r%  rM  rk  rð  r³   r   rà  rA   r   r   r   ÚtestCmsgTruncLen0Minus1o  s    ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   s   |   d¡ d S rÝ   r
  rA   r   r   r   Ú_testCmsgTruncLen0Minus1s  s    z&SCMRightsTest._testCmsgTruncLen0Minus1c                 C   sò   |   | jttƒ|¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |dkr\|g kr\d S |  t|ƒd¡ |d \}}	}
|  |tj
¡ |  |	tj¡ |  t|
ƒ|¡ |  t|
ƒ|¡ t d¡}| |
d t|
ƒt|
ƒ|j  … ¡ |  |¡ d S )NT©rY  rZ  r   rp   r:   )rM  rk  rð  r³   r²   rQ  rž   r]  r   rR  r5  rø  rb  rc  ry  rù  rä  rö  )rB   ÚancbufÚmaxdataZmindatarµ   rð  rì  r¾   rú  rû  rü  rñ  r   r   r   ÚcheckTruncatedArrayy  s&    ÿ
ÿz!SCMRightsTest.checkTruncatedArrayc                 C   s   | j t d¡dd d S )Nr   ©r3  r4  ©r5  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   r6  r7  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 )Nr6  ©r5  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   r6  r<  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ö  rK  r÷  rý  r  r  r  r  r  r  r   r  ró   r  r  r  r£   rs  r~  r  r   r  r  r  r  r  r  r  r  r!  r"  r#  r%  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r5  r8  r9  r:  r;  r=  r>  r?  r@  r   r   r   r   rì  C  s~   

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

	
rì  c                   @   s  e Zd ZdZdZdd„ Zd^dd„Zeed	d
ƒdd„ ƒZ	e	j
dd„ ƒZeedd	d
ƒdd„ ƒZej
dd„ ƒZeejdƒeed	d
ƒdd„ ƒƒZej
dd„ ƒZd_dd„Zeed	d
ddƒdd„ ƒZej
dd „ ƒZeedd	d
ddƒd!d"„ ƒZej
d#d$„ ƒZeejdƒeedd	d
ddƒd%d&„ ƒƒZej
d'd(„ ƒZeejdƒeedd	d
ddƒd)d*„ ƒƒZej
d+d,„ ƒZd`d-d.„Zeed	d
ƒd/d0„ ƒZej
d1d2„ ƒZeed	d
ƒd3d4„ ƒZej
d5d6„ ƒZeed	d
ƒd7d8„ ƒZej
d9d:„ ƒZeed	d
ƒd;d<„ ƒZ e j
d=d>„ ƒZ!eed	d
ƒd?d@„ ƒZ"e"j
dAdB„ ƒZ#eed	d
ƒdCdD„ ƒZ$e$j
dEdF„ ƒZ%dadGdH„Z&eedd	d
ddƒdIdJ„ ƒZ'e'j
dKdL„ ƒZ(eedd	d
ddƒdMdN„ ƒZ)e)j
dOdP„ ƒZ*eedd	d
ddƒdQdR„ ƒZ+e+j
dSdT„ ƒZ,eedd	d
ddƒdUdV„ ƒZ-e-j
dWdX„ ƒZ.eedd	d
ddƒdYdZ„ ƒZ/e/j
d[d\„ ƒZ0d]S )bÚRFC3542AncillaryTestr    rr  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:   )rk  rÏ  r   r:  rB  rE  rn   rM  rð  r³   r²   rQ  rž   r]  rR  r  rÿ  rO  r¼  r   ry  rù  rb  rc  )rB   Ú
ancbufsizeÚmaxhopr  rµ   rð  rì  r¾   rú  rû  rü  r®  r   r   r   ÚcheckHopLimitÇ  s.    
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitrB  rO  c                 C   s   | j dd d S ©Nr¹  ©rD  )rF  rA   r   r   r   ÚtestRecvHopLimitã  s    z%RFC3542AncillaryTest.testRecvHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  ©r  rE  r„   r_  rG  r³   rA   r   r   r   Ú_testRecvHopLimitè  s    z&RFC3542AncillaryTest._testRecvHopLimitrˆ  c                 C   s   | j t t¡d d S )NrH  )rF  r   rˆ  r   rA   r   r   r   ÚtestRecvHopLimitCMSG_SPACEð  s    z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testRecvHopLimitCMSG_SPACEõ  s    z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErò  c                 C   s   | j d| jd d S ©Nr¹  )rD  rE  )rF  Ú	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  rE  r„   r_  r²   rJ  r³   r   r:  rO  ry  rO  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º  )rk  rÏ  r   r:  rB  rS  rE  rn   rM  rð  r³   r²   rQ  rž   r]  rR  rC  rH  r   ry  rù  rb  rc  rO  )rB   rD  rE  r  rµ   rð  rì  r¾   ZancmapZtcdatar®  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimit  s:    
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrS  rH  c                 C   s   | j dd d S rG  )rS  rA   r   r   r   ÚtestRecvTrafficClassAndHopLimit3  s    z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú _testRecvTrafficClassAndHopLimit9  s    z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©Nr    rH  )rS  r   rˆ  r   rA   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACE>  s    ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACEF  s    z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s   | j d| jd d S rN  ©rS  rO  rA   r   r   r   ÚtestSetTrafficClassAndHopLimitK  s    ÿz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc                 C   sd   |   | jj| jd¡ |  |  tgtjtj	t
 
d| jg¡ftjtjt
 
d| jg¡fg¡ttƒ¡ d S rQ  )r  rE  r„   r_  r²   rJ  r³   r   r:  rH  ry  Útraffic_classrO  rO  rð  rA   r   r   r   Ú_testSetTrafficClassAndHopLimitT  s    ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   s   | j d| jd d S rN  rY  rA   r   r   r   ÚtestOddCmsgSize_  s    ÿz$RFC3542AncillaryTest.testOddCmsgSizec                 C   sæ   |   | jj| jd¡ zJ|  tgtjtjt	 	d| j
g¡ ¡ d ftjtjt	 	d| jg¡fg¡}W n€ tyà } zh|  |jt¡ |  tgtjtjt	 	d| j
g¡ftjtjt	 	d| jg¡fg¡}|  |ttƒ¡ W Y d }~n
d }~0 0 d S )Nr—  r:   r¡  )r  rE  r„   r_  rJ  r³   r   r:  rH  ry  r[  rÕ  rO  rO  r   r  rg  rk  r²   rð  )rB   rÐ  r‹   r   r   r   Ú_testOddCmsgSizei  s2    ÿÿþþÿÿþþz%RFC3542AncillaryTest._testOddCmsgSizec                 C   s   | j  tjtjd¡ | j ¡  |d u r*dn|f}| j| j tt	ƒg|¢R Ž \}}}}|  
|t	¡ |  || j¡ |  
|g ¡ | j|dtj|d d S )Nrp   r   Tr$  )rk  rÏ  r   r:  rB  rE  rn   rM  rð  r³   r²   rQ  rž   r]  rR  )rB   rD  r  rS   rµ   rð  rì  r¾   r   r   r   ÚcheckHopLimitTruncatedHeader  s     
ÿ
ÿÿÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©rD  r  ©r_  r   rR  rA   r   r   r   r(  “  s    ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   r)  ž  s    z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   r`  ra  rA   r   r   r   ÚtestSingleCmsgTrunc0£  s    ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSingleCmsgTrunc0ª  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   s   | j dd d S )Nrp   rH  )r_  rA   r   r   r   ÚtestSingleCmsgTrunc1²  s    z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSingleCmsgTrunc1¶  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rV  )r_  r   rA   r   r   r   ÚtestSingleCmsgTrunc2Int»  s    z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSingleCmsgTrunc2Int¿  s    z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   rp   rH  )r_  r   rà  rA   r   r   r   ÚtestSingleCmsgTruncLen0Minus1Ä  s    z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  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   Tr2  r   )rk  rÏ  r   r:  rB  rE  rn   rM  rð  r³   rà  r   r²   rQ  rž   r]  rR  rc  rO  r  r  r   r   r   ÚtestSingleCmsgTruncInDataÍ  s     
ÿ
ÿz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  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º  )rk  rÏ  r   r:  rB  rS  rE  rn   rM  rð  r³   r²   rQ  rž   r]  rR  r  rH  rO  r   ry  rù  rb  rc  )rB   rD  r  rµ   rð  rì  r¾   rú  rû  rü  r®  r   r   r   ÚcheckTruncatedSecondHeaderè  s0    
ÿ
ÿ
ÿÿ

z/RFC3542AncillaryTest.checkTruncatedSecondHeaderc                 C   s   | j t t¡tjd d S r&  )rl  r   rˆ  r   rR  rA   r   r   r   ÚtestSecondCmsgTrunc0  s    ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSecondCmsgTrunc0  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S rÝ   ©rl  r   rˆ  r   rA   r   r   r   ÚtestSecondCmsgTrunc1  s    z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSecondCmsgTrunc1  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S r  ro  rA   r   r   r   ÚtestSecondCmsgTrunc2Int  s    ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSecondCmsgTrunc2Int#  s    z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S r  )rl  r   rˆ  r   rà  rA   r   r   r   ÚtestSecondCmsgTruncLen0Minus1(  s
    ÿÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  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   Tr2  r   r:   rº  )rk  rÏ  r   r:  rB  rS  rE  rn   rM  rð  r³   rˆ  r   rà  r²   rQ  rž   r]  rR  rH  rO  ÚpopÚremovery  rù  rb  rc  r  )
rB   rµ   rð  rì  r¾   Z
cmsg_typesrú  rû  rü  r®  r   r   r   ÚtestSecomdCmsgTruncInData3  s:    
ÿ
ÿ

þ



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S r¿  rJ  rA   r   r   r   Ú_testSecomdCmsgTruncInDataX  s    z/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)rº  r   )rº  r   )r   )r   )1rG   rH   rI   rO  r[  rC  rF  r  r   rI  ró   rK  rL  rM  rP  rR  rS  rT  rU  rW  rX  rZ  r\  r]  r^  r_  r(  r)  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  rp  rq  rr  rs  rt  ru  rx  ry  r   r   r   r   rA  ¬  sÌ   

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


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


















 
ÿ


ÿ


ÿ


ÿ


ÿ
#rA  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rG   rH   rI   r   r   r   r   rz  `  s   rz  rò  c                   @   s   e Zd ZdS )ÚSendmsgUDPTestNr{  r   r   r   r   r|  e  s   r|  rï  c                   @   s   e Zd ZdS )ÚRecvmsgUDPTestNr{  r   r   r   r   r}  i  s   r}  ra  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPTestNr{  r   r   r   r   r~  m  s   r~  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDP6TestBasec                 C   s    |   |d d… |d d… ¡ d S r>  rO  rP  r   r   r   rQ  v  s    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rG   rH   rI   rQ  r   r   r   r   r  r  s   r  r6  ré   r!   c                   @   s   e Zd ZdS )ÚSendmsgUDP6TestNr{  r   r   r   r   r  {  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgUDP6TestNr{  r   r   r   r   r‚    s   r‚  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDP6TestNr{  r   r   r   r   rƒ  ‡  s   rƒ  r:  c                   @   s   e Zd ZdS )ÚRecvmsgRFC3542AncillaryUDP6TestNr{  r   r   r   r   r„    s   r„  c                   @   s   e Zd ZdS )Ú#RecvmsgIntoRFC3542AncillaryUDP6TestNr{  r   r   r   r   r…  •  s   r…  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPLITETestBaseNr{  r   r   r   r   r†  Ÿ  s   r†  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITETestNr{  r   r   r   r   r‡  ¦  s   r‡  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITETestNr{  r   r   r   r   rˆ  ¬  s   rˆ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITETestNr{  r   r   r   r   r‰  ²  s   r‰  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDPLITE6TestBasec                 C   s    |   |d d… |d d… ¡ d S r>  rO  rP  r   r   r   rQ  ¿  s    z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNr€  r   r   r   r   rŠ  ¹  s   rŠ  c                   @   s   e Zd ZdS )ÚSendmsgUDPLITE6TestNr{  r   r   r   r   r‹  Ä  s   r‹  c                   @   s   e Zd ZdS )ÚRecvmsgUDPLITE6TestNr{  r   r   r   r   rŒ  Ì  s   rŒ  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPLITE6TestNr{  r   r   r   r   r  Ô  s   r  c                   @   s   e Zd ZdS )Ú#RecvmsgRFC3542AncillaryUDPLITE6TestNr{  r   r   r   r   rŽ  Ü  s   rŽ  c                   @   s   e Zd ZdS )Ú'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNr{  r   r   r   r   r  æ  s   	r  c                   @   s   e Zd ZdS )ÚSendrecvmsgTCPTestBaseNr{  r   r   r   r   r  ò  s   r  c                   @   s   e Zd ZdS )ÚSendmsgTCPTestNr{  r   r   r   r   r‘  ö  s   r‘  c                   @   s   e Zd ZdS )ÚRecvmsgTCPTestNr{  r   r   r   r   r’  ú  s   r’  c                   @   s   e Zd ZdS )ÚRecvmsgIntoTCPTestNr{  r   r   r   r   r“  ÿ  s   r“  c                   @   s   e Zd ZdS )ÚSendrecvmsgSCTPStreamTestBaseNr{  r   r   r   r   r”    s   r”  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr<   r2   rå   c                   @   s   e Zd ZdS )ÚSendmsgSCTPStreamTestNr{  r   r   r   r   r•  
  s   r•  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚRecvmsgSCTPStreamTestc              
      sT   zt t| ƒ ¡  W n< tyN } z$|jtjkr0‚ |  d¡ W Y d }~n
d }~0 0 d S ©Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rM   r–  rÇ  r   rg  Ú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   rg  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 )ÚSendrecvmsgUnixStreamTestBaseNr{  r   r   r   r   rœ  -  s   rœ  rÚ   c                   @   s   e Zd ZdS )ÚSendmsgUnixStreamTestNr{  r   r   r   r   r  1  s   r  c                   @   s   e Zd ZdS )ÚRecvmsgUnixStreamTestNr{  r   r   r   r   rž  6  s   rž  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUnixStreamTestNr{  r   r   r   r   rŸ  <  s   rŸ  r5  rø  c                   @   s   e Zd ZdS )ÚRecvmsgSCMRightsStreamTestNr{  r   r   r   r   r   B  s   r   c                   @   s   e Zd ZdS )ÚRecvmsgIntoSCMRightsStreamTestNr{  r   r   r   r   r¡  G  s   r¡  c                       sF   e Zd Z‡ fdd„ZejZeedƒr2dZ	dd„ Z
ndZ	dd„ Z
‡  ZS )	ÚInterruptedTimeoutBasec                    s2   t ƒ  ¡  t tjdd„ ¡}|  tjtj|¡ d S )Nc                 S   s   dd S rü  r   )Úsignumr§  r   r   r   rî   [  rï   z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rM   rC   r  r  rW   )rB   Zorig_alrm_handlerrU   r   r   rC   X  s
    
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r.   )r  r¤  ÚITIMER_REAL©rB   Zsecondsr   r   r   ÚsetAlarmg  s    zInterruptedTimeoutBase.setAlarmr    c                 C   s   t  |¡ d S r.   )r  rþ  r¦  r   r   r   r§  m  s    )rG   rH   rI   rC   r   r^  r7   r   r  Ú
alarm_timer§  rY   r   r   rU   r   r¢  S  s   

r¢  Úsiginterruptrþ  r¤  z+Don't have signal.alarm or signal.setitimerc                       sl   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	e
j
dƒdd„ ƒZe	e
j
dƒdd„ ƒZ‡  ZS )ÚInterruptedRecvTimeoutTestc                    s   t ƒ  ¡  | j | j¡ d S r.   )rM   rC   r=   rÒ  r7   rA   rU   r   r   rC   z  s    
z InterruptedRecvTimeoutTest.setUpc              	   O   sd   zR|   | j¡ |  t¡}||i |¤Ž W d   ƒ n1 s<0    Y  W |   d¡ n|   d¡ 0 d S r›   )r§  r¨  r&  r	  ©rB   r‹  rS   rT   r1  r   r   r   ÚcheckInterruptedRecv~  s
    .z/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C   s   |   | jjd¡ d S r¯   )r¬  r=   r±   rA   r   r   r   ÚtestInterruptedRecvTimeoutˆ  s    z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C   s   |   | jjtdƒ¡ d S r¯   )r¬  r=   Ú	recv_intorÆ  rA   r   r   r   ÚtestInterruptedRecvIntoTimeout‹  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   s   |   | jjd¡ d S r¯   )r¬  r=   r©  rA   r   r   r   ÚtestInterruptedRecvfromTimeoutŽ  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.testInterruptedRecvmsgTimeoutra  c                 C   s   |   | jjtdƒg¡ d S r¯   )r¬  r=   ra  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  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„ Z‡ fdd„Z‡ fdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze eedƒ preedƒ d¡e ejd¡dd„ ƒƒZdd„ Zdd„ Zdd„ Z‡  ZS )ÚPurePythonSocketPairTestc                 C   s2   zt  t j¡W S  ty,   t  t j¡ Y S 0 d S r.   )r   rÁ   ré   r   r<   rA   r   r   r   rÁ     s    z#PurePythonSocketPairTest.socketpairc                    s0   t tdƒrtj| _tjt_nd | _tƒ  ¡  d S )NrÁ   )r   r  r   rÁ   Ú_orig_spÚ_fallback_socketpairrM   rC   rA   rU   r   r   rC     s
    

zPurePythonSocketPairTest.setUpc                    s    t ƒ  ¡  | jd ur| jt_d S r.   )rM   rE   rÏ  r   rÁ   rA   rU   r   r   rE   )  s    

z!PurePythonSocketPairTest.tearDownc                 C   s   | j  d¡}|  |t¡ d S r¯   rÈ  r´   r   r   r   Ú	test_recv/  s    z"PurePythonSocketPairTest.test_recvc                 C   s   | j  t¡ d S r.   rÉ  rA   r   r   r   Ú
_test_recv3  s    z#PurePythonSocketPairTest._test_recvc                 C   s   | j  t¡ d S r.   rÊ  rA   r   r   r   Ú	test_send6  s    z"PurePythonSocketPairTest.test_sendc                 C   s   | j  d¡}|  |t¡ d S r¯   rÌ  r´   r   r   r   Ú
_test_send9  s    z#PurePythonSocketPairTest._test_sendc                 C   s$   t  t j¡\}}| ¡  | ¡  d S r.   )r   rÁ   r<   r   ©rB   r”   r3  r   r   r   Ú	test_ipv4=  s    z"PurePythonSocketPairTest.test_ipv4c                 C   s   d S r.   r   rA   r   r   r   Ú
_test_ipv4B  s    z#PurePythonSocketPairTest._test_ipv4r:  ÚIPV6_V6ONLYú IPV6_V6ONLY option not supportedr@  c                 C   s$   t  t j¡\}}| ¡  | ¡  d S r.   )r   rÁ   ré   r   rÕ  r   r   r   Ú	test_ipv6E  s    z"PurePythonSocketPairTest.test_ipv6c                 C   s   d S r.   r   rA   r   r   r   Ú
_test_ipv6N  s    z#PurePythonSocketPairTest._test_ipv6c                    sÄ   t j j‰d ‰ ‡ ‡fdd„}d  }}zn|t j _|  t¡ t  ¡ \}}W d   ƒ n1 sX0    Y  W ˆt j _ˆ rxˆ  ¡  |r„| ¡  |rÀ| ¡  n.ˆt j _ˆ r¦ˆ  ¡  |r²| ¡  |r¾| ¡  0 d S )Nc              	      sf   ˆ| ƒ}ˆ d u rbt   t jt j¡‰ ˆ  d¡ zˆ  |d d… ¡ W n ttfyV   Y n0 ˆ  d¡ |S )NFr    T)r   r<   r2   rK  r®   ÚBlockingIOErrorÚInterruptedError)rB   r0  ©Zinject_sockZorig_getsocknamer   r   Úinject_getsocketnameU  s    

z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)r   r   r&  r   rÁ   r   )rB   rß  Úsock1Úsock2r   rÞ  r   Ú$test_injected_authentication_failureQ  s,    ,
úz=PurePythonSocketPairTest.test_injected_authentication_failurec                 C   s   d S r.   r   rA   r   r   r   Ú%_test_injected_authentication_failurer  s    z>PurePythonSocketPairTest._test_injected_authentication_failure)rG   rH   rI   rÁ   rC   rE   rÑ  rÒ  rÓ  rÔ  rÖ  r×  r£   rs  r   r  rq  r   rñ  rÚ  rÛ  râ  rã  rY   r   r   rU   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=   rK  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‘  r2  Z	ULONG_MAXrc   r=   rK  r²   r¤  r  r3  r   r   r   ÚtestSetBlocking_overflow¨  s    
z,NonBlockingTCPTests.testSetBlocking_overflowrJ  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   rJ  rí  rA   r   r   r   ÚtestInitNonBlocking·  s
    

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   s   d S r.   r   rA   r   r   r   Ú_testInitNonBlockingÁ  s    z(NonBlockingTCPTests._testInitNonBlockingc                 C   s`   t d ƒD | j d¡ | j ¡ \}}|  |j¡ |  | ¡ ¡ W d   ƒ n1 sR0    Y  d S )Nr£  )r8   r=   rÒ  r¨   rW   r   r  r¤  r½   r   r   r   ÚtestInheritFlagsBlockingÄ  s
    
z,NonBlockingTCPTests.testInheritFlagsBlockingc                 C   s   | j  t| jf¡ d S r.   ©r”   r®   rœ   r?   rA   r   r   r   Ú_testInheritFlagsBlockingÍ  s    z-NonBlockingTCPTests._testInheritFlagsBlockingc                 C   sf   d}t |ƒF | j d¡ | j ¡ \}}|  |j¡ |  | ¡ |¡ W d   ƒ n1 sX0    Y  d S )Ng      4@r£  )r8   r=   rÒ  r¨   rW   r   r²   r¤  )rB   Zdefault_timeoutr©   r¾   r   r   r   ÚtestInheritFlagsTimeoutÐ  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=   rK  r¬   Ú	monotonicr&  rÜ  r¨   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   Ú_testAcceptô  s    
zNonBlockingTCPTests._testAcceptc                 C   s°   | j  ¡ \}}|  |j¡ | d¡ |  t¡ | tt	ƒ¡}W d   ƒ n1 sR0    Y  | j
 ¡  t |gg g tj¡\}}}||vr’|  d¡ | tt	ƒ¡}|  |t	¡ d S )NFz0Error during select call to non-blocking socket.)r=   r¨   rW   r   rK  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   rr  rð  Z_testSetBlocking_overflowr£   rq  r   r   Úrequires_linux_versionró  rô  rõ  r÷  rø  rù  rü  rý  r  r  r   r   r   r   rä  z  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 );ÚFileObjectClassTestCaserr  r   ÚstrictNr	   r"  r   c                 C   s   t j| |d d S r   r  r“   r   r   r   rN   0  s    z FileObjectClassTestCase.__init__c                 C   sR   dd„ t dƒD ƒ\| _| _| _| _t | ¡ | jj| j	| j
| j| j| jd| _d S )Nc                 S   s   g | ]}t  ¡ ‘qS r   )rO   ry   ©rü   r:   r   r   r   rþ   4  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   3  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†   D  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‰   L  s
    

z&FileObjectClassTestCase.clientTearDownc                 C   sx   | j  d¡ | j d¡ |  tj| jjd¡ |  t¡}| j d¡ W d   ƒ n1 sX0    Y  |  dt	|j
ƒ¡ d S )Nrp   r  z!cannot read from timed out object)r¼   rÒ  r  r&  r&  r   r7   r   r  r  r/  )rB   Úctxr   r   r   ÚtestReadAfterTimeoutS  s    *z,FileObjectClassTestCase.testReadAfterTimeoutc                 C   s.   | j  | jdd… ¡ | j  ¡  | j ¡  d S )Nr   r  )r  rî  Ú	write_msgÚflushr  r„   rA   r   r   r   Ú_testReadAfterTimeout_  s    
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S r|  )r  r&  rð  Úread_msgr²   )rB   Ú	first_segZ
second_segrµ   r   r   r   ÚtestSmallReadd  s    z%FileObjectClassTestCase.testSmallReadc                 C   s   | j  | j¡ | j  ¡  d S r.   ©r  rî  r  r  rA   r   r   r   Ú_testSmallReadk  s    z&FileObjectClassTestCase._testSmallReadc                 C   s   | j  ¡ }|  || j¡ d S r.   )r  r&  r²   r  r´   r   r   r   ÚtestFullReado  s    
z$FileObjectClassTestCase.testFullReadc                 C   s   | j  | j¡ | j  ¡  d S r.   )r  rî  r  r   rA   r   r   r   Ú_testFullReadt  s    z%FileObjectClassTestCase._testFullReadc                 C   s:   t | jƒƒ }| j d¡}|sq(||7 }q|  || j¡ d S rÝ   )rò   r  r  r&  r²   )rB   rd  Úcharr   r   r   ÚtestUnbufferedReadx  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   Ú_testAttributes¯  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   ÚtestRealClose³  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   ÚtestUnbufferedReadlineÉ  s
    

z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinec                 C   s2   | j  d| j ¡ | j  d| j ¡ | j  ¡  d S )Nr/  r0  r  rA   r   r   r   Ú_testUnbufferedReadlineÑ  s    z9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinec                 C   sD   | j  ¡  | j  d¡}|  || j¡ | j ¡  |  t| j jd¡ d S r¯   )r¼   r   r±   r²   r  r  r&  r   r´   r   r   r   ÚtestMakefileCloseÖ  s
    

z3UnbufferedFileObjectClassTestCase.testMakefileClosec                 C   s   | j  | j¡ | j  ¡  d S r.   r  rA   r   r   r   Ú_testMakefileCloseß  s    z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t  | j¡}| j ¡  t  | j¡}|  |d |¡ d S rÝ   )r~  r}  r¼   r  r   r²   )rB   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyã  s    
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   s   d S r.   r   rA   r   r   r   Ú_testMakefileCloseSocketDestroyé  s    zAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroyc                 C   s  | j  d¡ |  | j tdƒ¡d ¡ |  | j t| jƒd ¡d ¡ | j	 
¡  | j d¡ | j t| jƒd ¡}|d u r–t d¡ | j t| jƒd ¡}tdƒ}| j |¡}|  |d¡ ||d |…  }|  || j¡ |  | j tdƒ¡d ¡ |  | j d¡d ¡ d S )NFr£  r  r¿  g      à?r„  rp   )r¼   rK  r²   r  ÚreadintorÆ  r&  rð  r  r  rn   r  r„   r¬   r­   )rB   r  rd  rç  rµ   r   r   r   ÚtestSmallReadNonBlockingð  s     

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingc                 C   s>   | j  d¡ | j | j¡ | j ¡  | j ¡  | j d¡ d S )Nr¿  ç      @)	r  r„   r  rî  r  r  r  rn   r  rA   r   r   r   Ú_testSmallReadNonBlocking  s
    

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s"   | j  d¡ | jr|  | j¡ d S )Nr9  )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¿   rK  r   r  r  rî  rl  r+  )rB   ZBIGZLIMITrç  r:   r   r   r   Ú_testWriteNonBlocking  s    
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rG   rH   rI   rd   r1  r2  r3  r4  r5  r6  r8  r:  r<  r=  r   r   r   r   r.  ½  s   
		r.  c                   @   s   e Zd ZdZdS )Ú#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   rA  3  s
   
rA  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   rC  =  s
   
rC  c                   @   s,   e Zd ZdZe d¡ZdZe d¡ZdZ	dS )Ú'UnicodeReadWriteFileObjectClassTestCaser   r   r!  r*  NrB  r   r   r   r   rD  G  s
   

rD  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†   T  s    z!NetworkConnectionTest.clientSetUpN)rG   rH   rI   r†   r   r   r   r   rE  Q  s   rE  c                   @   s   e Zd ZdS )ÚBasicTCPTest2Nr{  r   r   r   r   rG  Z  s   rG  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   rI  r   r   r   r®   a  s    z,NetworkConnectionNoServer.MockSocket.connectN)rG   rH   rI   r®   r   r   r   r   Ú
MockSocket`  s   rI  c                 c   s,   t j }| jt _ zd V  W |t _ n|t _ 0 d S r.   )r   rI  )rB   Z
old_socketr   r   r   Úmocked_socket_moduled  s
    z.NetworkConnectionNoServer.mocked_socket_modulec                 C   sr   t  ¡ }t tjtj¡}|  |j¡ |  t¡}| 	t
|f¡ W d   ƒ n1 sR0    Y  |  |jjtj¡ d S r.   )r   rÉ  r   r<   r2   rW   r   r&  r   r®   rœ   r²   r/  rg  ZECONNREFUSED)rB   r?   r”   r1  r   r   r   Útest_connectn  s    ,z&NetworkConnectionNoServer.test_connectc                 C   s\   t  ¡ }|  t¡}t t|f¡ W d   ƒ n1 s60    Y  t  ¡ }|  |j	j
|¡ d S r.   )r   rÉ  r&  r   r   rF  rœ   Zget_socket_conn_refused_errsr  r/  rg  )rB   r?   r1  Zexpected_errnosr   r   r   Útest_create_connectionv  s
    ,z0NetworkConnectionNoServer.test_create_connectionc                 C   s”   |   ¡ x zt tdf¡ W nJ tjy0   Y nB tyf } z tjsP|jtj	krR‚ W Y d }~nd }~0 0 |  
d¡ W d   ƒ n1 s†0    Y  d S )Nr   r›  )rJ  r   rF  rœ   r7   r   r   rñ  rg  ZEAFNOSUPPORTr"  r  r   r   r   Útest_create_connection_timeoutŽ  s    
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rG   rH   rI   r   rI  Ú
contextlibÚcontextmanagerrJ  rK  rL  rM  r   r   r   r   rH  ^  s   
	rH  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   rF  rœ   r?   r   r^  r”   rW   r   r²   r  rA   r   r   r   Ú_testFamily°  s
    ÿz+NetworkConnectionAttributesTest._testFamilyc                 C   sJ   t jt| jftjd| jfd| _|  | jj	¡ |  
| j ¡ d | j¡ d S )Nr*  )r7   Úsource_addressrp   )r   rF  rœ   r?   r   r^  rQ  r”   rW   r   r²   r   rA   r   r   r   Ú_testSourceAddress·  s    þz2NetworkConnectionAttributesTest._testSourceAddressc              	   C   sn   |   t ¡ d u ¡ t d¡ z.t t| jf¡| _|  | jj	¡ W t d ¡ nt d ¡ 0 |  
| j ¡ d¡ d S )Nr@  ©r  r   r5   r6   rF  rœ   r?   r”   rW   r   r²   r¤  rA   r   r   r   Ú_testTimeoutDefaultÁ  s    
z3NetworkConnectionAttributesTest._testTimeoutDefaultc              	   C   sr   |   t ¡ d u ¡ t d¡ z2tjt| jfd d| _|  | jj	¡ W t d ¡ nt d ¡ 0 |  
| j ¡ d ¡ d S ©Né   r—  rV  rA   r   r   r   Ú_testTimeoutNoneÍ  s    
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S rX  )r   rF  rœ   r?   r”   r²   r¤  rA   r   r   r   Ú_testTimeoutValueNamedÙ  s    z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t  t| jfd¡| _|  | jj¡ |  | j ¡ d¡ d S )NrY  )	r   rF  rœ   r?   r”   rW   r   r²   r¤  rA   r   r   r   Ú_testTimeoutValueNonamedÞ  s    z8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r   )rG   rH   rI   rN   r†   r‰   rR  Z
testFamilyrS  ZtestSourceAddressrU  ZtestTimeoutDefaultrW  ZtestTimeoutNonerZ  ZtestTimeoutValueNamedr[  ZtestTimeoutValueNonamedr\  r   r   r   r   rP    s    
	rP  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   æ  s    z'NetworkConnectionBehaviourTest.__init__c                 C   s   d S r.   r   rA   r   r   r   r†   ê  s    z*NetworkConnectionBehaviourTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r.   r•   rA   r   r   r   r‰   í  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   ÚtestInsideTimeoutò  s    
z0NetworkConnectionBehaviourTest.testInsideTimeoutc                 C   s0   t  t| jf¡ | _}| d¡}|  |d¡ d S )NrÛ  r^  )r   rF  rœ   r?   r”   r±   r²   )rB   r×   r¤  r   r   r   Ú_testInsideTimeoutù  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   rF  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]  ä  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   Úokrh  r   r   r   ÚtestTimeoutZero  s    zTCPTimeoutTest.testTimeoutZerorþ  ztest needs signal.alarm()c              
      s  | j  d¡ G dd„ dtƒ‰ ‡ fdd„}t tj|¡}zÐz zŽzt d¡ | j  ¡ }W n\ tjyr   |  	d¡ Y nJ ˆ y‚   Y n:   |  	dt
 ¡ d d… t ¡ f  ¡ Y n0 |  	d	¡ W t d
¡ nt d
¡ 0 W n ˆ yô   |  	d¡ Y n0 W t tj|¡ nt tj|¡ 0 d S )Nr9  c                   @   s   e Zd ZdS )z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr{  r   r   r   r   ÚAlarm!  s   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Ò  rX  r  r  rþ  r¨   r   r7   r"  r~  Úexc_infoÚ	tracebackÚ
format_exc)rB   rm  r  rh  r   rl  r   ÚtestInterruptedTimeout  s*    
þz%TCPTimeoutTest.testInterruptedTimeoutN)
rG   rH   rI   rg  rj  r£   rq  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  E  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  X  s    z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)re  rf  r   rA   r   ÚtestUDPLITETimeoutW  s    
ÿz%UDPLITETimeoutTest.testUDPLITETimeoutc                 C   sz   d}z| j  d¡ | j  d¡}W nF tjy>   |  d¡ Y n* tyR   d}Y n   |  d¡ Y n0 |sv|  d¡ d S )NFræ  r°   z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)rv  rw  rh  r   r   r   rj  ^  s    z"UDPLITETimeoutTest.testTimeoutZeroN)rG   rH   rI   ry  rj  r   r   r   r   rx  S  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   rX  r   r'  r(  r7   rA   r   r   r   ÚtestExceptionTreen  s    z TestExceptions.testExceptionTreec                 C   sv   t   t jt jd¡}t   t jt jd| ¡ ¡}| ¡  |  |j¡ |  t¡ | 	d¡ W d   ƒ n1 sh0    Y  d S )Nr   F)
r   r<   r2   r  r   rW   rN  r&  r   rK  )rB   Zsock0r×   r   r   r   Útest_setblocking_invalidfdt  s    ÿz)TestExceptions.test_setblocking_invalidfdN)rG   rH   rI   r|  r}  r   r   r   r   rz  l  s   rz  r˜  úLinux specific testc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestLinuxAbstractNamespaceél   c              
   C   sÔ   d}t   t jt j¡¬}| |¡ | ¡  t   t jt j¡j}| | ¡ ¡ | ¡ d 0}|  | ¡ |¡ |  | 	¡ |¡ W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )Ns    python-test-hello ÿr   )
r   rÚ   r2   ra   r@   r®   r   r¨   r²   Úgetpeername)rB   r“  Ús1r`  Zs3r   r   r   ÚtestLinuxAbstractNamespace†  s    
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec                 C   s`   dd| j d   }t tjtj¡*}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  d S )Nr¡  ó   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)r…  r   rÚ   r2   r&  r   ra   r†  r   r   r   ÚtestNameOverflow—  s    z+TestLinuxAbstractNamespace.testNameOverflowc                 C   sF   t   t jt j¡}z&| d¡ |  | ¡ d¡ W | ¡  n
| ¡  0 d S )Nz python test ó    python test )r   rÚ   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 )Nr‹  )r   rÚ   r2   ra   rÆ  r²   r   r  r   r   r   ÚtestBytearrayName¥  s    z,TestLinuxAbstractNamespace.testBytearrayNamec              	   C   s°   d}t   t jt j¡ˆ}| d¡ |  | ¡ |¡ t   t jt j¡>}| d¡ |  | ¡ |¡ |  | ¡ | ¡ ¡ W d   ƒ n1 s„0    Y  W d   ƒ n1 s¢0    Y  d S )Ns   ^ [0-9a-f]{5}r*  )r   rÚ   r2   ra   ZassertRegexr   rþ  )rB   Zabstract_addressr‚  r`  r   r   r   ÚtestAutobind«  s    

z'TestLinuxAbstractNamespace.testAutobindN)
rG   rH   rI   r…  rƒ  r‡  rŠ  rŒ  r  rŽ  r   r   r   r   r    s   	r  ztest needs socket.AF_UNIXc                   @   sn   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze ejdkd¡dd„ ƒZdS )ÚTestUnixDomainc                 C   s   t   t jt j¡| _d S 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   ¿  s    zTestUnixDomain.tearDownc              
   C   s:   zt  |¡W S  ty4   |  d |t ¡ ¡¡ Y n0 d S )NzBPathname {0!a} cannot be represented in file system encoding {1!r})rÑ   Úfsencoderõ  rc   r	  r~  Úgetfilesystemencoding©rB   rØ   r   r   r   ÚencodedÂ  s    þÿzTestUnixDomain.encodedc              
   C   sZ   zt  ||¡ W nD tyT } z,t|ƒdkr>|  d |¡¡ n‚ W Y d }~n
d }~0 0 d S )NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r   rÕ   r   r  rc   r	  )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ý  Ù  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   r’  r   r   r   ÚtestStrAddrÝ  s    zTestUnixDomain.testStrAddrc                 C   sF   t j tj¡}|  | j|  |¡¡ |  tj	|¡ |  
| j ¡ |¡ d S r.   )rÑ   rØ   r”  r   r•  ra   r×   r“  rW   rÖ   r²   r   r’  r   r   r   ÚtestBytesAddrä  s    zTestUnixDomain.testBytesAddrc                 C   sR   t j tj¡}|  |¡}|  | j| dd¡¡ |  	tj
|¡ |  | j ¡ |¡ d S )NÚasciiÚsurrogateescape)rÑ   rØ   r”  r   ZTESTFN_UNICODEr“  ra   r×   r%  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Ø   r”  ra   r×   rW   rÖ   r²   r   r’  r   r   r   ÚtestUnencodableAddrô  s    

z"TestUnixDomain.testUnencodableAddrr˜  r~  c                 C   s   |   t| jjd¡ d S )Nr*  )r&  r   r×   ra   rA   r   r   r   ÚtestEmptyAddressþ  s    zTestUnixDomain.testEmptyAddressN)rG   rH   rI   rC   rE   r“  ra   rý  r–  r—  rš  r›  r£   rs  r~  r  rœ  r   r   r   r   r  ¹  s   	
r  c                   @   s‚   e Zd Zd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     s    zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nrx  r   )ry  rð  r³   r¼   r®  r²   rÕ  ©rB   rd  rÐ  rµ   r   r   r   ÚtestRecvIntoArray  s    zBufferIOTest.testRecvIntoArrayc                 C   s   t tƒ}| j |¡ d S r.   ©r¼  r³   r¿   r¸   ©rB   rd  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ž  )ry  rð  r³   r¼   r±  r²   rÕ  ©rB   rd  rÐ  r¾   rµ   r   r   r   ÚtestRecvFromIntoArray)  s    z"BufferIOTest.testRecvFromIntoArrayc                 C   s   t tƒ}| j |¡ d S r.   r¡  r¢  r   r   r   Ú_testRecvFromIntoArray1  s    z#BufferIOTest._testRecvFromIntoArrayc                 C   sH   t dƒ}| j |¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r¯   )rÆ  r¼   r±  r²   rð  r³   r¦  r   r   r   ÚtestRecvFromIntoBytearray5  s
    z&BufferIOTest.testRecvFromIntoBytearrayc                 C   sL   t dƒ}| j t|ƒ¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r¯   )rÆ  r¼   r±  rÚ  r²   rð  r³   r¦  r   r   r   ÚtestRecvFromIntoMemoryview>  s
    z'BufferIOTest.testRecvFromIntoMemoryviewc                 C   s    t dƒ}|  t| jj|d¡ d S )Nr^   r°   )rÆ  r&  r¥  r¼   r±  r¢  r   r   r   ÚtestRecvFromIntoSmallBufferG  s    z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   s   | j  t¡ d S r.   r  rA   r   r   r   Ú_testRecvFromIntoSmallBufferL  s    z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t ƒ }| j |¡ | j |d¡ d S r›   )rÆ  r¼   r±  r¢  r   r   r   ÚtestRecvFromIntoEmptyBufferO  s    z(BufferIOTest.testRecvFromIntoEmptyBufferN)r   )rG   rH   rI   rN   r   r£  r¤  Z_testRecvIntoBytearrayr¥  Z_testRecvIntoMemoryviewr§  r¨  r©  Z_testRecvFromIntoBytearrayrª  Z_testRecvFromIntoMemoryviewr«  r¬  r­  Z_testRecvFromIntoEmptyBufferr   r   r   r   r    s"   
r  iÐ  éÈ   éÒ   c               
   C   s„   t tdƒsdS ztdƒ} W n tttfy4   Y dS 0 | 6 | D ] }| d¡r@ W d   ƒ dS q@W d   ƒ n1 sv0    Y  dS )NÚAF_TIPCFz/proc/modulesztipc T)r   r   r   ÚFileNotFoundErrorÚIsADirectoryErrorrd  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_NAMErk  r.  r³   r©  r²   r   )rB   r3  r”   ÚsrvaddrZsendaddrrµ   Zrecvaddrr   r   r   ÚtestRDMr  s     ÿ
ÿzTIPCTest.testRDMN)rG   rH   rI   r»  r   r   r   r   r´  o  s   r´  c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTIPCThreadableTestr   c                 C   s   t jj| |d t | ¡ d S r   r¢   r“   r   r   r   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   r3  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·  rk  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Ì  r5  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   rF  rÌ  r5  r
  r²   r±   r  ©rB   r“  r×   r   r   r   Ú_testCreateConnectionBaseÆ  s    

0z-ContextManagersTest._testCreateConnectionBasec                 C   s2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S r¯   rÁ  rÂ  r   r   r   ÚtestCreateConnectionCloseÎ  s    
z-ContextManagersTest.testCreateConnectionClosec                 C   s\   | j  ¡ }t |¡}| ¡  W d   ƒ n1 s20    Y  |  |j¡ |  t|j	d¡ d S r¿  )
r=   r   r   rF  r   r  r5  r&  r   r
  rÄ  r   r   r   Ú_testCreateConnectionCloseÔ  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_CLOEXECÝ  s    
ÿz!InheritanceTest.test_SOCK_CLOEXECc                 C   s@   t   ¡ }|  |  | ¡ d¡ W d   ƒ n1 s20    Y  d S r  )r   r²   rÉ  rà   r   r   r   Útest_default_inheritableæ  s    z(InheritanceTest.test_default_inheritablec              	   C   st   t   ¡ }|T | ¡ }| ¡  |  |  | ¡ d¡ W d   ƒ n1 sH0    Y  W d   ƒ n1 sf0    Y  d S r  )r   r,  r   r²   rÉ  )rB   r×   Znewsockr   r   r   Útest_dupë  s    zInheritanceTest.test_dupc                 C   sd   t   ¡ }|D | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ W d   ƒ n1 sV0    Y  d S )NTF)r   Úset_inheritabler²   rÉ  rà   r   r   r   Útest_set_inheritableó  s    

z$InheritanceTest.test_set_inheritableNrŸ   c                 C   s‚   t   ¡ }|b | ¡ }|  | ¡ d¡ t |tj¡}|tj M }t |tj|¡ |  | ¡ d¡ W d   ƒ n1 st0    Y  d S r   )r   r  r²   rÉ  r   ÚF_GETFDÚ
FD_CLOEXECZF_SETFD)rB   r×   rT  rì  r   r   r   Útest_get_inheritable_cloexecü  s    z,InheritanceTest.test_get_inheritable_cloexecc                 C   s|   t   ¡ }|\ | ¡ }|  t |tj¡tj@ tj¡ | d¡ |  t |tj¡tj@ d¡ W d   ƒ n1 sn0    Y  d S )NTr   )r   r  r²   r   rÏ  rÐ  rÍ  )rB   r×   rT  r   r   r   Útest_set_inheritable_cloexec
  s    ÿ
ÿz,InheritanceTest.test_set_inheritable_cloexecc                 C   sH   t  ¡ \}}|  |j¡ |  |j¡ |  | ¡ d¡ |  | ¡ d¡ d S r  )r   rÁ   rW   r   r²   rÉ  )rB   r‚  r`  r   r   r   Útest_socketpair  s
    zInheritanceTest.test_socketpair)rG   rH   rI   r£   rq  r   r   r   rþ  rÊ  rË  rÌ  rÎ  rs  r   rÑ  rÒ  rÓ  r   r   r   r   rÈ  Ü  s   ÿ	

rÈ  rJ  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   rJ  rÖ  rK  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   r`  r  r   r   r   ÚremoteProcessServerb  s    

z%TestSocketSharing.remoteProcessServerc           	      C   s°   t  ¡ }t j| j|fd}| ¡  | j |j¡}| j ¡ }| j 	¡  | 
|¡ d}| 
|¡ t |¡}g }| d¡}|szq†| |¡ qj| 	¡  d |¡}|  ||¡ | ¡  d S )N©r¶  rS   s
   slapmahfrorà  rï   )Úmultiprocessingr|   ÚProcessrÝ  r¹  r=   ÚshareÚpidr   r   rˆ   r   rF  r±   rð  r  r²   )	rB   rÛ  r#  r¤  r¾   rÜ  r   ÚmÚreceivedr   r   r   Ú	testSharep  s&    






zTestSocketSharing.testSharec                 C   s@   | j  t ¡ ¡}|  ttj|d d… ¡ |  ttj|d ¡ d S )Nrr  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þ   Ø  s   ÿz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r"  r	   )
r  r+  ÚBUFSIZEr   r   r•  Ú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Ö   r•  )r£  r   r   r   ÚtearDownClassá  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_connå  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_dataì  s    zSendfileUsingSendTest.recv_datac                 C   s
   t |dƒS )NÚ_sendfile_use_send©r€   rà   r   r   r   Úmeth_from_sockõ  s    z$SendfileUsingSendTest.meth_from_sockc              	   C   sš   | j  ¡ }ttjdƒ}t |¡f}|B}|  |¡}||ƒ}|  || j	¡ |  | 
¡ | j	¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Nr	   ©r=   r   r   r   r•  r   rF  r  r²   rø  Útell©rB   r“  Úfiler×   ÚmethÚsentr   r   r   Ú_testRegularFileü  s    

z&SendfileUsingSendTest._testRegularFilec                 C   s6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r.   ©rþ  rÿ  r²   rð  rø  rù  ©rB   r©   r¤  r   r   r   ÚtestRegularFile  s    
z%SendfileUsingSendTest.testRegularFilec              	   C   s¤   | j  ¡ }t | j¡}t |¡p}|L}| |¡}|  || j	¡ |  | 
¡ | j	¡ |  tj|j|¡ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  d S r.   )r=   r   ÚioÚBytesIOrù  r   rF  rV  r²   rø  r  r&  r[  r\  )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   r•  r   rW   rÖ   r   rF  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   Ú_testOffset2  s    

z!SendfileUsingSendTest._testOffsetc                 C   sB   |   ¡ }|  |¡}|  t|ƒ| jd ¡ |  || jdd … ¡ d S )Nr  r
  r  r   r   r   Ú
testOffset;  s    
z SendfileUsingSendTest.testOffsetc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   r—  éGKL ©rÝ  ©r=   r   r   r   r•  r   rF  r^  r  r²   r  ©rB   r“  r  r×   rÝ  r  r  r   r   r   Ú
_testCountC  s    
ÿ
z SendfileUsingSendTest._testCountc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S )Nr  ©rþ  rÿ  r²   rð  rù  ©rB   rÝ  r©   r¤  r   r   r   Ú	testCountO  s
    
zSendfileUsingSendTest.testCountc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   r—  rp   r  r  r  r   r   r   Ú_testCountSmallX  s    
ÿ
z%SendfileUsingSendTest._testCountSmallc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S rÝ   r  r  r   r   r   ÚtestCountSmalld  s
    
z$SendfileUsingSendTest.testCountSmallc              	   C   s¨   | j  ¡ }ttjdƒ}tj|ddp}|L}d}|  |¡}||d|d}|  ||¡ |  | 	¡ |d ¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr	   r    r—  é§† é×  )r  rÝ  )
r=   r   r   r   r•  r   rF  r  r²   r  r  r   r   r   Ú_testCountWithOffsetm  s    

z*SendfileUsingSendTest._testCountWithOffsetc                 C   sD   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd|d … ¡ d S )Nr#  r$  r  r  r   r   r   ÚtestCountWithOffsetw  s
    
z)SendfileUsingSendTest.testCountWithOffsetc              	   C   sš   | j  ¡ }ttjdƒ}t |¡f}|B}| d¡ |  |¡}|  	t
||¡ |  	t
|j|¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Nr	   F)r=   r   r   r   r•  r   rF  rK  r  r&  r¥  rV  ©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   r•  r   rF  r^  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   r•  r   rF  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   rr  )	r   r   r•  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   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   r   r   r   rï  Ä  sB   

		
			
		
rï  rV  z%os.sendfile() required for this test.c                   @   s   e Zd Zdd„ ZdS )ÚSendfileUsingSendfileTestc                 C   s
   t |dƒS )Nr\  r  rà   r   r   r   r  Ò  s    z(SendfileUsingSendfileTest.meth_from_sockN)rG   rH   rI   r  r   r   r   r   r1  Ì  s   r1  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_algÙ  s    (zLinuxKernelCryptoAPI.create_algr-  rÛ  c              	   C   sü   t  d¡}|  dd¡Ò}| ¡ \}}|, | d¡ |  | d¡|¡ W d   ƒ n1 sZ0    Y  | ¡ \}}|V | dtj	¡ | dtj	¡ | dtj	¡ | d	¡ |  | d¡|¡ W d   ƒ n1 sÐ0    Y  W d   ƒ n1 sî0    Y  d S )
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adÚhashZsha256s   abcrœ  ó   aó   bó   crï   )
r¼  Úfromhexr4  r¨   r
  r²   r±   r¸   r   ÚMSG_MORE)rB   r  ÚalgoÚoprv   r   r   r   Útest_sha256æ  s    

0
z LinuxKernelCryptoAPI.test_sha256c              	   C   s    d}d}t  d¡}|  dd¡n}| tjtj|¡ | ¡ \}}|, | |¡ |  	| 
d¡|¡ W d   ƒ n1 st0    Y  W d   ƒ n1 s’0    Y  d S )Ns   Python loves AF_ALGs   what do ya want for nothing?Z(193dbb43c6297b47ea6277ec0ce67119a3f3aa66r5  z
hmac(sha1)rœ  )r¼  r9  r4  rÏ  r   ÚSOL_ALGÚALG_SET_KEYr¨   r
  r²   r±   )rB   Úkeyr¤  r  r;  r<  rv   r   r   r   Útest_hmac_sha1ø  s    

z#LinuxKernelCryptoAPI.test_hmac_sha1r  c              	   C   s&  t  d¡}t  d¡}d}t  d¡}t|ƒ}|  dd¡Ø}| tjtj|¡ | ¡ \}}|@ |j	tj
|tjd | |¡ |  | |¡|¡ W d   ƒ n1 s¢0    Y  | ¡ \}}|6 |j	|gtj|d |  | |¡|¡ W d   ƒ n1 sø0    Y  d	}	|g|	 }
| ¡ \}}|0 |j	|
tj
|d | ||	 ¡}W d   ƒ n1 sX0    Y  |  t|ƒ||	 ¡ |  |d |… |¡ | ¡ \}}|2 |j	|gtj|d | ||	 ¡}W d   ƒ n1 sÔ0    Y  |  t|ƒ||	 ¡ |  |||	 ¡ W d   ƒ n1 s0    Y  d S )
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41s   Single block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))r<  Úivrì  )r<  rB  r°   )r¼  r9  rð  r4  rÏ  r   r>  r?  r¨   Úsendmsg_afalgÚALG_OP_ENCRYPTr:  r
  r²   r±   ÚALG_OP_DECRYPT)rB   r@  rB  rµ   Z
ciphertextZmsglenr;  r<  rv   Z
multiplierZlongmsgÚencZdecr   r   r   Útest_aes_cbc  sL    



ÿ
0ÿ0
ÿ.ÿ.z!LinuxKernelCryptoAPI.test_aes_cbcrØ  c                 C   s   t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t  d¡}t|ƒ}t|ƒ}|  dd¡°}	|	 tjtj|¡ |	 tjtjd |¡ |	 	¡ \}
}|
€ |
j
tj||tjd	 |
 |tj¡ |
 |¡ |
 |t|ƒ | ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 s0    Y  |	 	¡ \}
}|
p || }|
j
|gtj||d
 |
 |t|ƒ | ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 s¬0    Y  t d¡j}|	 	¡ \}
}|
ž || }|
 |gtjtj|tjƒgtjtj|t|ƒƒ| gtjtj||ƒgf¡ |
 t|ƒ| ¡}|  |||| … ¡ |  ||| d … ¡ W d   ƒ n1 sx0    Y  |	 	¡ \}
}|
X || | }|
j
|gtj||d
 |
 t|ƒ| ¡}|  |||d … ¡ W d   ƒ n1 sò0    Y  W d   ƒ n1 s0    Y  d S )NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r<  rB  Úassoclenrì  )r<  rB  rH  r
   )r¼  r9  rð  r4  rÏ  r   r>  r?  ÚALG_SET_AEAD_AUTHSIZEr¨   rC  rD  r:  r
  r±   r²   r   ÚStructr  rò  Ú
ALG_SET_OPÚ
ALG_SET_IVÚALG_SET_AEAD_ASSOCLENrE  )rB   r@  rB  ZplainZassocZexpected_ctZexpected_tagZtaglenrH  r;  r<  rv   Úresrµ   Zpack_uint32r   r   r   Útest_aead_aes_gcm0  sl    





ÿ
ÿ
6ÿ6þþ6ÿz&LinuxKernelCryptoAPI.test_aead_aes_gcmc              	   C   s–   |   dd¡v}t d¡}| tjtj|¡ | ¡ \}}|* | d¡}|  	t
|ƒd¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )NÚrngZdrbg_pr_sha256rƒ  )r4  rÑ   ÚurandomrÏ  r   r>  r?  r¨   r±   r²   rð  )rB   r;  Z
extra_seedr<  rv   Zrnr   r   r   Útest_drbg_pr_sha256o  s    

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c              	   C   sP  t   t jt jd¡}|" |  t¡ | ¡  W d   ƒ n1 sB0    Y  |  t¡ |jd d W d   ƒ n1 sx0    Y  |  t¡ | d¡ W d   ƒ n1 s¬0    Y  |  t¡  |jt jd d W d   ƒ n1 sæ0    Y  |  t¡  |jt jdd W d   ƒ n1 s"0    Y  W d   ƒ n1 sB0    Y  d S )Nr   )r<  rp   )r<  rH  rr  )r   r*   r(   r&  rŠ   rC  rD  rà   r   r   r   Útest_sendmsg_afalg_argsz  s    &*(.z,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc                 C   sö   t   t jt jd¡}|  |j¡ |  t¡ | d¡ W d   ƒ n1 sH0    Y  |  t	d¡ | d¡ W d   ƒ n1 s~0    Y  |  t¡ | d¡ W d   ƒ n1 s²0    Y  |  t	d¡ | d¡ W d   ƒ n1 sè0    Y  d S )Nr   )Ztttttttttttttrý   ztype too long)Zttttttttttttttrý   )rò   Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)rò   Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r*   r(   rW   r   r&  r±  ra   r)  r¥  rà   r   r   r   Útest_length_restrictionŒ  s    (((z,LinuxKernelCryptoAPI.test_length_restrictionN)rG   rH   rI   r4  r   rþ  r=  rA  rG  rO  rR  rS  rT  r   r   r   r   r2  Ö  s   



(

>


r2  Úwinzrequires Windowsc                   @   s   e Zd Zh d£Zdd„ ZdS )ÚTestMSWindowsTCPFlags>   Ú
TCP_MAXSEGÚTCP_KEEPIDLEÚTCP_FASTOPENÚTCP_KEEPCNTÚTCP_KEEPINTVLÚTCP_NODELAYc                    s6   dd„ t tƒD ƒ}‡ fdd„|D ƒ}ˆ  g |d¡ d S )Nc                 S   s   g | ]}|  d ¡r|‘qS )ZTCP)rž  ©rü   r   r   r   r   rþ   ®  rï   z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>c                    s   g | ]}|ˆ j vr|‘qS r   )ÚknownTCPFlagsr]  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   rV  ž  s   rV  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   rb  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¥  rb  rË  r5  rg  r²   rþ  )rB   r×   rU  r   r   r   Útest_reuse_portË  s    
.*z CreateServerTest.test_reuse_portr:  rØ  rÙ  r@  c                 C   s4   t jdt jd}W d   ƒ n1 s&0    Y  d S )Nre  rê  )r   rb  ré   rà   r   r   r   Útest_ipv6_only_default×  s    z'CreateServerTest.test_ipv6_only_defaultúdualstack_ipv6 not supportedc                 C   sF   t jdt jdd }|  |jt j¡ W d   ƒ n1 s80    Y  d S )Nre  T©r  Údualstack_ipv6)r   rb  ré   r²   r  rà   r   r   r   Útest_dualstack_ipv6_familyß  s
    
ÿz+CreateServerTest.test_dualstack_ipv6_familyN)rG   rH   rI   rd  rf  ri  r£   rs  r   r  rq  r   rñ  rj  r   Úhas_dualstack_ipv6rn  r   r   r   r   ra  µ  s   	
þÿra  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   Úrunì  s    
z3CreateServerFunctionalTest.echo_server.<locals>.runrÞ  )	rO   ry   rÒ  r7   r·  r¹  rW   r  rn   )rB   r×   rr  r   r   rq  r   Úecho_serverë  s    
z&CreateServerFunctionalTest.echo_serverc                 C   sb   t j |dB}| | j¡ | |¡ | d¡ |  | d¡d¡ W d   ƒ n1 sT0    Y  d S )Nrê  r+  r°   )r   rÒ  r7   r®   r
  r²   r±   )rB   r¾   r  r×   r   r   r   Úecho_clientý  s
    

z&CreateServerFunctionalTest.echo_clientc                 C   sV   t  ¡ }t d|f¡,}|  |¡ |  d|ftj¡ W d   ƒ n1 sH0    Y  d S )Nr*  r  )r   rÉ  r   rb  rs  rt  r<   rc  r   r   r   Ú	test_tcp4  s    
z$CreateServerFunctionalTest.test_tcp4r@  c                 C   s\   t  ¡ }tjd|ftjd,}|  |¡ |  d|ftj¡ W d   ƒ n1 sN0    Y  d S )Nr*  rê  r³  ©r   rÉ  r   rb  ré   rs  rt  rc  r   r   r   Ú	test_tcp6
  s    
ÿ
z$CreateServerFunctionalTest.test_tcp6rk  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*  Trl  r  )r   rÉ  r   rb  ré   rs  rt  r<   rc  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*  Trl  r³  rv  rc  r   r   r   Útest_dual_stack_client_v6  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rG   rH   rI   r   r^  r7   rs  rt  ru  r£   rq  r   rñ  rw  rs  r   ro  rx  ry  r   r   r   r   rp  è  s    
	ÿÿrp  Ú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ñ  rT  r   r   r   Ú	close_fds2  s    z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   s   g | ]}t  ¡ ‘qS r   )rÑ   Úpipe)rü   rv   r   r   r   rþ   7  rï   z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r£  c                 S   s   g | ]\}}|‘qS r   r   )rü   ÚrfdÚwfdr   r   r   rþ   9  rï   r    r   rà  )r+  rW   r   rÁ   rÚ   r2   rz  r³   r{  rð  r²   ró  rÑ   rî  r  rï  r&  )rB   r€  r  r~  rñ  rà  rá  rµ   Zfds2rì  r¾   ro  rƒ  r„  r¤  r   r   r   ÚtestSendAndRecvFds,  s&    &Hz#SendRecvFdsTests.testSendAndRecvFdsN)rG   rH   rI   r…  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   ÚsetUpModuleR  s    r‡  Ú__main__)Õr£   Útestr   Ztest.supportr   rg  r  rÜ  r   rø  rÎ   r¬   ro  rq   r~  rÑ   r  ry  rN  Úweakrefr   r  r   r,  r   ró  rb  rõ  Ú_threadr   rO   rß  rÀ  r   rœ   rï  r³   r§   Úsystemr   r  r   r    r#   r%   r)   r+   r-   r0   r4   rO  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—   rq  r˜   r™   rš   rs  r¡   r»   rÀ   rÂ   rÇ   rÉ   rÌ   rÍ   rÙ   rÜ   rá   râ   rã   rä   ræ   rè   rê   rú   r  r  r  rt  r   rÀ  rÇ  rá  ræ  rû  r  r  r  r8  rC  rD  r`  re  rh  rj  rl  rm  rn  r’  r¥  r¨  rÆ  rË  rÎ  rß  rì  rA  rz  r|  r}  r~  r  rñ  r  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r  rŽ  r  r  r‘  r’  r“  r”  r•  r–  r›  rœ  r  rž  rŸ  r   r¡  r¢  rª  rµ  r¾  rÄ  rÎ  rä  rÿ  r.  r>  r@  rA  rC  rD  r‚  rE  rG  rH  rP  r]  rc  rr  rx  rz  r  r  r  r¶  r·  r¸  r³  r´  r¼  r¾  rÈ  rÔ  rý   rÙ  rï  r1  r2  rž  rV  ra  rp  r|  r‡  rG   Úmainr   r   r   r   Ú<module>   sV  










	

3qÿÿÿ!$ÿÿ$	
        p
S
Z
*
=

>ÿÿ.ÿ%{ÿ7ww= #P;  k   7þ


þ	



ÿ
þÿþÿ
ÿ
ÿ
ÿþ	
ÿ
ÿ
ÿ
ÿÿ
ÿþÿ

ÿ
ÿþ





ÿ



ÿ
ÿ

ÿ
ÿÿ
 ÿ)ÿþ7#j ! $l


	?G9ÿ7JSÿÿ',Cÿ<e  
ÿ H3@

'