a
     Rîh'ê ã                   @   s¶  d dl Z d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZzd dlZW n e y   dZY n0 zd dl!Z!W n e y.   dZ!Y n0 ej"Z"d #d¡Z$dZ%d	Z&e '¡ d
kZ(zd dl)Z)W n e yx   dZ)Y n0 dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd„ Z2ej3dd„ ƒZ4e+ƒ Z5e,ƒ Z6e-ƒ Z7e.ƒ Z8e/ƒ Z9e0ƒ Z:e1ƒ Z;e<edƒZ=e2ƒ Z>e d ¡j?Z@G d!d"„ d"e jAƒZBG d#d$„ d$e jAƒZCG d%d&„ d&eCƒZDG d'd(„ d(ƒZEG d)d*„ d*e jAƒZFG d+d,„ d,e jAƒZGG d-d.„ d.ƒZHG d/d0„ d0eBeHƒZIG d1d2„ d2eCeHƒZJe  Ke=d3¡G d4d5„ d5eDeHƒƒZLG d6d7„ d7eFeHƒZMG d8d9„ d9eGeHƒZNe  Oe!du d:¡e  Ke;d;¡e  Ke*ƒ d<kd=¡G d>d?„ d?e jAeHƒƒƒƒZPG d@dA„ dAeIƒZQG dBdC„ dCe jAeHƒZRG dDdE„ dEe jAƒZSG dFdG„ dGeSƒZTG dHdI„ dIeEeSeHƒZUG dJdK„ dKeTeUƒZVG dLdM„ dMeSƒZWG dNdO„ dOeWƒZXG dPdQ„ dQeSƒZYG dRdS„ dSeYƒZZG dTdU„ dUeYƒZ[G dVdW„ dWeYƒZ\G dXdY„ dYeYƒZ]G dZd[„ d[eYƒZ^G d\d]„ d]e^ƒZ_G d^d_„ d_e^ƒZ`d`da„ Zadbdc„ Zbddde„ ZcG dfdg„ dge jAƒZde  Ke5dh¡G didj„ dje jAƒƒZee  Ke5dh¡G dkdl„ dleMƒƒZfe  Ke6dm¡G dndo„ doe jAƒƒZge  Ke7dp¡G dqdr„ dre jAƒƒZhe  Ke8ds¡G dtdu„ due jAƒƒZie  Ke8ds¡G dvdw„ dweNƒƒZje  Ke:dx¡G dydz„ dze jAƒƒZke  Oe!du d:¡e  Ke;d;¡G d{d|„ d|e jAƒƒƒZle  Ke>d}¡G d~d„ de jAƒƒZmG d€d„ deQƒZnG d‚dƒ„ dƒeJƒZoe  Ke=d3¡G d„d…„ d…eLƒƒZpG d†d‡„ d‡eEƒZqG dˆd‰„ d‰eqƒZrG dŠd‹„ d‹eqƒZsG dŒd„ deqƒZtG dŽd„ deqƒZuG dd‘„ d‘eqƒZvG d’d“„ d“eqƒZwG d”d•„ d•ewƒZxG d–d—„ d—exƒZyG d˜d™„ d™exƒZzG dšd›„ d›eqƒZ{G dœd„ de{ƒZ|G dždŸ„ dŸe{ƒZ}G d d¡„ d¡ere{ƒZ~G d¢d£„ d£e jAƒZG d¤d¥„ d¥ewƒZ€G d¦d§„ d§ewƒZG d¨d©„ d©eseueUe[ƒZ‚ebejdªƒG d«d¬„ d¬eze‚ƒƒZƒebejd­ƒG d®d¯„ d¯e}e‚ƒƒZ„ebejd°ƒG d±d²„ d²e~e‚ƒƒZ…G d³d´„ d´eseueUe_ƒZ†ebejdªƒe  Kej‡dµ¡ecd¶d·ƒG d¸d¹„ d¹eze†ƒƒƒƒZˆebejd­ƒe  Kej‡dµ¡ecd¶d·ƒG dºd»„ d»e}e†ƒƒƒƒZ‰ebejd°ƒe  Kej‡dµ¡ecd¶d·ƒG d¼d½„ d½e~e†ƒƒƒƒZŠebejd­ƒe  Kej‡dµ¡ebed¾ƒecd¶d·ƒG d¿dÀ„ dÀee†ƒƒƒƒƒZ‹ebejd°ƒe  Kej‡dµ¡ebed¾ƒecd¶d·ƒG dÁdÂ„ dÂeree†ƒƒƒƒƒZŒe  Ke=d3¡G dÃdÄ„ dÄeseueUe\ƒƒZe  Ke=d3¡ebejdªƒG dÅdÆ„ dÆezeƒƒƒZŽe  Ke=d3¡ebejd­ƒG dÇdÈ„ dÈe}eƒƒƒZe  Ke=d3¡ebejd°ƒG dÉdÊ„ dÊe~eƒƒƒZe  Ke=d3¡G dËdÌ„ dÌeseueUe`ƒƒZ‘ebejdªƒe  Kej‡dµ¡e  Ke=d3¡ecd¶d·ƒG dÍdÎ„ dÎeze‘ƒƒƒƒƒZ’ebejd­ƒe  Kej‡dµ¡e  Ke=d3¡ecd¶d·ƒG dÏdÐ„ dÐe}e‘ƒƒƒƒƒZ“ebejd°ƒe  Kej‡dµ¡e  Ke=d3¡ecd¶d·ƒG dÑdÒ„ dÒe~e‘ƒƒƒƒƒZ”ebejd­ƒe  Kej‡dµ¡e  Ke=d3¡ebed¾ƒecd¶d·ƒG dÓdÔ„ dÔee‘ƒƒƒƒƒƒZ•ebejd°ƒe  Kej‡dµ¡e  Ke=d3¡ebed¾ƒecd¶d·ƒG dÕdÖ„ dÖeree‘ƒƒƒƒƒƒZ–G d×dØ„ dØeveVeZƒZ—ebejdªƒG dÙdÚ„ dÚeye—ƒƒZ˜ebejd­ƒG dÛdÜ„ dÜe}e|e—ƒƒZ™ebejd°ƒG dÝdÞ„ dÞe~e|e—ƒƒZšG dßdà„ dàeteveVe]ƒZ›ebejdªƒe  Oe(dá¡ecdâdãdäƒG dådæ„ dæeye›ƒƒƒƒZœebejd­ƒe  Oe(dá¡ecdâdãdäƒG dçdè„ dèe}e|e›ƒƒƒƒZebejd°ƒe  Oe(dá¡ecdâdãdäƒG dédê„ dêe~e|e›ƒƒƒƒZžG dëdì„ dìeveVeXƒZŸebejdªƒebedíƒG dîdï„ dïeyeŸƒƒƒZ ebejd­ƒebedíƒG dðdñ„ dñe}e|eŸƒƒƒZ¡ebejd°ƒebedíƒG dòdó„ dóe~e|eŸƒƒƒZ¢ebejdªd­ƒebedídôdõƒG död÷„ d÷e€eŸƒƒƒZ£ebejdªd°ƒebedídôdõƒG dødù„ dùere€eŸƒƒƒZ¤G dúdû„ dûƒZ¥ebedüƒe  Ke<edýƒpèe<edþƒdÿ¡G d d„ de¥e[ƒƒƒZ¦ebedüƒe  Ke<edýƒp(e<edþƒdÿ¡G dd„ de¥eEeTeZƒƒƒZ§G dd„ deIƒZ¨G dd„ deRƒZ©G dd	„ d	eRƒZªG d
d„ deIƒZ«G dd„ deQƒZ¬G dd„ de¬ƒZ­G dd„ de¬ƒZ®G dd„ de¬ƒZ¯G dd„ de¬ƒZ°G dd„ de¬ƒZ±G dd„ de¬ƒZ²G dd„ de³ƒZ´G dd„ de´enƒZµG dd„ de jAƒZ¶G d d!„ d!eBeHƒZ·G d"d#„ d#eBeHƒZ¸G d$d%„ d%eBƒZ¹G d&d'„ d'eCƒZºe  Ke=d3¡G d(d)„ d)eDƒƒZ»G d*d+„ d+e jAƒZ¼e  Kejd,kd-¡G d.d/„ d/e jAƒƒZ½e  Ke<edíƒd0¡G d1d2„ d2e jAƒƒZ¾G d3d4„ d4eQƒZ¿d5ZÀd6ZÁd7ZÂd8d9„ ZÃe  KeÃƒ d:¡G d;d<„ d<e jAƒƒZÄe  KeÃƒ d:¡G d=d>„ d>e jAeHƒƒZÅG d?d@„ d@eIƒZÆG dAdB„ dBe jAƒZÇe  Ke<edCƒdD¡G dEdF„ dFe jAƒƒZÈe  KejÉdGkdH¡e  KedI¡G dJdK„ dKeBƒƒƒZÊG dLdM„ dMeIƒZËe  Ke<edNƒdO¡G dPdQ„ dQeËƒƒZÌe  Ke9dR¡G dSdT„ dTe jAƒƒZÍe  Kej ÎdU¡dV¡G dWdX„ dXe jAƒƒZÏG dYdZ„ dZe jAƒZÐG d[d\„ d\e jAƒZÑebed]ƒebed^ƒebedíƒG d_d`„ d`e jAƒƒƒƒZÒdadb„ ZÓeÔdckr²e  Õ¡  dS (d  é    N)Úsupport)Úsocket_helper)ÚproxyFu   Michael Gilfix was hereáˆ´
úutf-8é   éÒ  ÚAIXc                  C   s‚   t d u rd S ttdƒsd S z>tddƒ } t  | tjd¡}W d   ƒ n1 sL0    Y  W n tyl   Y d S 0 t d|¡d S d S )NÚIOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsockÚrbz    ÚIr   )	ÚfcntlÚhasattrÚsocketÚopenÚioctlr	   ÚOSErrorÚstructÚunpack)ÚfÚr© r   ú8/opt/python-3.9.24/usr/lib/python3.9/test/test_socket.pyÚget_cid3   s    
2r   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS ©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_isotpJ   s    r$   c               	   C   s>   zt   t jt jt j¡} W n ttfy0   Y dS 0 |  ¡  dS r   )r   r   r"   Ú	CAN_J1939r   r   r   r   r   r   r   Ú_have_socket_can_j1939T   s    r&   c               	   C   s<   zt   t jt jd¡} W n ttfy.   Y dS 0 |  ¡  dS ©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_algh   s    r,   c               	   C   s<   zt   t jt jd¡} W n ttfy.   Y dS 0 |  ¡  dS r'   )r   Ú
AF_QIPCRTRr"   r   r   r   r   r   r   r   Ú_have_socket_qipcrtrr   s    r.   c                  C   s   t ƒ } | d uS ©N)r   )Úcidr   r   r   Ú_have_socket_vsock|   s    r1   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    r5   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
    
r9   Ú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_INETr3   Úservr   Ú	bind_portÚportÚlisten©Úselfr   r   r   ÚsetUp°   s    zSocketTCPTest.setUpc                 C   s   | j  ¡  d | _ d S r/   ©r>   r   rB   r   r   r   ÚtearDownµ   s    
zSocketTCPTest.tearDownN©Ú__name__Ú
__module__Ú__qualname__rD   rF   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@   rB   r   r   r   rD   »   s    zSocketUDPTest.setUpc                 C   s   | j  ¡  d | _ d S r/   rE   rB   r   r   r   rF   ¿   s    
zSocketUDPTest.tearDownNrG   r   r   r   r   rK   ¹   s   rK   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"   r:   r>   r   r?   r@   rB   r   r   r   rD   Å   s    zSocketUDPLITETest.setUpN)rH   rI   rJ   rD   r   r   r   r   rL   Ã   s   rL   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©rC   ÚargsÚkwargs©Ú	__class__r   r   rO   Ð   s    z"ThreadSafeCleanupTestCase.__init__c                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r/   )rR   rN   Ú
addCleanuprS   rV   r   r   rX   Ô   s    z$ThreadSafeCleanupTestCase.addCleanupc                    s<   | j " tƒ j|i |¤ŽW  d   ƒ S 1 s.0    Y  d S r/   )rR   rN   Ú
doCleanupsrS   rV   r   r   rY   Ø   s    z$ThreadSafeCleanupTestCase.doCleanups)rH   rI   rJ   rO   rX   rY   Ú__classcell__r   r   rV   r   rM   É   s   rM   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    rX   r   ÚbindÚ	interfacer   ÚskipTestrB   r   r   r   rD     s    ÿzSocketCANTest.setUpN)rH   rI   rJ   rc   ÚbufsizeÚcan_frame_fmtr   ÚcalcsizeZcan_frame_sizeÚbcm_cmd_msg_fmtrD   r   r   r   r   r[   Ü   s   

r[   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>   rX   r   r   r?   r@   r   rd   rB   r   r   r   rD     s    zSocketRDSTest.setUpN)rH   rI   rJ   re   rD   r   r   r   r   ri     s   ri   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/   )rD   Ú_ThreadableTest__setUpÚ_setUprB   r   r   r   rO   E  s    zThreadableTest.__init__c                 C   s   | j  ¡  d S r/   )Úserver_readyÚsetrB   r   r   r   ÚserverExplicitReadyJ  s    z"ThreadableTest.serverExplicitReadyc                    s
  t  ¡ ˆ _ˆ j ¡  ˆ  ˆ jjd d d ¡ t ¡ ˆ _t ¡ ˆ _	t ¡ ˆ _
t d¡ˆ _dˆ _‡ fdd„}ˆ  |¡ ˆ  ¡ }| d¡}||d d … }tˆ d| ƒ}t ˆ j|f¡ˆ _z0zˆ  ¡  W n   dˆ _‚ Y n0 W ˆ j ¡  nˆ j ¡  0 ˆ j	 ¡  ˆ  ˆ j
j¡ d S )Nr   Fc                      s   ˆ j  ¡ rˆ j  ¡ ‚d S r/   )ÚqueueÚqsizeÚgetr   rB   r   r   Úraise_queued_exception\  s    
z5ThreadableTest._setUp.<locals>.raise_queued_exceptionÚ.Ú_T)r   Zwait_threads_exitZwait_threadsÚ	__enter__rX   Ú__exit__rP   ÚEventrn   Úclient_readyÚdonerq   ÚQueueÚserver_crashedÚidÚrfindÚgetattrÚthreadÚstart_new_threadÚ	clientRunZclient_threadrl   ro   Úwait)rC   rt   Z
methodnamer;   Ztest_methodr   rB   r   rm   Q  s2    






ÿ

zThreadableTest._setUpc              
   C   sö   | j  ¡  zbz|  ¡  W nF ty^ } z.| j |¡ |  ¡  W Y d }~W | j ¡  d S d }~0 0 W | j ¡  n| j ¡  0 | j	rŒ|  ¡  d S t
|dƒsžtdƒ‚zHz
|ƒ  W n0 tyÚ } z| j |¡ W Y d }~n
d }~0 0 W |  ¡  n
|  ¡  0 d S )NÚ__call__z%test_func must be a callable function)rn   r„   ÚclientSetUpÚBaseExceptionrq   ÚputÚclientTearDownrz   ro   r}   r   Ú	TypeError)rC   Z	test_funcÚer   r   r   rƒ   s  s(    

þ

$zThreadableTest.clientRunc                 C   s   t dƒ‚d S )Nz clientSetUp must be implemented.)ÚNotImplementedErrorrB   r   r   r   r†   ‰  s    zThreadableTest.clientSetUpc                 C   s   | j  ¡  t ¡  d S r/   )r{   ro   r   ÚexitrB   r   r   r   r‰   Œ  s    
zThreadableTest.clientTearDownN)	rH   rI   rJ   rO   rp   rm   rƒ   r†   r‰   r   r   r   r   rk     s   &"rk   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<   rO   rk   ©rC   r‘   r   r   r   rO   ’  s    zThreadedTCPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r/   )r   r=   r3   ÚclirB   r   r   r   r†   –  s    z!ThreadedTCPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   ©r”   r   rk   r‰   rB   r   r   r   r‰   ™  s    
z$ThreadedTCPSocketTest.clientTearDownN)r   ©rH   rI   rJ   rO   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   )rK   rO   rk   r“   r   r   r   rO      s    zThreadedUDPSocketTest.__init__c                 C   s   t   t jt j¡| _d S r/   )r   r=   r"   r”   rB   r   r   r   r†   ¤  s    z!ThreadedUDPSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   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   )rL   rO   rk   r“   r   r   r   rO   °  s    z"ThreadedUDPLITESocketTest.__init__c                 C   s   t   t jt jt j¡| _d S r/   )r   r=   r"   r:   r”   rB   r   r   r   r†   ´  s    z%ThreadedUDPLITESocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   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   )r[   rO   rk   r“   r   r   r   rO   ¾  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”   rb   rc   r   rB   r   r   r   r†   Â  s
    z!ThreadedCANSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   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   )ri   rO   rk   r“   r   r   r   rO   Ò  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”   rb   ÚHOSTÚgetsocknameÚcli_addrr   rB   r   r   r   r†   Ö  s    z!ThreadedRDSSocketTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   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ÚTestCaserO   rk   r“   r   r   r   rO   í  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_VSOCKr3   r>   rX   r   rb   ÚVMADDR_CID_ANYÚ	VSOCKPORTrA   rp   ÚacceptÚconnÚconnaddrrB   r   r   r   rD   ñ  s    
z#ThreadedVSOCKSocketStreamTest.setUpc                 C   sX   t  d¡ t tjtj¡| _|  | jj¡ tƒ }|tj	tj
fv rDt}| j |tf¡ d S )Nçš™™™™™¹?)ÚtimeÚsleepr   r¥   r3   r”   rX   r   r   ÚVMADDR_CID_HOSTr¦   ÚVMADDR_CID_LOCALÚconnectr§   )rC   r0   r   r   r   r†   ú  s    
z)ThreadedVSOCKSocketStreamTest.clientSetUpc              
   C   sT   z| j  d¡}W n2 tyB } z|  t|ƒ¡ W Y d }~n
d }~0 0 |  |t¡ d S ©Né   )r©   ÚrecvÚPermissionErrorrd   ÚreprÚassertEqualÚMSG)rC   ÚmsgÚexcr   r   r   Ú
testStream  s
    $z(ThreadedVSOCKSocketStreamTest.testStreamc                 C   s   | j  t¡ | j  ¡  d S r/   ©r”   Úsendr·   r   rB   r   r   r   Ú_testStream  s    z)ThreadedVSOCKSocketStreamTest._testStreamN)r   ©rH   rI   rJ   rO   rD   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Ž   rO   r“   r   r   r   rO     s    zSocketConnectedTest.__init__c                 C   s*   t  | ¡ |  ¡  | j ¡ \}}|| _d S r/   )rŽ   rD   rp   r>   r¨   Úcli_conn©rC   r©   Úaddrr   r   r   rD     s    
zSocketConnectedTest.setUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   )rÀ   r   rŽ   rF   rB   r   r   r   rF   !  s    
zSocketConnectedTest.tearDownc                 C   s(   t  | ¡ | j t| jf¡ | j| _d S r/   )rŽ   r†   r”   r°   rœ   r@   Ú	serv_connrB   r   r   r   r†   &  s    
zSocketConnectedTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   )rÃ   r   rŽ   r‰   rB   r   r   r   r‰   +  s    
z"SocketConnectedTest.clientTearDownN)r   )rH   rI   rJ   rO   rD   rF   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¤   rO   rk   r”   r>   r“   r   r   r   rO   2  s    
zSocketPairTest.__init__c                 C   s   t  ¡ S r/   )r   Ú
socketpairrB   r   r   r   rÅ   8  s    zSocketPairTest.socketpairc                 C   s   |   ¡ \| _| _d S r/   )rÅ   r>   r”   rB   r   r   r   rD   <  s    zSocketPairTest.setUpc                 C   s   | j r| j  ¡  d | _ d S r/   rE   rB   r   r   r   rF   ?  s    
zSocketPairTest.tearDownc                 C   s   d S r/   r   rB   r   r   r   r†   D  s    zSocketPairTest.clientSetUpc                 C   s$   | j r| j  ¡  d | _ t | ¡ d S r/   r•   rB   r   r   r   r‰   G  s    
zSocketPairTest.clientTearDownN)r   )	rH   rI   rJ   rO   rÅ   rD   rF   r†   r‰   r   r   r   r   rÄ   0  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>   Ú
bindServerrB   r   r   r   rD   ]  s    
zSocketTestBase.setUpc                 C   s   |   | j¡ | j ¡ | _d S r/   )ÚbindSockr>   r   Ú	serv_addrrB   r   r   r   rÈ   a  s    zSocketTestBase.bindServerc                 C   s   | j  ¡  d | _ d S r/   rE   rB   r   r   r   rF   f  s    
zSocketTestBase.tearDownN)rH   rI   rJ   rD   rÈ   rF   r   r   r   r   rÆ   T  s   	rÆ   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSocketListeningTestMixinc                    s   t ƒ  ¡  | j ¡  d S r/   )rN   rD   r>   rA   rB   rV   r   r   rD   n  s    
zSocketListeningTestMixin.setUp©rH   rI   rJ   rD   rZ   r   r   rV   r   rË   k  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/   )rN   rO   rk   rS   rV   r   r   rO   {  s    z ThreadedSocketTestMixin.__init__c                 C   s   |   ¡ | _|  ¡  d S r/   )ÚnewClientSocketr”   Ú
bindClientrB   r   r   r   r†     s    
z#ThreadedSocketTestMixin.clientSetUpc                 C   s   |   ¡ S r/   )rÇ   rB   r   r   r   rÎ   ƒ  s    z'ThreadedSocketTestMixin.newClientSocketc                 C   s   |   | j¡ | j ¡ | _d S r/   )rÉ   r”   r   rž   rB   r   r   r   rÏ   ‡  s    z"ThreadedSocketTestMixin.bindClientc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   r   r   r   r‰   Œ  s    
z&ThreadedSocketTestMixin.clientTearDown)	rH   rI   rJ   rO   r†   rÎ   rÏ   r‰   rZ   r   r   rV   r   rÍ   s  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/   )rN   rD   rp   r>   r¨   rÀ   rÁ   rV   r   r   rD   ›  s    
zConnectedStreamTestMixin.setUpc                    s   | j  ¡  d | _ tƒ  ¡  d S r/   )rÀ   r   rN   rF   rB   rV   r   r   rF   £  s    
z!ConnectedStreamTestMixin.tearDownc                    s$   t ƒ  ¡  | j | j¡ | j| _d S r/   )rN   r†   r”   r°   rÊ   rÃ   rB   rV   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   rN   r‰   rB   rV   r   r   r‰   ­  s    

z'ConnectedStreamTestMixin.clientTearDown)rH   rI   rJ   rD   rF   r†   r‰   rZ   r   r   rV   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_pathrX   ÚosÚrmdirrN   rD   rB   rV   r   r   rD   ¾  s    
zUnixSocketTestBase.setUpc                 C   s,   t j| jd}t ||¡ |  tj|¡ d S )N)Údir)rÒ   ÚmktemprÔ   r   Úbind_unix_socketrX   r   Úunlink)rC   ÚsockÚpathr   r   r   rÉ   Ã  s    zUnixSocketTestBase.bindSock)rH   rI   rJ   rD   rÉ   rZ   r   r   rV   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_UNIXr3   rB   r   r   r   rÇ   Ë  s    zUnixStreamBase.newSocketN©rH   rI   rJ   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 ©Nr   )rN   rD   rÊ   r@   rB   rV   r   r   rD   Ô  s    
zInetTestBase.setUpc                 C   s   t j|| jd d S )N©Úhost)r   r?   rã   ©rC   rÛ   r   r   r   rÉ   Ø  s    zInetTestBase.bindSock)rH   rI   rJ   rœ   rã   rD   rÉ   rZ   r   r   rV   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=   r3   rB   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"   rB   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"   r:   rB   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=   r3   ÚIPPROTO_SCTPrB   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)rH   rI   rJ   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"   rB   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"   r:   rB   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   ©rT   rU   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  2  s   ÿz!requireSocket.<locals>.<listcomp>r  r  c                 s   s   | ]
}|V  qd S r/   r   rÿ   r   r   r   r  5  ró   z requireSocket.<locals>.<genexpr>c                 S   s$   g | ]}t |tƒrtt|ƒn|‘qS r   )rõ   r	  r€   r   r
  r   r   r   r  7  s   ÿzcan't create socket({0}): {1}c                 s   s   | ]}t |ƒV  qd S r/   )r	  ©r   Úor   r   r   r  C  ró   )r  r   r   r	  r   rþ   Úformat)rT   Ú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   )rC   r  r    r   r   r   Útest_SocketType_is_socketobjectK  s
    z2GeneralModuleTests.test_SocketType_is_socketobjectc                 C   sî   t   t jt j¡}|¦ |  d| ¡  t|ƒ¡ |  dt j t|ƒ¡ |  dt j t|ƒ¡ |  dt|ƒ¡ |  dt|ƒ¡ | d¡ |  dt|ƒ¡ |  t| 	¡ ƒt|ƒ¡ W d   ƒ n1 sÀ0    Y  |  dt|ƒ¡ |  dt|ƒ¡ d S )	Nzfd=%iz	family=%sztype=%szproto=0Úraddr©ú	127.0.0.1r   Úladdrz[closed])
r   r=   r3   ÚassertInÚfilenorµ   ÚassertNotInrb   r	  r   ©rC   r    r   r   r   Ú	test_reprR  s    
6zGeneralModuleTests.test_reprNzneed _socket modulec                 C   sz   t  t jt j¡}z6d| ¡ |j|j|jf }|  t	|ƒ|¡ W | 
¡  n
| 
¡  0 d|j|j|jf }|  t	|ƒ|¡ d S )Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)r  r   r=   r3   r  Úfamilyrö   Úprotor¶   rµ   r   )rC   r    Úexpectedr   r   r   Útest_csocket_repr`  s    ÿÿz$GeneralModuleTests.test_csocket_reprc                 C   s†   t   t jt j¡,}t|ƒ}|  | ¡ | ¡ ¡ W d   ƒ n1 sB0    Y  d }t ¡  z| ¡  W n tyv   Y n0 |  	d¡ d S )NzSocket proxy still exists)
r   r=   r3   r   r¶   r  r   Ú
gc_collectÚReferenceErrorÚfail)rC   r    Úpr   r   r   Útest_weakrefm  s    2zGeneralModuleTests.test_weakrefc                 C   s®   d}| j t|d d t‚W d   ƒ n1 s00    Y  | j t|d d tj‚W d   ƒ n1 sh0    Y  | j t|d d tj‚W d   ƒ n1 s 0    Y  d S )Nz$Error raising socket exception (%s).r   ©r¸   zsocket.herrorzsocket.gaierror)ÚassertRaisesr   r   ÚherrorÚgaierror©rC   r¸   r   r   r   ÚtestSocketErrorz  s    "$z"GeneralModuleTests.testSocketErrorc                 C   s  t   t jt j¡}|  |j¡ | d¡ | ¡ }|  t¡}| 	d|¡ W d   ƒ n1 sZ0    Y  |  
t|jƒd¡ |  t¡}| 	d|¡ W d   ƒ n1 s¢0    Y  |  
t|jƒd¡ |  t¡}| 	dd ¡ W d   ƒ n1 sê0    Y  |  dt|jƒ¡ |  t¡}| 	dd|¡ W d   ƒ n1 s60    Y  |  
t|jƒd¡ |  t¡}| 	dd|¡ W d   ƒ n1 s‚0    Y  |  
t|jƒd¡ |  t¡}| 	ddd ¡ W d   ƒ n1 sÎ0    Y  |  dt|jƒ¡ |  t¡}| 	dd	|¡ W d   ƒ n1 s0    Y  |  d
t|jƒ¡ |  t¡}| 	dd d ¡ W d   ƒ n1 sf0    Y  |  d
t|jƒ¡ |  t¡}| 	d¡ W d   ƒ n1 s®0    Y  |  dt|jƒ¡ |  t¡ }| 	dd|d¡ W d   ƒ n1 sü0    Y  |  dt|jƒ¡ d S )N)Ú r   u   â˜ z*a bytes-like object is required, not 'str'y              @z.a bytes-like object is required, not 'complex'ó   fooznot NoneTyper   Úbarzan integer is requiredz	(1 given)é   z	(4 given))r   r=   r"   rX   r   rb   r   r)  rŠ   Úsendtor¶   r	  Ú	exceptionr  )rC   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í   r3   r"   r   ÚSOCK_RDMr)   Ú
SOL_SOCKETÚSO_REUSEADDRrB   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_UDPr7  ÚIPPROTO_IPV6rB   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é   rB   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>   ZIPV6_USE_MIN_MTUÚIPV6_CHECKSUMÚIPV6_PKTINFOÚIPV6_DSTOPTSÚIPV6_TCLASSÚIPV6_NEXTHOPÚ
IPV6_RTHDRÚIPV6_RTHDR_TYPE_0ÚIPV6_RECVDSTOPTSÚIPV6_HOPOPTSÚIPV6_DONTFRAGÚIPV6_RTHDRDSTOPTSÚIPV6_RECVPATHMTUÚIPV6_PATHMTUÚIPV6_RECVPKTINFOÚIPV6_RECVHOPOPTSÚIPV6_RECVHOPLIMITÚIPV6_RECVTCLASSÚIPV6_RECVRTHDRÚIPV6_HOPLIMITzMissing RFC3542 socket option 'ú')r  r   r   )rC   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   rd   r  ÚfindÚgethostbyaddrÚgetfqdnr%  rµ   )rC   ÚhostnameÚipZhnameÚaliasesÚipaddrsZall_host_namesZfqhnr   r   r   ÚtestHostnameResí  s    
z"GeneralModuleTests.testHostnameResc                 C   sL   t jddfD ]}|  t |¡|¡ qt jfD ]}|  |t |¡d ¡ q,d S )Nz10.0.0.1ú255.255.255.255r    )r   ZHOSTv4r¶   r   r]  r  r_  )rC   rÂ   rã   r   r   r   Útest_host_resolution   s    z'GeneralModuleTests.test_host_resolutionc              	   C   s‚   d}dD ]t}| j t|d t |¡ W d   ƒ n1 s:0    Y  | j t|d t |¡ W d   ƒ q1 sr0    Y  qd S )Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r(  )r)  r   r   r]  r_  )rC   ZexplanationrÂ   r   r   r   Ú test_host_resolution_bad_address	  s    ÿ(z3GeneralModuleTests.test_host_resolution_bad_addressÚsethostnameztest needs socket.sethostname()r\  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   barr0  )r   r\  ri  r   ÚerrnoÚEPERMrd   r¶   )rC   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   rn  r  Úintr	  ÚassertGreaterÚif_nametoindexr¶   Úif_indextoname)rC   Z
interfacesÚindexr  Z_indexÚ_namer   r   r   ÚtestInterfaceNameIndex,  s    

z)GeneralModuleTests.testInterfaceNameIndexrr  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    éè  Ú	_DEADBEEFrn  ì        )ì   ÿÿ l   ÿÿÿÿ )	r)  r   r   rr  ÚOverflowErrorrŠ   r   Údictrn  )rC   Úindicesrs  Úindex2r   r   r   ÚtestInvalidInterfaceIndexToName<  s    
*z2GeneralModuleTests.testInvalidInterfaceIndexToNamerq  z&socket.if_nametoindex() not available.c                 C   s$   |   ttjd¡ |   ttjd¡ d S )Nr   rx  )r)  rŠ   r   rq  r   rB   r   r   r   ÚtestInvalidInterfaceNameToIndexO  s    z2GeneralModuleTests.testInvalidInterfaceNameToIndexÚgetrefcountztest needs sys.getrefcount()c                 C   sJ   zt  t¡}t td¡ W n* tyD   t  t¡|kr@|  d¡ Y n0 d S )Nr   z$socket.getnameinfo loses a reference)Úsysr  rH   r   ÚgetnameinforŠ   r%  )rC   Úorigr   r   r   ÚtestRefCountGetNameInfoU  s    
z*GeneralModuleTests.testRefCountGetNameInfoc                 C   s(   zt  dd¡ W n ty"   Y n0 d S )N)r^   r   r   r   r   )r   rƒ  r   rB   r   r   r   ÚtestInterpreterCrasha  s    z'GeneralModuleTests.testInterpreterCrashc              	   C   sŽ   t jdt jdt jdt jdi}| ¡ D ]d\}}d|> d }dD ]$}|  ||@ ||||@ ƒƒ|@ ¡ q<||ƒ}|  ||@ |¡ |  t|d¡ q$d S )Né    é   r   )r   r   éÿÿ  i  ÿÿr    igE#i2Tvl        )	r   ÚhtonlÚntohlÚhtonsÚntohsÚitemsr¶   r)  r{  )rC   ZsizesÚfuncÚsizeÚmaskr;   Zswappedr   r   r   ÚtestNtoHi  s    ÿ"zGeneralModuleTests.testNtoHc                 C   s
  dd l }g d¢}|dg }ddddd> g}||jd |jd g }d	|jg}|D ]}t |¡ t |¡ qP|D ]}t |¡ t |¡ qn|D ]$}|  t	tj|¡ |  t	tj|¡ qŒ|D ]$}|  t	tj|¡ |  t	tj|¡ q¶|D ]$}|  
ttj|¡ |  
ttj|¡ qàd S )
Nr   )r   r   r    r‰  rz  rv  éþÿÿÿry  r   rw  é   )Ú	_testcapiZINT_MINÚINT_MAXr   r  rŒ  r‹  rŠ  r)  r{  ÚassertWarnsÚDeprecationWarning)rC   r•  Zs_good_valuesZl_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_valuesÚkr   r   r   ÚtestNtoHErrorsw  s.    

ÿ


z!GeneralModuleTests.testNtoHErrorsc              	   C   s   | j }tj d¡stjdv r"d}nd}|D ].}zt |d¡}W  q^W q* tyV   Y q*0 q*t‚ttdƒrtt ¡ dkrˆt |¡}|||ƒ zt |d¡}W n ty®   d }Y n0 |||ƒ t	j
sÐ|t |¡|ƒ |t |d¡|ƒ |d urü|t |d¡|ƒ |  ttjd	¡ |  ttjd
¡ d S )N)ÚfreebsdZnetbsdZgnukfreebsd)ÚlinuxrC  )ÚdaytimeZqotdÚdomain)Zechor  rž  ZtcpÚgetandroidapilevelé   Zudprv  r”  )r¶   r‚  ÚplatformÚ
startswithr   Úgetservbynamer   r   rŸ  r   Z
is_androidÚgetservbyportr)  r{  )rC   Ú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é
   rv  Zspam)	r¶   r   r6   Ú
gettimeoutr9   r7   r)  Ú
ValueErrorrŠ   )rC   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ó   ÿÿÿÿrf  )r¶   r   r«  rB   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²  rB   r   r   rò   ã  s   
ÿr¬  r­  s   ÿ ÿ z255.0.255.0s   ªªªªz170.170.170.170ó   ú1.2.3.4r®  rf  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   ©rC   r   ÚgÚassertInvalidr   )r=   r°  rC   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í   r7  ú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   rC   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í   r7  rd   ÚImportErrorr‚  r¡  r   Úwinerrorr¶   r   ©rC   r7  r‹   rº  r   )rí   r   r°  rC   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ò   B  ró   z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>c                    s   ˆ   ttf| |¡S r/   r³  r´  rB   r   r   rò   C  s   
ÿz1.0.1.0s     z170.85.170.85s   ªUªUrf  r®  r¶  rµ  s      s        rÃ  )r   rÉ  rÈ  r=   r¶   Ú	bytearrayr¸  r   )r=   rÈ  rC   r   ÚtestStringToIPv4>  s$    





z#GeneralModuleTests.testStringToIPv4c              
      s  z&ddl m‰m‰ m} |s$ˆ d¡ W n tyB   ˆ d¡ Y n0 tjdkr–zˆˆ dƒ W n8 ty” } z |j	dkr€ˆ d¡ W Y d }~n
d }~0 0 ‡ ‡fd	d
„‰‡‡fdd
„}ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆtdƒƒ¡ |dƒ |dƒ |dƒ d S )Nr   )rÈ  rí   r7  r¼  r½  r¾  rÃ  rÀ  rÁ  c                    s
   ˆˆ | ƒS r/   r   r±  )rí   rÈ  r   r   rò   i  ró   z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    s   ˆ  ttfˆ | ¡S r/   r³  r±  rÂ  r   r   rò   j  s   
ÿr¿  r·  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
ïÿÿ™— Ups   s   s   )r   rÈ  rí   r7  rd   rÄ  r‚  r¡  r   rÅ  r¶   rÊ  rÆ  r   )rí   r   rÈ  rC   r   ÚtestStringToIPv6X  s0    

 þz#GeneralModuleTests.testStringToIPv6c                 C   sœ   t  ¡ }t tjtj¡}|  |j¡ | d|f¡ | ¡ }zt 	t 
¡ ¡}W n tyh   |  d¡ Y n0 |  |d d|fd|d  ¡ |  |d |¡ d S )Nr­  r[  r   z
%s invalidr   )r   Úfind_unused_portr   r=   r3   rX   r   rb   r   r]  r\  r   rd   r  r¶   )rC   r@   rÛ   r  Z
my_ip_addrr   r   r   ÚtestSockName|  s    zGeneralModuleTests.testSockNamec                 C   s@   t   t jt j¡}|  |j¡ | t jt j¡}|  |dkd¡ d S )Nr   zinitial mode is reuse)	r   r=   r3   rX   r   Ú
getsockoptr9  r:  ÚassertFalse©rC   rÛ   Zreuser   r   r   ÚtestGetSockOptŽ  s    z!GeneralModuleTests.testGetSockOptc                 C   sR   t   t jt j¡}|  |j¡ | t jt jd¡ | t jt j¡}|  	|dkd¡ d S )Nr   r   zfailed to set reuse mode)
r   r=   r3   rX   r   Ú
setsockoptr9  r:  rÏ  rÐ  rÑ  r   r   r   ÚtestSetSockOpt–  s
    z!GeneralModuleTests.testSetSockOptc                 C   sN   t   t jt j¡}| d¡ W d   ƒ n1 s00    Y  |  t|jd¡ d S )Nr   ó   spam)r   r=   r3   Ú
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   rb   Ú
_LOCALHOSTr  r   r   r  rk  ÚEBADFÚENOTSOCKr%  )rC   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=   r3   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   rX   r   r   rÍ  r)  r{  rb   rœ   Ú	itertoolsÚcountr   rk  Z
EADDRINUSE)rC   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_VALSrv  )r   éd   rä  )	r  r   r   rX   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   rX   r   r   ræ  r   rÅ  rd   r)  rŠ   )rC   r    r¹   ZWSAEOPNOTSUPPr   r   r   Útest_sio_loopback_fast_pathÝ  s    

z.GeneralModuleTests.test_sio_loopback_fast_pathc           
   
   C   s@  zt  dd¡ W n> t jyN } z$|jt jkr8|  d¡ ‚ W Y d }~n
d }~0 0 t  td ¡D ]}|  t|ƒd¡ q\t  dd¡ t  dd¡ t  d d¡ t	j
r¨t  dd¡ ttdƒr¾t ¡ dkrÊt  td	¡ t  td¡ t  td ¡ t  tdt jt j¡}|D ]J\}}}}}|  |t j¡ |  t|ƒd
¡ |  |t j¡ |  t|ƒd¡ qút  td dt j¡}|D ]\}}}}}|  |t j¡ q\t  td ddt j¡ t  td dddt j¡ t  d dt jt jdt j¡ t  td ¡}t jtd d}	|  ||	¡ t  td t j¡}t jtd t jd}	|  ||	¡ t  td dt j¡}t jtd t jd}	|  ||	¡ t  td ddt j¡}t jtd t jd}	|  ||	¡ t  td dddt j¡}t jtd t jd}	|  ||	¡ t  d dt jt jdt j¡}t jd dt jt jdt jd}	|  ||	¡ |  tt jdd¡ tt dƒr<zt  dd dddt j¡ W n t jy:   Y n0 d S )NÚ	localhostéP   zbuggy libc versionrß  r  r·  rŸ  r   ÚhttpúAddressFamily.AF_INETúSocketKind.SOCK_STREAMr   )rã   r@   ©r  ©rö   )r   )Úflags)rã   r@   r  rö   r   rï  u   í €ÚAI_NUMERICSERV)r   Úgetaddrinfor+  rk  ÚEAI_SERVICErd   rœ   r¶   Úlenr   ÚIPV6_ENABLEDr   r‚  rŸ  r=   r3   r	  ÚSOL_TCPÚ
AI_PASSIVEÚ	AF_UNSPECr)  ÚUnicodeEncodeErrorrð  )
rC   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ƒ  rB   r   r   r   Útest_getnameinfo;  s    z#GeneralModuleTests.test_getnameinfoÚnetworkznetwork is not enabledc                 C   sd   t  d¡ t d¡ W d   ƒ n1 s*0    Y  d}t |¡ t |¡ t |dtjtj¡ d S )Nz
python.orgu!   Ð¸ÑÐ¿Ñ‹Ñ‚Ð°Ð½Ð¸Ðµ.pythontest.netr   )r   Ztransient_internetr   r]  Úgethostbyname_exrñ  r÷  r3   )rC   rž  r   r   r   Ú	test_idna?  s    (

zGeneralModuleTests.test_idnac              
      s2  t tdƒrt tdƒsˆ  d¡ ‡ fdd„}‡ fdd„}t ¡ \}}t tj|¡}z²|r`| d¡ ˆ  t¡* t 	d	¡ | 
d
tj ¡ W d   ƒ n1 sš0    Y  |rØt tj|¡ t 	d	¡ ˆ  tj|j
d
tj ¡ W t 	d¡ t tj|¡ | ¡  | ¡  n*t 	d¡ t tj|¡ | ¡  | ¡  0 d S )NÚalarmrÅ   z9signal.alarm and socket.socketpair required for this testc                     s   ˆ   ttjd¡ d S r›   ©r)  r©  ÚmathÚacosh©rT   rB   r   r   Ú
ok_handlerV  s    z@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlerc                     s   ˆ   ttjd¡ dd  d S ©Nr   r   r  r  rB   r   r   Úraising_handlerX  s    zEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg      ø?r   ó   xr   )r   Úsignalr   rd   rÅ   ÚSIGALRMrÖ  r)  ÚZeroDivisionErrorr  Úsendallr   ÚSOCK_MAX_SIZEr8   r   )rC   Zwith_timeoutr  r  Úcr    Ú	old_alarmr   rB   r   Úcheck_sendall_interruptedP  s4    


.
ÿ

ý
z,GeneralModuleTests.check_sendall_interruptedc                 C   s   |   d¡ d S ©NF©r  rB   r   r   r   Útest_sendall_interruptedo  s    z+GeneralModuleTests.test_sendall_interruptedc                 C   s   |   d¡ d S )NTr  rB   r   r   r   Ú%test_sendall_interrupted_with_timeoutr  s    z8GeneralModuleTests.test_sendall_interrupted_with_timeoutc                 C   sÎ   t   t jt j¡}t|ƒ}|  t¡}d }t ¡  W d   ƒ n1 sD0    Y  |  |t	|j
jd ƒ¡ t   t jt j¡}| d¡}t|ƒ}d }t ¡  |  t¡ d }t ¡  W d   ƒ n1 sÀ0    Y  d S )Nr   r
   )r   r=   r3   rµ   r—  ÚResourceWarningr   r#  r  r	  ÚwarningrT   Úmakefile)rC   rÛ   r   r5  r   r   r   r   Útest_dealloc_warnu  s    &
z$GeneralModuleTests.test_dealloc_warnc                 C   sV   t   t jt j¡2}| d¡}| ¡  |  t|ƒd¡ W d   ƒ n1 sH0    Y  d S )Nr
   z<_io.BufferedReader name=-1>)r   r=   r3   r  r   r¶   rµ   ©rC   rÛ   Úfpr   r   r   Útest_name_closed_socketio†  s    
z,GeneralModuleTests.test_name_closed_socketioc                 C   s–   t   ¡ z}|jddd}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ | ¡  |  t	|j¡ |  t	|j¡ |  t	|j¡ W d   ƒ n1 sˆ0    Y  d S )Nr
   r   )Ú	buffering)
r   r  r  ÚreadablerÐ  ÚwritableÚseekabler   r)  r©  r  r   r   r   Útest_unusable_closed_socketioŒ  s    
z0GeneralModuleTests.test_unusable_closed_socketioc                 C   s2  t   ¡ }z†| tdf¡ t  | ¡ ¡ |  t¡ | d¡ W d   ƒ n1 sP0    Y  W |  t¡ | ¡  W d   ƒ qÄ1 s„0    Y  n4|  t¡ | ¡  W d   ƒ n1 s¸0    Y  0 |  t¡ t  d ¡ W d   ƒ n1 sî0    Y  |  t¡ t  d¡ W d   ƒ n1 s$0    Y  d S )Nr   r   rv  )	r   rb   rœ   r   r  r)  r   rA   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'  )rC   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  )rC   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¶   r3   )rC   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   rv  r   )r   r=   r3   rb   rœ   rA   )rC   Ú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=   r3   rb   rœ   r)  r{  rA   r–  )rC   r•  r6  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   rz  iöÿÿÿ)	r)  r{  r   rƒ  r   rë   rí   r3   rb   r  r   r   r   Útest_flowinfoÒ  s
    
ÿz GeneralModuleTests.test_flowinfoc                 C   s0   t  ddt jt jt j¡\^ }}|  |d¡ d S )Núff02::1de:c0:face:8Dr   )úff02::1de:c0:face:8dr   r   r   )r   rñ  rí   r"   r=  r¶   )rC   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   r<  )r   rn  rñ  rí   r"   r=  r¶   )rC   Ú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   r<  r   )r   rñ  r	  rí   r"   r=  r¶   )rC   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   r;  r   úff02::1de:c0:face:8d%Ú1234)r   rn  rƒ  ÚNI_NUMERICHOSTÚNI_NUMERICSERVr¶   )rC   r@  rA  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 )NrC  r;  r   r   rE  rF  )r   rƒ  rG  rH  r¶   r	  )rC   r@  r=  rI  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=   r3   r¶   r	  r  rö   r  r   r   r   Útest_str_for_enums  s    z%GeneralModuleTests.test_str_for_enumsc                 C   sÐ   t tddƒ}t tddƒ}tj|B |B }t tj|¡ˆ}|  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ W d   ƒ n1 sÂ0    Y  d S )NÚSOCK_NONBLOCKr   rÝ  r   TF)r€   r   r3   r=   r¶   rö   rÖ  Úsetblocking)rC   rM  rÝ  Z	sock_typer    r   r   r   Ú test_socket_consistent_sock_type  s    



z3GeneralModuleTests.test_socket_consistent_sock_typec                 C   s®   t   t jt j¡}| ¡ }tt jj ¡ ƒd }tdd„ t jj 	¡ D ƒƒd }t j ||d|d>}|  
|j|¡ |  
|j|¡ |  |jddh¡ W d   ƒ n1 s 0    Y  d S )Nr   c                 s   s   | ]\}}|d vr|V  qdS )>   rÝ  rM  Nr   )r   r  Úkindr   r   r   r  :  s   þzEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>r   )r  rö   r   r  r   )r   r=   r3   ÚdetachÚmaxÚAddressFamilyÚ__members__ÚvaluesÚ
SocketKindrŽ  r¶   r  rö   r  r   )rC   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/   ©rW  )rC   rW  r   r   r   rO   K  s    zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S   s   | j S r/   rZ  rB   r   r   r   r  N  s    zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rH   rI   rJ   rO   r  r   r   r   r   ÚFileJ  s   r[  r    rw  )r   rÕ   r   ÚcurdirÚO_RDONLYr   r)  Ú_GiveupOnSendfileÚ_sendfile_use_sendfiler{  rŠ   )rC   r[  rÛ   rW  r   r   r   Útest__sendfile_use_sendfileH  s    

,0z.GeneralModuleTests.test__sendfile_use_sendfilec                 C   st   |   |j|¡ |   |j|¡ | ¡ }tj|d}|  |j¡ | ¡  |   |j|¡ |   |j|¡ |   | ¡ |¡ d S ©NrØ  )r¶   r  rö   r  r   rX   r   rQ  )rC   r    r  ÚstyperW  Ús2r   r   r   Ú_test_socket_filenoZ  s    z&GeneralModuleTests._test_socket_filenoc                 C   sP  t   t jt j¡}|  |j¡ | tjdf¡ |  |t jt j¡ t	t dƒr†t   t jt j
¡}|  |j¡ | tjdf¡ |  |t jt j
¡ tjrÎt   t jt j¡}|  |j¡ | tjdddf¡ |  |t jt j¡ t	t dƒrLt ¡ }|  tj|¡ t   t jt j¡}|  |j¡ z| tj |d¡¡ W n ty8   Y n0 |  |t jt j¡ d S )Nr   r"   rÞ   r   )r   r=   r3   rX   r   rb   r   rœ   rd  r   r"   rô  rí   rë   rÒ   rÓ   ÚshutilÚrmtreerÞ   rÕ   rÜ   r  r´   )rC   r    Ztmpdirr   r   r   Útest_socket_filenog  s4    

ÿz%GeneralModuleTests.test_socket_filenoc                 C   sD   |   td¡$ tjtjtjdd W d   ƒ n1 s60    Y  d S )Nzinteger argument expectedg     @E@rØ  ©r,  rŠ   r   r=   r3   rB   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Ø  rh  rB   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 descriptorrv  rØ  ©r,  r©  r   r=   r3   rB   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 )Nrl  iÖÿÿÿrØ  rm  rB   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  r3  rk  rÚ  r=   r3   )rC   ZWSAENOTSOCKr5  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 ra  )rÒ   ÚNamedTemporaryFiler)  r   r   r  r=   r3   r¶   r3  rk  rÛ  )rC   Zafiler5  r   r   r   Ú%test_socket_fileno_requires_socket_fd¤  s    
.ý$z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)YrH   rI   rJ   r  r  r£   Ú
skipUnlessr  r"  r'  r-  r6  r;  r?  rÕ   r  rB  r‚  r¡  r   rô  rZ  re  rg  rh  r   r   rm  ru  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-  r4  r7  r8  r:  r>  ÚskipIfr   rB  rD  rJ  rK  rL  rO  rX  r`  rd  rg  ri  rk  rn  ro  rp  rr  r   r   r   r   r  I  s  

,

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


,ÿ
ÿ
ÿ
>ÿ
ÿ
"
ÿNÿ




	
þ
ÿ

r  z!SocketCan required for this test.c                   @   s”   e Zd Zdd„ Ze eedƒd¡dd„ ƒZdd„ Z	e eedƒd¡d	d
„ ƒZ
dd„ Zdd„ Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZdS )ÚBasicCANTestc                 C   s   t j t j t j d S r/   )r   ÚAF_CANr   r   rB   r   r   r   r;  ´  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   rx  Ú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_FRAMErB   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"   rx  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   rb   r¶   r   )rC   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   rb   r  r   r   r   ÚtestTooLongInterfaceNameé  s    ÿz%BasicCANTest.testTooLongInterfaceNameÚCAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c              	   C   sl   t   t jt jt j¡D}dD ].}| t jt j|¡ |  || t jt j¡¡ qW d   ƒ n1 s^0    Y  d S )N)r   r   )	r   r   r   r   rÓ  ÚSOL_CAN_RAWrš  r¶   rÏ  )rC   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Ê  )rC   Úcan_idZcan_maskZ
can_filterr    r   r   r   Ú
testFilterù  s    ÿzBasicCANTest.testFilterN)rH   rI   rJ   r;  r£   rs  r   r   r‘  r“  r”  r–  r™  rœ  r¡  r   r   r   r   rv  ±  s(   ÿ
ÿ
ÿ
ÿrv  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™   rO   r“   r   r   r   rO     s    zCANTest.__init__c                 C   s&   t |ƒ}| dd¡}t | j|||¡S )Nr_   ó    )ró  Úljustr   rŸ  rf   )Ú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   rf   )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    Úrecvfromre   r¶   Úcfrc   ©rC   r¬  rÂ   r   r   r   ÚtestSendFrame  s    zCANTest.testSendFramec                 C   s    |   dd¡| _| j | j¡ d S )Nr   s   ©r¨  r¬  r”   r¼   rB   r   r   r   Ú_testSendFrame  s    zCANTest._testSendFramec                 C   s$   | j  | j¡\}}|  | j|¡ d S r/   )r    r«  re   r¶   r¬  r­  r   r   r   ÚtestSendMaxFrame!  s    zCANTest.testSendMaxFramec                 C   s    |   dd¡| _| j | j¡ d S )Nr   s   r¯  rB   r   r   r   Ú_testSendMaxFrame%  s    zCANTest._testSendMaxFramec                 C   sD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r/   )r    r«  re   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´  rB   r   r   r   Ú_testSendMultiFrames0  s    zCANTest._testSendMultiFramesrx  ry  c                 C   sP   | j  | j¡\}}|  | j|¡ |  |¡\}}}|  | j|¡ |  | j|¡ d S r/   )r”   r«  re   r¶   r¬  rª  r   r¦  )rC   r¬  rÂ   r   r§  r¦  r   r   r   Ú_testBCM7  s
    zCANTest._testBCMc                 C   sÀ   t   t jt jt j¡}|  |j¡ | | jf¡ d| _t	g d¢ƒ| _
|  | j| j
¡| _t j}d}d}d } } }}d}	d}
t | j||||||||	|
¡
}|| j }| |¡}|  |t|ƒ¡ d S )Né#  )éÀ   éÿ   éî   r   i"  r   )r   r   r"   rx  rX   r   r°   rc   r   Úbytesr¦  r¨  r¬  r}  r   rŸ  rh   r¼   r¶   ró  )rC   ZbcmZopcoderï  rá  Zival1_secondsZ
ival1_usecZival2_secondsZ
ival2_usecZ
bcm_can_idZnframesÚheaderZheader_plus_frameZ
bytes_sentr   r   r   ÚtestBCM@  s4    ÷

zCANTest.testBCMN)r   )rH   rI   rJ   rO   Úclassmethodr¨  rª  r®  r°  r±  r²  rµ  r¸  r£   rs  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\   ©rN   rO   rc   rS   rV   r   r   rO   c  s    zISOTPTest.__init__c                 C   s   t j t j t j t j d S r/   )r   rw  r   r#   r"   rB   r   r   r   r;  g  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“  m  s    zISOTPTest.testCreateSocketr#   z(socket.CAN_ISOTP required for this test.c                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r/   )r   r   r"   r#   r  r   r   r   ÚtestCreateISOTPSocketq  s    zISOTPTest.testCreateISOTPSocketc              	   C   sn   t   t jt jt j¡F}|  td¡ | d¡ W d   ƒ n1 sB0    Y  W d   ƒ n1 s`0    Y  d S )Nr—  )r˜  r   r    )r   r   r"   r#   r,  r   rb   r  r   r   r   r™  w  s    z"ISOTPTest.testTooLongInterfaceNamec              
   C   s¨   z^t   t jt jt j¡6}| jddf}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  W nD ty¢ } z,|j	t	j
krŒ|  d| j ¡ n‚ W Y d }~n
d }~0 0 d S )Nrº  iV  ra   )r   r   r"   r#   rc   rb   r¶   r   r   rk  ÚENODEVrd   ©rC   r    rÂ   r‹   r   r   r   ÚtestBind}  s    
2ÿzISOTPTest.testBind)rH   rI   rJ   rO   r;  r“  r£   rs  r   r   rÅ  r™  rÈ  rZ   r   r   rV   r   rÂ  `  s   ÿ
rÂ  z!CAN J1939 required for this test.c                       sX   e Zd Z‡ fdd„Ze eedƒd¡dd„ ƒZe eedƒd¡dd„ ƒZ	d	d
„ Z
‡  ZS )Ú	J1939Testc                    s   t ƒ j|i |¤Ž d| _d S rÃ  rÄ  rS   rV   r   r   rO   Ž  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_MAXrB   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%   rc   rÍ  rÓ  rÌ  rb   r¶   r   r   rk  rÆ  rd   rÇ  r   r   r   rÈ  »  s    
2ÿzJ1939Test.testBind)rH   rI   rJ   rO   r£   rs  r   r   rá  râ  rÈ  rZ   r   r   rV   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(   rB   r   r   r   r;  Ì  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Ó  r9  Ú	SO_RCVBUFÚ	SO_SNDBUF)rC   re   r    r   r   r   ÚtestSocketBufferSizeÔ  s    z!BasicRDSTest.testSocketBufferSizeN)rH   rI   rJ   r;  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š   rO   r“   r   r   r   rO   Þ  s    zRDSTest.__init__c                    s   t ƒ  ¡  t ¡ | _d S r/   )rN   rD   rP   ry   ZevtrB   rV   r   r   rD   á  s    
zRDSTest.setUpc                 C   s2   | j  | j¡\}}|  | j|¡ |  | j|¡ d S r/   )r>   r«  re   r¶   r¦  rž   ©rC   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”   r2  rœ   r@   rB   r   r   r   Ú_testSendAndRecvê  s    zRDSTest._testSendAndRecvc                 C   sH   | j  | jtj¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r/   )r>   r«  re   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ì  rB   r   r   r   Ú	_testPeekô  s    zRDSTest._testPeekÚrecvmsgc                 C   s(   | j  | j¡\}}}}|  | j|¡ d S r/   )r>   rñ  re   r¶   r¦  )rC   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@   rB   r   r   r   Ú_testSendAndRecvMsgý  s    zRDSTest._testSendAndRecvMsgc                 C   sD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r/   )r>   r«  re   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”   r2  rœ   r@   r÷  rB   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«  re   r¶   r¦  )rC   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ì  rB   r   r   r   Ú_testSelect	  s    zRDSTest._testSelect)r   )rH   rI   rJ   rO   rD   rê  rí  rï  rð  r  r   ró  rõ  rø  rù  rû  rü  rZ   r   r   rV   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-   rB   r   r   r   r;  	  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 ©Nr   r   )r   r-   r"   r¶   r   r  r   r   r   ÚtestUnbound%	  s    zBasicQIPCRTRTest.testUnboundc                 C   s^   t   t jt j¡:}tj|| ¡ d d |  | ¡ d d¡ W d   ƒ n1 sP0    Y  d S )Nr   râ   r   )r   r-   r"   r   r?   r   ÚassertNotEqualr  r   r   r   ÚtestBindSock)	  s    zBasicQIPCRTRTest.testBindSockc                 C   sH   t   t jt j¡$}| jttj|dd W d   ƒ n1 s:0    Y  d S )Nr“  râ   )r   r-   r"   r)  r   r   r?   r  r   r   r   ÚtestInvalidBindSock.	  s    z$BasicQIPCRTRTest.testInvalidBindSockc                 C   sR   t   t jt j¡.}| d¡ |  | ¡ d d¡ W d   ƒ n1 sD0    Y  d S )N)é{   r  r   r   )r   r-   r"   r°   r   r   r  r   r   r   ÚtestAutoBindSock2	  s    
z!BasicQIPCRTRTest.testAutoBindSockN)	rH   rI   rJ   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d„ Zdd„ Zd	S )
ÚBasicVSOCKTestc                 C   s
   t j d S r/   )r   r¥   rB   r   r   r   r;  <	  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_ANYr®   ÚVM_SOCKETS_INVALID_VERSIONr	   rB   r   r   r   ÚtestVSOCKConstants?	  s    z!BasicVSOCKTest.testVSOCKConstantsc                 C   s4   t   t jt j¡}W d   ƒ n1 s&0    Y  d S r/   )r   r¥   r3   r  r   r   r   r“  I	  s    zBasicVSOCKTest.testCreateSocketc                 C   sú   t   t jt j¡Ö}| t jt j¡}| t jt j¡}| t jt j¡}| t jt j|d ¡ | t jt j|d ¡ | t jt j|d ¡ |  |d | t jt j¡¡ |  |d | t jt j¡¡ |  |d | t jt j¡¡ W d   ƒ n1 sì0    Y  d S ©Nr    )	r   r¥   r3   rÏ  r  r  r  rÓ  r¶   )rC   r    Zorig_maxr„  Zorig_minr   r   r   rç  M	  sD    ÿÿÿ
ÿ
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿz#BasicVSOCKTest.testSocketBufferSizeN)rH   rI   rJ   r;  r  r“  rç  r   r   r   r   r  7	  s   
r  z)Bluetooth sockets required for this test.c                   @   sv   e Zd Zdd„ Zdd„ Ze ejdkd¡dd„ ƒZ	e ejdkd	¡d
d„ ƒZ
e ejdkpdej d¡d¡dd„ ƒZdS )ÚBasicBluetoothTestc                 C   sJ   t j t j t j t j tjdkrFt j t j t j	 tj 
d¡sFt j d S )Nr¾  r›  )r   Z
BDADDR_ANYZBDADDR_LOCALr2   r4   r‚  r¡  ÚBTPROTO_HCIZSOL_HCIÚBTPROTO_L2CAPr¢  ÚBTPROTO_SCOrB   r   r   r   ÚtestBluetoothConstantsl	  s    
z)BasicBluetoothTest.testBluetoothConstantsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r/   )r   r2   r3   r4   r  r   r   r   ÚtestCreateRfcommSocketz	  s    z)BasicBluetoothTest.testCreateRfcommSocketr¾  z&windows does not support L2CAP socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r/   )r   r2   r)   r  r  r   r   r   ÚtestCreateL2capSocket~	  s    z(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketsc                 C   s8   t   t jt jt j¡}W d   ƒ n1 s*0    Y  d S r/   )r   r2   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   r2   r)   r  r  r   r   r   ÚtestCreateScoSocketˆ	  s    z&BasicBluetoothTest.testCreateScoSocketN)rH   rI   rJ   r  r  r£   ru  r‚  r¡  r  r  r¢  r  r   r   r   r   r  h	  s   

ÿr  c                   @   s¾   e Zd Zd+dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Ze e¡Zejd$d%„ ƒZd&d'„ Zd(d)„ Zd*S ),ÚBasicTCPTestr   c                 C   s   t j| |d d S r   ©r¿   rO   r“   r   r   r   rO   ‘	  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·   rB   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¶   )rC   Úseg1Úseg2r¸   r   r   r   ÚtestOverFlowRecvœ	  s    zBasicTCPTest.testOverFlowRecvc                 C   s   | j  t¡ d S r/   r  rB   r   r   r   Ú_testOverFlowRecv£	  s    zBasicTCPTest._testOverFlowRecvc                 C   s    | j  d¡\}}|  |t¡ d S r±   )rÀ   r«  r¶   r·   ©rC   r¸   rÂ   r   r   r   ÚtestRecvFrom¦	  s    zBasicTCPTest.testRecvFromc                 C   s   | j  t¡ d S r/   r  rB   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¶   )rC   r  rÂ   r  r¸   r   r   r   ÚtestOverFlowRecvFrom®	  s    z!BasicTCPTest.testOverFlowRecvFromc                 C   s   | j  t¡ d S r/   r  rB   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¶   )rC   r¸   Úreadr   r   r   ÚtestSendAll¸	  s    
zBasicTCPTest.testSendAllc                 C   s   d}| j  |¡ d S )Nr&  )rÃ   r  )rC   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=   r3   rX   r   r  r³   r¶   r·   )rC   rW  rÛ   r¸   r   r   r   Ú
testFromFdÆ	  s    

zBasicTCPTest.testFromFdc                 C   s   | j  t¡ d S r/   r  rB   r   r   r   Ú_testFromFdÏ	  s    zBasicTCPTest._testFromFdc                 C   s0   | j  ¡ }|  |j¡ | d¡}|  |t¡ d S r±   )rÀ   ÚduprX   r   r³   r¶   r·   )rC   rÛ   r¸   r   r   r   ÚtestDupÒ	  s    

zBasicTCPTest.testDupc                 C   s   | j  t¡ d S r/   r  rB   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·   ÚshutdownrB   r   r   r   Ú_testShutdownå	  s    zBasicTCPTest._testShutdownc                 C   sX   dd l }| j t¡ |  t| jj|jd ¡ |  t| jjd|jd  ¡ | j d¡ d S )Nr   r   r    )	r•  rÃ   r¼   r·   r)  r{  r1  r–  ÚUINT_MAX©rC   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  rQ  r¶   r  Ú_closedr)  r   r³   r   r   r=   r3   rX   r·   )rC   r  r   rÛ   r¸   r   r   r   Ú
testDetachö	  s    



zBasicTCPTest.testDetachc                 C   s   | j  t¡ d S r/   r  rB   r   r   r   Ú_testDetach
  s    zBasicTCPTest._testDetachN)r   )rH   rI   rJ   rO   r  r  r  r   r"  r#  r$  r%  r(  r)  r+  r,  r.  r/  r0  r2  r   rt  ZtestShutdown_overflowr5  r7  r8  r   r   r   r   r  	  s,   

		


r  c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚBasicUDPTestr   c                 C   s   t j| |d d S r   )r—   rO   r“   r   r   r   rO   
  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”   r2  r·   rœ   r@   rB   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<  rB   r   r   r   r#  
  s    zBasicUDPTest._testRecvFromc                 C   s   |   t| jjd¡ d S ©Nrv  ©r)  r©  r>   r«  rB   r   r   r   ÚtestRecvFromNegative
  s    z!BasicUDPTest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S r›   r<  rB   r   r   r   Ú_testRecvFromNegative#
  s    z"BasicUDPTest._testRecvFromNegativeN)r   ©
rH   rI   rJ   rO   r;  r=  r"  r#  rA  rB  r   r   r   r   r9  

  s   
r9  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˜   rO   r“   r   r   r   rO   +
  s    zBasicUDPLITETest.__init__c                 C   s    | j  ttƒ¡}|  |t¡ d S r/   r:  r,  r   r   r   r;  .
  s    z"BasicUDPLITETest.testSendtoAndRecvc                 C   s   | j  tdt| jf¡ d S r›   r<  rB   r   r   r   r=  3
  s    z#BasicUDPLITETest._testSendtoAndRecvc                 C   s$   | j  ttƒ¡\}}|  |t¡ d S r/   r>  r!  r   r   r   r"  6
  s    zBasicUDPLITETest.testRecvFromc                 C   s   | j  tdt| jf¡ d S r›   r<  rB   r   r   r   r#  ;
  s    zBasicUDPLITETest._testRecvFromc                 C   s   |   t| jjd¡ d S r?  r@  rB   r   r   r   rA  >
  s    z%BasicUDPLITETest.testRecvFromNegativec                 C   s   | j  tdt| jf¡ d S r›   r<  rB   r   r   r   rB  B
  s    z&BasicUDPLITETest._testRecvFromNegativeN)r   rC  r   r   r   r   rD  '
  s   
rD  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/   )rP   ry   Ú
misc_eventrN   rD   rB   rV   r   r   rD   g
  s    
zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r/   )Úcli_sockr¼   r,  r   r   r   ÚsendToServerk
  s    zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r/   )rG  rô  Úsendmsg_to_server_defaultsró  ©rC   rT   r   r   r   ÚsendmsgToServers
  s    ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r/   )rñ  ÚregisterRecvmsgResult)rC   rÛ   re   rT   Úresultr   r   r   Ú	doRecvmsg{
  s    
zSendrecvmsgBase.doRecvmsgc                 C   s   d S r/   r   ©rC   rM  r   r   r   rL  …
  s    z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r/   ©r¶   ©rC   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¶   )
rC   rï  ÚeorÚchecksetÚ
checkunsetÚignoreZ
defaultsetZdefaultunsetZinbothr‘  r   r   r   Ú
checkFlags 
  s&    




ÿzSendrecvmsgBase.checkFlags)Nr   r   r   )rH   rI   rJ   r   ÚLOOPBACK_TIMEOUTÚfail_timeoutrD   rH  rI  rK  rN  rL  rR  rV  r  r€   r   rU  rW  rX  r^  rZ   r   r   rV   r   rE  `
  s   
rE  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_intorL  ÚassertGreaterEqualÚassertLessEqualr¾  )rC   rÛ   re   rT   ÚbufrM  r   r   r   rN  Ú
  s    
zRecvmsgIntoMixin.doRecvmsgN)rH   rI   rJ   rN  r   r   r   r   ra  ×
  s   ra  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgDgramFlagsBasec                    s   t ƒ jtjB S r/   )rN   rX  r   Ú	MSG_TRUNCrB   rV   r   r   rX  æ
  s    z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rH   rI   rJ   ÚpropertyrX  rZ   r   r   rV   r   rf  ã
  s   rf  c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgSCTPFlagsBasec                    s   t ƒ jtjB S r/   )rN   rW  r   ÚMSG_EORrB   rV   r   r   rW  î
  s    z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rH   rI   rJ   rh  rW  rZ   r   r   rV   r   ri  ë
  s   ri  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>   rB   r   r   r   Ú	serv_sockø
  s    z'SendrecvmsgConnectionlessBase.serv_sockc                 C   s   | j S r/   )r”   rB   r   r   r   rG  ü
  s    z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS r›   )rÊ   rB   r   r   r   rI     s    z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r/   )rG  r2  rÊ   r,  r   r   r   rH    s    z*SendrecvmsgConnectionlessBase.sendToServerN)rH   rI   rJ   rh  rl  rG  rI  rH  r   r   r   r   rk  ó
  s   


rk  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À   rB   r   r   r   rl    s    z"SendrecvmsgConnectedBase.serv_sockc                 C   s   | j S r/   )rÃ   rB   r   r   r   rG    s    z!SendrecvmsgConnectedBase.cli_sockc                 C   s   d S r/   r   rQ  r   r   r   rR    s    z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rH   rI   rJ   rh  rl  rG  rR  r   r   r   r   rm    s
   

rm  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    s   t ƒ  ¡  | j | j¡ d S r/   )rN   rD   rl  rÖ  r`  rB   rV   r   r   rD     s    
z"SendrecvmsgServerTimeoutBase.setUprÌ   r   r   rV   r   rn    s   rn  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¶   rl  r³   ró  r·   rB   r   r   r   ÚtestSendmsg(  s    zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r/   ©r¶   rK  r·   ró  rB   r   r   r   Ú_testSendmsg,  s    zSendmsgTests._testSendmsgc                 C   s   |   | j ttƒ¡t¡ d S r/   rp  rB   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  4  ró   z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rr  rB   r   r   r   Ú_testSendmsgDataGenerator3  s    ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r/   rp  rB   r   r   r   ÚtestSendmsgAncillaryGenerator7  s    z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |   |  tgdd„ dD ƒ¡ttƒ¡ d S )Nc                 s   s   | ]
}|V  qd S r/   r   r  r   r   r   r  <  ró   z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   rr  rB   r   r   r   Ú_testSendmsgAncillaryGenerator;  s    ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   s   |   | j ttƒ¡t¡ d S r/   rp  rB   r   r   r   ÚtestSendmsgArray?  s    zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)r¶   rK  Úarrayr·   ró  rB   r   r   r   Ú_testSendmsgArrayC  s    ÿzSendmsgTests._testSendmsgArrayc                 C   s   |   | j ttƒ¡t¡ d S r/   rp  rB   r   r   r   ÚtestSendmsgGatherG  s    zSendmsgTests.testSendmsgGatherc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nr  rr  rB   r   r   r   Ú_testSendmsgGatherK  s    zSendmsgTests._testSendmsgGatherc                 C   s   |   | j d¡d¡ d S ©Nrw  ó   done©r¶   rl  r³   rB   r   r   r   ÚtestSendmsgBadArgsN  s    zSendmsgTests.testSendmsgBadArgsc                 C   s²   |   t| jj¡ |   t| jd¡ |   t| jtƒ ¡ |   t| jtƒ g¡ |   t| jttƒ g¡ |   t| jtgtƒ ¡ |   t| jtgg tƒ ¡ |   t| jtgg dtƒ ¡ |  d¡ d S )Ns   not in an iterabler   r€  )r)  rŠ   rG  rô  rK  Úobjectr·   rH  rB   r   r   r   Ú_testSendmsgBadArgsR  s.    
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   s   |   | j d¡d¡ d S r  r  rB   r   r   r   ÚtestSendmsgBadCmsgd  s    zSendmsgTests.testSendmsgBadCmsgc                 C   s¬   |   t| jtgtƒ g¡ |   t| jtgtƒ ddfg¡ |   t| jtgdtƒ dfg¡ |   t| jtgddtƒ fg¡ |   t| jtgdg¡ |   t| jtgdg¡ |  d¡ d S )Nr   ó   data)r   r   )r   r   r†  rC  r€  ©r)  rŠ   rK  r·   rƒ  rH  rB   r   r   r   Ú_testSendmsgBadCmsgh  s&    

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   s   |   | j d¡d¡ d S r  r  rB   r   r   r   ÚtestSendmsgBadMultiCmsgw  s    z$SendmsgTests.testSendmsgBadMultiCmsgc                 C   s@   |   t| jtgg d¢¡ |   t| jtgdtƒ g¡ |  d¡ d S )N©r   r   ró   r€  r‡  rB   r   r   r   Ú_testSendmsgBadMultiCmsg}  s    

ÿ
ÿz%SendmsgTests._testSendmsgBadMultiCmsgc                 C   s   |   | j d¡d¡ d S r  r  rB   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   rK  r·   ÚassertIsNoner3  rk  rH  ©rC   r5  r   r   r   Ú_testSendmsgExcessCmsgRejectŠ  s
    
0z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   s   d S r/   r   rB   r   r   r   ÚtestSendmsgAfterClose’  s    z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r/   )rG  r   r)  r   rK  r·   rB   r   r   r   Ú_testSendmsgAfterClose–  s    
z#SendmsgTests._testSendmsgAfterCloseN)rH   rI   rJ   rq  rs  rt  ru  rv  rw  rx  r{  r|  r~  r‚  r„  r…  rˆ  r  r   rŠ  r÷   rŒ  r  r  r‘  r’  r   r   r   r   ro  $  s,   

ro  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/   rp  rB   r   r   r   ÚtestSendmsgExplicitNoneAddrŸ  s    z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S r›   rr  rB   r   r   r   Ú_testSendmsgExplicitNoneAddr£  s    z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   s.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nrž  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r8   ©r¶   rl  r³   r  rF  r„   r`  rB   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)rG  rÖ  rK  r   r8   r   rk  ÚENOMEMr%  rF  ro   ©rC   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™  rB   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   rK  r   ÚMSG_DONTWAITr  r3  rk  ÚEAGAINÚEWOULDBLOCKr  rF  ro   r  r   r   r   Ú_testSendmsgDontWaitÊ  s    2
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rH   rI   rJ   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   rB   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   rG  rô  r·   rB   r   r   r   Ú_testSendmsgNoDestAddrâ  s    ÿ
ÿz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rH   rI   rJ   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©rZ  ©rN  rl  ró  r·   r¶   rR  rž   r^  ©rC   r¸   rò  rï  rÂ   r   r   r   ÚtestRecvmsgí  s
    zRecvmsgGenericTests.testRecvmsgc                 C   s   |   t¡ d S r/   ©rH  r·   rB   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¯  rB   r   r   r   Ú_testRecvmsgExplicitDefaults  s    z0RecvmsgGenericTests._testRecvmsgExplicitDefaultsc                 C   sV   |   | jttƒd ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )NrC  Tr«  r¬  r­  r   r   r   ÚtestRecvmsgShorter  s    
ÿz&RecvmsgGenericTests.testRecvmsgShorterc                 C   s   |   t¡ d S r/   r¯  rB   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¯  rB   r   r   r   Ú_testRecvmsgTrunc  s    z%RecvmsgGenericTests._testRecvmsgTruncc                 C   sT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr   Tr«  r¬  r­  r   r   r   ÚtestRecvmsgShortAncillaryBuf  s    ÿz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufc                 C   s   |   t¡ d S r/   r¯  rB   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¯  rB   r   r   r   Ú_testRecvmsgLongAncillaryBuf1  s    z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j  ¡  |  t| j| j d¡ d S r±   )rl  r   r)  r   rN  rB   r   r   r   ÚtestRecvmsgAfterClose4  s    
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   s   d S r/   r   rB   r   r   r   Ú_testRecvmsgAfterClose9  s    z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sF   z4| j  d¡ |  tj| j| j ttƒ¡ W | j 	¡  n| j 	¡  0 d S )Nr›  )
rl  rÖ  r)  r   r8   rN  ró  r·   rF  ro   rB   r   r   r   ÚtestRecvmsgTimeout<  s    ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©Nr˜  )r  rF  r„   r`  rB   r   r   r   Ú_testRecvmsgTimeoutE  s    z'RecvmsgGenericTests._testRecvmsgTimeoutrî  c                 C   s  |   | jttƒd dtj¡\}}}}|  |td d… ¡ |  || j¡ |  |g ¡ | j	|dt
tddƒd |   | jttƒdtj¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd |   | jttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S )	Nr  r   rµ  Frg  ©rZ  r]  Tr«  )rN  rl  ró  r·   r   rî  r¶   rR  rž   r^  r€   r­  r   r   r   ÚtestRecvmsgPeekH  s.    þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   s   |   t¡ d S r/   r¯  rB   r   r   r   Ú_testRecvmsgPeekk  s    z$RecvmsgGenericTests._testRecvmsgPeekrô  c                 C   s`   | j  | j¡ |  | j ttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S rª  )
rl  rÖ  r`  rN  ró  r·   r¶   rR  rž   r^  r­  r   r   r   ÚtestRecvmsgFromSendmsgo  s    z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   s.   |   |  td d… tdd … g¡ttƒ¡ d S r}  rr  rB   r   r   r   Ú_testRecvmsgFromSendmsgz  s    z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rH   rI   rJ   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«  )rN  rl  r¶   rR  rž   r^  r­  r   r   r   ÚtestRecvmsgEOFƒ  s
    z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   s   | j  ¡  d S r/   )rG  r   rB   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)rN  rl  ró  r·   rR  rž   r¶   r^  )rC   r  rò  rï  rÂ   r  r¸   r   r   r   ÚtestRecvmsgOverflowŽ  s    
ÿz-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   s   |   t¡ d S r/   r¯  rB   r   r   r   Ú_testRecvmsgOverflowž  s    z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rH   rI   rJ   rÈ  rÉ  rÊ  rË  r   r   r   r   rÇ    s   rÇ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚRecvmsgTestsc                 C   s   |   t| jj¡ |   t| jjddd¡ |   t| jjttƒdd¡ |   t| jjtdƒgdd¡ |   t| jjtƒ dd¡ |   t| jjttƒtƒ d¡ |   t| jjttƒdtƒ ¡ | j ttƒdd¡\}}}}|  	|t¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nrv  r   r§  Tr«  )r)  rŠ   rl  rñ  r©  ró  r·   rÊ  rƒ  r¶   rR  rž   r^  r­  r   r   r   ÚtestRecvmsgBadArgs¥  s0    ÿ
ÿÿÿÿÿzRecvmsgTests.testRecvmsgBadArgsc                 C   s   |   t¡ d S r/   r¯  rB   r   r   r   Ú_testRecvmsgBadArgs»  s    z RecvmsgTests._testRecvmsgBadArgsN)rH   rI   rJ   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 writablerv  Tr«  )rÊ  ró  r·   r)  rŠ   rl  rb  rƒ  r©  r¶   rR  rž   r^  ©rC   re  Únbytesrò  rï  rÂ   r   r   r   ÚtestRecvmsgIntoBadArgsÂ  s@    
ÿÿ
ÿÿÿÿ
ÿ
ÿz'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   s   |   t¡ d S r/   r¯  rB   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·   rl  rb  r¶   rR  rž   r^  rÐ  r   r   r   ÚtestRecvmsgIntoGeneratorá  s    ÿz)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   s   |   t¡ d S r/   r¯  rB   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 )Nry  r   Tr«  )
rz  ró  r·   rl  rb  r¶   ÚtobytesrR  rž   r^  rÐ  r   r   r   ÚtestRecvmsgIntoArrayï  s    z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   s   |   t¡ d S r/   r¯  rB   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Ê  rl  rb  Ú
memoryviewr¶   ró  rR  rž   r^  )rC   Úb1Úb2Zb3rÑ  rò  rï  rÂ   r   r   r   ÚtestRecvmsgIntoScatterü  s    ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   s   |   d¡ d S )NrÚ  )rH  rB   r   r   r   Ú_testRecvmsgIntoScatter  s    z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rH   rI   rJ   rÒ  rÓ  rÔ  rÕ  r×  rØ  rÞ  rß  r   r   r   r   rÏ  ¿  s   
rÏ  c                   @   s`   e Zd ZzddlZW n ey*   dZY n0 edejƒZee	dƒdd„ ƒZ
ee	dƒdd	„ ƒZdS )
ÚCmsgMacroTestsr   NiÿÿÿÚCMSG_LENc                 C   s¾   | j t d¡ d }ttdƒƒtt|d |ƒƒ }|  t d¡t d¡jd ¡ |D ]2}t |¡}|  |t d¡ |¡ |  	|| j ¡ qT|  
ttjd¡ |  
ttj|¡ |  
ttjtj¡ d S )Nr   r   é  r;   r    rv  )Úsocklen_t_limitr   rá  Úlistr.  rp  rz  Úitemsizer¶   rd  r)  r{  r‚  Úmaxsize)rC   ÚtoobigrU  ÚnÚretr   r   r   ÚtestCMSG_LEN  s    
zCmsgMacroTests.testCMSG_LENr‰  c                 C   sä   | j t d¡ d }ttdƒƒtt|d |ƒƒ }t d¡}|  |t d¡jd ¡ |D ]T}t |¡}|  ||¡ |  |t 	|¡¡ |  ||t 	d¡ ¡ |  
|| j ¡ |}qX|  ttjd¡ |  ttj|¡ |  ttjtj¡ d S )Nr   râ  r   r;   r    rv  )rã  r   r‰  rä  r.  rp  rz  rå  rc  rá  rd  r)  r{  r‚  ræ  )rC   rç  rU  Úlastrè  ré  r   r   r   ÚtestCMSG_SPACE1  s    

zCmsgMacroTests.testCMSG_SPACE)rH   rI   rJ   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Ò   ÚmkstemprX   rÕ   rÚ   r   Úwriter	  ÚencodeÚappend)rC   rè  Úfdsr;   rW  rÜ   r   r   r   ÚnewFDsR  s    zSCMRightsTest.newFDsc                 C   sB   t |ƒD ]4\}}t |dtj¡ |  t |d¡t|ƒ ¡ ¡ qd S )Nr   r²   )Ú	enumeraterÕ   ÚlseekÚSEEK_SETr¶   r'  r	  rñ  )rC   ró  rè  rW  r   r   r   ÚcheckFDs^  s    zSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r/   )rX   ÚcloseRecvmsgFDsrO  r   r   r   rL  e  s    z#SCMRightsTest.registerRecvmsgResultc                 C   sn   |d D ]`\}}}|t jkr|t jkrt d¡}| |d t|ƒt|ƒ|j  … ¡ |D ]}t |¡ qXqd S )Nr   r;   )	r   r9  Ú
SCM_RIGHTSrz  Ú	frombytesró  rå  rÕ   r   )rC   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_dataró  rW  r   r   r   rù  h  s    
ÿ
ÿzSCMRightsTest.closeRecvmsgFDsc                 C   s8   |   |  tgtjtjt d|  |¡¡fg¡ttƒ¡ d S )Nr;   )	r¶   rK  r·   r   r9  rú  rz  rô  ró  )rC   rè  r   r   r   ÚcreateAndSendFDst  s    þÿûzSCMRightsTest.createAndSendFDsr   r   c                 C   sä   |\}}}}|   |t¡ |  || j¡ | j|dtj|d |  |t¡ |  	t
|ƒ|¡ t d¡}	|D ]`}
|  |
t¡ |
\}}}|   |tj¡ |   |tj¡ |  |t¡ |   t
|ƒt d¡ |	 |¡ qd|   t
|	ƒ|¡ |  |	¡ d S )NT©rZ  r\  r]  r;   r   )r¶   r·   rR  rž   r^  r   rS  r  rä  rd  ró  rz  Útupler9  rú  r¾  Ú
SIZEOF_INTrû  rø  )rC   ZnumfdsrM  ÚmaxcmsgsÚignoreflagsr¸   rò  rï  rÂ   ró  Úitemrü  rý  rþ  r   r   r   ÚcheckRecvmsgFDs~  s&    ÿ

zSCMRightsTest.checkRecvmsgFDsc                 C   s    |   d|  | jttƒd¡¡ d S )Nr   rº  ©r  rN  rl  ró  r·   rB   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;   r   )
r¶   rK  r·   r   r9  rú  rz  rô  rÖ  ró  rB   r   r   r   Ú_testFDPassSimplež  s    þþúzSCMRightsTest._testFDPassSimplec                 C   s    |   d|  | jttƒd¡¡ d S )Nr1  rº  r  rB   r   r   r   ÚtestMultipleFDPass§  s    ÿz SCMRightsTest.testMultipleFDPassc                 C   s   |   d¡ d S ©Nr1  ©rÿ  rB   r   r   r   Ú_testMultipleFDPass¬  s    z!SCMRightsTest._testMultipleFDPassr‰  c                 C   s*   |   d|  | jttƒt dt ¡¡¡ d S r  )r  rN  rl  ró  r·   r   r‰  r  rB   r   r   r   ÚtestFDPassCMSG_SPACE¯  s
    ÿÿz"SCMRightsTest.testFDPassCMSG_SPACEc                 C   s   |   d¡ d S r  r  rB   r   r   r   Ú_testFDPassCMSG_SPACE¶  s    z#SCMRightsTest._testFDPassCMSG_SPACEc              
   C   s0   | j d|  | jttƒt dt ¡¡tjd d S )Nr   r1  ©r  )	r  rN  rl  ró  r·   r   rá  r  rS  rB   r   r   r   ÚtestFDPassCMSG_LENº  s    ÿúz SCMRightsTest.testFDPassCMSG_LENc                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testFDPassCMSG_LENÄ  s    z!SCMRightsTest._testFDPassCMSG_LENrC  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  rB   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¶   rK  r·   r   r9  rú  rz  ró  ©rC   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  rN  rl  ró  r·   r   r‰  r  rá  rS  )rC   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/   )rK  r   r  rk  ro  r¶   ró  )rC   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  rN  rl  ró  r·   r   rS  rB   r   r   r   ÚtestFDPassEmpty  s
    ÿþzSCMRightsTest.testFDPassEmptyc                 C   s   |   ttjtjdfg¡ d S ©Nró   )r  r·   r   r9  rú  rB   r   r   r   Ú_testFDPassEmpty  s    
þzSCMRightsTest._testFDPassEmptyc                 C   s˜   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ |D ]6\}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ q\d S )Nrº  TrÂ  r   )rN  rl  ró  r·   r¶   rR  rž   r^  r   rS  rd  r9  rú  Ú
assertLessr  ©rC   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;   rv  )r  r·   r   r9  rú  rz  ÚbadfdrÖ  rB   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;   )rN  rl  ró  r·   r¶   rR  rž   r^  r   rS  rd  rz  r9  rú  rû  rå  rø  )	rC   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;   rv  )	rô  r  r·   r   r9  rú  rz  r"  rÖ  r  r   r   r   Ú_testFDPassPartialIntInMiddle9  s    þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©rZ  r[  r]  )r¶   r·   rR  rž   r^  r   rS  )rC   rM  r  r¸   rò  rï  rÂ   r   r   r   ÚcheckTruncatedHeaderE  s    ÿz"SCMRightsTest.checkTruncatedHeaderc                 C   s"   | j |  | jttƒ¡tjd d S ©Nr  ©r'  rN  rl  ró  r·   r   rS  rB   r   r   r   ÚtestCmsgTruncNoBufSizeO  s    üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testCmsgTruncNoBufSizeX  s    z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j |  | jttƒd¡tjd d S )Nr   r  r)  rB   r   r   r   ÚtestCmsgTrunc0[  s    ÿzSCMRightsTest.testCmsgTrunc0c                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testCmsgTrunc0`  s    zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S rá   )r'  rN  rl  ró  r·   rB   r   r   r   ÚtestCmsgTrunc1f  s    zSCMRightsTest.testCmsgTrunc1c                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testCmsgTrunc1i  s    zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S r  )r'  rN  rl  ró  r·   r  rB   r   r   r   ÚtestCmsgTrunc2Intl  s    ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testCmsgTrunc2Ints  s    z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S r  )r'  rN  rl  ró  r·   r   rá  rB   r   r   r   ÚtestCmsgTruncLen0Minus1v  s    ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testCmsgTruncLen0Minus1z  s    z&SCMRightsTest._testCmsgTruncLen0Minus1c                 C   sò   |   | jttƒ|¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |dkr\|g kr\d S |  t|ƒd¡ |d \}}	}
|  |tj
¡ |  |	tj¡ |  t|
ƒ|¡ |  t|
ƒ|¡ t d¡}| |
d t|
ƒt|
ƒ|j  … ¡ |  |¡ d S )NT©rZ  r[  r   r   r;   )rN  rl  ró  r·   r¶   rR  rž   r^  r   rS  r9  rú  rc  rd  rz  rû  rå  rø  )rC   ÚancbufÚmaxdataZmindatar¸   rò  rï  rÂ   rü  rý  rþ  ró  r   r   r   ÚcheckTruncatedArray€  s&    ÿ
ÿz!SCMRightsTest.checkTruncatedArrayc                 C   s   | j t d¡dd d S )Nr   ©r5  r6  ©r7  r   rá  rB   r   r   r   ÚtestCmsgTruncLen0˜  s    zSCMRightsTest.testCmsgTruncLen0c                 C   s   |   d¡ d S rá   r  rB   r   r   r   Ú_testCmsgTruncLen0›  s    z SCMRightsTest._testCmsgTruncLen0c                 C   s   | j t d¡d dd d S )Nr   r   r8  r9  rB   r   r   r   ÚtestCmsgTruncLen0Plus1ž  s    z$SCMRightsTest.testCmsgTruncLen0Plus1c                 C   s   |   d¡ d S r  r  rB   r   r   r   Ú_testCmsgTruncLen0Plus1¡  s    z%SCMRightsTest._testCmsgTruncLen0Plus1c                 C   s   | j t t¡td d S )Nr8  ©r7  r   rá  r  rB   r   r   r   ÚtestCmsgTruncLen1¤  s    ÿzSCMRightsTest.testCmsgTruncLen1c                 C   s   |   d¡ d S r  r  rB   r   r   r   Ú_testCmsgTruncLen1¨  s    z SCMRightsTest._testCmsgTruncLen1c                 C   s(   | j t dt ¡d dt d d d S )Nr    r   r8  r>  rB   r   r   r   ÚtestCmsgTruncLen2Minus1«  s    
ÿz%SCMRightsTest.testCmsgTruncLen2Minus1c                 C   s   |   d¡ d S r  r  rB   r   r   r   Ú_testCmsgTruncLen2Minus1¯  s    z&SCMRightsTest._testCmsgTruncLen2Minus1N)r   r   )r   )r   )9rH   rI   rJ   r"  rô  rø  rL  rù  rÿ  r  r  r	  r
  r  r  r   r  r÷   r  r  r  r£   ru  r‚  r¡  r   r  r  r  r  r  r  r  r!  r#  r$  r%  r'  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r7  r:  r;  r<  r=  r?  r@  rA  rB  r   r   r   r   rî  J  s~   

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

	
rî  c                   @   s  e Zd ZdZdZdd„ Zd^dd„Zeed	d
ƒdd„ ƒZ	e	j
dd„ ƒZeedd	d
ƒdd„ ƒZej
dd„ ƒZeejdƒeed	d
ƒdd„ ƒƒZej
dd„ ƒZd_dd„Zeed	d
ddƒdd„ ƒZej
dd „ ƒZeedd	d
ddƒd!d"„ ƒZej
d#d$„ ƒZeejdƒeedd	d
ddƒd%d&„ ƒƒZej
d'd(„ ƒZeejdƒeedd	d
ddƒd)d*„ ƒƒZej
d+d,„ ƒZd`d-d.„Zeed	d
ƒd/d0„ ƒZej
d1d2„ ƒZeed	d
ƒd3d4„ ƒZej
d5d6„ ƒZeed	d
ƒd7d8„ ƒZej
d9d:„ ƒZeed	d
ƒd;d<„ ƒZ e j
d=d>„ ƒZ!eed	d
ƒd?d@„ ƒZ"e"j
dAdB„ ƒZ#eed	d
ƒdCdD„ ƒZ$e$j
dEdF„ ƒZ%dadGdH„Z&eedd	d
ddƒdIdJ„ ƒZ'e'j
dKdL„ ƒZ(eedd	d
ddƒdMdN„ ƒZ)e)j
dOdP„ ƒZ*eedd	d
ddƒdQdR„ ƒZ+e+j
dSdT„ ƒZ,eedd	d
ddƒdUdV„ ƒZ-e-j
dWdX„ ƒZ.eedd	d
ddƒdYdZ„ ƒZ/e/j
d[d\„ ƒZ0d]S )bÚRFC3542AncillaryTestr    rv  c                 C   s4   i }|D ]&\}}}|   ||f|¡ ||||f< q|S r/   )r  )rC   rò  Údrü  rý  rþ  r   r   r   ÚancillaryMappingÄ  s
    z%RFC3542AncillaryTest.ancillaryMappingr¼  r   c                 C   s  | j  tjtjd¡ | j ¡  |  | j tt	ƒ|¡\}}}}|  
|t	¡ |  || j¡ | j|dtj|d |  
t|ƒd¡ |  |d t¡ |d \}}	}
|  
|tj¡ |  
|	tj¡ |  |
t¡ |  
t|
ƒt¡ t d¡}| |
¡ |  |d d¡ |  |d |¡ d S )Nr   Tr   r   r;   )rl  rÓ  r   r>  rT  rF  ro   rN  ró  r·   r¶   rR  rž   r^  rS  r  r  rW  r¾  r  rz  rû  rc  rd  )rC   Ú
ancbufsizeÚmaxhopr  r¸   rò  rï  rÂ   rü  rý  rþ  r²  r   r   r   ÚcheckHopLimitÎ  s.    
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitrT  rW  c                 C   s   | j dd d S ©Nrº  ©rF  )rH  rB   r   r   r   ÚtestRecvHopLimitê  s    z%RFC3542AncillaryTest.testRecvHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  ©r  rF  r„   r`  rH  r·   rB   r   r   r   Ú_testRecvHopLimitï  s    z&RFC3542AncillaryTest._testRecvHopLimitr‰  c                 C   s   | j t t¡d d S )NrJ  )rH  r   r‰  r  rB   r   r   r   ÚtestRecvHopLimitCMSG_SPACE÷  s    z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testRecvHopLimitCMSG_SPACEü  s    z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErô  c                 C   s   | j d| jd d S ©Nrº  )rF  rG  )rH  Ú	hop_limitrB   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  rF  r„   r`  r¶   rK  r·   r   r>  rW  rz  rQ  ró  rB   r   r   r   Ú_testSetHopLimit  s    ÿÿüz%RFC3542AncillaryTest._testSetHopLimitc                 C   sB  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒ|¡\}}}}|  |t
¡ |  || j¡ | j|dtj|d |  t	|ƒd¡ |  |¡}|tjtjf }	|  t	|	ƒt¡ t d¡}
|
 |	¡ |  |
d d¡ |  |
d d¡ |tjtjf }|  t	|ƒt¡ t d¡}
|
 |¡ |  |
d d¡ |  |
d |¡ d S )Nr   Tr   r    r;   r   r¼  )rl  rÓ  r   r>  rT  rU  rF  ro   rN  ró  r·   r¶   rR  rž   r^  rS  rE  rH  r  rz  rû  rc  rd  rW  )rC   rF  rG  r  r¸   rò  rï  rÂ   ZancmapZtcdatar²  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimit  s:    
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrU  rH  c                 C   s   | j dd d S rI  )rU  rB   r   r   r   ÚtestRecvTrafficClassAndHopLimit:  s    z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú _testRecvTrafficClassAndHopLimit@  s    z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©Nr    rJ  )rU  r   r‰  r  rB   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACEE  s    ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACEM  s    z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   s   | j d| jd d S rP  ©rU  rQ  rB   r   r   r   ÚtestSetTrafficClassAndHopLimitR  s    ÿz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc                 C   sd   |   | jj| jd¡ |  |  tgtjtj	t
 
d| jg¡ftjtjt
 
d| jg¡fg¡ttƒ¡ d S rS  )r  rF  r„   r`  r¶   rK  r·   r   r>  rH  rz  Útraffic_classrW  rQ  ró  rB   r   r   r   Ú_testSetTrafficClassAndHopLimit[  s    ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   s   | j d| jd d S rP  r[  rB   r   r   r   ÚtestOddCmsgSizef  s    ÿz$RFC3542AncillaryTest.testOddCmsgSizec                 C   sæ   |   | jj| jd¡ zJ|  tgtjtjt	 	d| j
g¡ ¡ d ftjtjt	 	d| jg¡fg¡}W n€ tyà } zh|  |jt¡ |  tgtjtjt	 	d| j
g¡ftjtjt	 	d| jg¡fg¡}|  |ttƒ¡ W Y d }~n
d }~0 0 d S )Nr˜  r;   r£  )r  rF  r„   r`  rK  r·   r   r>  rH  rz  r]  rÖ  rW  rQ  r   r  rk  ro  r¶   ró  )rC   rÑ  r‹   r   r   r   Ú_testOddCmsgSizep  s2    ÿÿþþÿÿþþz%RFC3542AncillaryTest._testOddCmsgSizec                 C   s   | j  tjtjd¡ | j ¡  |d u r*dn|f}| j| j tt	ƒg|¢R Ž \}}}}|  
|t	¡ |  || j¡ |  
|g ¡ | j|dtj|d d S )Nr   r   Tr&  )rl  rÓ  r   r>  rT  rF  ro   rN  ró  r·   r¶   rR  rž   r^  rS  )rC   rF  r  rT   r¸   rò  rï  rÂ   r   r   r   ÚcheckHopLimitTruncatedHeader†  s     
ÿ
ÿÿÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©rF  r  ©ra  r   rS  rB   r   r   r   r*  š  s    ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   r+  ¥  s    z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   rb  rc  rB   r   r   r   ÚtestSingleCmsgTrunc0ª  s    ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSingleCmsgTrunc0±  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   s   | j dd d S )Nr   rJ  )ra  rB   r   r   r   ÚtestSingleCmsgTrunc1¹  s    z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSingleCmsgTrunc1½  s    z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rX  )ra  r  rB   r   r   r   ÚtestSingleCmsgTrunc2IntÂ  s    z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSingleCmsgTrunc2IntÆ  s    z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   r   rJ  )ra  r   rá  rB   r   r   r   ÚtestSingleCmsgTruncLen0Minus1Ë  s    z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSingleCmsgTruncLen0Minus1Ï  s    z3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1c                 C   sÂ   | j  tjtjd¡ | j ¡  |  | j tt	ƒt 
t¡d ¡\}}}}|  |t	¡ |  || j¡ | j|dtjd |  t|ƒd¡ |r¾|d \}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ d S )Nr   Tr4  r   )rl  rÓ  r   r>  rT  rF  ro   rN  ró  r·   rá  r  r¶   rR  rž   r^  rS  rd  rW  r  r   r   r   r   ÚtestSingleCmsgTruncInDataÔ  s     
ÿ
ÿz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSingleCmsgTruncInDataê  s    z/RFC3542AncillaryTest._testSingleCmsgTruncInDatac                 C   s  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒ|¡\}}}}|  |t
¡ |  || j¡ | j|dtj|d |  t	|ƒd¡ |d \}}}	|  |tj¡ |  |tjtjh¡ |  t	|	ƒt¡ t d¡}
|
 |	¡ |  |
d d¡ |  |
d d¡ d S )Nr   Tr&  r   r;   r¼  )rl  rÓ  r   r>  rT  rU  rF  ro   rN  ró  r·   r¶   rR  rž   r^  rS  r  rH  rW  r  rz  rû  rc  rd  )rC   rF  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(  )rn  r   r‰  r  rS  rB   r   r   r   ÚtestSecondCmsgTrunc0  s    ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSecondCmsgTrunc0  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S rá   ©rn  r   r‰  r  rB   r   r   r   ÚtestSecondCmsgTrunc1  s    z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSecondCmsgTrunc1  s    z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S r  rq  rB   r   r   r   ÚtestSecondCmsgTrunc2Int$  s    ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSecondCmsgTrunc2Int*  s    z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S r  )rn  r   r‰  r  rá  rB   r   r   r   ÚtestSecondCmsgTruncLen0Minus1/  s
    ÿÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSecondCmsgTruncLen0Minus15  s    z3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c           
      C   sT  | j  tjtjd¡ | j  tjtjd¡ | j ¡  |  | j t	t
ƒt t¡t t¡ d ¡\}}}}|  |t
¡ |  || j¡ | j|dtjd tjtjh}| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ t d¡}	|	 |¡ |  |	d d¡ |  |	d d¡ |rD| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ |  |g ¡ d S )Nr   Tr4  r   r;   r¼  )rl  rÓ  r   r>  rT  rU  rF  ro   rN  ró  r·   r‰  r  rá  r¶   rR  rž   r^  rS  rH  rW  ÚpopÚremoverz  rû  rc  rd  r  )
rC   r¸   rò  rï  rÂ   Z
cmsg_typesrü  rý  rþ  r²  r   r   r   ÚtestSecomdCmsgTruncInData:  s:    
ÿ
ÿ

þ



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatac                 C   s$   |   | jj| jd¡ |  t¡ d S rÀ  rL  rB   r   r   r   Ú_testSecomdCmsgTruncInData_  s    z/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r¼  r   )r¼  r   )r   )r   )1rH   rI   rJ   rQ  r]  rE  rH  r  r   rK  r÷   rM  rN  rO  rR  rT  rU  rV  rW  rY  rZ  r\  r^  r_  r`  ra  r*  r+  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rr  rs  rt  ru  rv  rw  rz  r{  r   r   r   r   rC  ³  sÌ   

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


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


















 
ÿ


ÿ


ÿ


ÿ


ÿ
#rC  c                   @   s   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rH   rI   rJ   r   r   r   r   r|  g  s   r|  rô  c                   @   s   e Zd ZdS )ÚSendmsgUDPTestNr}  r   r   r   r   r~  l  s   r~  rñ  c                   @   s   e Zd ZdS )ÚRecvmsgUDPTestNr}  r   r   r   r   r  p  s   r  rb  c                   @   s   e Zd ZdS )ÚRecvmsgIntoUDPTestNr}  r   r   r   r   r€  t  s   r€  c                   @   s   e Zd Zdd„ ZdS )ÚSendrecvmsgUDP6TestBasec                 C   s    |   |d d… |d d… ¡ d S r?  rP  rQ  r   r   r   rR  }  s    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rH   rI   rJ   rR  r   r   r   r   r  y  s   r  r9  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?  rP  rQ  r   r   r   rR  Æ  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=   r3   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)rN   r˜  rÈ  r   rk  ÚENOTCONNrd   ©rC   r‹   rV   r   r   rÈ    s    z$RecvmsgSCTPStreamTest.testRecvmsgEOF©rH   rI   rJ   rÈ  rZ   r   r   rV   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™  )rN   r  rÈ  r   rk  rš  rd   r›  rV   r   r   rÈ  +  s    z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFrœ  r   r   rV   r   r  %  s   r  c                   @   s   e Zd ZdS )ÚSendrecvmsgUnixStreamTestBaseNr}  r   r   r   r   rž  4  s   rž  rÞ   c                   @   s   e Zd ZdS )ÚSendmsgUnixStreamTestNr}  r   r   r   r   rŸ  8  s   rŸ  c                   @   s   e Zd ZdS )ÚRecvmsgUnixStreamTestNr}  r   r   r   r   r   =  s   r   c                   @   s   e Zd ZdS )ÚRecvmsgIntoUnixStreamTestNr}  r   r   r   r   r¡  C  s   r¡  r9  rú  c                   @   s   e Zd ZdS )ÚRecvmsgSCMRightsStreamTestNr}  r   r   r   r   r¢  I  s   r¢  c                   @   s   e Zd ZdS )ÚRecvmsgIntoSCMRightsStreamTestNr}  r   r   r   r   r£  N  s   r£  c                       sF   e Zd Z‡ fdd„ZejZeedƒr2dZ	dd„ Z
ndZ	dd„ Z
‡  ZS )	ÚInterruptedTimeoutBasec                    s2   t ƒ  ¡  t tjdd„ ¡}|  tjtj|¡ d S )Nc                 S   s   dd S rþ  r   )Úsignumr©  r   r   r   rò   b  ró   z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rN   rD   r
  r  rX   )rC   Zorig_alrm_handlerrV   r   r   rD   _  s
    
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r/   )r
  r¦  ÚITIMER_REAL©rC   Zsecondsr   r   r   ÚsetAlarmn  s    zInterruptedTimeoutBase.setAlarmr    c                 C   s   t  |¡ d S r/   )r
  r  r¨  r   r   r   r©  t  s    )rH   rI   rJ   rD   r   r_  r8   r   r
  Ú
alarm_timer©  rZ   r   r   rV   r   r¤  Z  s   

r¤  Úsiginterruptr  r¦  z+Don't have signal.alarm or signal.setitimerc                       sl   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	e
j
dƒdd„ ƒZe	e
j
dƒdd„ ƒZ‡  ZS )ÚInterruptedRecvTimeoutTestc                    s   t ƒ  ¡  | j | j¡ d S r/   )rN   rD   r>   rÖ  r8   rB   rV   r   r   rD     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  ©rC   r  rT   rU   r5  r   r   r   ÚcheckInterruptedRecv…  s
    .z/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C   s   |   | jjd¡ d S r±   )r®  r>   r³   rB   r   r   r   ÚtestInterruptedRecvTimeout  s    z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C   s   |   | jjtdƒ¡ d S r±   )r®  r>   Ú	recv_intorÊ  rB   r   r   r   ÚtestInterruptedRecvIntoTimeout’  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   s   |   | jjd¡ d S r±   )r®  r>   r«  rB   r   r   r   ÚtestInterruptedRecvfromTimeout•  s    z9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutc                 C   s   |   | jjtdƒ¡ d S r±   )r®  r>   Úrecvfrom_intorÊ  rB   r   r   r   Ú"testInterruptedRecvfromIntoTimeout˜  s    z=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutrñ  c                 C   s   |   | jjd¡ d S r±   )r®  r>   rñ  rB   r   r   r   ÚtestInterruptedRecvmsgTimeout›  s    z8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrb  c                 C   s   |   | jjtdƒg¡ d S r±   )r®  r>   rb  rÊ  rB   r   r   r   Ú!testInterruptedRecvmsgIntoTimeoutŸ  s    z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rH   rI   rJ   rD   r®  r¯  r±  r²  r´  r  r   rµ  r¶  rZ   r   r   rV   r   r¬  z  s   



r¬  c                       st   e Zd Z‡ fdd„Zdd„ Zdd„ Ze dd¡d	d
„ ƒZe dd¡dd„ ƒZ	e dd¡e
ejdƒdd„ ƒƒZ‡  ZS )ÚInterruptedSendTimeoutTestc                    sp   t ƒ  ¡  |  ¡ | _|  | jj¡ tj| jd}| 	¡  | j
 ¡ \| _}|  | jj¡ | ¡  | j | j¡ d S )N)Útarget)rN   rD   rÇ   rÃ   rX   r   rP   ÚThreadÚ	doConnectÚstartr>   r¨   rÀ   r  rÖ  r8   )rC   Z
cli_threadrÂ   rV   r   r   rD   ¯  s    

z InterruptedSendTimeoutTest.setUpc                 C   s   | j  | j¡ d S r/   )rÃ   r°   rÊ   rB   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¼   rB   r   r   r   ÚtestInterruptedSendTimeoutÍ  s    z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutc                 C   s   |   | jjd| j¡ d S r¡  )r¼  rÃ   r2  rÊ   rB   r   r   r   ÚtestInterruptedSendtoTimeoutÑ  s    ÿz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrô  c                 C   s   |   | jjdg¡ d S r¡  )r¼  rÃ   rô  rB   r   r   r   ÚtestInterruptedSendmsgTimeoutÚ  s    z8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rH   rI   rJ   rD   rº  r¼  r   Zrequires_mac_verr½  r¾  r  r   r¿  rZ   r   r   rV   r   r·  ¦  s   	





r·  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTCPCloserTestc                 C   sh   | j  ¡ \}}| ¡  | j}t |gg g d¡\}}}|  ||g¡ |  | d¡d¡ | ¡  | ¡  d S )Nç      ð?r   ró   )r>   r¨   r   r”   rú  r¶   r³   )rC   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­   rB   r   r   r   Ú
_testCloseï  s    zTCPCloserTest._testCloseN)rH   rI   rJ   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Ä   rO   r“   r   r   r   rO   ö  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ö   r3   r   rä   r   r   r   Ú_check_defaultsù  s    
z#BasicSocketPairTest._check_defaultsc                 C   s   |   | j¡ d S r/   )rÇ  r”   rB   r   r   r   Ú_testDefaults  s    z!BasicSocketPairTest._testDefaultsc                 C   s   |   | j¡ d S r/   )rÇ  r>   rB   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·   rB   r   r   r   r    s    zBasicSocketPairTest._testRecvc                 C   s   | j  t¡ d S r/   ©r>   r¼   r·   rB   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   )rH   rI   rJ   rO   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=   rB   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_socketpairrN   rD   rB   rV   r   r   rD   %  s
    

zPurePythonSocketPairTest.setUpc                    s    t ƒ  ¡  | jd ur| jt_d S r/   )rN   rF   rÑ  r   rÅ   rB   rV   r   r   rF   0  s    

z!PurePythonSocketPairTest.tearDownc                 C   s   | j  d¡}|  |t¡ d S r±   rÊ  r,  r   r   r   Ú	test_recv6  s    z"PurePythonSocketPairTest.test_recvc                 C   s   | j  t¡ d S r/   rË  rB   r   r   r   Ú
_test_recv:  s    z#PurePythonSocketPairTest._test_recvc                 C   s   | j  t¡ d S r/   rÌ  rB   r   r   r   Ú	test_send=  s    z"PurePythonSocketPairTest.test_sendc                 C   s   | j  d¡}|  |t¡ d S r±   rÎ  r,  r   r   r   Ú
_test_send@  s    z#PurePythonSocketPairTest._test_sendc                 C   s$   t  t j¡\}}| ¡  | ¡  d S r/   )r   rÅ   r=   r   ©rC   r”   r6  r   r   r   Ú	test_ipv4D  s    z"PurePythonSocketPairTest.test_ipv4c                 C   s   d S r/   r   rB   r   r   r   Ú
_test_ipv4I  s    z#PurePythonSocketPairTest._test_ipv4r>  ÚIPV6_V6ONLYú IPV6_V6ONLY option not supportedrD  c                 C   s$   t  t j¡\}}| ¡  | ¡  d S r/   )r   rÅ   rí   r   r×  r   r   r   Ú	test_ipv6L  s    z"PurePythonSocketPairTest.test_ipv6c                 C   s   d S r/   r   rB   r   r   r   Ú
_test_ipv6U  s    z#PurePythonSocketPairTest._test_ipv6c                    sÄ   t j j‰d ‰ ‡ ‡fdd„}d  }}zn|t j _|  t¡ t  ¡ \}}W d   ƒ n1 sX0    Y  W ˆt j _ˆ rxˆ  ¡  |r„| ¡  |rÀ| ¡  n.ˆt j _ˆ r¦ˆ  ¡  |r²| ¡  |r¾| ¡  0 d S )Nc              	      sf   ˆ| ƒ}ˆ d u rbt   t jt j¡‰ ˆ  d¡ zˆ  |d d… ¡ W n ttfyV   Y n0 ˆ  d¡ |S )NFr    T)r   r=   r3   rN  r°   ÚBlockingIOErrorÚInterruptedError)rC   r4  ©Zinject_sockZorig_getsocknamer   r   Úinject_getsocketname\  s    

z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)r   r   r)  r   rÅ   r   )rC   rá  Úsock1Úsock2r   rà  r   Ú$test_injected_authentication_failureX  s,    ,
úz=PurePythonSocketPairTest.test_injected_authentication_failurec                 C   s   d S r/   r   rB   r   r   r   Ú%_test_injected_authentication_failurey  s    z>PurePythonSocketPairTest._test_injected_authentication_failure)rH   rI   rJ   rÅ   rD   rF   rÓ  rÔ  rÕ  rÖ  rØ  rÙ  r£   ru  r   r  rs  r   rô  rÜ  rÝ  rä  rå  rZ   r   r   rV   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   )rP   ry   ÚeventrŽ   rO   r“   r   r   r   rO   ƒ  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)rC   rÛ   r8   Ú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>   rN  rï  rÖ  rB   r   r   r   ÚtestSetBlocking˜  s    z#NonBlockingTCPTests.testSetBlockingc                 C   s   d S r/   r   rB   r   r   r   Ú_testSetBlocking¬  s    z$NonBlockingTCPTests._testSetBlockingc                 C   sb   dd l }|j|jkr|  d¡ | j d¡ |  | j ¡ d¡ | j |jd ¡ |  | j ¡ ¡ d S )Nr   zneeds UINT_MAX < ULONG_MAXFrè  r   )	r•  r3  Z	ULONG_MAXrd   r>   rN  r¶   r¨  rŽ  r4  r   r   r   ÚtestSetBlocking_overflow¯  s    
z,NonBlockingTCPTests.testSetBlocking_overflowrM  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=   r3   rM  rï  rB   r   r   r   ÚtestInitNonBlocking¾  s
    

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   s   d S r/   r   rB   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§  )r9   r>   rÖ  r¨   rX   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@   rB   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§  )r9   r>   rÖ  r¨   rX   r   r¶   r¨  )rC   Zdefault_timeoutr©   rÂ   r   r   r   ÚtestInheritFlagsTimeout×  s    
z+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   s   | j  t| jf¡ d S r/   rø  rB   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>   rN  r¬   Ú	monotonicr)  rÞ  r¨   r  rç  ro   rú  r   ÚLONG_TIMEOUTr%  rX   r   rŽ  r¨  )rC   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@   rB   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¨   rX   r   rN  r)  rÞ  r³   ró  r·   rç  ro   rú  r   rý  r%  r¶   )rC   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·   rB   r   r   r   r    s    
zNonBlockingTCPTests._testRecvN)r   )rH   rI   rJ   rO   rï  rð  rñ  r   rt  rò  Z_testSetBlocking_overflowr£   rs  r   r   Úrequires_linux_versionrõ  rö  r÷  rù  rú  rû  rþ  rÿ  r  r  r   r   r   r   ræ    s*   


ÿ	ræ  c                   @   sö   e Zd ZdZdZdZdZdZeZ	dZ
eZd:dd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"d6d7„ Z#d8d9„ Z$dS );ÚFileObjectClassTestCaserv  r   ÚstrictNr
   r%  r   c                 C   s   t j| |d d S r   r  r“   r   r   r   rO   7  s    z FileObjectClassTestCase.__init__c                 C   sR   dd„ t dƒD ƒ\| _| _| _| _t | ¡ | jj| j	| j
| j| j| jd| _d S )Nc                 S   s   g | ]}t  ¡ ‘qS r   )rP   ry   ©r   r;   r   r   r   r  ;  s   z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r1  ©ÚencodingÚerrorsÚnewline)r.  Úevt1Úevt2Úserv_finishedÚcli_finishedr¿   rD   rÀ   r  Ú	read_modere   r  r  r  Ú	read_filerB   r   r   r   rD   :  s    ÿ
üzFileObjectClassTestCase.setUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r/   )r
  ro   r  r   r  Úclosedr¿   rF   rB   r   r   r   rF   D  s
    

z FileObjectClassTestCase.tearDownc                 C   s0   t  | ¡ | jj| j| j| j| j| jd| _	d S )Nr  )
r¿   r†   rÃ   r  Ú
write_modere   r  r  r  Ú
write_filerB   r   r   r   r†   K  s    
üz#FileObjectClassTestCase.clientSetUpc                 C   s6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r/   )r  ro   r  r   r  r  r¿   r‰   rB   r   r   r   r‰   S  s
    

z&FileObjectClassTestCase.clientTearDownc                 C   sx   | j  d¡ | j d¡ |  tj| jjd¡ |  t¡}| j d¡ W d   ƒ n1 sX0    Y  |  dt	|j
ƒ¡ d S )Nr   r  z!cannot read from timed out object)rÀ   rÖ  r  r'  r)  r   r8   r   r  r	  r3  )rC   Úctxr   r   r   ÚtestReadAfterTimeoutZ  s    *z,FileObjectClassTestCase.testReadAfterTimeoutc                 C   s.   | j  | jdd… ¡ | j  ¡  | j ¡  d S )Nr   r  )r  rð  Ú	write_msgÚflushr
  r„   rB   r   r   r   Ú_testReadAfterTimeoutf  s    
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S r}  )r  r'  ró  Úread_msgr¶   )rC   Ú	first_segZ
second_segr¸   r   r   r   ÚtestSmallReadk  s    z%FileObjectClassTestCase.testSmallReadc                 C   s   | j  | j¡ | j  ¡  d S r/   ©r  rð  r  r  rB   r   r   r   Ú_testSmallReadr  s    z&FileObjectClassTestCase._testSmallReadc                 C   s   | j  ¡ }|  || j¡ d S r/   )r  r'  r¶   r  r,  r   r   r   ÚtestFullReadv  s    
z$FileObjectClassTestCase.testFullReadc                 C   s   | j  | j¡ | j  ¡  d S r/   )r  rð  r  r   rB   r   r   r   Ú_testFullRead{  s    z%FileObjectClassTestCase._testFullReadc                 C   s:   t | jƒƒ }| j d¡}|sq(||7 }q|  || j¡ d S rá   )rö   r  r  r'  r¶   )rC   re  Úcharr   r   r   ÚtestUnbufferedRead  s    
z*FileObjectClassTestCase.testUnbufferedReadc                 C   s   | j  | j¡ | j  ¡  d S r/   r  rB   r   r   r   Ú_testUnbufferedRead‰  s    z+FileObjectClassTestCase._testUnbufferedReadc                 C   s   | j  ¡ }|  || j¡ d S r/   )r  Úreadliner¶   r  ©rC   Úliner   r   r   ÚtestReadline  s    
z$FileObjectClassTestCase.testReadlinec                 C   s   | j  | j¡ | j  ¡  d S r/   r  rB   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  rB   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  rB   r   r   r   Ú_testMakefileAfterMakefileClose¨  s    z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C   s   |   | jj ¡ d S r/   )r  r  r  rB   r   r   r   ÚtestClosedAttr¬  s    z&FileObjectClassTestCase.testClosedAttrc                 C   s   |   | jj ¡ d S r/   )r  r  r  rB   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  rB   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  rB   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   rB   r   r   r   ÚtestRealCloseº  s    

z%FileObjectClassTestCase.testRealClosec                 C   s   d S r/   r   rB   r   r   r   Ú_testRealCloseÀ  s    z&FileObjectClassTestCase._testRealClose)r   )%rH   rI   rJ   re   r  r  r  r  r·   r  r  r  rO   rD   rF   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 )Nr1  r2  r  rB   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  rB   r   r   r   Ú_testMakefileCloseæ  s    z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t  | j¡}| j ¡  t  | j¡}|  |d |¡ d S rá   )r‚  r  rÀ   r  r   r¶   )rC   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyê  s    
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   s   d S r/   r   rB   r   r   r   Ú_testMakefileCloseSocketDestroyð  s    zAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroyc                 C   s  | j  d¡ |  | j tdƒ¡d ¡ |  | j t| jƒd ¡d ¡ | j	 
¡  | j d¡ | j t| jƒd ¡}|d u r–t d¡ | j t| jƒd ¡}tdƒ}| j |¡}|  |d¡ ||d |…  }|  || j¡ |  | j tdƒ¡d ¡ |  | j d¡d ¡ d S )NFr§  r  rÁ  g      à?rˆ  r   )rÀ   rN  r¶   r  ÚreadintorÊ  r'  ró  r  r  ro   r	  r„   r¬   r­   )rC   r  re  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	  ro   r
  rB   r   r   r   Ú_testSmallReadNonBlocking
  s
    

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s"   | j  d¡ | jr|  | j¡ d S )Nr;  )r  r„   Úserv_skippedrd   rB   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Ã   rN  r   r  r  rð  rp  r.  )rC   ZBIGZLIMITrè  r;   r   r   r   Ú_testWriteNonBlocking  s    
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rH   rI   rJ   re   r3  r4  r5  r6  r7  r8  r:  r<  r>  r?  r   r   r   r   r0  Ä  s   
		r0  c                   @   s   e Zd ZdZdS )Ú#LineBufferedFileObjectClassTestCaser   N©rH   rI   rJ   re   r   r   r   r   r@  0  s   r@  c                   @   s   e Zd ZdZdS )Ú$SmallBufferedFileObjectClassTestCaser    NrA  r   r   r   r   rB  5  s   rB  c                   @   s&   e Zd ZdZe d¡ZdZeZdZ	dS )Ú"UnicodeReadFileObjectClassTestCaser   r   r%  r.  N©
rH   rI   rJ   r  r·   r'  r  r  r  r  r   r   r   r   rC  :  s
   
rC  c                   @   s&   e Zd ZdZeZdZe d¡ZdZ	dS )Ú#UnicodeWriteFileObjectClassTestCaser
   r$  r   r.  N)
rH   rI   rJ   r  r·   r  r  r'  r  r  r   r   r   r   rE  D  s
   
rE  c                   @   s,   e Zd ZdZe d¡ZdZe d¡ZdZ	dS )Ú'UnicodeReadWriteFileObjectClassTestCaser   r   r$  r.  NrD  r   r   r   r   rF  N  s
   

rF  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Ã   rB   r   r   r   r†   [  s    z!NetworkConnectionTest.clientSetUpN)rH   rI   rJ   r†   r   r   r   r   rG  X  s   rG  c                   @   s   e Zd ZdS )ÚBasicTCPTest2Nr}  r   r   r   r   rI  a  s   rI  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   r8   rJ  r   r   r   r°   h  s    z,NetworkConnectionNoServer.MockSocket.connectN)rH   rI   rJ   r°   r   r   r   r   Ú
MockSocketg  s   rK  c                 c   s,   t j }| jt _ zd V  W |t _ n|t _ 0 d S r/   )r   rK  )rC   Z
old_socketr   r   r   Úmocked_socket_modulek  s
    z.NetworkConnectionNoServer.mocked_socket_modulec                 C   sr   t  ¡ }t tjtj¡}|  |j¡ |  t¡}| 	t
|f¡ W d   ƒ n1 sR0    Y  |  |jjtj¡ d S r/   )r   rÍ  r   r=   r3   rX   r   r)  r   r°   rœ   r¶   r3  rk  ZECONNREFUSED)rC   r@   r”   r5  r   r   r   Útest_connectu  s    ,z&NetworkConnectionNoServer.test_connectc                 C   s\   t  ¡ }|  t¡}t t|f¡ W d   ƒ n1 s60    Y  t  ¡ }|  |j	j
|¡ d S r/   )r   rÍ  r)  r   r   rH  rœ   Zget_socket_conn_refused_errsr  r3  rk  )rC   r@   r5  Zexpected_errnosr   r   r   Útest_create_connection}  s
    ,z0NetworkConnectionNoServer.test_create_connectionc                 C   s”   |   ¡ x zt tdf¡ W nJ tjy0   Y nB tyf } z tjsP|jtj	krR‚ W Y d }~nd }~0 0 |  
d¡ W d   ƒ n1 s†0    Y  d S )Nr   rœ  )rL  r   rH  rœ   r8   r   r   rô  rk  ZEAFNOSUPPORTr%  rž  r   r   r   Útest_create_connection_timeout•  s    
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rH   rI   rJ   r   rK  Ú
contextlibÚcontextmanagerrL  rM  rN  rO  r   r   r   r   rJ  e  s   
	rJ  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   rO   ¦  s    z(NetworkConnectionAttributesTest.__init__c                 C   s   t  ¡ | _d S r/   )r   rÍ  Úsource_portrB   r   r   r   r†   ª  s    z+NetworkConnectionAttributesTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   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   rH  rœ   r@   r   r_  r”   rX   r   r¶   r  rB   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.  )r8   Úsource_addressr   )r   rH  rœ   r@   r   r_  rS  r”   rX   r   r¶   r   rB   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 )NrC  ©r  r   r6   r7   rH  rœ   r@   r”   rX   r   r¶   r¨  rB   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˜  rX  rB   r   r   r   Ú_testTimeoutNoneÔ  s    
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S rZ  )r   rH  rœ   r@   r”   r¶   r¨  rB   r   r   r   Ú_testTimeoutValueNamedà  s    z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t  t| jfd¡| _|  | jj¡ |  | j ¡ d¡ d S )Nr[  )	r   rH  rœ   r@   r”   rX   r   r¶   r¨  rB   r   r   r   Ú_testTimeoutValueNonamedå  s    z8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r   )rH   rI   rJ   rO   r†   r‰   rT  Z
testFamilyrU  ZtestSourceAddressrW  ZtestTimeoutDefaultrY  ZtestTimeoutNoner\  ZtestTimeoutValueNamedr]  ZtestTimeoutValueNonamedr^  r   r   r   r   rR  ¤  s    
	rR  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   rO   í  s    z'NetworkConnectionBehaviourTest.__init__c                 C   s   d S r/   r   rB   r   r   r   r†   ñ  s    z*NetworkConnectionBehaviourTest.clientSetUpc                 C   s   | j  ¡  d | _ t | ¡ d S r/   r•   rB   r   r   r   r‰   ô  s    
z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  ¡ \}}|  |j¡ t d¡ | d¡ d S )Nr  ó   done!)r>   r¨   rX   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   rH  rœ   r@   r”   r³   r¶   )rC   rÛ   r¦  r   r   r   Ú_testInsideTimeout   s    
z1NetworkConnectionBehaviourTest._testInsideTimeoutc                    s4   t jt| jfdd | _‰ |  t j‡ fdd„¡ d S )Nr   r˜  c                      s
   ˆ   d¡S )Nrß  )r³   r   ©rÛ   r   r   rò     ró   zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r   rH  rœ   r@   r”   r)  r8   rB   r   rc  r   Ú_testOutsideTimeout  s    z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)r   )
rH   rI   rJ   rO   r†   r‰   ra  ZtestOutsideTimeoutrb  rd  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ï   rB   r   r   Úraise_timeout  s    z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)©r)  r   r8   ©rC   rf  r   rB   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   r8   r%  r   ©rC   Úokrj  r   r   r   ÚtestTimeoutZero  s    zTCPTimeoutTest.testTimeoutZeror  ztest needs signal.alarm()c              
      s  | j  d¡ G dd„ dtƒ‰ ‡ fdd„}t tj|¡}zÐz zŽzt d¡ | j  ¡ }W n\ tjyr   |  	d¡ Y nJ ˆ y‚   Y n:   |  	dt
 ¡ d d… t ¡ f  ¡ Y n0 |  	d	¡ W t d
¡ nt d
¡ 0 W n ˆ yô   |  	d¡ Y n0 W t tj|¡ nt tj|¡ 0 d S )Nr;  c                   @   s   e Zd ZdS )z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr}  r   r   r   r   ÚAlarm(  s   rm  c                    s   ˆ ‚d S r/   r   )r
  r©  ©rm  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Ö  rY  r
  r  r  r¨   r   r8   r%  r‚  Úexc_infoÚ	tracebackÚ
format_exc)rC   ro  r  rj  r   rn  r   ÚtestInterruptedTimeout!  s*    
þz%TCPTimeoutTest.testInterruptedTimeoutN)
rH   rI   rJ   ri  rl  r£   rs  r   r
  rs  r   r   r   r   re  
  s   ÿre  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ï   rB   r   r   rf  F  s    z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)rg  rh  r   rB   r   ÚtestUDPTimeoutE  s    
ÿzUDPTimeoutTest.testUDPTimeoutc                 C   sz   d}z| j  d¡ | j  d¡}W nF tjy>   |  d¡ Y n* tyR   d}Y n   |  d¡ Y n0 |sv|  d¡ d S )NFrè  r²   z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)ú1recv() returned success when we did not expect it©r>   rÖ  r³   r   r8   r%  r   rj  r   r   r   rl  L  s    zUDPTimeoutTest.testTimeoutZeroN)rH   rI   rJ   rw  rl  r   r   r   r   rt  C  s   rt  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 ru  rv  rï   rB   r   r   rf  _  s    z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)rg  rh  r   rB   r   ÚtestUDPLITETimeout^  s    
ÿz%UDPLITETimeoutTest.testUDPLITETimeoutc                 C   sz   d}z| j  d¡ | j  d¡}W nF tjy>   |  d¡ Y n* tyR   d}Y n   |  d¡ Y n0 |sv|  d¡ d S )NFrè  r²   z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)rx  ry  rj  r   r   r   rl  e  s    z"UDPLITETimeoutTest.testTimeoutZeroN)rH   rI   rJ   r{  rl  r   r   r   r   rz  Z  s   rz  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   rY  r   r*  r+  r8   rB   r   r   r   ÚtestExceptionTreeu  s    z TestExceptions.testExceptionTreec                 C   sv   t   t jt jd¡}t   t jt jd| ¡ ¡}| ¡  |  |j¡ |  t¡ | 	d¡ W d   ƒ n1 sh0    Y  d S )Nr   F)
r   r=   r3   r  r   rX   rQ  r)  r   rN  )rC   Zsock0rÛ   r   r   r   Útest_setblocking_invalidfd{  s    ÿz)TestExceptions.test_setblocking_invalidfdN)rH   rI   rJ   r~  r  r   r   r   r   r|  s  s   r|  rœ  úLinux specific testc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestLinuxAbstractNamespaceél   c              
   C   sÔ   d}t   t jt j¡¬}| |¡ | ¡  t   t jt j¡j}| | ¡ ¡ | ¡ d 0}|  | ¡ |¡ |  | 	¡ |¡ W d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  W d   ƒ n1 sÆ0    Y  d S )Ns    python-test-hello ÿr   )
r   rÞ   r3   rb   rA   r°   r   r¨   r¶   Úgetpeername)rC   r•  Ús1rc  Zs3r   r   r   ÚtestLinuxAbstractNamespace  s    
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec                 C   s`   dd| j d   }t tjtj¡*}| |¡ |  | ¡ |¡ W d   ƒ n1 sR0    Y  d S )Nr£  ó   hr   )ÚUNIX_PATH_MAXr   rÞ   r3   rb   r¶   r   ©rC   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Þ   r3   r)  r   rb   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Þ   r3   rb   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Þ   r3   rb   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Þ   r3   rb   ZassertRegexr   r   )rC   Zabstract_addressr„  rc  r   r   r   ÚtestAutobind²  s    

z'TestLinuxAbstractNamespace.testAutobindN)
rH   rI   rJ   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Þ   r3   rÛ   rB   r   r   r   rD   Ã  s    zTestUnixDomain.setUpc                 C   s   | j  ¡  d S r/   )rÛ   r   rB   r   r   r   rF   Æ  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ø  rd   r  r‚  Úgetfilesystemencoding©rC   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	  rd   r  )rC   rÛ   rÜ   r‹   r   r   r   rb   Ô  s    ÿÿzTestUnixDomain.bindc                 C   s   |   | j ¡ d¡ d S )N)r.  N)r  rÛ   r   rB   r   r   r   rÿ  à  s    zTestUnixDomain.testUnboundc                 C   s@   t j tj¡}|  | j|¡ |  tj|¡ |  	| j 
¡ |¡ d S r/   )rÕ   rÜ   Úabspathr   ÚTESTFNrb   rÛ   rX   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—  rb   rÛ   r•  rX   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•  rb   rÛ   r'  rX   rÚ   r¶   r   )rC   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_UNENCODABLErd   rÕ   rÜ   r–  rb   rÛ   rX   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Û   rb   rB   r   r   r   ÚtestEmptyAddress  s    zTestUnixDomain.testEmptyAddressN)rH   rI   rJ   rD   rF   r•  rb   rÿ  r˜  r™  rœ  r  r£   ru  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   rO     s    zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nry  r   )rz  ró  r·   rÀ   r°  r¶   rÖ  ©rC   re  rÑ  r¸   r   r   r   ÚtestRecvIntoArray  s    zBufferIOTest.testRecvIntoArrayc                 C   s   t tƒ}| j |¡ d S r/   ©r¾  r·   rÃ   r¼   ©rC   re  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   )rz  ró  r·   rÀ   r³  r¶   rÖ  ©rC   re  rÑ  rÂ   r¸   r   r   r   ÚtestRecvFromIntoArray0  s    z"BufferIOTest.testRecvFromIntoArrayc                 C   s   t tƒ}| j |¡ d S r/   r£  r¤  r   r   r   Ú_testRecvFromIntoArray8  s    z#BufferIOTest._testRecvFromIntoArrayc                 C   sH   t dƒ}| j |¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r±   )rÊ  rÀ   r³  r¶   ró  r·   r¨  r   r   r   ÚtestRecvFromIntoBytearray<  s
    z&BufferIOTest.testRecvFromIntoBytearrayc                 C   sL   t dƒ}| j t|ƒ¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S r±   )rÊ  rÀ   r³  rÛ  r¶   ró  r·   r¨  r   r   r   ÚtestRecvFromIntoMemoryviewE  s
    z'BufferIOTest.testRecvFromIntoMemoryviewc                 C   s    t dƒ}|  t| jj|d¡ d S )Nr_   r²   )rÊ  r)  r©  rÀ   r³  r¤  r   r   r   ÚtestRecvFromIntoSmallBufferN  s    z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   s   | j  t¡ d S r/   r  rB   r   r   r   Ú_testRecvFromIntoSmallBufferS  s    z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t ƒ }| j |¡ | j |d¡ d S r›   )rÊ  rÀ   r³  r¤  r   r   r   ÚtestRecvFromIntoEmptyBufferV  s    z(BufferIOTest.testRecvFromIntoEmptyBufferN)r   )rH   rI   rJ   rO   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ÚIsADirectoryErrorr´   r¢  )r   r"  r   r   r   ÚisTipcAvailableb  s    

2rµ  z6TIPC module is not loaded, please 'sudo modprobe tipc'c                   @   s   e Zd Zdd„ ZdS )ÚTIPCTestc                 C   sº   t   t jt j¡}t   t jt j¡}|  |j¡ |  |j¡ | t jt jd¡ t jt	t
tf}| |¡ t jt	t
ttt
 d ƒ df}| t|¡ | d¡\}}|  | ¡ |¡ |  |t¡ d S )Nr   r    r   r²   )r   r²  r8  rX   r   rÓ  r9  r:  ÚTIPC_ADDR_NAMESEQÚ
TIPC_STYPEÚ
TIPC_LOWERÚ
TIPC_UPPERrb   ÚTIPC_ADDR_NAMEro  r2  r·   r«  r¶   r   )rC   r6  r”   ÚsrvaddrZsendaddrr¸   Zrecvaddrr   r   r   ÚtestRDMy  s     ÿ
ÿzTIPCTest.testRDMN)rH   rI   rJ   r½  r   r   r   r   r¶  v  s   r¶  c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTIPCThreadableTestr   c                 C   s   t jj| |d t | ¡ d S r   r¢   r“   r   r   r   rO   ‘  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²  r3   r6  rX   r   rÓ  r9  r:  r·  r¸  r¹  rº  rb   rA   rp   r¨   r©   rª   )rC   r¼  r   r   r   rD   •  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²  r3   r”   rX   r   r»  r¸  r¹  ro  rº  r°   r   Úcliaddr)rC   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»   rB   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Ð  r6  r  r   r)  r   r  rä   r   r   r   Ú_testSocketClass¹  s    
*
&
.z$ContextManagersTest._testSocketClassc                 C   s2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S r±   ©r>   r¨   rX   r   r³   r  ©rC   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   rH  rÐ  r6  r  r¶   r³   r  ©rC   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   rH  r   r  r6  r)  r   r  rÆ  r   r   r   Ú_testCreateConnectionCloseÛ  s
    
&z.ContextManagersTest._testCreateConnectionCloseN)rH   rI   rJ   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=   r3   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Ë  )rC   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)rC   rÛ   rW  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Ï  )rC   rÛ   rW  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Å   rX   r   r¶   rË  )rC   r„  rc  r   r   r   Útest_socketpair  s
    zInheritanceTest.test_socketpair)rH   rI   rJ   r£   rs  r   r   r   r   rÌ  rÍ  rÎ  rÐ  ru  r   rÓ  rÔ  rÕ  r   r   r   r   rÊ  ã  s   ÿ	

rÊ  rM  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   r3   r¨  r  r   rê  rÕ   rë  rÐ  ré  )rC   r    Únonblockr8   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=   r3   rM  rØ  rN  rÖ  r6   r7   )rC   r    Útr   r   r   Útest_SOCK_NONBLOCKB  s:    
ÿ






,

(

,

.

,z'NonblockConstantTest.test_SOCK_NONBLOCKN)Trè  )rH   rI   rJ   rØ  r   r   rÚ  r   r   r   r   rÖ  &  s   
rÖ  r@  rA  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    rc  r  r   r   r   ÚremoteProcessServeri  s    

z%TestSocketSharing.remoteProcessServerc           	      C   s°   t  ¡ }t j| j|fd}| ¡  | j |j¡}| j ¡ }| j 	¡  | 
|¡ d}| 
|¡ t |¡}g }| d¡}|szq†| |¡ qj| 	¡  d |¡}|  ||¡ | ¡  d S )N©r¸  rT   s
   slapmahfrorä  ró   )Úmultiprocessingr|   ÚProcessrß  r»  r>   ÚshareÚpidr   r   rˆ   r   rH  r³   rò  r  r¶   )	rC   rÝ  r&  r¦  rÂ   rÞ  r    ÚmÚreceivedr   r   r   Ú	testSharew  s&    






zTestSocketSharing.testSharec                 C   s@   | j  t ¡ ¡}|  ttj|d d… ¡ |  ttj|d ¡ d S )Nrv  r/  )r>   rã  rÕ   Úgetpidr)  r©  r   rÜ  )rC   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   )rC   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   )rC   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í   r3   r"   r   rã  rÕ   rè  rÜ  rë  r   )rC   ÚfamiliesÚtypesr   rÙ  Úsourcer¦  Zsharedr   r   r   Ú	testTypes·  s    

zTestSocketSharing.testTypesN)
rH   rI   rJ   rÁ  rß  rç  ré  rë  rì  rð  r   r   r   r   rÛ  d  s   
#rÛ  c                   @   sþ   e Zd ZdZdZdZ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    rj   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¨   ÚTIMEOUTrX   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  )rC   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   rH  r  r¶   rú  Útell©rC   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û  ©rC   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   rH  rY  r¶   rú  r  r)  r^  r_  )rC   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   rX   rÚ   r   rH  r  r¶   r  )rC   r•  Úfilenamer  rÛ   r	  r
  r   r   r   Ú_testEmptyFileSend&  s    

,

z(SendfileUsingSendTest._testEmptyFileSendc                 C   s"   |   ¡ }|  |¡}|  |d¡ d S r  )r   r  r¶   r  r   r   r   ÚtestEmptyFileSend2  s    
z'SendfileUsingSendTest.testEmptyFileSendc              	   C   s¢   | j  ¡ }ttjdƒ}t |¡n}|J}|  |¡}||dd}|  || j	d ¡ |  | 
¡ | j	¡ W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  d S )Nr
   éˆ  )Úoffsetr  r  r   r   r   Ú_testOffset9  s    

z!SendfileUsingSendTest._testOffsetc                 C   sB   |   ¡ }|  |¡}|  t|ƒ| jd ¡ |  || jdd … ¡ d S )Nr  r  r  r   r   r   Ú
testOffsetB  s    
z SendfileUsingSendTest.testOffsetc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr
   r˜  éGKL ©rá  ©r>   r   r   r   r—  r   rH  r_  r  r¶   r  ©rC   r•  r  rÛ   rá  r	  r
  r   r   r   Ú
_testCountJ  s    
ÿ
z SendfileUsingSendTest._testCountc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S )Nr  ©r   r  r¶   ró  rû  ©rC   rá  r©   r¦  r   r   r   Ú	testCountV  s
    
zSendfileUsingSendTest.testCountc              	   C   s¨   | j  ¡ }ttjdƒ}tj|tjd}|j |F d}|  |¡}|||d}|  	||¡ |  	| 
¡ |¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr
   r˜  r   r  r  r  r   r   r   Ú_testCountSmall_  s    
ÿ
z%SendfileUsingSendTest._testCountSmallc                 C   s@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S rá   r   r!  r   r   r   ÚtestCountSmallk  s
    
z$SendfileUsingSendTest.testCountSmallc              	   C   s¨   | j  ¡ }ttjdƒ}tj|ddp}|L}d}|  |¡}||d|d}|  ||¡ |  | 	¡ |d ¡ W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  d S )Nr
   r    r˜  é§† é×  )r  rá  )
r>   r   r   r   r—  r   rH  r  r¶   r  r  r   r   r   Ú_testCountWithOffsett  s    

z*SendfileUsingSendTest._testCountWithOffsetc                 C   sD   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd|d … ¡ d S )Nr%  r&  r   r!  r   r   r   ÚtestCountWithOffset~  s
    
z)SendfileUsingSendTest.testCountWithOffsetc              	   C   sš   | j  ¡ }ttjdƒ}t |¡f}|B}| d¡ |  |¡}|  	t
||¡ |  	t
|j|¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Nr
   F)r>   r   r   r   r—  r   rH  rN  r  r)  r©  rY  ©rC   r•  r  rÛ   r	  r   r   r   Ú_testNonBlocking‡  s    


z&SendfileUsingSendTest._testNonBlockingc                 C   s    |   ¡ }| d¡r|  d¡ d S )Nrj   z$was not supposed to receive any data)r   r³   r%  ©rC   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   rH  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   rH  rÖ  r  r)  r8   r)  r   r   r   Ú_testWithTimeoutTriggeredSend©  s    


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendc                 C   s    |   ¡ }| d¡ t d¡ d S )Ni€X r   )r   r³   r¬   r­   r+  r   r   r   ÚtestWithTimeoutTriggeredSend±  s    
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendc                 C   s   d S r/   r   rB   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î  r3   r*  zbinary modezpositive integerr  r  r«   r   rv  )	r   r   r—  r   r"   r  r,  r©  rŠ   )rC   r  r    r	  r   r   r   Útest_errors»  s6    
ÿ@

ÿ@

ÿÿÿÿz!SendfileUsingSendTest.test_errorsN)%rH   rI   rJ   rú  rù  rû  r   r_  rÿ  rÁ  rý  rþ  r   r  r  r  r  r  r  r  r  r  r  r  r"  r#  r$  r'  r(  r*  r,  r-  r.  r/  r0  r1  r2  r   r   r   r   rñ  Ë  sB   

		
			
		
rñ  rY  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)rH   rI   rJ   r  r   r   r   r   r3  Ó  s   r3  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)   rb   r³  r   r£   ZSkipTestr	  )rC   Útypr  rÛ   r‹   r   r   r   Ú
create_algà  s    (zLinuxKernelCryptoAPI.create_algr1  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¾  Úfromhexr6  r¨   r  r¶   r³   r¼   r   ÚMSG_MORE)rC   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(193dbb43c6297b47ea6277ec0ce67119a3f3aa66r7  z
hmac(sha1)rž  )r¾  r;  r6  rÓ  r   ÚSOL_ALGÚALG_SET_KEYr¨   r  r¶   r³   )rC   Ú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>  rD  r²   )r¾  r;  ró  r6  rÓ  r   r@  rA  r¨   Úsendmsg_afalgÚALG_OP_ENCRYPTr<  r  r¶   r³   ÚALG_OP_DECRYPT)rC   rB  rD  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   sL  t  d¡}|d ur,|dkr,|dk r,|  d¡ t d¡}t d¡}t d¡}t d¡}t d	¡}t d
¡}t|ƒ}t|ƒ}	|  dd¡°}
|
 tj	tj
|¡ |
 tj	tjd |¡ |
 ¡ \}}|€ |jtj||	tjd | |tj¡ | |¡ | |	t|ƒ | ¡}|  |||	| … ¡ |  ||| d … ¡ W d   ƒ n1 sF0    Y  |
 ¡ \}}|p || }|j|gtj||	d | |	t|ƒ | ¡}|  |||	| … ¡ |  ||| d … ¡ W d   ƒ n1 sØ0    Y  t d¡j}|
 ¡ \}}|ž || }| |gtj	tj|tjƒgtj	tj|t|ƒƒ| gtj	tj||	ƒgf¡ | t|ƒ| ¡}|  |||	| … ¡ |  ||| d … ¡ W d   ƒ n1 s¤0    Y  |
 ¡ \}}|X || | }|j|gtj||	d | t|ƒ| ¡}|  |||	d … ¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s>0    Y  d S )NZLinux)ró  rˆ  )ró  r·  zupstream Linux kernel issueZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r>  rD  Úassoclenrï  )r>  rD  rJ  r   )r   Z_get_kernel_versionrd   r¾  r;  ró  r6  rÓ  r   r@  rA  ÚALG_SET_AEAD_AUTHSIZEr¨   rE  rF  r<  r  r³   r¶   r   ÚStructrŸ  rô  Ú
ALG_SET_OPÚ
ALG_SET_IVÚALG_SET_AEAD_ASSOCLENrG  )rC   Zkernel_versionrB  rD  ZplainZassocZexpected_ctZexpected_tagZtaglenrJ  r=  r>  rv   Úresr¸   Zpack_uint32r   r   r   Útest_aead_aes_gcm7  st    







ÿ
ÿ
6ÿ6þþ6ÿz&LinuxKernelCryptoAPI.test_aead_aes_gcmc              	   C   s–   |   dd¡v}t d¡}| tjtj|¡ | ¡ \}}|* | d¡}|  	t
|ƒd¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )NÚrngZdrbg_pr_sha256r‡  )r6  rÕ   ÚurandomrÓ  r   r@  rA  r¨   r³   r¶   ró  )rC   r=  Z
extra_seedr>  rv   Zrnr   r   r   Útest_drbg_pr_sha256|  s    

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c              	   C   sP  t   t jt jd¡}|" |  t¡ | ¡  W d   ƒ n1 sB0    Y  |  t¡ |jd d W d   ƒ n1 sx0    Y  |  t¡ | d¡ W d   ƒ n1 s¬0    Y  |  t¡  |jt jd d W d   ƒ n1 sæ0    Y  |  t¡  |jt jdd W d   ƒ n1 s"0    Y  W d   ƒ n1 sB0    Y  d S )Nr   )r>  r   )r>  rJ  rv  )r   r+   r)   r)  rŠ   rE  rF  rä   r   r   r   Útest_sendmsg_afalg_args‡  s    &*(.z,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc                 C   sö   t   t jt jd¡}|  |j¡ |  t¡ | d¡ W d   ƒ n1 sH0    Y  |  t	d¡ | d¡ W d   ƒ n1 s~0    Y  |  t¡ | d¡ W d   ƒ n1 s²0    Y  |  t	d¡ | d¡ W d   ƒ n1 sè0    Y  d S )Nr   )Ztttttttttttttr  ztype too long)Zttttttttttttttr  )rö   Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)rö   Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r+   r)   rX   r   r)  r³  rb   r,  r©  rä   r   r   r   Útest_length_restriction™  s    (((z,LinuxKernelCryptoAPI.test_length_restrictionN)rH   rI   rJ   r6  r   r   r?  rC  rI  rQ  rT  rU  rV  r   r   r   r   r4  Ý  s   



(

D


r4  Úwinzrequires Windowsc                   @   s   e Zd Zh d£Zdd„ ZdS )ÚTestMSWindowsTCPFlags>   ÚTCP_KEEPINTVLÚTCP_NODELAYÚ
TCP_MAXSEGÚTCP_FASTOPENÚTCP_KEEPIDLEÚTCP_KEEPCNTc                    s6   dd„ t tƒD ƒ}‡ fdd„|D ƒ}ˆ  g |d¡ d S )Nc                 S   s   g | ]}|  d ¡r|‘qS )ZTCP)r¢  ©r   r    r   r   r   r  »  ró   z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>c                    s   g | ]}|ˆ j vr|‘qS r   )ÚknownTCPFlagsr_  rB   r   r   r  ¼  ró   zANew TCP flags were discovered. See bpo-32394 for more information)r×   r   r¶   )rC   ZprovidedÚunknownr   rB   r   Útest_new_tcp_flagsº  s
    ÿz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rH   rI   rJ   r`  rb  r   r   r   r   rX  «  s   rX  c                   @   s‚   e Zd Zdd„ Zdd„ Zdd„ Ze ee	dƒ p:ee	dƒ d	¡e 
ejd
¡dd„ ƒƒZe e ¡  d¡e 
ejd
¡dd„ ƒƒZdS )ÚCreateServerTestc                 C   sÄ   t  ¡ }t d|f¡8}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 sT0    Y  t jrÀtjd|ftjd8}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 s¶0    Y  d S )Nr  r   r   r·  rí  )r   rÍ  r   Úcreate_serverr¶   r   rô  rí   ©rC   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   rd  r¶   r  r=   rö   r3   r   rô  rí   )rC   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©  rd  rÏ  r9  ri  r¶   r   )rC   rÛ   rY  r   r   r   Útest_reuse_portØ  s    
.*z CreateServerTest.test_reuse_portr>  rÚ  rÛ  rD  c                 C   s4   t jdt jd}W d   ƒ n1 s&0    Y  d S )Nrg  rí  )r   rd  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 )Nrg  T©r  Údualstack_ipv6)r   rd  rí   r¶   r  rä   r   r   r   Útest_dualstack_ipv6_familyì  s
    
ÿz+CreateServerTest.test_dualstack_ipv6_familyN)rH   rI   rJ   rf  rh  rk  r£   ru  r   r  rs  r   rô  rl  r   Úhas_dualstack_ipv6rp  r   r   r   r   rc  Â  s   	
þÿrc  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„   r8   r³   r  )rÛ   r©   rv   r¸   ©rç  rC   r   r   Úrunù  s    
z3CreateServerFunctionalTest.echo_server.<locals>.runrà  )	rP   ry   rÖ  r8   r¹  r»  rX   r  ro   )rC   rÛ   rt  r   r   rs  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Ö  r8   r°   r  r¶   r³   )rC   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   rd  ru  rv  r=   re  r   r   r   Ú	test_tcp4  s    
z$CreateServerFunctionalTest.test_tcp4rD  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   rd  rí   ru  rv  re  r   r   r   Ú	test_tcp6  s    
ÿ
z$CreateServerFunctionalTest.test_tcp6rm  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.  Trn  r  )r   rÍ  r   rd  rí   ru  rv  r=   re  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.  Trn  r·  rx  re  r   r   r   Útest_dual_stack_client_v6+  s    ÿ
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rH   rI   rJ   r   r_  r8   ru  rv  rw  r£   rs  r   rô  ry  ru  r   rq  rz  r{  r   r   r   r   rr  õ  s    
	ÿÿrr  Ú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ó  rW  r   r   r   Ú	close_fds?  s    z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   s   g | ]}t  ¡ ‘qS r   )rÕ   Úpipe)r   rv   r   r   r   r  D  ró   z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r§  c                 S   s   g | ]\}}|‘qS r   r   )r   ÚrfdÚwfdr   r   r   r  F  ró   r    r   rä  )r.  rX   r   rÅ   rÞ   r3   r|  r·   r}  ró  r¶   rõ  rÕ   rð  r	  rñ  r'  )rC   r‚  rƒ  r€  ró  râ  rã  r¸   Zfds2rï  rÂ   rs  r…  r†  r¦  r   r   r   ÚtestSendAndRecvFds9  s&    &Hz#SendRecvFdsTests.testSendAndRecvFdsN)rH   rI   rJ   r‡  r   r   r   r   r~  5  s   r~  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S r/   )r   Zthreading_setupr£   ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModule_  s    r‰  Ú__main__)Ör£   Útestr   Ztest.supportr   rk  r  rà  r   rú  rÒ   r¬   rq  rq   r‚  rÕ   r¡  rz  rP  Úweakrefr   r
  r  r/  r   rõ  re  r÷  Ú_threadr   rP   rá  rÄ  r   rœ   rñ  r·   r¯   r§   Úsystemr   r  r   r!   r$   r&   r*   r,   r.   r1   r5   rQ  r9   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<   rK   rL   rM   r[   ri   rk   rŽ   r—   rs  r˜   r™   rš   ru  r¡   r¿   rÄ   rÆ   rË   rÍ   rÐ   rÑ   rÝ   rà   rå   ræ   rç   rè   rê   rì   rî   rþ   r  r  r  rv  r¢  rÂ  rÉ  rã  rè  rý  r  r  r  r9  rD  rE  ra  rf  ri  rk  rm  rn  ro  r“  r¦  r©  rÇ  rÌ  rÏ  rà  rî  rC  r|  r~  r  r€  r  rô  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r  rŽ  r  r  r‘  r’  r“  r”  r•  r–  r—  r˜  r  rž  rŸ  r   r¡  r¢  r£  r¤  r¬  r·  rÀ  rÆ  rÐ  ræ  r  r0  r@  rB  rC  rE  rF  rƒ  rG  rI  rJ  rR  r_  re  rt  rz  r|  r  r‘  rŸ  r¸  r¹  rº  rµ  r¶  r¾  rÀ  rÊ  rÖ  r  rÛ  rñ  r3  r4  r¢  rX  rc  rr  r~  r‰  rH   Úmainr   r   r   r   Ú<module>   sX  










	

3qÿÿÿ$!$ÿÿ$	
        p
S
Z
*
=

>ÿÿ.ÿ%{ÿ7ww= #P;  k   7þ


þ	



ÿ
þÿþÿ
ÿ
ÿ
ÿþ	
ÿ
ÿ
ÿ
ÿÿ
ÿþÿ

ÿ
ÿþ





ÿ



ÿ
ÿ

ÿ
ÿÿ
 ÿ)ÿþ7#j ! $l


	?G9ÿ7JSÿÿ',Cÿ<e  
ÿ N3@

'