o
    HXîhŠí ã                   @   s  d dl Z d dlmZ d dlm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w zd dl#Z#W n e"y¡   dZ#Y nw ej$Z$d %d	¡Z&d
Z'dZ(e )¡ dkZ*zd dl+Z+W n e"yÅ   dZ+Y nw dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd„ Z1dd„ Z2dd„ Z3dd„ Z4ej5dd „ ƒZ6e-ƒ Z7e.ƒ Z8e/ƒ Z9e0ƒ Z:e1ƒ Z;e2ƒ Z<e3ƒ Z=e>e
d!ƒZ?e4ƒ Z@e d"¡jAZBG d#d$„ d$e jCƒZDG d%d&„ d&e jCƒZEG d'd(„ d(eEƒZFG d)d*„ d*ƒZGG d+d,„ d,e jCƒZHG d-d.„ d.e jCƒZIG d/d0„ d0ƒZJG d1d2„ d2eDeJƒZKG d3d4„ d4eEeJƒZLe  Me?d5¡G d6d7„ d7eFeJƒƒZNG d8d9„ d9eHeJƒZOG d:d;„ d;eIeJƒZPe  Qe#du d<¡e  Me=d=¡e  Me,ƒ d>kd?¡G d@dA„ dAe jCeJƒƒƒƒZRG dBdC„ dCeKƒZSG dDdE„ dEe jCeJƒZTG dFdG„ dGe jCƒZUG dHdI„ dIeUƒZVG dJdK„ dKeGeUeJƒZWG dLdM„ dMeVeWƒZXG dNdO„ dOeUƒZYG dPdQ„ dQeYƒZZG dRdS„ dSeUƒZ[G dTdU„ dUe[ƒZ\G dVdW„ dWe[ƒZ]G dXdY„ dYe[ƒZ^G dZd[„ d[e[ƒZ_G d\d]„ d]e[ƒZ`G d^d_„ d_e`ƒZaG d`da„ dae`ƒZbdbdc„ Zcddde„ Zddfdg„ ZeG dhdi„ die jCƒZfe  Me7dj¡G dkdl„ dle jCƒƒZge  Me7dj¡G dmdn„ dneOƒƒZhe  Me8do¡G dpdq„ dqe jCƒƒZie  Me9dr¡G dsdt„ dte jCƒƒZje  Me:du¡G dvdw„ dwe jCƒƒZke  Me:du¡G dxdy„ dyePƒƒZle  Me<dz¡G d{d|„ d|e jCƒƒZme  Qe#du d<¡e  Me=d=¡G d}d~„ d~e jCƒƒƒZne  Me@d¡G d€d„ de jCƒƒZoG d‚dƒ„ dƒeSƒZpG d„d…„ d…eLƒZqe  Me?d5¡G d†d‡„ d‡eNƒƒZrG dˆd‰„ d‰eGƒZsG dŠd‹„ d‹esƒZtG dŒd„ desƒZuG dŽd„ desƒZvG dd‘„ d‘esƒZwG d’d“„ d“esƒZxG d”d•„ d•esƒZyG d–d—„ d—eyƒZzG d˜d™„ d™ezƒZ{G dšd›„ d›ezƒZ|G dœd„ desƒZ}G dždŸ„ dŸe}ƒZ~G d d¡„ d¡e}ƒZG d¢d£„ d£ete}ƒZ€G d¤d¥„ d¥e jCƒZG d¦d§„ d§eyƒZ‚G d¨d©„ d©eyƒZƒG dªd«„ d«eueweWe]ƒZ„ede
j
d¬ƒG d­d®„ d®e|e„ƒƒZ…ede
j
d¯ƒG d°d±„ d±ee„ƒƒZ†ede
j
d²ƒG d³d´„ d´e€e„ƒƒZ‡G dµd¶„ d¶eueweWeaƒZˆede
j
d¬ƒe  Mej‰d·¡eed¸d¹ƒG dºd»„ d»e|eˆƒƒƒƒZŠede
j
d¯ƒe  Mej‰d·¡eed¸d¹ƒG d¼d½„ d½eeˆƒƒƒƒZ‹ede
j
d²ƒe  Mej‰d·¡eed¸d¹ƒG d¾d¿„ d¿e€eˆƒƒƒƒZŒede
j
d¯ƒe  Mej‰d·¡ede
dÀƒeed¸d¹ƒG dÁdÂ„ dÂeƒeˆƒƒƒƒƒZede
j
d²ƒe  Mej‰d·¡ede
dÀƒeed¸d¹ƒG dÃdÄ„ dÄeteƒeˆƒƒƒƒƒZŽe  Me?d5¡G dÅdÆ„ dÆeueweWe^ƒƒZe  Me?d5¡ede
j
d¬ƒG dÇdÈ„ dÈe|eƒƒƒZe  Me?d5¡ede
j
d¯ƒG dÉdÊ„ dÊeeƒƒƒZ‘e  Me?d5¡ede
j
d²ƒG dËdÌ„ dÌe€eƒƒƒZ’e  Me?d5¡G dÍdÎ„ dÎeueweWebƒƒZ“ede
j
d¬ƒe  Mej‰d·¡e  Me?d5¡eed¸d¹ƒG dÏdÐ„ dÐe|e“ƒƒƒƒƒZ”ede
j
d¯ƒe  Mej‰d·¡e  Me?d5¡eed¸d¹ƒG dÑdÒ„ dÒee“ƒƒƒƒƒZ•ede
j
d²ƒe  Mej‰d·¡e  Me?d5¡eed¸d¹ƒG dÓdÔ„ dÔe€e“ƒƒƒƒƒZ–ede
j
d¯ƒe  Mej‰d·¡e  Me?d5¡ede
dÀƒeed¸d¹ƒG dÕdÖ„ dÖeƒe“ƒƒƒƒƒƒZ—ede
j
d²ƒe  Mej‰d·¡e  Me?d5¡ede
dÀƒeed¸d¹ƒG d×dØ„ dØeteƒe“ƒƒƒƒƒƒZ˜G dÙdÚ„ dÚexeXe\ƒZ™ede
j
d¬ƒG dÛdÜ„ dÜe{e™ƒƒZšede
j
d¯ƒG dÝdÞ„ dÞee~e™ƒƒZ›ede
j
d²ƒG dßdà„ dàe€e~e™ƒƒZœG dádâ„ dâevexeXe_ƒZede
j
d¬ƒe  Qe*dã¡eedädådæƒG dçdè„ dèe{eƒƒƒƒZžede
j
d¯ƒe  Qe*dã¡eedädådæƒG dédê„ dêee~eƒƒƒƒZŸede
j
d²ƒe  Qe*dã¡eedädådæƒG dëdì„ dìe€e~eƒƒƒƒZ G dídî„ dîexeXeZƒZ¡ede
j
d¬ƒede
dïƒG dðdñ„ dñe{e¡ƒƒƒZ¢ede
j
d¯ƒede
dïƒG dòdó„ dóee~e¡ƒƒƒZ£ede
j
d²ƒede
dïƒG dôdõ„ dõe€e~e¡ƒƒƒZ¤ede
j
d¬d¯ƒede
dïdöd÷ƒG dødù„ dùe‚e¡ƒƒƒZ¥ede
j
d¬d²ƒede
dïdöd÷ƒG dúdû„ dûete‚e¡ƒƒƒZ¦G düdý„ dýƒZ§ededþƒe  Me>edÿƒp~e>ed ƒd¡G dd„ de§e]ƒƒƒZ¨ededþƒe  Me>edÿƒp e>ed ƒd¡G dd„ de§eGeVe\ƒƒƒZ©G dd„ deKƒZªG dd	„ d	eTƒZ«G d
d„ deTƒZ¬G dd„ deKƒZ­G dd„ deSƒ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¶epƒZ·G d d!„ d!e jCƒZ¸G d"d#„ d#eDeJƒZ¹G d$d%„ d%eDeJƒZºG d&d'„ d'eDƒZ»G d(d)„ d)eEƒZ¼e  Me?d5¡G d*d+„ d+eFƒƒZ½G d,d-„ d-e jCƒZ¾e  Mejd.kd/¡G d0d1„ d1e jCƒƒZ¿e  Me>e
dïƒd2¡G d3d4„ d4e jCƒƒZÀG d5d6„ d6eSƒZÁd7ZÂd8ZÃd9ZÄd:d;„ ZÅe  MeÅƒ d<¡G d=d>„ d>e jCƒƒZÆe  MeÅƒ d<¡G d?d@„ d@e jCeJƒƒZÇG dAdB„ dBeKƒZÈG dCdD„ dDe jCƒZÉe  Me>e
dEƒdF¡G dGdH„ dHe jCƒƒZÊe  MejËdIkdJ¡e  Me!dK¡G dLdM„ dMeDƒƒƒZÌG dNdO„ dOeKƒZÍe  Me>edPƒdQ¡G dRdS„ dSeÍƒƒZÎe  Me;dT¡G dUdV„ dVe jCƒƒZÏe  MejdWkdX¡G dYdZ„ dZe jCƒƒZÐe  Mej Ñd[¡d\¡G d]d^„ d^e jCƒƒZÒG d_d`„ d`e jCƒZÓG dadb„ dbe jCƒZÔede
dcƒede
ddƒede
dïƒG dedf„ dfe jCƒƒƒƒZÕdgdh„ ZÖe×dikrÿe  Ø¡  dS dS (j  é    N)Úsupport)Ú	os_helper)Úsocket_helper)Úthreading_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 s&w   Y  W n
 ty6   Y d S w t d|¡d S )NÚIOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsockÚrbz    ÚIr   )	ÚfcntlÚhasattrÚsocketÚopenÚioctlr   ÚOSErrorÚstructÚunpack)ÚfÚr© r   ú:/opt/python-3.10.19/usr/lib/python3.10/test/test_socket.pyÚget_cid5   s   
ÿ€ÿr   c               	   C   ó@   	 zt   t jt jt j¡} W n ttfy   Y dS w |  ¡  dS ©NFT)r   ÚPF_CANÚSOCK_RAWÚCAN_RAWÚAttributeErrorr   Úclose©Úsr   r   r   Ú_have_socket_canB   ó   ÿr$   c               	   C   r   r   )r   r   Ú
SOCK_DGRAMÚ	CAN_ISOTPr    r   r!   r"   r   r   r   Ú_have_socket_can_isotpL   r%   r(   c               	   C   r   r   )r   r   r&   Ú	CAN_J1939r    r   r!   r"   r   r   r   Ú_have_socket_can_j1939V   r%   r*   c               	   C   ó>   	 zt   t jt jd¡} W n ttfy   Y dS w |  ¡  dS ©Nr   FT)r   ÚPF_RDSÚSOCK_SEQPACKETr    r   r!   r"   r   r   r   Ú_have_socket_rds`   ó   ÿr/   c               	   C   r+   r,   )r   ÚAF_ALGr.   r    r   r!   r"   r   r   r   Ú_have_socket_algj   r0   r2   c               	   C   r+   r,   )r   Ú
AF_QIPCRTRr&   r    r   r!   r"   r   r   r   Ú_have_socket_qipcrtrt   r0   r4   c                  C   s   	 t ƒ } | d uS ©N)r   )Úcidr   r   r   Ú_have_socket_vsock~   s   r7   c               	   C   r   r   )r   ÚAF_BLUETOOTHÚSOCK_STREAMÚBTPROTO_RFCOMMr    r   r!   r"   r   r   r   Ú_have_socket_bluetooth„   s   ÿr;   c              	   c   s8    t  ¡ }zt  | ¡ d V  W t  |¡ d S t  |¡ w r5   )r   ÚgetdefaulttimeoutÚsetdefaulttimeout)ÚtimeoutZold_timeoutr   r   r   Úsocket_setdefaulttimeout‘   s   €
r?   ÚIPPROTO_UDPLITEÚic                   @   ó   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 r5   )r   ÚAF_INETr9   Úservr   Ú	bind_portÚportÚlisten©Úselfr   r   r   ÚsetUp²   s   zSocketTCPTest.setUpc                 C   ó   | j  ¡  d | _ d S r5   ©rE   r!   rI   r   r   r   ÚtearDown·   ó   

zSocketTCPTest.tearDownN©Ú__name__Ú
__module__Ú__qualname__rK   rN   r   r   r   r   rC   °   s    rC   c                   @   rB   )ÚSocketUDPTestc                 C   s$   t   t jt j¡| _t | j¡| _d S r5   )r   rD   r&   rE   r   rF   rG   rI   r   r   r   rK   ½   ó   zSocketUDPTest.setUpc                 C   rL   r5   rM   rI   r   r   r   rN   Á   rO   zSocketUDPTest.tearDownNrP   r   r   r   r   rT   »   s    rT   c                   @   ó   e Zd Zdd„ ZdS )ÚSocketUDPLITETestc                 C   s(   t   t jt jt j¡| _t | j¡| _d S r5   )r   rD   r&   r@   rE   r   rF   rG   rI   r   r   r   rK   Ç   s   zSocketUDPLITETest.setUpN)rQ   rR   rS   rK   r   r   r   r   rW   Å   ó    rW   c                       s6   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 r5   )ÚsuperÚ__init__Ú	threadingÚRLockÚ_cleanup_lock©rJ   ÚargsÚkwargs©Ú	__class__r   r   r[   Ò   ó   z"ThreadSafeCleanupTestCase.__init__c                    ó<   | j  tƒ j|i |¤ŽW  d   ƒ S 1 sw   Y  d S r5   )r^   rZ   Ú
addCleanupr_   rb   r   r   rf   Ö   ó   $ÿz$ThreadSafeCleanupTestCase.addCleanupc                    re   r5   )r^   rZ   Ú
doCleanupsr_   rb   r   r   rh   Ú   rg   z$ThreadSafeCleanupTestCase.doCleanups)rQ   rR   rS   r[   rf   rh   Ú__classcell__r   r   rb   r   rY   Ë   s
    rY   c                   @   sJ   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 d S  t	y/   |  
d| j ¡ Y d S w ©Nú%network interface `%s` does not exist)r   r   r   r   r#   rf   r!   ÚbindÚ	interfacer   ÚskipTestrI   r   r   r   rK     s   ÿÿzSocketCANTest.setUpN)rQ   rR   rS   rr   ÚbufsizeÚcan_frame_fmtr   ÚcalcsizeZcan_frame_sizeÚbcm_cmd_msg_fmtrK   r   r   r   r   rj   Þ   s    
rj   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 d S  t	y*   |  
d¡ Y d S w )Nr   zunable to bind RDS socket)r   r-   r.   rE   rf   r!   r   rF   rG   r   rs   rI   r   r   r   rK     s   ÿzSocketRDSTest.setUpN)rQ   rR   rS   rt   rK   r   r   r   r   rx     s    rx   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 r5   )rK   Ú_ThreadableTest__setUpÚ_setUprI   r   r   r   r[   G  s   zThreadableTest.__init__c                 C   s   	 | j  ¡  d S r5   )Úserver_readyÚsetrI   r   r   r   ÚserverExplicitReadyL  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¡ˆ _zzˆ  ¡  W n   dˆ _‚ W ˆ j ¡  nˆ j ¡  w ˆ j	 ¡  ˆ  ˆ j
j¡ d S )Nr   Fc                      s   ˆ j  ¡ r
ˆ j  ¡ ‚d S r5   )ÚqueueÚqsizeÚgetr   rI   r   r   Úraise_queued_exception^  s   

ÿz5ThreadableTest._setUp.<locals>.raise_queued_exceptionÚ.Ú_T)r   Zwait_threads_exitZwait_threadsÚ	__enter__rf   Ú__exit__r\   ÚEventr}   Úclient_readyÚdoner€   ÚQueueÚserver_crashedÚidÚrfindÚgetattrÚthreadÚstart_new_threadÚ	clientRunZclient_threadr{   r~   Úwait)rJ   rƒ   Z
methodnamerA   Ztest_methodr   rI   r   r|   S  s4   






ÿý
zThreadableTest._setUpc              
   C   s  | j  ¡  z1z|  ¡  W n# ty/ } z| j |¡ |  ¡  W Y d }~W | j ¡  d S d }~ww W | j ¡  n| j ¡  w | j	rF|  ¡  d S t
|dƒsOtdƒ‚z,z|ƒ  W n tym } z| j |¡ W Y d }~nd }~ww W |  ¡  d S W |  ¡  d S |  ¡  w )NÚ__call__z%test_func must be a callable function)r}   r“   ÚclientSetUpÚBaseExceptionr€   ÚputÚclientTearDownr‰   r~   rŒ   r   Ú	TypeError)rJ   Z	test_funcÚer   r   r   r’   u  s6   
€ûÿ

€ÿÿþzThreadableTest.clientRunc                 C   ó   t dƒ‚)Nz clientSetUp must be implemented.)ÚNotImplementedErrorrI   r   r   r   r•   ‹  ó   zThreadableTest.clientSetUpc                 C   s   | j  ¡  t ¡  d S r5   )rŠ   r~   r   ÚexitrI   r   r   r   r˜   Ž  ó   
zThreadableTest.clientTearDownN)	rQ   rR   rS   r[   r   r|   r’   r•   r˜   r   r   r   r   rz   !  s    %"rz   c                   @   ó&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚThreadedTCPSocketTestÚrunTestc                 C   ó   t j| |d t | ¡ d S ©N)Ú
methodName©rC   r[   rz   ©rJ   r¥   r   r   r   r[   ”  ó   zThreadedTCPSocketTest.__init__c                 C   ó   t   t jt j¡| _d S r5   )r   rD   r9   ÚclirI   r   r   r   r•   ˜  ó   z!ThreadedTCPSocketTest.clientSetUpc                 C   ó   | j  ¡  d | _ t | ¡ d S r5   ©rª   r!   rz   r˜   rI   r   r   r   r˜   ›  ó   
z$ThreadedTCPSocketTest.clientTearDownN©r¢   ©rQ   rR   rS   r[   r•   r˜   r   r   r   r   r¡   ’  ó    
r¡   c                   @   r    )
ÚThreadedUDPSocketTestr¢   c                 C   r£   r¤   )rT   r[   rz   r§   r   r   r   r[   ¢  r¨   zThreadedUDPSocketTest.__init__c                 C   r©   r5   )r   rD   r&   rª   rI   r   r   r   r•   ¦  r«   z!ThreadedUDPSocketTest.clientSetUpc                 C   r¬   r5   r­   rI   r   r   r   r˜   ©  r®   z$ThreadedUDPSocketTest.clientTearDownNr¯   r°   r   r   r   r   r²      r±   r²   z'UDPLITE sockets required for this test.c                   @   r    )
ÚThreadedUDPLITESocketTestr¢   c                 C   r£   r¤   )rW   r[   rz   r§   r   r   r   r[   ²  r¨   z"ThreadedUDPLITESocketTest.__init__c                 C   s   t   t jt jt j¡| _d S r5   )r   rD   r&   r@   rª   rI   r   r   r   r•   ¶  ó   z%ThreadedUDPLITESocketTest.clientSetUpc                 C   r¬   r5   r­   rI   r   r   r   r˜   ¹  r®   z(ThreadedUDPLITESocketTest.clientTearDownNr¯   r°   r   r   r   r   r³   ®  s    
r³   c                   @   r    )
ÚThreadedCANSocketTestr¢   c                 C   r£   r¤   )rj   r[   rz   r§   r   r   r   r[   À  r¨   zThreadedCANSocketTest.__init__c                 C   sB   t   t jt jt j¡| _z| j | jf¡ W d S  ty    Y d S w r5   )r   r   r   r   rª   rq   rr   r   rI   r   r   r   r•   Ä  s   ýz!ThreadedCANSocketTest.clientSetUpc                 C   r¬   r5   r­   rI   r   r   r   r˜   Í  r®   z$ThreadedCANSocketTest.clientTearDownNr¯   r°   r   r   r   r   rµ   ¾  s    
	rµ   c                   @   r    )
ÚThreadedRDSSocketTestr¢   c                 C   r£   r¤   )rx   r[   rz   r§   r   r   r   r[   Ô  r¨   zThreadedRDSSocketTest.__init__c                 C   sL   t   t jt jd¡| _z| j tdf¡ | j ¡ | _W d S  ty%   Y d S w ©Nr   )	r   r-   r.   rª   rq   ÚHOSTÚgetsocknameÚcli_addrr   rI   r   r   r   r•   Ø  s   ýz!ThreadedRDSSocketTest.clientSetUpc                 C   r¬   r5   r­   rI   r   r   r   r˜   ã  r®   z$ThreadedRDSSocketTest.clientTearDownNr¯   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                   @   ó6   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   ó   t jj| |d t | ¡ d S r¤   ©ÚunittestÚTestCaser[   rz   r§   r   r   r   r[   ï  ó   z&ThreadedVSOCKSocketStreamTest.__init__c                 C   sh   t   t jt j¡| _|  | jj¡ | j t jtf¡ | j 	¡  |  
¡  | j ¡ \| _| _|  | jj¡ d S r5   )r   ÚAF_VSOCKr9   rE   rf   r!   rq   ÚVMADDR_CID_ANYÚ	VSOCKPORTrH   r   ÚacceptÚconnÚconnaddrrI   r   r   r   rK   ó  s   
z#ThreadedVSOCKSocketStreamTest.setUpc                 C   sX   t  d¡ t tjtj¡| _|  | jj¡ tƒ }|tj	tj
fv r"t}| j |tf¡ d S )Nçš™™™™™¹?)ÚtimeÚsleepr   rÄ   r9   rª   rf   r!   r   ÚVMADDR_CID_HOSTrÅ   ÚVMADDR_CID_LOCALÚconnectrÆ   )rJ   r6   r   r   r   r•   ü  s   
z)ThreadedVSOCKSocketStreamTest.clientSetUpc              
   C   sT   z| j  d¡}W n ty! } z|  t|ƒ¡ W Y d }~nd }~ww |  |t¡ d S ©Né   )rÈ   ÚrecvÚPermissionErrorrs   ÚreprÚassertEqualÚMSG)rJ   ÚmsgÚexcr   r   r   Ú
testStream  s   €ÿz(ThreadedVSOCKSocketStreamTest.testStreamc                 C   ó   | j  t¡ | j  ¡  d S r5   ©rª   ÚsendrÖ   r!   rI   r   r   r   Ú_testStream  ó   z)ThreadedVSOCKSocketStreamTest._testStreamNr¯   ©rQ   rR   rS   r[   rK   r•   rÙ   rÝ   r   r   r   r   r¾   è  s    
	
r¾   c                   @   s8   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   ó   t j| |d d S r¤   )r¡   r[   r§   r   r   r   r[     ó   zSocketConnectedTest.__init__c                 C   s*   t  | ¡ |  ¡  | j ¡ \}}|| _d S r5   )r¡   rK   r   rE   rÇ   Úcli_conn©rJ   rÈ   Úaddrr   r   r   rK     ó   

zSocketConnectedTest.setUpc                 C   r¬   r5   )rã   r!   r¡   rN   rI   r   r   r   rN   #  r®   zSocketConnectedTest.tearDownc                 C   s(   t  | ¡ | j t| jf¡ | j| _d S r5   )r¡   r•   rª   rÏ   r¸   rG   Ú	serv_connrI   r   r   r   r•   (  s   
zSocketConnectedTest.clientSetUpc                 C   r¬   r5   )rç   r!   r¡   r˜   rI   r   r   r   r˜   -  r®   z"SocketConnectedTest.clientTearDownNr¯   )rQ   rR   rS   r[   rK   rN   r•   r˜   r   r   r   r   rà     s    
rà   c                   @   s>   e Zd Zddd„Zdd„ Zdd„ Zd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Â   r[   rz   rª   rE   r§   r   r   r   r[   4  s   

zSocketPairTest.__init__c                 C   s   t  ¡ S r5   )r   Ú
socketpairrI   r   r   r   ré   :  s   zSocketPairTest.socketpairc                 C   s   |   ¡ \| _| _d S r5   )ré   rE   rª   rI   r   r   r   rK   >  ó   zSocketPairTest.setUpc                 C   s   | j r| j  ¡  d | _ d S r5   rM   rI   r   r   r   rN   A  s   

zSocketPairTest.tearDownc                 C   ó   d S r5   r   rI   r   r   r   r•   F  ó   zSocketPairTest.clientSetUpc                 C   s$   | j r| j  ¡  d | _ t | ¡ d S r5   r­   rI   r   r   r   r˜   I  s   
zSocketPairTest.clientTearDownNr¯   )	rQ   rR   rS   r[   ré   rK   rN   r•   r˜   r   r   r   r   rè   2  s    
rè   c                   @   s&   e Zd Z	 dd„ Zdd„ Zdd„ ZdS )ÚSocketTestBasec                 C   ó   |   ¡ | _|  ¡  d S r5   )Ú	newSocketrE   Ú
bindServerrI   r   r   r   rK   _  rŸ   zSocketTestBase.setUpc                 C   ó   	 |   | j¡ | j ¡ | _d S r5   )ÚbindSockrE   r¹   Ú	serv_addrrI   r   r   r   rð   c  ó   zSocketTestBase.bindServerc                 C   rL   r5   rM   rI   r   r   r   rN   h  rO   zSocketTestBase.tearDownN)rQ   rR   rS   rK   rð   rN   r   r   r   r   rí   V  s
    rí   c                       s   e Zd Z	 ‡ fdd„Z‡  ZS )ÚSocketListeningTestMixinc                    s   t ƒ  ¡  | j ¡  d S r5   )rZ   rK   rE   rH   rI   rb   r   r   rK   p  ó   
zSocketListeningTestMixin.setUp©rQ   rR   rS   rK   ri   r   r   rb   r   rõ   m  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 r5   )rZ   r[   rz   r_   rb   r   r   r[   }  rd   z ThreadedSocketTestMixin.__init__c                 C   rî   r5   )ÚnewClientSocketrª   Ú
bindClientrI   r   r   r   r•     rŸ   z#ThreadedSocketTestMixin.clientSetUpc                 C   s
   	 |   ¡ S r5   )rï   rI   r   r   r   rù   …  s   z'ThreadedSocketTestMixin.newClientSocketc                 C   rñ   r5   )rò   rª   r¹   rº   rI   r   r   r   rú   ‰  rô   z"ThreadedSocketTestMixin.bindClientc                 C   r¬   r5   r­   rI   r   r   r   r˜   Ž  r®   z&ThreadedSocketTestMixin.clientTearDown)	rQ   rR   rS   r[   r•   rù   rú   r˜   ri   r   r   rb   r   rø   u  s    rø   c                       sB   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 r5   )rZ   rK   r   rE   rÇ   rã   rä   rb   r   r   rK     ræ   zConnectedStreamTestMixin.setUpc                    s   | j  ¡  d | _ tƒ  ¡  d S r5   )rã   r!   rZ   rN   rI   rb   r   r   rN   ¥  r®   z!ConnectedStreamTestMixin.tearDownc                    s$   t ƒ  ¡  | j | j¡ | j| _d S r5   )rZ   r•   rª   rÏ   ró   rç   rI   rb   r   r   r•   ª  s   
z$ConnectedStreamTestMixin.clientSetUpc                    s6   z
| j  ¡  d | _ W n	 ty   Y nw tƒ  ¡  d S r5   )rç   r!   r    rZ   r˜   rI   rb   r   r   r˜   ¯  s   

ÿz'ConnectedStreamTestMixin.clientTearDown)rQ   rR   rS   rK   rN   r•   r˜   ri   r   r   rb   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 r5   )ÚtempfileÚmkdtempÚdir_pathrf   ÚosÚrmdirrZ   rK   rI   rb   r   r   rK   À  s   
zUnixSocketTestBase.setUpc                 C   s,   t j| jd}t ||¡ |  tj|¡ d S )N)Údir)rý   Úmktemprÿ   r   Úbind_unix_socketrf   r   Úunlink)rJ   ÚsockÚpathr   r   r   rò   Å  s   zUnixSocketTestBase.bindSock)rQ   rR   rS   rK   rò   ri   r   r   rb   r   rü   ¸  s    rü   c                   @   ó   e Zd Z	 dd„ ZdS )ÚUnixStreamBasec                 C   ó   t   t jt j¡S r5   )r   ÚAF_UNIXr9   rI   r   r   r   rï   Í  ó   zUnixStreamBase.newSocketN©rQ   rR   rS   rï   r   r   r   r   r	  Ê  ó    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   )rZ   rK   ró   rG   rI   rb   r   r   rK   Ö  s   
zInetTestBase.setUpc                 C   s   t j|| jd d S )N©Úhost)r   rF   r  ©rJ   r  r   r   r   rò   Ú  rê   zInetTestBase.bindSock)rQ   rR   rS   r¸   r  rK   rò   ri   r   r   rb   r   r  Ñ  s
    r  c                   @   r  )ÚTCPTestBasec                 C   r
  r5   )r   rD   r9   rI   r   r   r   rï   à  r  zTCPTestBase.newSocketNr  r   r   r   r   r  Ý  r  r  c                   @   r  )ÚUDPTestBasec                 C   r
  r5   )r   rD   r&   rI   r   r   r   rï   æ  r  zUDPTestBase.newSocketNr  r   r   r   r   r  ã  r  r  c                   @   r  )ÚUDPLITETestBasec                 C   ó   t   t jt jt j¡S r5   )r   rD   r&   r@   rI   r   r   r   rï   ì  rê   zUDPLITETestBase.newSocketNr  r   r   r   r   r  é  r  r  c                   @   r  )ÚSCTPStreamBasec                 C   r  r5   )r   rD   r9   ÚIPPROTO_SCTPrI   r   r   r   rï   ò  s   ÿzSCTPStreamBase.newSocketNr  r   r   r   r   r  ï  r  r  c                   @   s   e Zd Z	 ejZdS )ÚInet6TestBaseN)rQ   rR   rS   r   ÚHOSTv6r  r   r   r   r   r  ÷  s    
r  c                   @   r  )ÚUDP6TestBasec                 C   r
  r5   )r   ÚAF_INET6r&   rI   r   r   r   rï   ÿ  r  zUDP6TestBase.newSocketNr  r   r   r   r   r  ü  r  r  c                   @   r  )ÚUDPLITE6TestBasec                 C   r  r5   )r   r  r&   r@   rI   r   r   r   rï     rê   zUDPLITE6TestBase.newSocketNr  r   r   r   r   r    r  r  c                    s,   	 dd„ ‰ ‡ ‡fdd„}dd„ }| r|S |S )Nc                  _   rë   r5   r   ©r`   ra   r   r   r   Úclient_pass  rì   z%skipWithClientIf.<locals>.client_passc                    s*   t  ˆ¡| ƒ}t| tƒs‡ fdd„|_|S )Nc                    s   ˆ S r5   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 r5   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                    s2   	 ‡ 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>'  ó    z requireAttrs.<locals>.<listcomp>údon't have ú, c                 s   ó    | ]}|V  qd S r5   r   r/  r   r   r   Ú	<genexpr>)  ó   € zrequireAttrs.<locals>.<genexpr>)r.  Újoin)r(  Z
attributesÚmissingr   r,  r   ÚrequireAttrs"  s
   ÿr;  c               
   G   sª   	 d }dd„ | D ƒ}|rdd  dd„ |D ƒ¡ }n)dd„ | D ƒ}ztj|Ž }W n ty= } z
t|ƒ}W Y d }~n	d }~ww | ¡  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   ©r0  r(  r   r   r   r2  4  s
    ÿ
ÿz!requireSocket.<locals>.<listcomp>r4  r5  c                 s   r6  r5   r   r/  r   r   r   r7  7  r8  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   r2  9  s    ÿzcan't create socket({0}): {1}c                 s   s    | ]}t |ƒV  qd S r5   )r<  ©r0  Úor   r   r   r7  E  s   € )r9  r   r   r<  r!   r.  Úformat)r`   Úerrr:  Zcallargsr#   rš   r   r   r   ÚrequireSocket,  s*   ÿ€þÿþrB  c                   @   sœ  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Š„ ƒZFd‹dŒ„ ZGe ejd†¡e HejdkdŽ¡e HeId¡e eed(ƒd¡d‘d’„ ƒƒƒƒZJe ejd†¡e ejdkd“¡d”d•„ ƒƒZKe ejd†¡e HejdkdŽ¡e HeId¡e eed(ƒd¡d–d—„ ƒƒƒƒZLe ejd†¡e ejdkd“¡d˜d™„ ƒƒZMdšd›„ ZNdœd„ ZOdždŸ„ ZPe eed ƒd¡¡d¢d£„ ƒZQd¤d¥„ ZRd¦d§„ ZSd¨d©„ ZTdªd«„ ZUd¬d­„ ZVe Hejdkd®¡d¯d°„ ƒZWd±d²„ ZXd³d´„ ZYdS )µÚGeneralModuleTestsc                 C   s<   dd l }|  tj|ju ¡ t ¡ }|  |tj¡ | ¡  d S r·   )Ú_socketÚ
assertTruer   Ú
SocketTypeÚassertIsInstancer!   )rJ   rD  r#   r   r   r   Útest_SocketType_is_socketobjectM  s
   z2GeneralModuleTests.test_SocketType_is_socketobjectc                 C   sî   t   t jt j¡}|S |  d| ¡  t|ƒ¡ |  dt j t|ƒ¡ |  dt j t|ƒ¡ |  dt|ƒ¡ |  dt|ƒ¡ | d¡ |  dt|ƒ¡ |  t| 	¡ ƒt|ƒ¡ W d   ƒ n1 s`w   Y  |  dt|ƒ¡ |  dt|ƒ¡ d S )	Nzfd=%iz	family=%sztype=%szproto=0Úraddr©ú	127.0.0.1r   Úladdrz[closed])
r   rD   r9   ÚassertInÚfilenorÔ   ÚassertNotInrq   r<  r¹   ©rJ   r#   r   r   r   Ú	test_reprT  s   
ø	zGeneralModuleTests.test_reprNzneed _socket modulec                 C   sz   t  t jt j¡}zd| ¡ |j|j|jf }|  t	|ƒ|¡ W | 
¡  n| 
¡  w 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>)rD  r   rD   r9   rN  Úfamilyr&  ÚprotorÕ   rÔ   r!   )rJ   r#   Úexpectedr   r   r   Útest_csocket_reprb  s   ÿÿz$GeneralModuleTests.test_csocket_reprc                 C   sˆ   t   t jt j¡}t|ƒ}|  | ¡ | ¡ ¡ W d   ƒ n1 s!w   Y  d }t ¡  z| ¡  W n
 ty<   Y d S w |  	d¡ d S )NzSocket proxy still exists)
r   rD   r9   r   rÕ   rN  r   Ú
gc_collectÚReferenceErrorÚfail)rJ   r#   Úpr   r   r   Útest_weakrefo  s   þÿzGeneralModuleTests.test_weakrefc                 C   s„   d}| j t|d d t‚1 sw   Y  | j t|d d tj‚1 s&w   Y  | j t|d d tj‚1 s;w   Y  d S )Nz$Error raising socket exception (%s).r   ©r×   zsocket.herrorzsocket.gaierror)ÚassertRaisesr   r   ÚherrorÚgaierror©rJ   r×   r   r   r   ÚtestSocketError|  s   ÿÿÿz"GeneralModuleTests.testSocketErrorc                 C   sò  t   t jt j¡}|  |j¡ | d¡ | ¡ }|  t¡}| 	d|¡ W d   ƒ n1 s-w   Y  |  
t|jƒd¡ |  t¡}| 	d|¡ W d   ƒ n1 sQw   Y  |  
t|jƒd¡ |  t¡}| 	dd ¡ W d   ƒ n1 suw   Y  |  dt|jƒ¡ |  t¡}| 	dd|¡ W d   ƒ n1 sšw   Y  |  
t|jƒd¡ |  t¡}| 	dd|¡ W d   ƒ n1 s¿w   Y  |  
t|jƒd¡ |  t¡}| 	ddd ¡ W d   ƒ n1 säw   Y  |  dt|jƒ¡ |  t¡}| 	dd	|¡ W d   ƒ n	1 s
w   Y  |  t¡}| 	dd d ¡ W d   ƒ n	1 s'w   Y  |  t¡}| 	d¡ W d   ƒ n	1 sBw   Y  |  d
t|jƒ¡ |  t¡}| 	dd|d¡ W d   ƒ n	1 siw   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	(1 given)é   z	(4 given))r   rD   r&   rf   r!   rq   r¹   r\  r™   ÚsendtorÕ   r<  Ú	exceptionrM  )rJ   r#   ÚsocknameÚcmr   r   r   ÚtestSendtoErrors†  sd   
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ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 r5   )r   rD   Úhas_ipv6r  r9   r&   r   ÚSOCK_RDMr.   Ú
SOL_SOCKETÚSO_REUSEADDRrI   r   r   r   ÚtestCrucialConstants°  s   
z'GeneralModuleTests.testCrucialConstantsc                 C   s    t j t j t jrt j d S d S r5   )r   ÚIPPROTO_TCPÚIPPROTO_UDPrj  ÚIPPROTO_IPV6rI   r   r   r   ÚtestCrucialIpProtoConstants½  s
   
ÿz.GeneralModuleTests.testCrucialIpProtoConstantsÚntúWindows specificc                 C   ó4   t j t j t j t j t j t j t j t j d S r5   )	r   ZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPr  rI   r   r   r   ÚtestWindowsSpecificConstantsÃ  s   
z/GeneralModuleTests.testWindowsSpecificConstantsÚdarwinúmacOS specific testúIPv6 required for this testc                 C   s0   h d£}|D ]}|   tt|ƒd|› d¡ qd S )N>   ÚIPV6_PATHMTUÚ
IPV6_RTHDRÚIPV6_RECVPATHMTUÚIPV6_PKTINFOÚIPV6_RECVHOPLIMITÚIPV6_NEXTHOPÚIPV6_RECVRTHDRÚIPV6_RECVDSTOPTSÚIPV6_CHECKSUMÚIPV6_DSTOPTSÚIPV6_DONTFRAGÚIPV6_RTHDRDSTOPTSÚIPV6_RECVTCLASSZIPV6_USE_MIN_MTUÚIPV6_HOPOPTSÚIPV6_HOPLIMITÚIPV6_RECVPKTINFOÚIPV6_RTHDR_TYPE_0ÚIPV6_RECVHOPOPTSÚIPV6_TCLASSzMissing RFC3542 socket option 'ú')rE  r   r   )rJ   ZoptsÚoptr   r   r   Útest3542SocketOptionsÎ  s   ÿÿz(GeneralModuleTests.test3542SocketOptionsc                 C   s¸   t  ¡ }zt  |¡}W n ty   |  d¡ Y nw |  | d¡dkd¡ z
t  |¡\}}}W n ty=   |  d¡ Y nw ||g| }t  |¡}||vrZ|  	d|t
|ƒf ¡ d S d S )Núname lookup failurer„   r   zError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r   ÚgethostnameÚgethostbynamer   rs   rE  ÚfindÚgethostbyaddrÚgetfqdnrX  rÔ   )rJ   Ú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’  rM  r”  )rJ   rå   r  r   r   r   Útest_host_resolution   s
   ÿz'GeneralModuleTests.test_host_resolutionc              	   C   s‚   d}dD ]:}| j t|d t |¡ W d   ƒ n1 sw   Y  | j t|d t |¡ W d   ƒ n1 s9w   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”  )rJ   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y* } z|jtjkr|  d¡ n‚ W Y d }~nd }~ww z|  t  ¡ d¡ t  d¡ |  t  ¡ d¡ W t  |¡ d S t  |¡ w )NÚnewztest should be run as roots   barrc  )r   r‘  rž  r   ÚerrnoÚEPERMrs   rÕ   )rJ   Zoldhnrš   r   r   r   Útest_sethostname  s   þ€þ
z#GeneralModuleTests.test_sethostnameÚif_nameindexz$socket.if_nameindex() not available.c                 C   s‚   t  ¡ }|D ]8\}}|  |t¡ |  |t¡ |  |d¡ t  |¡}|  |t¡ |  ||¡ t  |¡}|  |t¡ |  ||¡ qd S r·   )	r   r£  rG  Úintr<  ÚassertGreaterÚif_nametoindexrÕ   Úif_indextoname)rJ   Z
interfacesÚindexr1  Ú_indexÚ_namer   r   r   ÚtestInterfaceNameIndex,  s   

öz)GeneralModuleTests.testInterfaceNameIndexr§  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 ]&}|d }||vrU|   ttf¡ t |¡ W d   ƒ n1 sPw   Y  q/dD ]$}||vrz|   ttf¡ t |¡ W d   ƒ n1 suw   Y  qXd S d S )	Nr   éÿÿÿÿr¼   éè  Ú	_DEADBEEFr£  ì        )ì   ÿÿ l   ÿÿÿÿ )	r\  r   r   r§  ÚOverflowErrorr™   r   Údictr£  )rJ   Úindicesr¨  Úindex2r   r   r   ÚtestInvalidInterfaceIndexToName<  s*   
ÿ€ÿ€÷z2GeneralModuleTests.testInvalidInterfaceIndexToNamer¦  z&socket.if_nametoindex() not available.c                 C   s$   |   ttjd¡ |   ttjd¡ d S )Nr   r®  )r\  r™   r   r¦  r   rI   r   r   r   ÚtestInvalidInterfaceNameToIndexO  s   z2GeneralModuleTests.testInvalidInterfaceNameToIndexÚgetrefcountztest needs sys.getrefcount()c                 C   sP   zt  t¡}t td¡ W d S  ty'   t  t¡|kr$|  d¡ Y d S Y d S w )Nr   z$socket.getnameinfo loses a reference)Úsysr·  rQ   r   Úgetnameinfor™   rX  )rJ   Úorigr   r   r   ÚtestRefCountGetNameInfoU  s   
ÿÿz*GeneralModuleTests.testRefCountGetNameInfoc                 C   s(   z	t  dd¡ W d S  ty   Y d S w )N)rm   r   r   r   r   )r   r¹  r   rI   r   r   r   ÚtestInterpreterCrasha  s
   ÿz'GeneralModuleTests.testInterpreterCrashc              	   C   sŽ   t jdt jdt jdt jdi}| ¡ D ]2\}}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±  )rJ   ZsizesÚfuncÚsizeÚmaskrA   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 |¡ q(|D ]}t |¡ t |¡ q7|D ]}|  t	tj|¡ |  t	tj|¡ qF|D ]}|  t	tj|¡ |  t	tj|¡ q[d S )
Nr   )r   r   r¼   r¿  r°  r¬  éþÿÿÿr¯  r   r­  é   )
Ú	_testcapiZINT_MINÚINT_MAXr   rÃ  rÂ  rÁ  rÀ  r\  r±  )rJ   rË  Zs_good_valuesZl_good_valuesZl_bad_valuesZs_bad_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  n ty)   Y qw t‚ttdƒr7t ¡ dkrAt |¡}|||ƒ zt |d¡}W n tyT   d }Y nw |||ƒ t	j
se|t |¡|ƒ |t |d¡|ƒ |d ur{|t |d¡|ƒ |  ttjd	¡ |  ttjd
¡ d S )N)ÚfreebsdZnetbsdZgnukfreebsd)Úlinuxrw  )ÚdaytimeZqotdÚdomain)ZechorÑ  rÒ  ZtcpÚgetandroidapilevelé   Zudpr¬  rÊ  )rÕ   r¸  ÚplatformÚ
startswithr   Úgetservbynamer   r   rÓ  r   Z
is_androidÚgetservbyportr\  r±  )rJ   ÚeqZservicesZservicerG   Zport2Zudpportr   r   r   ÚtestGetServBy  s<   
ÿ


ÿ
z GeneralModuleTests.testGetServByc              	   C   s.  |   t ¡ d ¡ t ¡ }|   | ¡ d ¡ W d   ƒ n1 sw   Y  tdƒU |   t ¡ d¡ t ¡ }|   | ¡ d¡ W d   ƒ n1 sHw   Y  t d ¡ |   t ¡ d ¡ t ¡ }|   | ¡ d ¡ W d   ƒ n1 sqw   Y  W d   ƒ n1 s€w   Y  |  ttjd¡ |  ttjd¡ d S )Né
   r¬  Zspam)	rÕ   r   r<   Ú
gettimeoutr?   r=   r\  Ú
ValueErrorr™   )rJ   r#   r  r   r   r   ÚtestDefaultTimeout»  s$   
ÿ

ÿ

ÿ€øz%GeneralModuleTests.testDefaultTimeoutÚ	inet_atonztest needs socket.inet_aton()c                 C   s(   |   dt d¡¡ |   dt d¡¡ d S )Nó       ú0.0.0.0ó   ÿÿÿÿr›  )rÕ   r   rß  rI   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sF||dƒ ||dƒ ||dƒ ||dƒ ||dƒ ˆ d|dƒ¡ ˆ d|d	ƒ¡ ˆ d
|dƒ¡ ˆ d|dƒ¡ ||dƒ ||dƒ ||dƒ ||dƒ ||dƒ d S )Nr   )rß  rä  rD   c                    ó
   ˆˆ | ƒS r5   r   ©Úa)rD   rä  r   r   r"  à  ó   
 z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>c                    ó   ˆ   ttf| |¡S r5   ©r\  r   rÝ  ©rÅ  rç  rI   r   r   r"  â  ó    
ÿrà  rá  s   ÿ ÿ z255.0.255.0s   ªªªªz170.170.170.170ó   ú1.2.3.4râ  r›  z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5ú::1)r   rß  rä  rD   rÕ   r
   ©rJ   r   ÚgÚassertInvalidr   )rD   rä  rJ   r   ÚtestIPv4toStringÜ  s.   








z#GeneralModuleTests.testIPv4toStringc              
      sÂ  zddl m‰m‰ m} |sˆ d¡ W n ty!   ˆ d¡ Y nw tjdkrKzˆˆ dƒ W n tyJ } z|j	dkr@ˆ d¡ W Y d }~nd }~ww ‡ ‡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  rj  úIPv6 not availableú+could not import needed symbols from socketÚwin32ú::é&'  úIPv6 might not be supportedc                    rå  r5   r   ræ  )r  rä  r   r   r"    rè  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>c                    ó   ˆ  ttfˆ | ¡S r5   rê  ræ  ©r   rJ   r   r   r"    rì  ó                   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  rj  rs   ÚImportErrorr¸  rÕ  r   ÚwinerrorrÕ   r
   ©rJ   rj  rš   rò  r   )r  r   rä  rJ   r   ÚtestIPv6toStringý  sr   
€ÿ


€þþþÿþþ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  rD   c                    rå  r5   r   ræ  )rD   r  r   r   r"  A  rè  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>c                    ré  r5   rê  rë  rI   r   r   r"  B  rì  z1.0.1.0s     z170.85.170.85s   ªUªUr›  râ  rî  rí  s      s        rü  )r   r  r  rD   rÕ   Ú	bytearrayrð  r   )rD   r  rJ   r   ÚtestStringToIPv4=  s$   





z#GeneralModuleTests.testStringToIPv4c              
      s  zddl m‰m‰ m} |sˆ d¡ W n ty!   ˆ d¡ Y nw tjdkrKzˆˆ dƒ W n tyJ } z|j	dkr@ˆ d¡ W Y d }~nd }~ww ‡ ‡fd	d
„‰‡‡fdd
„}ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆdƒ¡ ˆ 
dˆtdƒƒ¡ |dƒ |dƒ |dƒ d S )Nr   )r  r  rj  rô  rõ  rö  rü  rø  rù  c                    rå  r5   r   ræ  )r  r  r   r   r"  h  rè  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    rú  r5   rê  ræ  rû  r   r   r"  i  rì  r÷  rï  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
ïÿÿ™— Ups   s   s   )r   r  r  rj  rs   rý  r¸  rÕ  r   rþ  rÕ   r  rÿ  r   )r  r   r  rJ   r   ÚtestStringToIPv6W  s8   
€ÿ


€þþz#GeneralModuleTests.testStringToIPv6c                 C   sê   t   t jt j¡}|  |j¡ t ¡ D ]-}t ¡ }z	| 	d|f¡ W n t
y> } z|jtjks3|dkr4‚ W Y d }~qd }~ww  | ¡ }z	t  t  ¡ ¡}W n t
y[   |  d¡ Y nw |  |d d|fd|d  ¡ |  |d |¡ d S )Nrá  é   r  r   z
%s invalidr   )r   rD   r9   rf   r!   Ú	itertoolsÚcountr   Úfind_unused_portrq   r   r   Ú
EADDRINUSEr¹   r’  r‘  rs   rM  rÕ   )rJ   r  rA   rG   rš   r1  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   rD   r9   rf   r!   Ú
getsockoptrl  rm  ÚassertFalse©rJ   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   rD   r9   rf   r!   Ú
setsockoptrl  rm  r  r  r  r   r   r   ÚtestSetSockOpt   s
   z!GeneralModuleTests.testSetSockOptc                 C   sN   t   t jt j¡}| d¡ W d   ƒ n1 sw   Y  |  t|jd¡ d S )Nr   ó   spam)r   rD   r9   Ú
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y: } z|  |jtjtj	f¡ W Y d }~d S d }~ww |  
d¡ d S )Nr   ©rN  z#close() should raise EBADF/ENOTSOCK)r   rq   Ú
_LOCALHOSTrN  r!   r   rM  r   ÚEBADFÚENOTSOCKrX  )rJ   r  rA  r   r   r   ÚtestCloseException®  s   $€þz%GeneralModuleTests.testCloseExceptionc                 C   sŒ   t   t jt j¡4}|  |jt j¡ tt dƒr%|  |jt jt jB t jf¡ n|  |jt j¡ |  |j	d¡ W d   ƒ d S 1 s?w   Y  d S )NÚSOCK_CLOEXECr   )
r   rD   r9   rÕ   rR  r   rM  r&  r  rS  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  d S  ty\ } z|jtjksQ|dkrR‚ W Y d }~q.d }~ww d S )NrÊ  r  )r   rf   r!   r   r	  r\  r±  rq   r¸   r  r  r   r   r
  )rJ   r  rG   Zbig_portZneg_portrA   rš   r   r   r   Útest_getsockaddrargÇ  s&   üÿ€ÿüz&GeneralModuleTests.test_getsockaddrargc                 C   sŠ   |   ttjdƒ¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ |   ttdƒ¡ t ¡ }|  |j¡ |  t|jdd ¡ | tjd¡ d S )Nr   Z
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFFÚSIO_KEEPALIVE_VALSr¬  )r   éd   r  )	rE  r   r   rf   r!   r\  rÝ  r   r  rP  r   r   r   Útest_sock_ioctlÛ  s   z"GeneralModuleTests.test_sock_ioctlÚSIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc              
   C   sr   t   ¡ }|  |j¡ z	| t jd¡ W n ty, } zd}|j|kr'|  d¡ ‚ d }~ww |  t	|jt jd ¡ d S )NTi='  zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
r   rf   r!   r   r   r   rþ  rs   r\  r™   )rJ   r#   rØ   ZWSAEOPNOTSUPPr   r   r   Útest_sio_loopback_fast_pathç  s   

€ûz.GeneralModuleTests.test_sio_loopback_fast_pathc           
   
   C   s6  zt  dd¡ W n t jy! } z|jt jkr|  d¡ ‚ d }~ww t  td ¡D ]
}|  t|ƒd¡ q(t  dd¡ t  dd¡ t  d d¡ t	j
rNt  dd¡ ttdƒrYt ¡ dkr_t  td	¡ t  td¡ t  td ¡ t  tdt jt j¡}|D ]%\}}}}}|  |t j¡ |  t|ƒd
¡ |  |t j¡ |  t|ƒd¡ qwt  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 d S  t jy˜   Y d S w d S )NÚ	localhostéP   zbuggy libc versionr  rK  rï  rÓ  rÔ  ÚhttpúAddressFamily.AF_INETúSocketKind.SOCK_STREAMr   )r  rG   ©rR  ©r&  )rS  )Úflags)r  rG   rR  r&  rS  r)  u   í €ÚAI_NUMERICSERV)r   Úgetaddrinfor^  r   ÚEAI_SERVICErs   r¸   rÕ   Úlenr   ÚIPV6_ENABLEDr   r¸  rÓ  rD   r9   r<  ÚSOL_TCPÚ
AI_PASSIVEÚ	AF_UNSPECr\  ÚUnicodeEncodeErrorr*  )
rJ   rA  ÚinfoZinfosrR  r&  r…   Ú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¹  rI   r   r   r   Útest_getnameinfoE  ó   z#GeneralModuleTests.test_getnameinfoÚnetworkznetwork is not enabledc                 C   sd   t  d¡ t d¡ W d   ƒ n1 sw   Y  d}t |¡ t |¡ t |dtjtj¡ d S )Nz
python.orgu!   Ð¸ÑÐ¿Ñ‹Ñ‚Ð°Ð½Ð¸Ðµ.pythontest.netr   )r   Ztransient_internetr   r’  Úgethostbyname_exr+  r1  r9   )rJ   rÒ  r   r   r   Ú	test_idnaI  s   ÿ

zGeneralModuleTests.test_idnac              
      s\  t tdƒr
t tdƒsˆ  d¡ ‡ fdd„}‡ fdd„}t ¡ \}}t tj|¡}zp|r0| d¡ ˆ  t¡ t 	d	¡ | 
d
tj ¡ W d   ƒ n1 sMw   Y  |r‚t tj|¡ t 	d	¡ ˆ  t|j
d
tj ¡ W t 	d¡ t tj|¡ | ¡  | ¡  d S W t 	d¡ t tj|¡ | ¡  | ¡  d S t 	d¡ t tj|¡ | ¡  | ¡  w )NÚalarmré   z9signal.alarm and socket.socketpair required for this testc                     s   ˆ   ttjd¡ d S r·   ©r\  rÝ  ÚmathÚacosh©r`   rI   r   r   Ú
ok_handler`  rê   z@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlerc                     s   ˆ   ttjd¡ dd  d S ©Nr   r   r=  r@  rI   r   r   Úraising_handlerb  s   zEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg      ø?r   ó   xr   )r   Úsignalr   rs   ré   ÚSIGALRMr  r\  ÚZeroDivisionErrorr<  Úsendallr   ÚSOCK_MAX_SIZEÚTimeoutErrorr!   )rJ   Zwith_timeoutrA  rC  Úcr#   Ú	old_alarmr   rI   r   Úcheck_sendall_interruptedZ  s@   


þ

ÿ
÷

ý
z,GeneralModuleTests.check_sendall_interruptedc                 C   ó   |   d¡ d S ©NF©rM  rI   r   r   r   Útest_sendall_interruptedy  ó   z+GeneralModuleTests.test_sendall_interruptedc                 C   rN  )NTrP  rI   r   r   r   Ú%test_sendall_interrupted_with_timeout|  rR  z8GeneralModuleTests.test_sendall_interrupted_with_timeoutc                 C   sÐ   t   t jt j¡}t|ƒ}|  t¡}d }t ¡  W d   ƒ n1 s"w   Y  |  |t	|j
jd ƒ¡ t   t jt j¡}| d¡}t|ƒ}d }t ¡  |  t¡ d }t ¡  W d   ƒ d S 1 saw   Y  d S )Nr   r   )r   rD   r9   rÔ   ZassertWarnsÚResourceWarningr   rV  rM  r<  Úwarningr`   Úmakefile)rJ   r  r   rh  r   r   r   r   Útest_dealloc_warn  s    
þ

"þz$GeneralModuleTests.test_dealloc_warnc                 C   sX   t   t jt j¡}| d¡}| ¡  |  t|ƒd¡ W d   ƒ d S 1 s%w   Y  d S )Nr   z<_io.BufferedReader name=-1>)r   rD   r9   rV  r!   rÕ   rÔ   ©rJ   r  Úfpr   r   r   Útest_name_closed_socketio  s
   
"ýz,GeneralModuleTests.test_name_closed_socketioc                 C   s˜   t   ¡ >}|jddd}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ | ¡  |  t	|j¡ |  t	|j¡ |  t	|j¡ W d   ƒ d S 1 sEw   Y  d S )Nr   r   )Ú	buffering)
r   rV  rE  Úreadabler  ÚwritableÚseekabler!   r\  rÝ  rX  r   r   r   Útest_unusable_closed_socketio–  s   
"øz0GeneralModuleTests.test_unusable_closed_socketioc                 C   s2  t   ¡ }zC| tdf¡ t  | ¡ ¡ |  t¡ | d¡ W d   ƒ n1 s(w   Y  W |  t¡ | ¡  W d   ƒ n1 sBw   Y  n|  t¡ | ¡  W d   ƒ w 1 s\w   Y  w |  t¡ t  d ¡ W d   ƒ n1 sww   Y  |  t¡ t  d¡ W d   ƒ d S 1 s’w   Y  d S )Nr   r   r¬  )	r   rq   r¸   r!   rN  r\  r   rH   r™   r  r   r   r   Útest_socket_close¡  s*   ÿ€
þ€ 
þÿ"ÿz$GeneralModuleTests.test_socket_closec                 C   s®   dD ]R}| j |dB t ¡ .}d|v rd nd}|j||d}|  |j|¡ W d   ƒ n1 s1w   Y  W d   ƒ n1 s@w   Y  W d   ƒ n1 sOw   Y  qd S )N)r   r   ÚrwÚwÚwb©Úmoder5  r   ©Úencoding)ÚsubTestr   rV  rÕ   re  )rJ   re  r  rg  rY  r   r   r   Útest_makefile_mode±  s   
ÿ€þ€ÿ€ÿz%GeneralModuleTests.test_makefile_modec                 C   s˜   dD ]G}| j |d7 t ¡ #}|  td¡ | |¡ W d   ƒ n1 s&w   Y  W d   ƒ n1 s5w   Y  W d   ƒ n1 sDw   Y  qd S )N)Zrtrm   ú+rç  rd  zinvalid mode)rh  r   ÚassertRaisesRegexrÝ  rV  )rJ   re  r  r   r   r   Útest_makefile_invalid_mode¹  s   
ÿ€ÿ€ÿ€ÿz-GeneralModuleTests.test_makefile_invalid_modec                 C   s®   t   ¡ }| ttjd ƒD ]}|  ttj||¡ qW d   ƒ n1 s$w   Y  ttjd ƒD ]$}t t t j|¡¡}|  	|t j¡ t t t j
|¡¡}|  	|t j
¡ q0d S r  )r   ÚrangeÚpickleÚHIGHEST_PROTOCOLr\  r™   ÚdumpsÚloadsrD   rÕ   r9   )rJ   r  ÚprotocolrR  r&  r   r   r   Útest_pickleÀ  s   ÿÿüzGeneralModuleTests.test_picklec              	   C   sž   dD ]&}t   t jt j¡}| tdf¡ | |¡ W d   ƒ n1 s#w   Y  qt   t jt j¡}| tdf¡ | ¡  W d   ƒ d S 1 sHw   Y  d S )N)r   r¬  r   )r   rD   r9   rq   r¸   rH   )rJ   ÚbacklogÚsrvr   r   r   Útest_listen_backlogË  s   þ€
"þz&GeneralModuleTests.test_listen_backlogc                 C   sb   dd l }t tjtj¡}| tdf¡ |  t|j|j	d ¡ W d   ƒ d S 1 s*w   Y  d S rB  )
rË  r   rD   r9   rq   r¸   r\  r±  rH   rÌ  )rJ   rË  ru  r   r   r   Útest_listen_backlog_overflowÕ  s
   "þz/GeneralModuleTests.test_listen_backlog_overflowúIPv6 required for this test.c                 C   sh   |   ttjtjddfd¡ t tjtj¡}|   t|jtjddf¡ W d   ƒ d S 1 s-w   Y  d S )Nr   r°  iöÿÿÿ)	r\  r±  r   r¹  r   r  r  r9   rq   rP  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&   rp  rÕ   )rJ   r…   Úsockaddrr   r   r   Útest_getaddrinfo_ipv6_basicä  s   üz.GeneralModuleTests.test_getaddrinfo_ipv6_basicc                 C   s0   |   t ¡ t d¡¡ |   t ¡ t d¡¡ d S )Nrá  r÷  )rÕ   r   r•  rI   r   r   r   Útest_getfqdn_filter_localhostî  s   z0GeneralModuleTests.test_getfqdn_filter_localhoströ  zdoes not work on WindowszSymbolic scope id does not workz test needs socket.if_nameindex()c                 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   r£  r+  r  r&   rp  rÕ   )rJ   ÚifindexÚtest_interfacer…   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&   rp  rÕ   )rJ   r€  r…   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   rz  r	   úff02::1de:c0:face:8d%Ú1234)r   r£  r¹  ÚNI_NUMERICHOSTÚNI_NUMERICSERVrÕ   )rJ   r€  r  r|  Únameinfor   r   r   Ú&test_getnameinfo_ipv6_scopeid_symbolic  s   z9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolicc                 C   s@   d}ddd|f}t  |t jt jB ¡}|  |dt|ƒ df¡ d S )Nrƒ  rz  r	   r   r…  r†  )r   r¹  r‡  rˆ  rÕ   r<  )rJ   r€  r|  r‰  r   r   r   Ú%test_getnameinfo_ipv6_scopeid_numeric  s   z8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericc                 C   sZ   t   t jt j¡}|  t|jƒd¡ |  t|jƒd¡ W d   ƒ d S 1 s&w   Y  d S )Nr%  r&  )r   rD   r9   rÕ   r<  rR  r&  rP  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|¡E}|  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ | d¡ |  |jtj¡ W d   ƒ d S 1 sbw   Y  d S )NÚSOCK_NONBLOCKr   r  r   TF)r   r   r9   rD   rÕ   r&  r  Úsetblocking)rJ   r  r  Z	sock_typer#   r   r   r   Ú test_socket_consistent_sock_type0  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   ƒ d S 1 sQw   Y  d S )Nr   c                 s   s     | ]\}}|d vr|V  qdS )>   r  r  Nr   )r0  r1  Úkindr   r   r   r7  K  s   € þýzEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>rÔ  )rR  r&  rS  rN  r   )r   rD   r9   ÚdetachÚmaxÚAddressFamilyÚ__members__ÚvaluesÚ
SocketKindrÄ  rÕ   rR  r&  rM  rS  )rJ   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   ¡ u}t tjtj¡}t |¡ |  t j¡ | ||ƒ¡ W d   ƒ n1 s1w   Y  |  t	¡ | |dd ƒ¡ W d   ƒ n1 sOw   Y  |  t
¡ | |d ƒ¡ W d   ƒ n1 skw   Y  W d   ƒ d S W d   ƒ d S 1 sƒw   Y  d S )Nc                   @   rB   )z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.Filec                 S   s
   || _ d S r5   ©r—  )rJ   r—  r   r   r   r[   \  ó   
zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S   ó   | j S r5   rš  rI   r   r   r   rN  _  s   zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rQ   rR   rS   r[   rN  r   r   r   r   ÚFile[  s    r  r¼   r­  )r   r   r   ÚcurdirÚO_RDONLYr!   r\  Ú_GiveupOnSendfileÚ_sendfile_use_sendfiler±  r™   )rJ   r  r  r—  r   r   r   Útest__sendfile_use_sendfileY  s    

ÿÿÿù"ùz.GeneralModuleTests.test__sendfile_use_sendfilec                 C   st   |   |j|¡ |   |j|¡ | ¡ }tj|d}|  |j¡ | ¡  |   |j|¡ |   |j|¡ |   | ¡ |¡ d S ©Nr  )rÕ   rR  r&  rN  r   rf   r!   r‘  )rJ   r#   rR  Ústyper—  Ús2r   r   r   Ú_test_socket_filenok  s   z&GeneralModuleTests._test_socket_filenoc                 C   sR  t   t jt j¡}|  |j¡ | tjdf¡ |  |t jt j¡ t	t dƒrCt   t jt j
¡}|  |j¡ | tjdf¡ |  |t jt j
¡ tjrgt   t jt j¡}|  |j¡ | tjdddf¡ |  |t jt j¡ t	t dƒr§t ¡ }|  tj|¡ t   t jt j¡}|  |j¡ z| tj |d¡¡ W n
 ty›   Y d S w |  |t jt j¡ d S d S )Nr   r&   r  r   )r   rD   r9   rf   r!   rq   r   r¸   r¦  r   r&   r.  r  r  rý   rþ   ÚshutilÚrmtreer  r   r  r9  rÓ   )rJ   r#   Ztmpdirr   r   r   Útest_socket_filenox  s8   

ÿ
ÿöz%GeneralModuleTests.test_socket_filenoc                 C   óD   |   t¡ tjtjtjdd W d   ƒ d S 1 sw   Y  d S )Ng     @E@r  ©r\  r™   r   rD   r9   rI   r   r   r   Ú test_socket_fileno_rejects_float—  ó   "ÿz3GeneralModuleTests.test_socket_fileno_rejects_floatc                 C   rª  )NÚfoor  r«  rI   r   r   r   Ú&test_socket_fileno_rejects_other_types›  r­  z9GeneralModuleTests.test_socket_fileno_rejects_other_typesc                 C   óF   |   td¡ tjtjtjdd W d   ƒ d S 1 sw   Y  d S )Núnegative file descriptorr¬  r  ©rk  rÝ  r   rD   r9   rI   r   r   r   Ú)test_socket_fileno_rejects_invalid_socketŸ  s   "ÿz<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlyc                 C   r°  )Nr±  iÖÿÿÿr  r²  rI   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 sw   Y  |  |jjtj|f¡ |   t¡}tjtj	tj
t ¡ d W d   ƒ n1 sFw   Y  |  |jjtj|f¡ d S )Ni6'  r  )r\  r   r   r   Zmake_bad_fdrM  rf  r   r  rD   r9   )rJ   ZWSAENOTSOCKrh  r   r   r   Ú$test_socket_fileno_requires_valid_fd¨  s   ÿýÿz7GeneralModuleTests.test_socket_fileno_requires_valid_fdc              	   C   s¼   t  ¡ P}|  t¡ tj| ¡ d W d   ƒ n1 sw   Y  |  t¡}tjtjtj| ¡ d W d   ƒ n1 s>w   Y  |  |j	j
t
j¡ W d   ƒ d S 1 sWw   Y  d S r£  )rý   ÚNamedTemporaryFiler\  r   r   rN  rD   r9   rÕ   rf  r   r  )rJ   Zafilerh  r   r   r   Ú%test_socket_fileno_requires_socket_fdµ  s   
ÿýÿ"÷z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)ZrQ   rR   rS   rH  rQ  rÁ   Ú
skipUnlessrD  rU  rZ  r`  ri  rn  rr  r   r1  rv  r¸  rÕ  r   r.  r  rš  rœ  r  r   r   r¢  r«  rµ  r¶  r»  r¼  rÈ  r   Úcpython_onlyrÎ  rÚ  rÞ  rã  ró  r   r  r  r  r  r  r  r  r  r  r  r!  r6  r7  Zis_resource_enabledr;  rM  rQ  rS  rW  rZ  r_  r`  ri  rl  rs  rv  rw  ry  r}  r~  ÚskipIfr
   r‚  r„  rŠ  r‹  rŒ  r  r˜  r¢  r¦  r©  r¬  r¯  r³  r´  rµ  r·  r   r   r   r   rC  K  s   

*

	ÿ
ÿ
ÿ
ÿ


,ÿ
ÿ
ÿ
>ÿ
ÿ
"
ÿNÿ




	
þ
ÿ

rC  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 r5   )r   ÚAF_CANr   r   rI   r   r   r   rn  Å  s   
z!BasicCANTest.testCrucialConstantsÚCAN_BCMú&socket.CAN_BCM required for this test.c                 C   ó”   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 r5   )r   r½  Ú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_FRAMErI   r   r   r   ÚtestBCMConstantsÊ  s0   
zBasicCANTest.testBCMConstantsc                 C   ó:   t   t jt jt j¡	}W d   ƒ d S 1 sw   Y  d S r5   ©r   r   r   r   rP  r   r   r   ÚtestCreateSocketê  ó   "ÿzBasicCANTest.testCreateSocketc                 C   rØ  r5   )r   r   r&   r½  rP  r   r   r   ÚtestCreateBCMSocketî  ó   "ÿz BasicCANTest.testCreateBCMSocketc                 C   sX   t   t jt jt j¡}d}| |¡ |  | ¡ |¡ W d   ƒ d S 1 s%w   Y  d S )N)ra  )r   r   r   r   rq   rÕ   r¹   )rJ   r#   Úaddressr   r   r   ÚtestBindAnyô  s
   
"ýzBasicCANTest.testBindAnyc                 C   sL   t   t jt jt j¡}|  td|jd¡ W d   ƒ d S 1 sw   Y  d S )Núinterface name too long)Á   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   r   r   r   rk  r   rq   rP  r   r   r   ÚtestTooLongInterfaceNameú  s
   ÿ"ÿz%BasicCANTest.testTooLongInterfaceNameÚCAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c              	   C   sn   t   t jt jt j¡#}dD ]}| t jt j|¡ |  || t jt j¡¡ qW d   ƒ d S 1 s0w   Y  d S )N)r   r   )	r   r   r   r   r  ÚSOL_CAN_RAWrã  rÕ   r  )rJ   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¡*}| tjtj|¡ |  	|| 
tjtjd¡¡ | tjtjt|ƒ¡ W d   ƒ d S 1 sBw   Y  d S )N)é   i   z=IIrn   )r   Úpackr   r   r   r   r  rä  ræ  rÕ   r  r  )rJ   Úcan_idZcan_maskZ
can_filterr#   r   r   r   Ú
testFilter
  s   ÿ"üzBasicCANTest.testFilterN)rQ   rR   rS   rn  rÁ   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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   rá   r¤   )rµ   r[   r§   r   r   r   r[     râ   zCANTest.__init__c                 C   s(   	 t |ƒ}| dd¡}t | j|||¡S )Nrn   ó    )r-  Úljustr   rè  ru   )Úclsré  ÚdataÚcan_dlcr   r   r   Úbuild_can_frame  s   zCANTest.build_can_framec                 C   s(   	 t  | j|¡\}}}|||d |… fS r5   )r   r   ru   )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#   Úrecvfromrt   rÕ   Úcfrr   ©rJ   rõ  rå   r   r   r   ÚtestSendFrame)  s   zCANTest.testSendFramec                 C   ó    |   dd¡| _| j | j¡ d S )Nr   s   ©rñ  rõ  rª   rÜ   rI   r   r   r   Ú_testSendFrame.  ó   zCANTest._testSendFramec                 C   s$   | j  | j¡\}}|  | j|¡ d S r5   )r#   rô  rt   rÕ   rõ  rö  r   r   r   ÚtestSendMaxFrame2  rU   zCANTest.testSendMaxFramec                 C   rø  )Nr   s   rù  rI   r   r   r   Ú_testSendMaxFrame6  rû  zCANTest._testSendMaxFramec                 C   óD   | j  | j¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r5   )r#   rô  rt   rÕ   Úcf1Úcf2rö  r   r   r   ÚtestSendMultiFrames:  ó   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   rI   r   r   r   Ú_testSendMultiFramesA  s   zCANTest._testSendMultiFramesr½  r¾  c                 C   sP   | j  | j¡\}}|  | j|¡ |  |¡\}}}|  | j|¡ |  | j|¡ d S r5   )rª   rô  rt   rÕ   rõ  ró  ré  rï  )rJ   rõ  rå   ré  rð  rï  r   r   r   Ú_testBCMH  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&   r½  rf   r!   rÏ   rr   ré  Úbytesrï  rñ  rõ  rÃ  r   rè  rw   rÜ   rÕ   r-  )rJ   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   ÚtestBCMQ  s4   ÷

zCANTest.testBCMNr¯   )rQ   rR   rS   r[   Úclassmethodrñ  ró  r÷  rú  rü  rý  r  r  rÁ   r¸  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                    ó   t ƒ j|i |¤Ž d| _d S ©Nrk   ©rZ   r[   rr   r_   rb   r   r   r[   t  ó   
zISOTPTest.__init__c                 C   s   t j t j t j t j d S r5   )r   r¼  r   r'   r&   rI   r   r   r   rn  x  s   
zISOTPTest.testCrucialConstantsc                 C   rØ  r5   rÙ  rP  r   r   r   rÚ  ~  rÛ  zISOTPTest.testCreateSocketr'   z(socket.CAN_ISOTP required for this test.c                 C   rØ  r5   )r   r   r&   r'   rP  r   r   r   ÚtestCreateISOTPSocket‚  rÝ  zISOTPTest.testCreateISOTPSocketc              	   C   s€   t   t jt jt j¡,}|  td¡ | d¡ W d   ƒ n1 s!w   Y  W d   ƒ d S W d   ƒ d S 1 s9w   Y  d S )Nrà  )rá  r   r¼   )r   r   r&   r'   rk  r   rq   rP  r   r   r   râ  ˆ  s   ÿÿ"ÿz"ISOTPTest.testTooLongInterfaceNamec              
   C   s¬   z2t   t jt jt j¡}| jddf}| |¡ |  | ¡ |¡ W d   ƒ W d S 1 s+w   Y  W d S  tyU } z|j	t	j
krI|  d| j ¡ n‚ W Y d }~d S d }~ww )Nr  iV  rp   )r   r   r&   r'   rr   rq   rÕ   r¹   r   r   ÚENODEVrs   ©rJ   r#   rå   rš   r   r   r   ÚtestBindŽ  s   
&ýÿý€þzISOTPTest.testBind)rQ   rR   rS   r[   rn  rÚ  rÁ   r¸  r   r   r  râ  r  ri   r   r   rb   r   r  q  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                    r  r  r  r_   rb   r   r   r[   Ÿ  r  zJ1939Test.__init__r)   z(socket.CAN_J1939 required for this test.c                 C   r¿  r5   )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_MAXrI   r   r   r   ÚtestJ1939Constants£  s0   
zJ1939Test.testJ1939Constantsc                 C   rØ  r5   )r   r   r&   r)   rP  r   r   r   ÚtestCreateJ1939SocketÆ  rÝ  zJ1939Test.testCreateJ1939Socketc              
   C   s´   z6t   t jt jt j¡!}| jt jt jt jf}| |¡ |  	| 
¡ |¡ W d   ƒ W d S 1 s/w   Y  W d S  tyY } z|jtjkrM|  d| j ¡ n‚ W Y d }~d S d }~ww ro   )r   r   r&   r)   rr   r  r"  r  rq   rÕ   r¹   r   r   r  rs   r  r   r   r   r  Ì  s   
&ýÿý€þzJ1939Test.testBind)rQ   rR   rS   r[   rÁ   r¸  r   r   r0  r1  r  ri   r   r   rb   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 r5   )r   ÚAF_RDSr-   rI   r   r   r   rn  Ý  s   
z!BasicRDSTest.testCrucialConstantsc                 C   s8   t   t jt jd¡	}W d   ƒ d S 1 sw   Y  d S r·   )r   r-   r.   rP  r   r   r   rÚ  á  s   "ÿzBasicRDSTest.testCreateSocketc                 C   s`   d}t   t jt jd¡}| t jt j|¡ | t jt j|¡ W d   ƒ d S 1 s)w   Y  d S )Ni @  r   )r   r-   r.   r  rl  Ú	SO_RCVBUFÚ	SO_SNDBUF)rJ   rt   r#   r   r   r   ÚtestSocketBufferSizeå  s
   "þz!BasicRDSTest.testSocketBufferSizeN)rQ   rR   rS   rn  rÚ  r6  r   r   r   r   r2  Ú  s    r2  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   rá   r¤   )r¶   r[   r§   r   r   r   r[   ï  râ   zRDSTest.__init__c                    s   t ƒ  ¡  t ¡ | _d S r5   )rZ   rK   r\   rˆ   ZevtrI   rb   r   r   rK   ò  rö   zRDSTest.setUpc                 C   s2   | j  | j¡\}}|  | j|¡ |  | j|¡ d S r5   )rE   rô  rt   rÕ   rï  rº   ©rJ   rï  rå   r   r   r   ÚtestSendAndRecvö  s   zRDSTest.testSendAndRecvc                 C   ó"   d| _ | j | j dt| jf¡ d S ©Nr  r   ©rï  rª   re  r¸   rG   rI   r   r   r   Ú_testSendAndRecvû  ó   zRDSTest._testSendAndRecvc                 C   sH   | j  | jtj¡\}}|  | j|¡ | j  | j¡\}}|  | j|¡ d S r5   )rE   rô  rt   r   ÚMSG_PEEKrÕ   rï  r8  r   r   r   ÚtestPeekÿ  s   zRDSTest.testPeekc                 C   r:  r;  r<  rI   r   r   r   Ú	_testPeek	  r>  zRDSTest._testPeekÚrecvmsgc                 C   s(   | j  | j¡\}}}}|  | j|¡ d S r5   )rE   rB  rt   rÕ   rï  )rJ   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ª   rE  r¸   rG   rI   r   r   r   Ú_testSendAndRecvMsg	  s    zRDSTest._testSendAndRecvMsgc                 C   rþ  r5   )rE   rô  rt   rÕ   Údata1Údata2r8  r   r   r   ÚtestSendAndRecvMulti	  r  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)rG  rª   re  r¸   rG   rH  rI   r   r   r   Ú_testSendAndRecvMulti	  s   zRDSTest._testSendAndRecvMultic                 C   sL   t   | jgg g d¡\}}}|  | j|¡ | j | j¡\}}|  | j|¡ d S )Ng      @)ÚselectrE   rM  rô  rt   rÕ   rï  )rJ   r   rb  rm   rï  rå   r   r   r   Ú
testSelect!	  s   zRDSTest.testSelectc                 C   r:  )Ns   selectr   r<  rI   r   r   r   Ú_testSelect'	  r>  zRDSTest._testSelectr¯   )rQ   rR   rS   r[   rK   r9  r=  r@  rA  r;  r   rD  rF  rI  rJ  rL  rM  ri   r   r   rb   r   r7  ì  s    




r7  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   ó
   t j d S r5   )r   r3   rI   r   r   r   rn  /	  r›  z%BasicQIPCRTRTest.testCrucialConstantsc                 C   ó6   t   t jt j¡	}W d   ƒ d S 1 sw   Y  d S r5   )r   r3   r&   rP  r   r   r   rÚ  2	  ó   "ÿz!BasicQIPCRTRTest.testCreateSocketc                 C   sJ   t   t jt j¡}|  | ¡ d d¡ W d   ƒ d S 1 sw   Y  d S ©Nr   r   )r   r3   r&   rÕ   r¹   rP  r   r   r   ÚtestUnbound6	  ó   "ÿzBasicQIPCRTRTest.testUnboundc                 C   s`   t   t jt j¡}tj|| ¡ d d |  | ¡ d d¡ W d   ƒ d S 1 s)w   Y  d S )Nr   r  r   )r   r3   r&   r   rF   r¹   ÚassertNotEqualrP  r   r   r   ÚtestBindSock:	  s   "þzBasicQIPCRTRTest.testBindSockc                 C   sJ   t   t jt j¡}| jttj|dd W d   ƒ d S 1 sw   Y  d S )NrÉ  r  )r   r3   r&   r\  r   r   rF   rP  r   r   r   ÚtestInvalidBindSock?	  rT  z$BasicQIPCRTRTest.testInvalidBindSockc                 C   sT   t   t jt j¡}| d¡ |  | ¡ d d¡ W d   ƒ d S 1 s#w   Y  d S )N)é{   rX  r   r   )r   r3   r&   rÏ   rU  r¹   rP  r   r   r   ÚtestAutoBindSockC	  s   
"þz!BasicQIPCRTRTest.testAutoBindSockN)	rQ   rR   rS   rn  rÚ  rS  rV  rW  rY  r   r   r   r   rN  +	  s    rN  c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚBasicVSOCKTestc                 C   rO  r5   )r   rÄ   rI   r   r   r   rn  M	  r›  z#BasicVSOCKTest.testCrucialConstantsc                 C   ru  r5   )	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   rI   r   r   r   ÚtestVSOCKConstantsP	  s   
z!BasicVSOCKTest.testVSOCKConstantsc                 C   rP  r5   )r   rÄ   r9   rP  r   r   r   rÚ  Z	  rQ  zBasicVSOCKTest.testCreateSocketc                 C   sü   t   t jt j¡l}| 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   ƒ d S 1 sww   Y  d S ©Nr¼   )	r   rÄ   r9   r  r^  r\  r]  r  rÕ   )rJ   r#   Zorig_maxrº  Zorig_minr   r   r   r6  ^	  sF   ÿÿÿ
ÿ
ÿ
ÿ
ÿÿ
ÿÿ
ÿÿ"ëz#BasicVSOCKTest.testSocketBufferSizeN)rQ   rR   rS   rn  ra  rÚ  r6  r   r   r   r   r[  H	  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p2ej d¡d¡dd„ ƒZdS )ÚBasicBluetoothTestc                 C   sR   t j t j t j t j tjdkr%t j t j t j	 tj 
d¡s't j d S d S d S )Nrö  rÏ  )r   Z
BDADDR_ANYZBDADDR_LOCALr8   r:   r¸  rÕ  ÚBTPROTO_HCIZSOL_HCIÚBTPROTO_L2CAPrÖ  ÚBTPROTO_SCOrI   r   r   r   ÚtestBluetoothConstants}	  s   

úz)BasicBluetoothTest.testBluetoothConstantsc                 C   rØ  r5   )r   r8   r9   r:   rP  r   r   r   ÚtestCreateRfcommSocket‹	  rÛ  z)BasicBluetoothTest.testCreateRfcommSocketrö  z&windows does not support L2CAP socketsc                 C   rØ  r5   )r   r8   r.   re  rP  r   r   r   ÚtestCreateL2capSocket	  ó   "ÿz(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketsc                 C   rØ  r5   )r   r8   r   rd  rP  r   r   r   ÚtestCreateHciSocket”	  rj  z&BasicBluetoothTest.testCreateHciSocketrÏ  z.windows and freebsd do not support SCO socketsc                 C   rØ  r5   )r   r8   r.   rf  rP  r   r   r   ÚtestCreateScoSocket™	  rÝ  z&BasicBluetoothTest.testCreateScoSocketN)rQ   rR   rS   rg  rh  rÁ   rº  r¸  rÕ  ri  rk  rÖ  rl  r   r   r   r   rc  y	  s    

ÿrc  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   rá   r¤   ©rà   r[   r§   r   r   r   r[   ¢	  râ   zBasicTCPTest.__init__c                 C   ó   | j  d¡}|  |t¡ d S rÐ   )rã   rÒ   rÕ   rÖ   r_  r   r   r   ÚtestRecv¥	  s   zBasicTCPTest.testRecvc                 C   ó   | j  t¡ d S r5   ©rç   rÜ   rÖ   rI   r   r   r   Ú	_testRecvª	  r  zBasicTCPTest._testRecvc                 C   s8   | j  ttƒd ¡}| j  d¡}|| }|  |t¡ d S ©Né   rÑ   )rã   rÒ   r-  rÖ   rÕ   )rJ   Úseg1Úseg2r×   r   r   r   ÚtestOverFlowRecv­	  s   zBasicTCPTest.testOverFlowRecvc                 C   rq  r5   rr  rI   r   r   r   Ú_testOverFlowRecv´	  r  zBasicTCPTest._testOverFlowRecvc                 C   s    | j  d¡\}}|  |t¡ d S rÐ   )rã   rô  rÕ   rÖ   ©rJ   r×   rå   r   r   r   ÚtestRecvFrom·	  ó   zBasicTCPTest.testRecvFromc                 C   rq  r5   rr  rI   r   r   r   Ú_testRecvFrom¼	  r  zBasicTCPTest._testRecvFromc                 C   s@   | j  ttƒd ¡\}}| j  d¡\}}|| }|  |t¡ d S rt  )rã   rô  r-  rÖ   rÕ   )rJ   rv  rå   rw  r×   r   r   r   ÚtestOverFlowRecvFrom¿	  s   z!BasicTCPTest.testOverFlowRecvFromc                 C   rq  r5   rr  rI   r   r   r   Ú_testOverFlowRecvFromÆ	  r  z"BasicTCPTest._testOverFlowRecvFromc                 C   s2   d}	 | j  d¡}|sn||7 }q|  |d¡ d S )Nó    r   rÑ   ó   ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)rã   rÒ   rÕ   )rJ   r×   Úreadr   r   r   ÚtestSendAllÉ	  s   üzBasicTCPTest.testSendAllc                 C   s   d}| j  |¡ d S )Nr  )rç   rH  )rJ   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ã   rN  r   ÚfromfdrD   r9   rf   r!   rG  rÒ   rÕ   rÖ   )rJ   r—  r  r×   r   r   r   Ú
testFromFd×	  s   

zBasicTCPTest.testFromFdc                 C   rq  r5   rr  rI   r   r   r   Ú_testFromFdà	  r  zBasicTCPTest._testFromFdc                 C   s0   | j  ¡ }|  |j¡ | d¡}|  |t¡ d S rÐ   )rã   Úduprf   r!   rÒ   rÕ   rÖ   )rJ   r  r×   r   r   r   ÚtestDupã	  s   

zBasicTCPTest.testDupc                 C   rq  r5   rr  rI   r   r   r   Ú_testDupê	  r  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 rb  )rç   rÜ   rÖ   ÚshutdownrI   r   r   r   Ú_testShutdownö	  ó   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±  rŒ  rÌ  ÚUINT_MAX©rJ   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ã   rN  r‘  rÕ   rE  Ú_closedr\  r   rÒ   r!   r   rD   r9   rf   rÖ   )rJ   rN  r   r  r×   r   r   r   Ú
testDetach
  s   



zBasicTCPTest.testDetachc                 C   rq  r5   rr  rI   r   r   r   Ú_testDetach
  r  zBasicTCPTest._testDetachNr¯   )rQ   rR   rS   r[   rp  rs  rx  ry  r{  r}  r~  r  rƒ  r„  r†  r‡  r‰  rŠ  r‹  r  r   r¹  ZtestShutdown_overflowr‘  r“  r”  r   r   r   r   rm   	  s.    

		


rm  c                   @   óF   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   rá   r¤   )r²   r[   r§   r   r   r   r[   
  râ   zBasicUDPTest.__init__c                 C   ó    | j  ttƒ¡}|  |t¡ d S r5   ©rE   rÒ   r-  rÖ   rÕ   r_  r   r   r   ÚtestSendtoAndRecv 
  r|  zBasicUDPTest.testSendtoAndRecvc                 C   ó   | j  tdt| jf¡ d S r·   ©rª   re  rÖ   r¸   rG   rI   r   r   r   Ú_testSendtoAndRecv%
  r´   zBasicUDPTest._testSendtoAndRecvc                 C   ó$   | j  ttƒ¡\}}|  |t¡ d S r5   ©rE   rô  r-  rÖ   rÕ   rz  r   r   r   r{  (
  ó   zBasicUDPTest.testRecvFromc                 C   rš  r·   r›  rI   r   r   r   r}  -
  r´   zBasicUDPTest._testRecvFromc                 C   ó   |   t| jjd¡ d S ©Nr¬  ©r\  rÝ  rE   rô  rI   r   r   r   ÚtestRecvFromNegative0
  r8  z!BasicUDPTest.testRecvFromNegativec                 C   rš  r·   r›  rI   r   r   r   Ú_testRecvFromNegative4
  r´   z"BasicUDPTest._testRecvFromNegativeNr¯   ©
rQ   rR   rS   r[   r™  rœ  r{  r}  r£  r¤  r   r   r   r   r–  
  s    
r–  c                   @   r•  )ÚBasicUDPLITETestr¢   c                 C   rá   r¤   )r³   r[   r§   r   r   r   r[   <
  râ   zBasicUDPLITETest.__init__c                 C   r—  r5   r˜  r_  r   r   r   r™  ?
  r|  z"BasicUDPLITETest.testSendtoAndRecvc                 C   rš  r·   r›  rI   r   r   r   rœ  D
  r´   z#BasicUDPLITETest._testSendtoAndRecvc                 C   r  r5   rž  rz  r   r   r   r{  G
  rŸ  zBasicUDPLITETest.testRecvFromc                 C   rš  r·   r›  rI   r   r   r   r}  L
  r´   zBasicUDPLITETest._testRecvFromc                 C   r   r¡  r¢  rI   r   r   r   r£  O
  r8  z%BasicUDPLITETest.testRecvFromNegativec                 C   rš  r·   r›  rI   r   r   r   r¤  S
  r´   z&BasicUDPLITETest._testRecvFromNegativeNr¯   r¥  r   r   r   r   r¦  8
  s    
r¦  c                       s‚   e Zd ZejZ‡ fdd„Zdd„ ZdZdd„ Z	dd	„ Z
d
d„ Zdd„ ZdZdD ]
ZeeeedƒO Zq'dZdZdZddd„Z‡  ZS )ÚSendrecvmsgBasec                    s   t  ¡ | _tƒ  ¡  d S r5   )r\   rˆ   Ú
misc_eventrZ   rK   rI   rb   r   r   rK   x
  rö   zSendrecvmsgBase.setUpc                 C   s   | j  |¡S r5   )Úcli_sockrÜ   r_  r   r   r   ÚsendToServer|
  s   zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|ƒd …  Ž S r5   )r©  rE  Úsendmsg_to_server_defaultsr-  ©rJ   r`   r   r   r   ÚsendmsgToServer„
  s   ÿzSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|¢R Ž }|  |¡ |S r5   )rB  ÚregisterRecvmsgResult)rJ   r  rt   r`   Úresultr   r   r   Ú	doRecvmsgŒ
  s   
zSendrecvmsgBase.doRecvmsgc                 C   rë   r5   r   ©rJ   r¯  r   r   r   r®  –
  s   z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |   ||¡ d S r5   ©rÕ   ©rJ   Zaddr1Zaddr2r   r   r   ÚcheckRecvmsgAddressœ
  ó   z#SendrecvmsgBase.checkRecvmsgAddressr   )Ú
MSG_CTRUNCÚMSG_OOBNc           
      C   s¬   | j }| j}|r|| jO }|| jO }n|d ur!|| jO }|| jO }|| M }|| M }||O }||O }||@ | @ }|rCt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Õ   )
rJ   r)  ÚeorÚchecksetÚ
checkunsetÚignoreZ
defaultsetZdefaultunsetZinbothrÇ  r   r   r   Ú
checkFlags±
  s&   




ÿzSendrecvmsgBase.checkFlags)Nr   r   r   )rQ   rR   rS   r   ÚLOOPBACK_TIMEOUTÚfail_timeoutrK   rª  r«  r­  r°  r®  r´  r¹  r1  r   r   r¸  rº  r»  rÁ  ri   r   r   rb   r   r§  q
  s     
r§  c                   @   rV   )ÚRecvmsgIntoMixinc                 G   sh   t |ƒ}|j|gg|¢R Ž }|  |¡ |  |d d¡ |  |d |¡ t|d |d … ƒf|dd …  S rB  )r  Úrecvmsg_intor®  ÚassertGreaterEqualÚassertLessEqualr  )rJ   r  rt   r`   Úbufr¯  r   r   r   r°  ë
  s   
"zRecvmsgIntoMixin.doRecvmsgN)rQ   rR   rS   r°  r   r   r   r   rÄ  è
  ó    rÄ  c                       ó    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚSendrecvmsgDgramFlagsBasec                    ó   t ƒ jtjB S r5   )rZ   r»  r   Ú	MSG_TRUNCrI   rb   r   r   r»  ÷
  ó   z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rQ   rR   rS   Úpropertyr»  ri   r   r   rb   r   rË  ô
  ó    rË  c                       rÊ  )ÚSendrecvmsgSCTPFlagsBasec                    rÌ  r5   )rZ   rº  r   ÚMSG_EORrI   rb   r   r   rº  ÿ
  rÎ  z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rQ   rR   rS   rÏ  rº  ri   r   r   rb   r   rÑ  ü
  rÐ  rÑ  c                   @   s8   e Zd Zedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zd	S )
ÚSendrecvmsgConnectionlessBasec                 C   rœ  r5   )rE   rI   r   r   r   Ú	serv_sock	  ó   z'SendrecvmsgConnectionlessBase.serv_sockc                 C   rœ  r5   )rª   rI   r   r   r   r©    rÕ  z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS r·   )ró   rI   r   r   r   r«    rÎ  z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j  || j¡S r5   )r©  re  ró   r_  r   r   r   rª    r  z*SendrecvmsgConnectionlessBase.sendToServerN)rQ   rR   rS   rÏ  rÔ  r©  r«  rª  r   r   r   r   rÓ    s    


rÓ  c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚSendrecvmsgConnectedBasec                 C   rœ  r5   )rã   rI   r   r   r   rÔ    rÕ  z"SendrecvmsgConnectedBase.serv_sockc                 C   rœ  r5   )rç   rI   r   r   r   r©  #  rÕ  z!SendrecvmsgConnectedBase.cli_sockc                 C   rë   r5   r   r³  r   r   r   r´  '  ó   z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rQ   rR   rS   rÏ  rÔ  r©  r´  r   r   r   r   rÖ    s    

rÖ  c                       ó   e Zd Z‡ fdd„Z‡  ZS )ÚSendrecvmsgServerTimeoutBasec                    ó   t ƒ  ¡  | j | j¡ d S r5   )rZ   rK   rÔ  r  rÃ  rI   rb   r   r   rK   0  ó   
z"SendrecvmsgServerTimeoutBase.setUpr÷   r   r   rb   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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   ó   |   | j ttƒ¡t¡ d S r5   ©rÕ   rÔ  rÒ   r-  rÖ   rI   r   r   r   ÚtestSendmsg9  ó   zSendmsgTests.testSendmsgc                 C   s   |   |  tg¡ttƒ¡ d S r5   ©rÕ   r­  rÖ   r-  rI   r   r   r   Ú_testSendmsg=  ó   zSendmsgTests._testSendmsgc                 C   rÝ  r5   rÞ  rI   r   r   r   ÚtestSendmsgDataGenerator@  rà  z%SendmsgTests.testSendmsgDataGeneratorc                 C   s&   |   |  dd„ tfD ƒ¡ttƒ¡ d S )Nc                 s   r6  r5   r   r>  r   r   r   r7  E  r8  z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rá  rI   r   r   r   Ú_testSendmsgDataGeneratorD  s   ÿz&SendmsgTests._testSendmsgDataGeneratorc                 C   rÝ  r5   rÞ  rI   r   r   r   ÚtestSendmsgAncillaryGeneratorH  rà  z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |   |  tgdd„ dD ƒ¡ttƒ¡ d S )Nc                 s   r6  r5   r   r>  r   r   r   r7  M  r8  z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   rá  rI   r   r   r   Ú_testSendmsgAncillaryGeneratorL  s   ÿz+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   rÝ  r5   rÞ  rI   r   r   r   ÚtestSendmsgArrayP  rà  zSendmsgTests.testSendmsgArrayc                 C   s$   |   |  t dt¡g¡ttƒ¡ d S )NÚB)rÕ   r­  ÚarrayrÖ   r-  rI   r   r   r   Ú_testSendmsgArrayT  s   ÿzSendmsgTests._testSendmsgArrayc                 C   rÝ  r5   rÞ  rI   r   r   r   ÚtestSendmsgGatherX  rà  zSendmsgTests.testSendmsgGatherc                 C   ó.   |   |  td d… tdd … g¡ttƒ¡ d S ©Nru  rá  rI   r   r   r   Ú_testSendmsgGather\  s   .zSendmsgTests._testSendmsgGatherc                 C   ó   |   | j d¡d¡ d S ©Nr­  ó   done©rÕ   rÔ  rÒ   rI   r   r   r   ÚtestSendmsgBadArgs_  ó   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™   r©  rE  r­  ÚobjectrÖ   rª  rI   r   r   r   Ú_testSendmsgBadArgsc  s.   
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
ÿz SendmsgTests._testSendmsgBadArgsc                 C   rð  rñ  ró  rI   r   r   r   ÚtestSendmsgBadCmsgu  rõ  zSendmsgTests.testSendmsgBadCmsgc                 C   s¬   |   t| jtgtƒ g¡ |   t| jtgtƒ ddfg¡ |   t| jtgdtƒ dfg¡ |   t| jtgddtƒ fg¡ |   t| jtgdg¡ |   t| jtgdg¡ |  d¡ d S )Nr   ó   data)r   r   )r   r   rù  rƒ  rò  ©r\  r™   r­  rÖ   rö  rª  rI   r   r   r   Ú_testSendmsgBadCmsgy  s&   

ÿ
ÿ
ÿ
ÿ
ÿ
ÿz SendmsgTests._testSendmsgBadCmsgÚ
CMSG_SPACEc                 C   rð  rñ  ró  rI   r   r   r   ÚtestSendmsgBadMultiCmsgˆ  s   z$SendmsgTests.testSendmsgBadMultiCmsgc                 C   s@   |   t| jtgg d¢¡ |   t| jtgdtƒ g¡ |  d¡ d S )N©r   r   r€  rò  rú  rI   r   r   r   Ú_testSendmsgBadMultiCmsgŽ  s   

ÿ
ÿz%SendmsgTests._testSendmsgBadMultiCmsgc                 C   rð  rñ  ró  rI   r   r   r   ÚtestSendmsgExcessCmsgReject–  ó   z(SendmsgTests.testSendmsgExcessCmsgRejectc                 C   sb   t tdƒs*|  t¡}|  tgddg¡ W d   ƒ n1 sw   Y  |  |jj¡ |  	d¡ d S )Nrü  rþ  rò  )
r   r   r\  r   r­  rÖ   ÚassertIsNonerf  r   rª  ©rJ   rh  r   r   r   Ú_testSendmsgExcessCmsgReject›  s   
ÿz)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   rë   r5   r   rI   r   r   r   ÚtestSendmsgAfterClose£  s   z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j  ¡  |  t| jtg¡ d S r5   )r©  r!   r\  r   r­  rÖ   rI   r   r   r   Ú_testSendmsgAfterClose§  s   
z#SendmsgTests._testSendmsgAfterCloseN)rQ   rR   rS   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Ü  5  s.    

rÜ  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   rÝ  r5   rÞ  rI   r   r   r   ÚtestSendmsgExplicitNoneAddr°  rà  z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |   |  tgg dd ¡ttƒ¡ d S r·   rá  rI   r   r   r   Ú_testSendmsgExplicitNoneAddr´  s   "z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   ó.   |   | j d¡d¡ |  | jj| jd¡ d S ©Nrç  ó   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa©r>   ©rÕ   rÔ  rÒ   rE  r¨  r“   rÃ  rI   r   r   r   ÚtestSendmsgTimeout·  s   z%SendmsgStreamTests.testSendmsgTimeoutc              
   C   sŽ   z@| j  d¡ z	 |  dg¡ q	 ty   Y n ty0 } z|jtjkr&‚ W Y d }~nd }~ww W | j 	¡  d S W | j 	¡  d S | j 	¡  w )Nç¸…ëQ¸ž?Tr  )
r©  r  r­  rJ  r   r   ÚENOMEMrX  r¨  r~   ©rJ   rØ   r   r   r   Ú_testSendmsgTimeout¼  s$   ÿÿ€ÿÿ	ùz&SendmsgStreamTests._testSendmsgTimeout>   rÐ  z<MSG_DONTWAIT not known to work on this platform when sendingc                 C   r
  r  r  rI   r   r   r   ÚtestSendmsgDontWaitÓ  s   z&SendmsgStreamTests.testSendmsgDontWaitc                 C   sl   z/|   t¡}	 |  dgg tj¡ q1 sw   Y  |  |jjtjtj	tj
f¡ W | j ¡  d S | j ¡  w )NTr  )r\  r   r­  r   ÚMSG_DONTWAITrM  rf  r   ÚEAGAINÚEWOULDBLOCKr  r¨  r~   r  r   r   r   Ú_testSendmsgDontWaitÛ  s   ÿÿ
ÿz'SendmsgStreamTests._testSendmsgDontWaitN)rQ   rR   rS   r  r	  r  r  r.  r¸  rÕ  r  r'  r  r   r   r   r   r  ¬  s    
ÿ
r  c                   @   rB   )ÚSendmsgConnectionlessTestsc                 C   rë   r5   r   rI   r   r   r   ÚtestSendmsgNoDestAddrî  r×  z0SendmsgConnectionlessTests.testSendmsgNoDestAddrc                 C   s2   |   t| jjtg¡ |   t| jjtgg dd ¡ d S r·   )r\  r   r©  rE  rÖ   rI   r   r   r   Ú_testSendmsgNoDestAddró  s   ÿ
ÿz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rQ   rR   rS   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©r½  ©r°  rÔ  r-  rÖ   rÕ   r´  rº   rÁ  ©rJ   r×   rC  r)  rå   r   r   r   ÚtestRecvmsgþ  s
   zRecvmsgGenericTests.testRecvmsgc                 C   ó   |   t¡ d S r5   ©rª  rÖ   rI   r   r   r   Ú_testRecvmsg  rR  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	  ó   
ÿz/RecvmsgGenericTests.testRecvmsgExplicitDefaultsc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgExplicitDefaults  rR  z0RecvmsgGenericTests._testRecvmsgExplicitDefaultsc                 C   sV   |   | jttƒd ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nrƒ  Tr  r  r   r   r   r   ÚtestRecvmsgShorter  r&  z&RecvmsgGenericTests.testRecvmsgShorterc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgShorter  rR  z'RecvmsgGenericTests._testRecvmsgShorterc                 C   s^   |   | jttƒd ¡\}}}}|  |td d… ¡ |  || j¡ |  |g ¡ | j|dd d S )Nru  éýÿÿÿFr  r  r   r   r   r   ÚtestRecvmsgTrunc!  s   
ÿz$RecvmsgGenericTests.testRecvmsgTruncc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgTrunc*  rR  z%RecvmsgGenericTests._testRecvmsgTruncc                 C   óT   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j|dd d S )Nr   Tr  r  r   r   r   r   ÚtestRecvmsgShortAncillaryBuf-  ó   ÿz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgShortAncillaryBuf6  rR  z1RecvmsgGenericTests._testRecvmsgShortAncillaryBufc                 C   r-  )Né (  Tr  r  r   r   r   r   ÚtestRecvmsgLongAncillaryBuf9  r/  z/RecvmsgGenericTests.testRecvmsgLongAncillaryBufc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgLongAncillaryBufB  rR  z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j  ¡  |  t| j| j d¡ d S rÐ   )rÔ  r!   r\  r   r°  rI   r   r   r   ÚtestRecvmsgAfterCloseE  s   
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   rë   r5   r   rI   r   r   r   Ú_testRecvmsgAfterCloseJ  rì   z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sB   z| j  d¡ |  t| j| j ttƒ¡ W | j ¡  d S | j ¡  w )Nr  )	rÔ  r  r\  rJ  r°  r-  rÖ   r¨  r~   rI   r   r   r   ÚtestRecvmsgTimeoutM  s   ÿz&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |   | jj| jd¡ d S ©Nr  )rE  r¨  r“   rÃ  rI   r   r   r   Ú_testRecvmsgTimeoutV  r´   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 )	Nru  r   r*  FrÍ  ©r½  rÀ  Tr  )r°  rÔ  r-  rÖ   r   r?  rÕ   r´  rº   rÁ  r   r   r   r   r   ÚtestRecvmsgPeekY  s.   þ
ÿþz#RecvmsgGenericTests.testRecvmsgPeekc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgPeek|  rÎ  z$RecvmsgGenericTests._testRecvmsgPeekrE  c                 C   s`   | j  | j¡ |  | j ttƒ¡\}}}}|  |t¡ |  || j¡ |  |g ¡ | j	|dd d S r  )
rÔ  r  rÃ  r°  r-  rÖ   rÕ   r´  rº   rÁ  r   r   r   r   ÚtestRecvmsgFromSendmsg€  s   z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   rí  rî  rá  rI   r   r   r   Ú_testRecvmsgFromSendmsg‹  s   .z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rQ   rR   rS   r!  r$  r%  r'  r(  r)  r+  r,  r.  r0  r2  r3  r4  r5  r6  r8  r;  r   r:  r'  r;  r<  r=  r   r   r   r   r  ú  s2    						
"



r  c                   @   rZ  )
ÚRecvmsgGenericStreamTestsc                 C   sN   |   | jd¡\}}}}|  |d¡ |  || j¡ |  |g ¡ | j|d d d S )NrÑ   r€  r  )r°  rÔ  rÕ   r´  rº   rÁ  r   r   r   r   ÚtestRecvmsgEOF”  s
   z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C   ó   | j  ¡  d S r5   )r©  r!   rI   r   r   r   Ú_testRecvmsgEOFœ  rR  z)RecvmsgGenericStreamTests._testRecvmsgEOFc                 C   sœ   |   | jttƒd ¡\}}}}|  || j¡ |  |g ¡ | j|dd |   | jd¡\}}}}|  || j¡ |  |g ¡ | j|dd || }|  |t¡ d S )Nru  Fr  rÑ   T)r°  rÔ  r-  rÖ   r´  rº   rÕ   rÁ  )rJ   rv  rC  r)  rå   rw  r×   r   r   r   ÚtestRecvmsgOverflowŸ  s   
ÿz-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgOverflow¯  rR  z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rQ   rR   rS   r?  rA  rB  rC  r   r   r   r   r>    s
    r>  c                   @   rB   )ÚRecvmsgTestsc                 C   s   |   t| jj¡ |   t| jjddd¡ |   t| jjttƒdd¡ |   t| jjtdƒgdd¡ |   t| jjtƒ dd¡ |   t| jjttƒtƒ d¡ |   t| jjttƒdtƒ ¡ | j ttƒdd¡\}}}}|  	|t¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nr¬  r   rÛ  Tr  )r\  r™   rÔ  rB  rÝ  r-  rÖ   r  rö  rÕ   r´  rº   rÁ  r   r   r   r   ÚtestRecvmsgBadArgs¶  s0   ÿ
ÿÿÿÿÿzRecvmsgTests.testRecvmsgBadArgsc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgBadArgsÌ  rR  z RecvmsgTests._testRecvmsgBadArgsN)rQ   rR   rS   rE  rF  r   r   r   r   rD  ³  s    rD  c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚRecvmsgIntoTestsc                 C   sL  t ttƒƒ}|  t| jj¡ |  t| jjttƒdd¡ |  t| jj|dd¡ |  t| jjtƒ gdd¡ |  t| jjdgdd¡ |  t| jj|tƒ gdd¡ |  t| jj|gdd¡ |  t| jj|gtƒ d¡ |  t| jj|gdtƒ ¡ | j |gdd¡\}}}}|  	|ttƒ¡ |  	|t tƒ¡ |  
|| j¡ |  	|g ¡ | j|dd d S )Nr   s   I'm not writabler¬  Tr  )r  r-  rÖ   r\  r™   rÔ  rÅ  rö  rÝ  rÕ   r´  rº   rÁ  ©rJ   rÈ  ÚnbytesrC  r)  rå   r   r   r   ÚtestRecvmsgIntoBadArgsÓ  s@   
ÿÿ
ÿÿÿÿ
ÿ
ÿz'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgIntoBadArgsï  rR  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   r6  r5   r   r>  r   r   r   r7  ö  r8  z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr  )	r  r-  rÖ   rÔ  rÅ  rÕ   r´  rº   rÁ  rH  r   r   r   ÚtestRecvmsgIntoGeneratorò  s   ÿz)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgIntoGeneratorý  rR  z*RecvmsgIntoTests._testRecvmsgIntoGeneratorc                 C   sx   t   ddgttƒ ¡}| j |g¡\}}}}|  |ttƒ¡ |  | ¡ t¡ |  || j¡ |  |g ¡ | j	|dd d S )Nré  r   Tr  )
rê  r-  rÖ   rÔ  rÅ  rÕ   Útobytesr´  rº   rÁ  rH  r   r   r   ÚtestRecvmsgIntoArray   s   z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   r"  r5   r#  rI   r   r   r   Ú_testRecvmsgIntoArray
  rR  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  rÔ  rÅ  Ú
memoryviewrÕ   r-  r´  rº   rÁ  )rJ   Úb1Úb2Zb3rI  rC  r)  rå   r   r   r   ÚtestRecvmsgIntoScatter  s   ÿz'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   rN  )NrR  )rª  rI   r   r   r   Ú_testRecvmsgIntoScatter  rR  z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rQ   rR   rS   rJ  rK  rL  rM  rO  rP  rV  rW  r   r   r   r   rG  Ð  s    
rG  c                   @   s`   e Zd ZzddlZW n ey   dZY nw 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 ]}t |¡}|  |t d¡ |¡ |  	|| j ¡ q*|  
ttjd¡ |  
ttj|¡ |  
ttjtj¡ d S )Nr   r   é  rA   r¼   r¬  )Úsocklen_t_limitr   rY  Úlistrm  r¥  rê  ÚitemsizerÕ   rÇ  r\  r±  r¸  Úmaxsize)rJ   Útoobigr•  Ú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 	d¡ ¡ |  
|| j ¡ |}q,|  ttjd¡ |  ttj|¡ |  ttjtj¡ d S )Nr   rZ  r   rA   r¼   r¬  )r[  r   rü  r\  rm  r¥  rê  r]  rÆ  rY  rÇ  r\  r±  r¸  r^  )rJ   r_  r•  Úlastr`  ra  r   r   r   ÚtestCMSG_SPACEB  s   

zCmsgMacroTests.testCMSG_SPACE)rQ   rR   rS   rË  rý  r[  ÚminrÌ  r;  r   rb  rd  r   r   r   r   rX     s    ÿ
rX  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/dedQdR„Z0dSdT„ Z1dUdV„ Z2dWdX„ Z3dYdZ„ Z4d[d\„ Z5d]d^„ Z6d_d`„ Z7dadb„ Z8dcS )fÚSCMRightsTesti«ªÿÿc                 C   s\   g }t |ƒD ]%}t ¡ \}}|  tj|¡ |  tj|¡ t |t|ƒ 	¡ ¡ | 
|¡ q|S r5   )rm  rý   Úmkstemprf   r   r  r!   Úwriter<  ÚencodeÚappend)rJ   r`  ÚfdsrA   r—  r  r   r   r   ÚnewFDsc  s   zSCMRightsTest.newFDsc                 C   sB   t |ƒD ]\}}t |dtj¡ |  t |d¡t|ƒ ¡ ¡ qd S )Nr   rÑ   )Ú	enumerater   ÚlseekÚSEEK_SETrÕ   r‚  r<  ri  )rJ   rk  r`  r—  r   r   r   ÚcheckFDso  s   þzSCMRightsTest.checkFDsc                 C   s   |   | j|¡ d S r5   )rf   ÚcloseRecvmsgFDsr±  r   r   r   r®  v  râ   z#SCMRightsTest.registerRecvmsgResultc                 C   sn   |d D ]0\}}}|t jkr4|t jkr4t d¡}| |d t|ƒt|ƒ|j  … ¡ |D ]}t |¡ q,qd S )Nr   rA   )	r   rl  Ú
SCM_RIGHTSrê  Ú	frombytesr-  r]  r   r!   )rJ   Zrecvmsg_resultÚ
cmsg_levelÚ	cmsg_typeÚ	cmsg_datark  r—  r   r   r   rq  y  s   


ÿ€ùzSCMRightsTest.closeRecvmsgFDsc                 C   s8   |   |  tgtjtjt d|  |¡¡fg¡ttƒ¡ d S )NrA   )	rÕ   r­  rÖ   r   rl  rr  rê  rl  r-  )rJ   r`  r   r   r   ÚcreateAndSendFDs…  s   þÿûzSCMRightsTest.createAndSendFDsr   r   c                 C   sä   |\}}}}|   |t¡ |  || j¡ | j|dtj|d |  |t¡ |  	t
|ƒ|¡ t d¡}	|D ]0}
|  |
t¡ |
\}}}|   |tj¡ |   |tj¡ |  |t¡ |   t
|ƒt d¡ |	 |¡ q2|   t
|	ƒ|¡ |  |	¡ d S )NT©r½  r¿  rÀ  rA   r   )rÕ   rÖ   r´  rº   rÁ  r   r¶  rG  r\  rÇ  r-  rê  Útuplerl  rr  r  Ú
SIZEOF_INTrs  rp  )rJ   Znumfdsr¯  ÚmaxcmsgsÚignoreflagsr×   rC  r)  rå   rk  Úitemrt  ru  rv  r   r   r   ÚcheckRecvmsgFDs  s&   ÿ

zSCMRightsTest.checkRecvmsgFDsc                 C   ó    |   d|  | jttƒd¡¡ d S )Nr   r1  ©r~  r°  rÔ  r-  rÖ   rI   r   r   r   ÚtestFDPassSimpleª  ó   
ÿzSCMRightsTest.testFDPassSimplec                 C   s<   |   |  tgtjtjt d|  d¡¡ ¡ fg¡t	tƒ¡ d S )NrA   r   )
rÕ   r­  rÖ   r   rl  rr  rê  rl  rN  r-  rI   r   r   r   Ú_testFDPassSimple¯  s   þþúzSCMRightsTest._testFDPassSimplec                 C   r  )Nrd  r1  r€  rI   r   r   r   ÚtestMultipleFDPass¸  r‚  z SCMRightsTest.testMultipleFDPassc                 C   rN  ©Nrd  ©rw  rI   r   r   r   Ú_testMultipleFDPass½  rR  z!SCMRightsTest._testMultipleFDPassrü  c                 C   s*   |   d|  | jttƒt dt ¡¡¡ d S r…  )r~  r°  rÔ  r-  rÖ   r   rü  rz  rI   r   r   r   ÚtestFDPassCMSG_SPACEÀ  s
   ÿÿz"SCMRightsTest.testFDPassCMSG_SPACEc                 C   rN  r…  r†  rI   r   r   r   Ú_testFDPassCMSG_SPACEÇ  rÎ  z#SCMRightsTest._testFDPassCMSG_SPACEc              
   C   s0   | j d|  | jttƒt dt ¡¡tjd d S )Nr   rd  ©r|  )	r~  r°  rÔ  r-  rÖ   r   rY  rz  r¶  rI   r   r   r   ÚtestFDPassCMSG_LENË  s   ÿ
úz SCMRightsTest.testFDPassCMSG_LENc                 C   rN  r  r†  rI   r   r   r   Ú_testFDPassCMSG_LENÕ  rR  z!SCMRightsTest._testFDPassCMSG_LENrw  zskipping, see issue #12958zskipping, see issue #22397c                 C   s$   | j d|  | jttƒd¡dd d S )Nr¼   r1  )r{  r€  rI   r   r   r   ÚtestFDPassSeparateØ  s   
þz SCMRightsTest.testFDPassSeparatec                 C   óX   |   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¼   rA   ©	rl  rÕ   r­  rÖ   r   rl  rr  rê  r-  ©rJ   Zfd0Úfd1r   r   r   Ú_testFDPassSeparateâ  ó   þþýùz!SCMRightsTest._testFDPassSeparatec                 C   s@   d}| j ||  | jttƒt t¡t t| ¡ ¡dtj	d d S )Nr¼   )r{  r|  )
r~  r°  rÔ  r-  rÖ   r   rü  rz  rY  r¶  )rJ   Znum_fdsr   r   r   ÚtestFDPassSeparateMinSpaceð  s   ÿÿ
üz(SCMRightsTest.testFDPassSeparateMinSpacec                 C   rŽ  r  r  r‘  r   r   r   Ú_testFDPassSeparateMinSpaceý  r”  z)SCMRightsTest._testFDPassSeparateMinSpacec              
   C   sf   z	|   |g|¡}W n ty( } z|  |jt¡ |   |g¡}W Y d }~nd }~ww |  |t|ƒ¡ d S r5   )r­  r   rG  r   r¤  rÕ   r-  )rJ   r×   rC  rI  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   r1  rŠ  )r~  r°  rÔ  r-  rÖ   r   r¶  rI   r   r   r   ÚtestFDPassEmpty  s
   ÿ
þzSCMRightsTest.testFDPassEmptyc                 C   s   |   ttjtjdfg¡ d S ©Nr€  )r—  rÖ   r   rl  rr  rI   r   r   r   Ú_testFDPassEmpty  s   
þzSCMRightsTest._testFDPassEmptyc                 C   s˜   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ |D ]\}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ q.d S )Nr1  Tr9  r   )r°  rÔ  r-  rÖ   rÕ   r´  rº   rÁ  r   r¶  rÇ  rl  rr  Ú
assertLessrz  ©rJ   r×   rC  r)  rå   rt  ru  rv  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 )NrA   r¬  )r—  rÖ   r   rl  rr  rê  ÚbadfdrN  rI   r   r   r   Ú_testFDPassPartialInt0  s   þþz#SCMRightsTest._testFDPassPartialIntc           	      C   sÐ   |   | jttƒd¡\}}}}|  |t¡ |  || j¡ | j|dtj	d |  
t|ƒd¡ t d¡}|D ]%\}}}|  |tj¡ |  |tj¡ | |d t|ƒt|ƒ|j  … ¡ q3|  
t|ƒd¡ |  |¡ d S )Nr1  Tr9  r¼   rA   )r°  rÔ  r-  rÖ   rÕ   r´  rº   rÁ  r   r¶  rÇ  rê  rl  rr  rs  r]  rp  )	rJ   r×   rC  r)  rå   rk  rt  ru  rv  r   r   r   ÚtestFDPassPartialIntInMiddle7  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¼   rA   r¬  )	rl  r—  rÖ   r   rl  rr  rê  rž  rN  r‘  r   r   r   Ú_testFDPassPartialIntInMiddleJ  s   þþýþz+SCMRightsTest._testFDPassPartialIntInMiddlec                 C   sJ   |\}}}}|   |t¡ |  || j¡ |   |g ¡ | j|dtj|d d S )NT©r½  r¾  rÀ  )rÕ   rÖ   r´  rº   rÁ  r   r¶  )rJ   r¯  r|  r×   rC  r)  rå   r   r   r   ÚcheckTruncatedHeaderV  s   
ÿz"SCMRightsTest.checkTruncatedHeaderc                 C   s"   | j |  | jttƒ¡tjd d S ©NrŠ  ©r£  r°  rÔ  r-  rÖ   r   r¶  rI   r   r   r   ÚtestCmsgTruncNoBufSize`  s   
üz$SCMRightsTest.testCmsgTruncNoBufSizec                 C   rN  r  r†  rI   r   r   r   Ú_testCmsgTruncNoBufSizei  rR  z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j |  | jttƒd¡tjd d S )Nr   rŠ  r¥  rI   r   r   r   ÚtestCmsgTrunc0l  s   
ÿzSCMRightsTest.testCmsgTrunc0c                 C   rN  r  r†  rI   r   r   r   Ú_testCmsgTrunc0q  rR  zSCMRightsTest._testCmsgTrunc0c                 C   s   |   |  | jttƒd¡¡ d S r  )r£  r°  rÔ  r-  rÖ   rI   r   r   r   ÚtestCmsgTrunc1w  s   zSCMRightsTest.testCmsgTrunc1c                 C   rN  r  r†  rI   r   r   r   Ú_testCmsgTrunc1z  rR  zSCMRightsTest._testCmsgTrunc1c                 C   s"   |   |  | jttƒtd ¡¡ d S rb  )r£  r°  rÔ  r-  rÖ   rz  rI   r   r   r   ÚtestCmsgTrunc2Int}  s   
ÿzSCMRightsTest.testCmsgTrunc2Intc                 C   rN  r  r†  rI   r   r   r   Ú_testCmsgTrunc2Int„  rR  z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |   |  | jttƒt d¡d ¡¡ d S rB  )r£  r°  rÔ  r-  rÖ   r   rY  rI   r   r   r   ÚtestCmsgTruncLen0Minus1‡  s   
ÿz%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   rN  r  r†  rI   r   r   r   Ú_testCmsgTruncLen0Minus1‹  rR  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©r½  r¾  r   r   rA   )r°  rÔ  r-  rÖ   rÕ   r´  rº   rÁ  r   r¶  rl  rr  rÆ  rÇ  rê  rs  r]  rp  )rJ   ÚancbufÚmaxdataZmindatar×   rC  r)  rå   rt  ru  rv  rk  r   r   r   ÚcheckTruncatedArray‘  s&   ÿ
ÿz!SCMRightsTest.checkTruncatedArrayc                 C   s   | j t d¡dd d S )Nr   ©r±  r²  ©r³  r   rY  rI   r   r   r   ÚtestCmsgTruncLen0©  ó   zSCMRightsTest.testCmsgTruncLen0c                 C   rN  r  r†  rI   r   r   r   Ú_testCmsgTruncLen0¬  rR  z SCMRightsTest._testCmsgTruncLen0c                 C   s   | j t d¡d dd d S )Nr   r   r´  rµ  rI   r   r   r   ÚtestCmsgTruncLen0Plus1¯  rã  z$SCMRightsTest.testCmsgTruncLen0Plus1c                 C   rN  rb  r†  rI   r   r   r   Ú_testCmsgTruncLen0Plus1²  rR  z%SCMRightsTest._testCmsgTruncLen0Plus1c                 C   s   | j t t¡td d S )Nr´  ©r³  r   rY  rz  rI   r   r   r   ÚtestCmsgTruncLen1µ  s   
ÿzSCMRightsTest.testCmsgTruncLen1c                 C   rN  rb  r†  rI   r   r   r   Ú_testCmsgTruncLen1¹  rR  z SCMRightsTest._testCmsgTruncLen1c                 C   s(   | j t dt ¡d dt d d d S )Nr¼   r   r´  r»  rI   r   r   r   ÚtestCmsgTruncLen2Minus1¼  s   

ÿz%SCMRightsTest.testCmsgTruncLen2Minus1c                 C   rN  rb  r†  rI   r   r   r   Ú_testCmsgTruncLen2Minus1À  rR  z&SCMRightsTest._testCmsgTruncLen2Minus1N)r   r   ©r   )9rQ   rR   rS   rž  rl  rp  r®  rq  rw  r~  r  rƒ  r„  r‡  r;  r   rˆ  r'  r‰  r‹  rŒ  rÁ   rº  r¸  rÕ  r
   r  r“  r•  r–  r—  r˜  rš  r  rŸ  r   r¡  r£  r¦  r§  r¨  r©  rª  r«  r¬  r­  r®  r¯  r³  r¶  r¸  r¹  rº  r¼  r½  r¾  r¿  r   r   r   r   rf  [  s€    

	












	
rf  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%d_dGdH„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 )`ÚRFC3542AncillaryTestr¼   r¬  c                 C   s4   i }|D ]\}}}|   ||f|¡ ||||f< q|S r5   )rO  )rJ   rC  Údrt  ru  rv  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   Trx  r   rA   )rÔ  r  r   rq  r~  r¨  r~   r°  r-  rÖ   rÕ   r´  rº   rÁ  r¶  rG  ry  rˆ  r  rz  rê  rs  rÆ  rÇ  )rJ   Ú
ancbufsizeÚmaxhopr|  r×   rC  r)  rå   rt  ru  rv  rç  r   r   r   ÚcheckHopLimitß  s.   
ÿ
ÿÿ

z"RFC3542AncillaryTest.checkHopLimitr~  rˆ  c                 C   ó   | j dd d S ©Nr1  ©rÄ  )rÆ  rI   r   r   r   ÚtestRecvHopLimitû  rµ  z%RFC3542AncillaryTest.testRecvHopLimitc                 C   ó$   |   | jj| jd¡ |  t¡ d S r7  ©rE  r¨  r“   rÃ  rª  rÖ   rI   r   r   r   Ú_testRecvHopLimit   s   z&RFC3542AncillaryTest._testRecvHopLimitrü  c                 C   s   | j t t¡d d S )NrÉ  )rÆ  r   rü  rz  rI   r   r   r   ÚtestRecvHopLimitCMSG_SPACE  ó   z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   rË  r7  rÌ  rI   r   r   r   Ú_testRecvHopLimitCMSG_SPACE  ó   z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErE  c                 C   ó   | j d| jd d S ©Nr1  )rÄ  rÅ  )rÆ  Ú	hop_limitrI   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  rA   )rE  r¨  r“   rÃ  rÕ   r­  rÖ   r   rq  rˆ  rê  rÔ  r-  rI   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   Trx  r¼   rA   r   r	  )rÔ  r  r   rq  r~  r†  r¨  r~   r°  r-  rÖ   rÕ   r´  rº   rÁ  r¶  rÃ  rŒ  rz  rê  rs  rÆ  rÇ  rˆ  )rJ   rÄ  rÅ  r|  r×   rC  r)  rå   ZancmapZtcdatarç  Zhldatar   r   r   ÚcheckTrafficClassAndHopLimit'  s:   
ÿ
ÿ
ÿÿ




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr†  rŒ  c                 C   rÇ  rÈ  )rØ  rI   r   r   r   ÚtestRecvTrafficClassAndHopLimitK  s   z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   rË  r7  rÌ  rI   r   r   r   Ú _testRecvTrafficClassAndHopLimitQ  rÑ  z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j t t¡d d d S ©Nr¼   rÉ  )rØ  r   rü  rz  rI   r   r   r   Ú)testRecvTrafficClassAndHopLimitCMSG_SPACEV  s   
ÿz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   rË  r7  rÌ  rI   r   r   r   Ú*_testRecvTrafficClassAndHopLimitCMSG_SPACE^  rÑ  z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   rÒ  rÓ  ©rØ  rÔ  rI   r   r   r   ÚtestSetTrafficClassAndHopLimitc  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 rÖ  )rE  r¨  r“   rÃ  rÕ   r­  rÖ   r   rq  rŒ  rê  Útraffic_classrˆ  rÔ  r-  rI   r   r   r   Ú_testSetTrafficClassAndHopLimitl  s   ÿÿþÿúz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   rÒ  rÓ  rÞ  rI   r   r   r   ÚtestOddCmsgSizew  s   
ÿz$RFC3542AncillaryTest.testOddCmsgSizec                 C   sæ   |   | jj| jd¡ z&|  tgtjtjt	 	d| j
g¡ ¡ d ftjtjt	 	d| jg¡fg¡}W d S  tyr } z5|  |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 }~d S d }~ww )Nr  rA   rì  )rE  r¨  r“   rÃ  r­  rÖ   r   rq  rŒ  rê  rà  rN  rˆ  rÔ  r   rG  r   r¤  rÕ   r-  )rJ   rI  rš   r   r   r   Ú_testOddCmsgSize  s6   ÿÿþ
þÿÿþþ€ø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¢  )rÔ  r  r   rq  r~  r¨  r~   r°  r-  rÖ   rÕ   r´  rº   rÁ  r¶  )rJ   rÄ  r|  r`   r×   rC  r)  rå   r   r   r   ÚcheckHopLimitTruncatedHeader—  s    
ÿ
ÿÿ
ÿz1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )N©rÄ  r|  ©rä  r   r¶  rI   r   r   r   r¦  «  s   
ûz+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   rË  r7  rÌ  rI   r   r   r   r§  ¶  rÑ  z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   rå  ræ  rI   r   r   r   ÚtestSingleCmsgTrunc0»  s   
ÿz)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSingleCmsgTrunc0Â  rÑ  z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   rÇ  )Nr   rÉ  )rä  rI   r   r   r   ÚtestSingleCmsgTrunc1Ê  ó   z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSingleCmsgTrunc1Î  rÑ  z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S rÛ  )rä  rz  rI   r   r   r   ÚtestSingleCmsgTrunc2IntÓ  ó   z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSingleCmsgTrunc2Int×  rÑ  z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j t d¡d d d S )Nr   r   rÉ  )rä  r   rY  rI   r   r   r   ÚtestSingleCmsgTruncLen0Minus1Ü  ó   z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSingleCmsgTruncLen0Minus1à  rÑ  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¡ |ra|d \}}}|  |tj¡ |  |tj¡ |  t|ƒt¡ d S d S )Nr   Tr°  r   )rÔ  r  r   rq  r~  r¨  r~   r°  r-  rÖ   rY  rz  rÕ   r´  rº   rÁ  r¶  rÇ  rˆ  r›  rœ  r   r   r   ÚtestSingleCmsgTruncInDataå  s"   
ÿ
ÿüz.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSingleCmsgTruncInDataû  rÑ  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   rA   r	  )rÔ  r  r   rq  r~  r†  r¨  r~   r°  r-  rÖ   rÕ   r´  rº   rÁ  r¶  rM  rŒ  rˆ  rz  rê  rs  rÆ  rÇ  )rJ   rÄ  r|  r×   rC  r)  rå   rt  ru  rv  rç  r   r   r   ÚcheckTruncatedSecondHeader   s0   
ÿ
ÿ
ÿÿ

z/RFC3542AncillaryTest.checkTruncatedSecondHeaderc                 C   s   | j t t¡tjd d S r¤  )rô  r   rü  rz  r¶  rI   r   r   r   ÚtestSecondCmsgTrunc0   s   
ÿz)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSecondCmsgTrunc0&  rÑ  z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |   t t¡d ¡ d S r  ©rô  r   rü  rz  rI   r   r   r   ÚtestSecondCmsgTrunc1+  r  z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSecondCmsgTrunc10  rÑ  z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |   t t¡dt  ¡ d S rb  r÷  rI   r   r   r   ÚtestSecondCmsgTrunc2Int5  s   
ÿz,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSecondCmsgTrunc2Int;  rÑ  z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |   t t¡t d¡ d ¡ d S rB  )rô  r   rü  rz  rY  rI   r   r   r   ÚtestSecondCmsgTruncLen0Minus1@  s
   ÿ
ÿz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSecondCmsgTruncLen0Minus1F  rÑ  z3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c           
      C   sR  | 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¡ |r¡| d¡\}}}|  |tj¡ | |¡ |  t	|ƒt¡ |  |g ¡ d S )Nr   Tr°  r   rA   r	  )rÔ  r  r   rq  r~  r†  r¨  r~   r°  r-  rÖ   rü  rz  rY  rÕ   r´  rº   rÁ  r¶  rŒ  rˆ  ÚpopÚremoverê  rs  rÆ  rÇ  r›  )
rJ   r×   rC  r)  rå   Z
cmsg_typesrt  ru  rv  rç  r   r   r   ÚtestSecondCmsgTruncInDataK  s:   
ÿ
ÿ

þ



z.RFC3542AncillaryTest.testSecondCmsgTruncInDatac                 C   rË  r7  rÌ  rI   r   r   r   Ú_testSecondCmsgTruncInDatap  rÑ  z/RFC3542AncillaryTest._testSecondCmsgTruncInDataN)r	  r   rÀ  )1rQ   rR   rS   rÔ  rà  rÃ  rÆ  r;  r   rÊ  r'  rÍ  rÎ  rÐ  rÕ  r×  rØ  rÙ  rÚ  rÜ  rÝ  rß  rá  râ  rã  rä  r¦  r§  rç  rè  ré  rë  rì  rî  rï  rñ  rò  ró  rô  rõ  rö  rø  rù  rú  rû  rü  rý  r   r  r   r   r   r   rÁ  Ä  sÎ    


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


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


















 ÿ


ÿ


ÿ


ÿ


ÿ
#rÁ  c                   @   ó   e Zd ZdS )ÚSendrecvmsgUDPTestBaseN©rQ   rR   rS   r   r   r   r   r  x  ó    r  rE  c                   @   r  )ÚSendmsgUDPTestNr  r   r   r   r   r  }  ó    r  rB  c                   @   r  )ÚRecvmsgUDPTestNr  r   r   r   r   r    r  r  rÅ  c                   @   r  )ÚRecvmsgIntoUDPTestNr  r   r   r   r   r	  …  r  r	  c                   @   rV   )ÚSendrecvmsgUDP6TestBasec                 C   ó    |   |d d… |d d… ¡ d S r¡  r²  r³  r   r   r   r´  Ž  ó    z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN©rQ   rR   rS   r´  r   r   r   r   r
  Š  ó    r
  rx  r  r&   c                   @   r  )ÚSendmsgUDP6TestNr  r   r   r   r   r  “  ó    r  c                   @   r  )ÚRecvmsgUDP6TestNr  r   r   r   r   r  ™  r  r  c                   @   r  )ÚRecvmsgIntoUDP6TestNr  r   r   r   r   r  Ÿ  r  r  rq  c                   @   r  )ÚRecvmsgRFC3542AncillaryUDP6TestNr  r   r   r   r   r  ¥  ó    r  c                   @   r  )Ú#RecvmsgIntoRFC3542AncillaryUDP6TestNr  r   r   r   r   r  ­  s    r  c                   @   r  )ÚSendrecvmsgUDPLITETestBaseNr  r   r   r   r   r  ·  s    r  c                   @   r  )ÚSendmsgUDPLITETestNr  r   r   r   r   r  ¾  r  r  c                   @   r  )ÚRecvmsgUDPLITETestNr  r   r   r   r   r  Ä  r  r  c                   @   r  )ÚRecvmsgIntoUDPLITETestNr  r   r   r   r   r  Ê  r  r  c                   @   rV   )ÚSendrecvmsgUDPLITE6TestBasec                 C   r  r¡  r²  r³  r   r   r   r´  ×  r  z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNr  r   r   r   r   r  Ñ  s    r  c                   @   r  )ÚSendmsgUDPLITE6TestNr  r   r   r   r   r  Ü  r  r  c                   @   r  )ÚRecvmsgUDPLITE6TestNr  r   r   r   r   r  ä  r  r  c                   @   r  )ÚRecvmsgIntoUDPLITE6TestNr  r   r   r   r   r  ì  r  r  c                   @   r  )Ú#RecvmsgRFC3542AncillaryUDPLITE6TestNr  r   r   r   r   r  ô  s    r  c                   @   r  )Ú'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNr  r   r   r   r   r  þ  s    	r  c                   @   r  )ÚSendrecvmsgTCPTestBaseNr  r   r   r   r   r   
  r  r   c                   @   r  )ÚSendmsgTCPTestNr  r   r   r   r   r!    r  r!  c                   @   r  )ÚRecvmsgTCPTestNr  r   r   r   r   r"    r  r"  c                   @   r  )ÚRecvmsgIntoTCPTestNr  r   r   r   r   r#    r  r#  c                   @   r  )ÚSendrecvmsgSCTPStreamTestBaseNr  r   r   r   r   r$    r  r$  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXrD   r9   r  c                   @   r  )ÚSendmsgSCTPStreamTestNr  r   r   r   r   r%  "  r  r%  c                       rØ  )ÚRecvmsgSCTPStreamTestc              
      óT   z
t t| ƒ ¡  W d S  ty) } z|jtjkr‚ |  d¡ W Y d }~d S d }~ww ©Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rZ   r&  r?  r   r   ÚENOTCONNrs   ©rJ   rš   rb   r   r   r?  .  ó   €ýz$RecvmsgSCTPStreamTest.testRecvmsgEOF©rQ   rR   rS   r?  ri   r   r   rb   r   r&  (  ó    r&  c                       rØ  )ÚRecvmsgIntoSCTPStreamTestc              
      r'  r(  )rZ   r.  r?  r   r   r)  rs   r*  rb   r   r   r?  <  r+  z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr,  r   r   rb   r   r.  6  r-  r.  c                   @   r  )ÚSendrecvmsgUnixStreamTestBaseNr  r   r   r   r   r/  E  r  r/  r  c                   @   r  )ÚSendmsgUnixStreamTestNr  r   r   r   r   r0  I  r  r0  c                   @   r  )ÚRecvmsgUnixStreamTestNr  r   r   r   r   r1  N  r  r1  c                   @   r  )ÚRecvmsgIntoUnixStreamTestNr  r   r   r   r   r2  T  r  r2  rl  rr  c                   @   r  )ÚRecvmsgSCMRightsStreamTestNr  r   r   r   r   r3  Z  r  r3  c                   @   r  )ÚRecvmsgIntoSCMRightsStreamTestNr  r   r   r   r   r4  _  r  r4  c                       sL   e Zd Z‡ fdd„ZejZeedƒrdZ	dd„ Z
‡  ZS 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 rR  r   )Úsignumrò  r   r   r   r"  s  s    z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rZ   rK   rE  rF  rf   )rJ   Zorig_alrm_handlerrb   r   r   rK   p  s
   
ÿzInterruptedTimeoutBase.setUpÚ	setitimergš™™™™™©?c                 C   s   t  t j|¡ d S r5   )rE  r7  ÚITIMER_REAL©rJ   Zsecondsr   r   r   ÚsetAlarm  râ   zInterruptedTimeoutBase.setAlarmr¼   c                 C   s   t  |¡ d S r5   )rE  r<  r9  r   r   r   r:  …  rR  )rQ   rR   rS   rK   r   rÂ  r>   r   rE  Ú
alarm_timer:  ri   r   r   rb   r   r5  k  s    
r5  Úsiginterruptr<  r7  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                    rÚ  r5   )rZ   rK   rE   r  r>   rI   rb   r   r   rK   ’  rÛ  z InterruptedRecvTimeoutTest.setUpc              	   O   sr   z2|   | j¡ |  t¡}||i |¤Ž W d   ƒ n1 sw   Y  W |   d¡ d S W |   d¡ d S |   d¡ w r·   )r:  r;  r\  rG  ©rJ   rÅ  r`   ra   rh  r   r   r   ÚcheckInterruptedRecv–  s   ÿýz/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C   ó   |   | jjd¡ d S rÐ   )r?  rE   rÒ   rI   r   r   r   ÚtestInterruptedRecvTimeout   rê   z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C   ó   |   | jjtdƒ¡ d S rÐ   )r?  rE   Ú	recv_intor  rI   r   r   r   ÚtestInterruptedRecvIntoTimeout£  r·  z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   r@  rÐ   )r?  rE   rô  rI   r   r   r   ÚtestInterruptedRecvfromTimeout¦  rê   z9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutc                 C   rB  rÐ   )r?  rE   Úrecvfrom_intor  rI   r   r   r   Ú"testInterruptedRecvfromIntoTimeout©  r·  z=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutrB  c                 C   r@  rÐ   )r?  rE   rB  rI   r   r   r   ÚtestInterruptedRecvmsgTimeout¬  rí  z8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrÅ  c                 C   s   |   | jjtdƒg¡ d S rÐ   )r?  rE   rÅ  r  rI   r   r   r   Ú!testInterruptedRecvmsgIntoTimeout°  rð  z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rQ   rR   rS   rK   r?  rA  rD  rE  rG  r;  r   rH  rI  ri   r   r   rb   r   r=  ‹  s    



r=  c                       st   e Zd Z‡ fdd„Zdd„ Zdd„ Ze dd¡d	d
„ ƒZe dd¡dd„ ƒZ	e dd¡e
ejdƒdd„ ƒƒZ‡  ZS )ÚInterruptedSendTimeoutTestc                    sp   t ƒ  ¡  |  ¡ | _|  | jj¡ tj| jd}| 	¡  | j
 ¡ \| _}|  | jj¡ | ¡  | j | j¡ d S )N)Útarget)rZ   rK   rï   rç   rf   r!   r\   ÚThreadÚ	doConnectÚstartrE   rÇ   rã   r9  r  r>   )rJ   Z
cli_threadrå   rb   r   r   rK   À  s   

z InterruptedSendTimeoutTest.setUpc                 C   s   | j  | j¡ d S r5   )rç   rÏ   ró   rI   r   r   r   rM  Î  râ   z$InterruptedSendTimeoutTest.doConnectc              	   O   sX   z%|   t¡}	 |  | j¡ ||i |¤Ž q1 sw   Y  W |  d¡ d S |  d¡ w ©NTr   )r\  rG  r:  r;  r>  r   r   r   ÚcheckInterruptedSendÑ  s   þÿz/InterruptedSendTimeoutTest.checkInterruptedSendrÛ  r  c                 C   r@  ©Nr  )rP  rç   rÜ   rI   r   r   r   ÚtestInterruptedSendTimeoutÞ  rí  z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutc                 C   s   |   | jjd| j¡ d S rQ  )rP  rç   re  ró   rI   r   r   r   ÚtestInterruptedSendtoTimeoutâ  s   ÿz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrE  c                 C   s   |   | jjdg¡ d S rQ  )rP  rç   rE  rI   r   r   r   ÚtestInterruptedSendmsgTimeoutë  rÏ  z8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rQ   rR   rS   rK   rM  rP  r   Zrequires_mac_verrR  rS  r;  r   rT  ri   r   r   rb   r   rJ  ·  s    	





rJ  c                   @   rB   )ÚTCPCloserTestc                 C   sh   | j  ¡ \}}| ¡  | j}t |gg g d¡\}}}|  ||g¡ |  | d¡d¡ | ¡  | ¡  d S )Nç      ð?r   r€  )rE   rÇ   r!   rª   rK  rÕ   rÒ   )rJ   rÈ   rå   Úsdr‚  rh  rA  r   r   r   Ú	testCloseó  s   zTCPCloserTest.testClosec                 C   s    | j  t| jf¡ t d¡ d S ©NrV  )rª   rÏ   r¸   rG   rË   rÌ   rI   r   r   r   Ú
_testClose   rd   zTCPCloserTest._testCloseN)rQ   rR   rS   rX  rZ  r   r   r   r   rU  ñ  ó    rU  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   rá   r¤   )rè   r[   r§   r   r   r   r[     râ   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   )
rG  r   r   rÕ   rR  r  rD   r&  r9   rS  r  r   r   r   Ú_check_defaults
  s   
z#BasicSocketPairTest._check_defaultsc                 C   ó   |   | j¡ d S r5   )r]  rª   rI   r   r   r   Ú_testDefaults  r  z!BasicSocketPairTest._testDefaultsc                 C   r^  r5   )r]  rE   rI   r   r   r   ÚtestDefaults  r  z BasicSocketPairTest.testDefaultsc                 C   ro  rÐ   ©rE   rÒ   rÕ   rÖ   r_  r   r   r   rp    rŽ  zBasicSocketPairTest.testRecvc                 C   rq  r5   ©rª   rÜ   rÖ   rI   r   r   r   rs    r  zBasicSocketPairTest._testRecvc                 C   rq  r5   ©rE   rÜ   rÖ   rI   r   r   r   ÚtestSend   r  zBasicSocketPairTest.testSendc                 C   ro  rÐ   ©rª   rÒ   rÕ   rÖ   r_  r   r   r   Ú	_testSend#  rŽ  zBasicSocketPairTest._testSendNr¯   )rQ   rR   rS   r[   r]  r_  r`  rp  rs  rd  rf  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ƒ p9eedƒ d¡e ejd¡dd„ ƒƒZdd„ Zdd„ Zdd„ Z‡  ZS )ÚPurePythonSocketPairTestc                 C   s.   zt  t j¡W S  ty   t  t j¡ Y S w r5   )r   ré   r  r   rD   rI   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   rD  r   ré   Ú_orig_spÚ_fallback_socketpairrZ   rK   rI   rb   r   r   rK   6  s
   

zPurePythonSocketPairTest.setUpc                    s$   t ƒ  ¡  | jd ur| jt_d S d S r5   )rZ   rN   rh  r   ré   rI   rb   r   r   rN   A  s   

þz!PurePythonSocketPairTest.tearDownc                 C   ro  rÐ   ra  r_  r   r   r   Ú	test_recvG  rŽ  z"PurePythonSocketPairTest.test_recvc                 C   rq  r5   rb  rI   r   r   r   Ú
_test_recvK  r  z#PurePythonSocketPairTest._test_recvc                 C   rq  r5   rc  rI   r   r   r   Ú	test_sendN  r  z"PurePythonSocketPairTest.test_sendc                 C   ro  rÐ   re  r_  r   r   r   Ú
_test_sendQ  rŽ  z#PurePythonSocketPairTest._test_sendc                 C   ó$   t  t j¡\}}| ¡  | ¡  d S r5   )r   ré   rD   r!   ©rJ   rª   ru  r   r   r   Ú	test_ipv4U  s   z"PurePythonSocketPairTest.test_ipv4c                 C   rë   r5   r   rI   r   r   r   Ú
_test_ipv4Z  rì   z#PurePythonSocketPairTest._test_ipv4rq  ÚIPV6_V6ONLYú IPV6_V6ONLY option not supportedry  c                 C   rn  r5   )r   ré   r  r!   ro  r   r   r   Ú	test_ipv6]  s   z"PurePythonSocketPairTest.test_ipv6c                 C   rë   r5   r   rI   r   r   r   Ú
_test_ipv6f  rì   z#PurePythonSocketPairTest._test_ipv6c                    sÈ   t j j‰d ‰ ‡ ‡fdd„}d  }}z:|t j _|  t¡ t  ¡ \}}W d   ƒ n1 s,w   Y  W ˆt j _ˆ r<ˆ  ¡  |rB| ¡  |rJ| ¡  d S d S ˆt j _ˆ rVˆ  ¡  |r\| ¡  |rc| ¡  w w )Nc              	      sf   ˆ| ƒ}ˆ d u r1t   t jt j¡‰ ˆ  d¡ zˆ  |d d… ¡ W n ttfy+   Y nw ˆ  d¡ |S )NFr¼   T)r   rD   r9   rŽ  rÏ   ÚBlockingIOErrorÚInterruptedError)rJ   rg  ©Zinject_sockZorig_getsocknamer   r   Úinject_getsocketnamem  s   
ÿ
z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)r   r¹   r\  r   ré   r!   )rJ   ry  Úsock1Úsock2r   rx  r   Ú$test_injected_authentication_failurei  s4   ÿ€ÿû
ÿz=PurePythonSocketPairTest.test_injected_authentication_failurec                 C   rë   r5   r   rI   r   r   r   Ú%_test_injected_authentication_failureŠ  s   z>PurePythonSocketPairTest._test_injected_authentication_failure)rQ   rR   rS   ré   rK   rN   rj  rk  rl  rm  rp  rq  rÁ   rº  r   rD  r¸  r   r.  rt  ru  r|  r}  ri   r   r   rb   r   rg  (  s&    	
þ!rg  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¤   )r\   rˆ   Úeventr¡   r[   r§   r   r   r   r[   ”  rÛ  zNonBlockingTCPTests.__init__c                 C   sl   |   | j ¡ |¡ |dk}|   | ¡ |¡ td ur4|d u }t |tjtj¡}|   t|tj@ ƒ |¡ d S d S )Nç        )	rÕ   rE   rÜ  Úgetblockingr   ÚF_GETFLr   Ú
O_NONBLOCKÚbool)rJ   r  r>   Ú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Û  )rE   rŽ  r‡  r  rI   r   r   r   ÚtestSetBlocking©  s   z#NonBlockingTCPTests.testSetBlockingc                 C   rë   r5   r   rI   r   r   r   Ú_testSetBlocking½  rì   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Ë  r  Z	ULONG_MAXrs   rE   rŽ  rÕ   rÜ  r  r  r   r   r   ÚtestSetBlocking_overflowÀ  s   
z,NonBlockingTCPTests.testSetBlocking_overflowr  ztest needs socket.SOCK_NONBLOCKr¼   é   é   c                 C   s4   | j  ¡  t tjtjtjB ¡| _ |  | j d¡ d S r·   )rE   r!   r   rD   r9   r  r‡  rI   r   r   r   ÚtestInitNonBlockingÏ  s
   

ÿz'NonBlockingTCPTests.testInitNonBlockingc                 C   rë   r5   r   rI   r   r   r   Ú_testInitNonBlockingÙ  rì   z(NonBlockingTCPTests._testInitNonBlockingc                 C   sb   t d ƒ# | j d¡ | j ¡ \}}|  |j¡ |  | ¡ ¡ W d   ƒ d S 1 s*w   Y  d S )NrÛ  )r?   rE   r  rÇ   rf   r!   r  rÜ  rä   r   r   r   ÚtestInheritFlagsBlockingÜ  s   
"üz,NonBlockingTCPTests.testInheritFlagsBlockingc                 C   ó   | j  t| jf¡ d S r5   ©rª   rÏ   r¸   rG   rI   r   r   r   Ú_testInheritFlagsBlockingå  r«   z-NonBlockingTCPTests._testInheritFlagsBlockingc                 C   sh   d}t |ƒ$ | j d¡ | j ¡ \}}|  |j¡ |  | ¡ |¡ W d   ƒ d S 1 s-w   Y  d S )Ng      4@rÛ  )r?   rE   r  rÇ   rf   r!   rÕ   rÜ  )rJ   Zdefault_timeoutrÈ   rå   r   r   r   ÚtestInheritFlagsTimeoutè  s   
"üz+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   r  r5   r‘  rI   r   r   r   Ú_testInheritFlagsTimeoutó  r«   z,NonBlockingTCPTests._testInheritFlagsTimeoutc                 C   sÊ   | j  d¡ t ¡ }|  t¡ | j  ¡ \}}W d   ƒ n1 s!w   Y  t ¡ | }|  |d¡ | j 	¡  t
 
| j gg g tj¡\}}}| j |vrO|  d¡ | j  ¡ \}}|  |j¡ |  | ¡ ¡ d S )NFrV  z'Error trying to do accept after select.)rE   rŽ  rË   Ú	monotonicr\  rv  rÇ   r›  r  r~   rK  r   ÚLONG_TIMEOUTrX  rf   r!   r  rÜ  )rJ   Z
start_timerÈ   rå   Zdtr‚  rh  rA  r   r   r   Ú
testAcceptö  s   ÿ


zNonBlockingTCPTests.testAcceptc                 C   s    | j  ¡  | j t| jf¡ d S r5   )r  r“   rª   rÏ   r¸   rG   rI   r   r   r   Ú_testAccept  s   
zNonBlockingTCPTests._testAcceptc                 C   s°   | j  ¡ \}}|  |j¡ | d¡ |  t¡ | tt	ƒ¡}W d   ƒ n1 s)w   Y  | j
 ¡  t |gg g tj¡\}}}||vrI|  d¡ | tt	ƒ¡}|  |t	¡ d S )NFz0Error during select call to non-blocking socket.)rE   rÇ   rf   r!   rŽ  r\  rv  rÒ   r-  rÖ   r  r~   rK  r   r–  rX  rÕ   )rJ   rÈ   rå   r×   r‚  rh  rA  r   r   r   rp    s   
ÿ

zNonBlockingTCPTests.testRecvc                 C   s,   | j  t| jf¡ | j ¡  | j  t¡ d S r5   )rª   rÏ   r¸   rG   r  r“   rH  rÖ   rI   r   r   r   rs  '  s   
zNonBlockingTCPTests._testRecvNr¯   )rQ   rR   rS   r[   r‡  rˆ  r‰  r   r¹  rŠ  Z_testSetBlocking_overflowrÁ   r¸  r   r   Úrequires_linux_versionr  rŽ  r  r’  r“  r”  r—  r˜  rp  rs  r   r   r   r   r~  ’  s,    


ÿ	r~  c                   @   sø   e Zd Z	 dZdZdZdZdZeZ	dZ
eZd:dd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"d6d7„ Z#d8d9„ Z$dS );ÚFileObjectClassTestCaser¬  r   ÚstrictNr   rc  r¢   c                 C   rá   r¤   rn  r§   r   r   r   r[   H  râ   z FileObjectClassTestCase.__init__c                 C   sR   dd„ t dƒD ƒ\| _| _| _| _t | ¡ | jj| j	| j
| j| j| jd| _d S )Nc                 S   ó   g | ]}t  ¡ ‘qS r   )r\   rˆ   ©r0  rA   r   r   r   r2  L  s    ÿz1FileObjectClassTestCase.setUp.<locals>.<listcomp>rd  ©rg  ÚerrorsÚnewline)rm  Úevt1Úevt2Úserv_finishedÚcli_finishedrà   rK   rã   rV  Ú	read_modert   rg  rŸ  r   Ú	read_filerI   r   r   r   rK   K  s   ÿ
üzFileObjectClassTestCase.setUpc                 C   ó6   | j  ¡  | j ¡  |  | jj¡ d | _t | ¡ d S r5   )r£  r~   r¦  r!   rE  Úclosedrà   rN   rI   r   r   r   rN   U  ó
   

z FileObjectClassTestCase.tearDownc                 C   s0   t  | ¡ | jj| j| j| j| j| jd| _	d S )Nrž  )
rà   r•   rç   rV  Ú
write_modert   rg  rŸ  r   Ú
write_filerI   r   r   r   r•   \  s   
üz#FileObjectClassTestCase.clientSetUpc                 C   r§  r5   )r¤  r~   r«  r!   rE  r¨  rà   r˜   rI   r   r   r   r˜   d  r©  z&FileObjectClassTestCase.clientTearDownc                 C   sv   | j  d¡ | j d¡ |  t| jjd¡ |  t¡}| j d¡ W d   ƒ n1 s+w   Y  |  dt|j	ƒ¡ d S )Nr   ru  z!cannot read from timed out object)
rã   r  r¦  r‚  r\  rJ  r   rM  r<  rf  )rJ   Úctxr   r   r   ÚtestReadAfterTimeoutk  s   ÿz,FileObjectClassTestCase.testReadAfterTimeoutc                 C   s.   | j  | jdd… ¡ | j  ¡  | j ¡  d S )Nr   ru  )r«  rh  Ú	write_msgÚflushr£  r“   rI   r   r   r   Ú_testReadAfterTimeoutw  s   
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j  t| jƒd ¡}| j  d¡}|| }|  || j¡ d S rî  )r¦  r‚  r-  Úread_msgrÕ   )rJ   Ú	first_segZ
second_segr×   r   r   r   ÚtestSmallRead|  s   z%FileObjectClassTestCase.testSmallReadc                 C   ó   | j  | j¡ | j  ¡  d S r5   ©r«  rh  r®  r¯  rI   r   r   r   Ú_testSmallReadƒ  r¨   z&FileObjectClassTestCase._testSmallReadc                 C   ó   | j  ¡ }|  || j¡ d S r5   )r¦  r‚  rÕ   r±  r_  r   r   r   ÚtestFullRead‡  ó   
z$FileObjectClassTestCase.testFullReadc                 C   r´  r5   )r«  rh  r®  r!   rI   r   r   r   Ú_testFullReadŒ  r¨   z%FileObjectClassTestCase._testFullReadc                 C   s<   t | jƒƒ }	 | j d¡}|sn||7 }q|  || j¡ d S r  )r&  r±  r¦  r‚  rÕ   )rJ   rÈ  Úcharr   r   r   ÚtestUnbufferedRead  s   üz*FileObjectClassTestCase.testUnbufferedReadc                 C   r´  r5   rµ  rI   r   r   r   Ú_testUnbufferedReadš  r¨   z+FileObjectClassTestCase._testUnbufferedReadc                 C   r·  r5   )r¦  ÚreadlinerÕ   r±  ©rJ   Úliner   r   r   ÚtestReadlinež  r¹  z$FileObjectClassTestCase.testReadlinec                 C   r´  r5   rµ  rI   r   r   r   Ú_testReadline£  r¨   z%FileObjectClassTestCase._testReadlinec                 C   s&   | j  ¡  | j ¡ }|  || j¡ d S r5   )rã   r!   r¦  r‚  rÕ   r±  r_  r   r   r   ÚtestCloseAfterMakefile§  s   

z.FileObjectClassTestCase.testCloseAfterMakefilec                 C   r´  r5   rµ  rI   r   r   r   Ú_testCloseAfterMakefile®  r¨   z/FileObjectClassTestCase._testCloseAfterMakefilec                 C   s@   | j  ¡  | j ttƒ¡}t| jtƒr| 	¡ }|  
|| j¡ d S r5   )r¦  r!   rã   rÒ   r-  rÖ   r%  r±  r<  ÚdecoderÕ   r_  r   r   r   ÚtestMakefileAfterMakefileClose²  s
   
z6FileObjectClassTestCase.testMakefileAfterMakefileClosec                 C   r´  r5   rµ  rI   r   r   r   Ú_testMakefileAfterMakefileClose¹  r¨   z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C   ó   |   | jj ¡ d S r5   )rE  r¦  r¨  rI   r   r   r   ÚtestClosedAttr½  rê   z&FileObjectClassTestCase.testClosedAttrc                 C   rÈ  r5   )rE  r«  r¨  rI   r   r   r   Ú_testClosedAttrÀ  rê   z'FileObjectClassTestCase._testClosedAttrc                 C   ó,   |   | jj| j¡ |   | jj| j ¡ ¡ d S r5   )rÕ   r¦  re  r¥  r1  rã   rN  rI   r   r   r   ÚtestAttributesÃ  ó   z&FileObjectClassTestCase.testAttributesc                 C   rË  r5   )rÕ   r«  re  rª  r1  rç   rN  rI   r   r   r   Ú_testAttributesÇ  rÍ  z'FileObjectClassTestCase._testAttributesc                 C   s8   | j  ¡  |  t| j j¡ | j ¡  |  t| jj¡ d S r5   )r¦  r!   r\  rÝ  rN  rã   r   r¹   rI   r   r   r   ÚtestRealCloseË  s   

z%FileObjectClassTestCase.testRealClosec                 C   rë   r5   r   rI   r   r   r   Ú_testRealCloseÑ  rì   z&FileObjectClassTestCase._testRealCloser¯   )%rQ   rR   rS   rt   rg  rŸ  r   r¥  rÖ   r±  rª  r®  r[   rK   rN   r•   r˜   r­  r°  r³  r¶  r¸  rº  r¼  r½  rÁ  rÂ  rÃ  rÄ  rÆ  rÇ  rÉ  rÊ  rÌ  rÎ  rÏ  rÐ  r   r   r   r   rš  2  sF    


rš  c                   @   sb   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ã   rV  r¿  r   r   r   ÚtestUnbufferedReadlineá  s
   

z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinec                 C   s2   | j  d| j ¡ | j  d| j ¡ | j  ¡  d S )NrÒ  rÓ  rµ  rI   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   r´  r5   rµ  rI   r   r   r   Ú_testMakefileClose÷  r¨   z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t  | j¡}| j ¡  t  | j¡}|  |d |¡ d S r  )r¸  r·  rã   r¦  r!   rÕ   )rJ   Zrefcount_beforeZrefcount_afterr   r   r   ÚtestMakefileCloseSocketDestroyû  s   
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   rë   r5   r   rI   r   r   r   Ú_testMakefileCloseSocketDestroy  rì   zAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroyc                 C   s  | j  d¡ |  | j tdƒ¡d ¡ |  | j t| jƒd ¡d ¡ | j	 
¡  | j d¡ | j t| jƒd ¡}|d u rKt d¡ | j t| jƒd ¡}tdƒ}| j |¡}|  |d¡ ||d |…  }|  || j¡ |  | j tdƒ¡d ¡ |  | j d¡d ¡ d S )NFrÛ  ru  rV  g      à?r¾  r   )rã   rŽ  rÕ   r¦  Úreadintor  r‚  r-  r±  r¡  r~   r¢  r“   rË   rÌ   )rJ   r²  rÈ  r`  r×   r   r   r   ÚtestSmallReadNonBlocking  s    

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingc                 C   s>   | j  d¡ | j | j¡ | j ¡  | j ¡  | j d¡ d S )NrV  ç      @)	r¡  r“   r«  rh  r®  r¯  r¢  r~   r£  rI   r   r   r   Ú_testSmallReadNonBlocking  s
   

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s&   | j  d¡ | jr|  | j¡ d S d S )NrÜ  )r¤  r“   Úserv_skippedrs   rI   r   r   r   ÚtestWriteNonBlocking$  s   ÿz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingc                 C   sv   d | _ | j d¡ dtj }d}| j |¡}|  |d¡ t|ƒD ]}| j |¡}|d u r/ d S |  |d¡ q d| _ d S )NFrD  rÛ  r   z$failed to saturate the socket buffer)	rÞ  rç   rŽ  r   rI  r«  rh  r¥  rm  )rJ   ZBIGZLIMITr`  rA   r   r   r   Ú_testWriteNonBlocking+  s   

z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rQ   rR   rS   rt   rÔ  rÕ  rÖ  r×  rØ  rÙ  rÛ  rÝ  rß  rà  r   r   r   r   rÑ  Õ  s    		rÑ  c                   @   ó   e Zd ZdZdS )Ú#LineBufferedFileObjectClassTestCaser   N©rQ   rR   rS   rt   r   r   r   r   râ  A  ó    râ  c                   @   rá  )Ú$SmallBufferedFileObjectClassTestCaser¼   Nrã  r   r   r   r   rå  F  rä  rå  c                   @   s(   e Zd Z	 dZe d¡ZdZeZdZ	dS )Ú"UnicodeReadFileObjectClassTestCaser   r   rc  ra  N©
rQ   rR   rS   r¥  rÖ   rÅ  r±  rª  r®  r   r   r   r   r   ræ  K  s    
ræ  c                   @   s(   e Zd Z	 dZeZdZe d¡ZdZ	dS )Ú#UnicodeWriteFileObjectClassTestCaser   rb  r   ra  N)
rQ   rR   rS   r¥  rÖ   r±  rª  rÅ  r®  r   r   r   r   r   rè  U  s    
rè  c                   @   s.   e Zd Z	 dZe d¡ZdZe d¡ZdZ	dS )Ú'UnicodeReadWriteFileObjectClassTestCaser   r   rb  ra  Nrç  r   r   r   r   ré  _  s    

ré  c                   @   r  )ÚNetworkConnectionTestc                 C   s   t  t| jf¡| _| j| _d S r5   )r   Úcreate_connectionr¸   rG   rª   rç   rI   r   r   r   r•   l  s   z!NetworkConnectionTest.clientSetUpN)rQ   rR   rS   r•   r   r   r   r   rê  i  r  rê  c                   @   r  )ÚBasicTCPTest2Nr  r   r   r   r   rì  r  ó    rì  c                   @   sD   e Zd ZG dd„ dejƒZejdd„ ƒZdd„ Zdd„ Z	d	d
„ Z
dS )ÚNetworkConnectionNoServerc                   @   rV   )z$NetworkConnectionNoServer.MockSocketc                 G   r›   )Nz	timed out)rJ  r¬  r   r   r   rÏ   y  r   z,NetworkConnectionNoServer.MockSocket.connectN)rQ   rR   rS   rÏ   r   r   r   r   Ú
MockSocketx  s    rï  c                 c   s.    	 t j }| jt _ z	d V  W |t _ d S |t _ w r5   )r   rï  )rJ   Z
old_socketr   r   r   Úmocked_socket_module|  s   €z.NetworkConnectionNoServer.mocked_socket_modulec                 C   sr   t  ¡ }t tjtj¡}|  |j¡ |  t¡}| 	t
|f¡ W d   ƒ n1 s)w   Y  |  |jjtj¡ d S r5   )r   r	  r   rD   r9   rf   r!   r\  r   rÏ   r¸   rÕ   rf  r   ZECONNREFUSED)rJ   rG   rª   rh  r   r   r   Útest_connect†  s   ÿz&NetworkConnectionNoServer.test_connectc                 C   s\   t  ¡ }|  t¡}t t|f¡ W d   ƒ n1 sw   Y  t  ¡ }|  |j	j
|¡ d S r5   )r   r	  r\  r   r   rë  r¸   Zget_socket_conn_refused_errsrM  rf  r   )rJ   rG   rh  Zexpected_errnosr   r   r   Útest_create_connectionŽ  s   ÿz0NetworkConnectionNoServer.test_create_connectionc                 C   s´   |   ¡ L z	t tdf¡ W n$ ty   Y n) ty2 } ztjs'|jtj	kr(‚ W Y d }~nd }~ww |  
d¡ W d   ƒ d S W d   ƒ d S W d   ƒ d S 1 sSw   Y  d S )Nr	   zTimeoutError not raised)rð  r   rë  r¸   rJ  r   r   r.  r   ZEAFNOSUPPORTrX  r  r   r   r   Útest_create_connection_timeout¦  s"   
ÿ€ÿ÷ü"úz8NetworkConnectionNoServer.test_create_connection_timeoutN)rQ   rR   rS   r   rï  Ú
contextlibÚcontextmanagerrð  rñ  rò  ró  r   r   r   r   rî  v  s    
	rî  c                   @   sv   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeZd
d„ ZeZ	dd„ Z
eZdd„ ZeZdd„ ZeZdd„ ZeZdd„ ZdS )ÚNetworkConnectionAttributesTestr¢   c                 C   r£   r¤   r¦   r§   r   r   r   r[   ·  r¨   z(NetworkConnectionAttributesTest.__init__c                 C   s   t  ¡ | _d S r5   )r   r	  Úsource_portrI   r   r   r   r•   »  rR  z+NetworkConnectionAttributesTest.clientSetUpc                 C   r¬   r5   r­   rI   r   r   r   r˜   ¾  r®   z.NetworkConnectionAttributesTest.clientTearDownc                 C   s   | j  ¡ \}}| ¡  d S r5   )rE   rÇ   r!   rä   r   r   r   Ú_justAcceptÃ  s   z+NetworkConnectionAttributesTest._justAcceptc                 C   s:   t jt| jftjd| _|  | jj¡ |  	| jj
d¡ d S )Nr  r¼   )r   rë  r¸   rG   r   rÂ  rª   rf   r!   rÕ   rR  rI   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 )Nra  )r>   Úsource_addressr   )r   rë  r¸   rG   r   rÂ  r÷  rª   rf   r!   rÕ   r¹   rI   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 ¡ w |  
| j ¡ d¡ d S )Nrƒ  ©rE  r   r<   r=   rë  r¸   rG   rª   rf   r!   rÕ   rÜ  rI   r   r   r   Ú_testTimeoutDefaultÙ  s   
z3NetworkConnectionAttributesTest._testTimeoutDefaultc              	   C   sr   |   t ¡ d u ¡ t d¡ ztjt| jfd d| _|  | jj	¡ W t d ¡ nt d ¡ w |  
| j ¡ d ¡ d S ©Né   r  rü  rI   r   r   r   Ú_testTimeoutNoneå  s   
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _|  | j ¡ d¡ d S rþ  )r   rë  r¸   rG   rª   rÕ   rÜ  rI   r   r   r   Ú_testTimeoutValueNamedñ  s   z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t  t| jfd¡| _|  | jj¡ |  | j ¡ d¡ d S )Nrÿ  )	r   rë  r¸   rG   rª   rf   r!   rÕ   rÜ  rI   r   r   r   Ú_testTimeoutValueNonamedö  s   z8NetworkConnectionAttributesTest._testTimeoutValueNonamedNr¯   )rQ   rR   rS   r[   r•   r˜   rø  Z
testFamilyrù  ZtestSourceAddressrû  ZtestTimeoutDefaultrý  ZtestTimeoutNoner   ZtestTimeoutValueNamedr  ZtestTimeoutValueNonamedr  r   r   r   r   rö  µ  s"    
	rö  c                   @   sB   e Zd Zddd„Zdd„ Zdd„ Zdd	„ ZeZd
d„ Zdd„ Z	dS )ÚNetworkConnectionBehaviourTestr¢   c                 C   r£   r¤   r¦   r§   r   r   r   r[   þ  r¨   z'NetworkConnectionBehaviourTest.__init__c                 C   rë   r5   r   rI   r   r   r   r•     rì   z*NetworkConnectionBehaviourTest.clientSetUpc                 C   r¬   r5   r­   rI   r   r   r   r˜     r®   z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  ¡ \}}|  |j¡ t d¡ | d¡ d S )Nru  ó   done!)rE   rÇ   rf   r!   rË   rÌ   rÜ   rä   r   r   r   ÚtestInsideTimeout
  ó   
z0NetworkConnectionBehaviourTest.testInsideTimeoutc                 C   s0   t  t| jf¡ | _}| d¡}|  |d¡ d S )Nr  r  )r   rë  r¸   rG   rª   rÒ   rÕ   )rJ   r  rï  r   r   r   Ú_testInsideTimeout  s   
z1NetworkConnectionBehaviourTest._testInsideTimeoutc                    s2   t jt| jfdd | _‰ |  t‡ fdd„¡ d S )Nr   r  c                      s
   ˆ   d¡S )Nr  )rÒ   r   ©r  r   r   r"    rè  zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r   rë  r¸   rG   rª   r\  rJ  rI   r   r  r   Ú_testOutsideTimeout  s   z2NetworkConnectionBehaviourTest._testOutsideTimeoutNr¯   )
rQ   rR   rS   r[   r•   r˜   r  ZtestOutsideTimeoutr  r	  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                    ó   ‡ fdd„}ˆ   t|d¡ d S )Nc                     s   ˆ j  d¡ ˆ j  ¡  d S rY  )rE   r  rÇ   r  rI   r   r   Úraise_timeout  rÞ   z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)©r\  rJ  ©rJ   r  r   rI   r   ÚtestTCPTimeout  ó   ÿzTCPTimeoutTest.testTCPTimeoutc                 C   sv   d}z| j  d¡ | j  ¡ }W n  ty   |  d¡ Y n ty'   d}Y n	   |  d¡ Y |s9|  d¡ d S d S )NFr€  z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rE   r  rÇ   rJ  rX  r   ©rJ   Úokr®  r   r   r   ÚtestTimeoutZero$  s   ÿzTCPTimeoutTest.testTimeoutZeror<  ztest needs signal.alarm()c              
      s*  | j  d¡ G dd„ dtƒ‰ ‡ fdd„}t tj|¡}zqzNzEzt d¡ | j  ¡ }W n, ty8   |  d¡ Y n$ ˆ y@   Y n   |  dt	 
¡ d d… t ¡ f  ¡ Y n|  d	¡ W t d
¡ nt d
¡ w W n ˆ yx   |  d¡ Y nw W t tj|¡ d S W t tj|¡ d S t tj|¡ w )NrÜ  c                   @   r  )z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr  r   r   r   r   ÚAlarm9  rí  r  c                    s   ˆ ‚r5   r   )rE  rò  ©r  r   r   Úalarm_handler;  rì   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)rE   r  r¼  rE  rF  r<  rÇ   rJ  rX  r¸  Úexc_infoÚ	tracebackÚ
format_exc)rJ   r  rL  r®  r   r  r   ÚtestInterruptedTimeout2  s4   

þ
€ÿÿý"z%TCPTimeoutTest.testInterruptedTimeoutN)
rQ   rR   rS   r  r  rÁ   r¸  r   rE  r  r   r   r   r   r
    s    ÿr
  c                   @   rB   )ÚUDPTimeoutTestc                    r  )Nc                     ó   ˆ j  d¡ ˆ j  d¡ d S ©NrV  rÑ   ©rE   r  rÒ   r  rI   r   r   r  W  rŽ  z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)r  r  r   rI   r   ÚtestUDPTimeoutV  r  zUDPTimeoutTest.testUDPTimeoutc                 C   óx   d}z| j  d¡ | j  d¡}W n  ty   |  d¡ Y n ty(   d}Y n	   |  d¡ Y |s:|  d¡ d S 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©rE   r  rÒ   rJ  rX  r   r  r   r   r   r  ]  ó   ÿzUDPTimeoutTest.testTimeoutZeroN)rQ   rR   rS   r  r  r   r   r   r   r  T  s    r  c                   @   rB   )ÚUDPLITETimeoutTestc                    r  )Nc                     r  r  r  r  rI   r   r   r  p  rŽ  z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)r  r  r   rI   r   ÚtestUDPLITETimeouto  r  z%UDPLITETimeoutTest.testUDPLITETimeoutc                 C   r   )NFr€  rÑ   z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)r!  r"  r  r   r   r   r  v  r#  z"UDPLITETimeoutTest.testTimeoutZeroN)rQ   rR   rS   r%  r  r   r   r   r   r$  k  s    r$  c                   @   rB   )ÚTestExceptionsc                 C   sf   |   tttƒ¡ |   ttjtƒ¡ |   ttjtƒ¡ |   ttjtƒ¡ |  tj	t¡ |  tjt
¡ d S r5   )rE  Ú
issubclassr   r¼  r   r]  r^  r>   ZassertIsÚerrorrJ  rI   r   r   r   ÚtestExceptionTree†  s   z TestExceptions.testExceptionTreec                 C   sx   t   t jt jd¡}t   t jt jd| ¡ ¡}| ¡  |  |j¡ |  t¡ | 	d¡ W d   ƒ d S 1 s5w   Y  d S )Nr   F)
r   rD   r9   rN  r!   rf   r‘  r\  r   rŽ  )rJ   Zsock0r  r   r   r   Útest_setblocking_invalidfdŽ  s   ÿ"ÿz)TestExceptions.test_setblocking_invalidfdN)rQ   rR   rS   r)  r*  r   r   r   r   r&  „  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¡5}| | ¡ ¡ | ¡ d }|  | ¡ |¡ |  | 	¡ |¡ W d   ƒ n1 sEw   Y  W d   ƒ n1 sTw   Y  W d   ƒ d S W d   ƒ d S 1 slw   Y  d S )Ns    python-test-hello ÿr   )
r   r  r9   rq   rH   rÏ   r¹   rÇ   rÕ   Úgetpeername)rJ   rÞ  Ús1r¥  Zs3r   r   r   ÚtestLinuxAbstractNamespace   s   
þ€þý"ýz5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec                 C   sb   dd| j d   }t tjtj¡}| |¡ |  | ¡ |¡ W d   ƒ d S 1 s*w   Y  d S )Nrì  ó   hr   )ÚUNIX_PATH_MAXr   r  r9   rq   rÕ   r¹   ©rJ   rÞ  r#   r   r   r   ÚtestMaxName«  s
   
"þz&TestLinuxAbstractNamespace.testMaxNamec                 C   sT   dd| j   }t tjtj¡}|  t|j|¡ W d   ƒ d S 1 s#w   Y  d S )Nú Úh)r2  r   r  r9   r\  r   rq   r3  r   r   r   ÚtestNameOverflow±  s   "ÿz+TestLinuxAbstractNamespace.testNameOverflowc                 C   sD   t   t jt j¡}z| d¡ |  | ¡ d¡ W | ¡  d S | ¡  w )Nz python test ó    python test )r   r  r9   rq   rÕ   r¹   r!   rP  r   r   r   ÚtestStrName¶  s
   
z&TestLinuxAbstractNamespace.testStrNamec                 C   sT   t   t jt j¡}| tdƒ¡ |  | ¡ d¡ W d   ƒ d S 1 s#w   Y  d S )Nr8  )r   r  r9   rq   r  rÕ   r¹   rP  r   r   r   ÚtestBytearrayName¿  s   "þz,TestLinuxAbstractNamespace.testBytearrayNamec              	   C   sÂ   d}t   t jt j¡M}| d¡ |  | ¡ |¡ t   t jt j¡}| d¡ |  | ¡ |¡ |  | ¡ | ¡ ¡ W d   ƒ n1 sBw   Y  W d   ƒ d S W d   ƒ d S 1 sZw   Y  d S )Ns   ^ [0-9a-f]{5}ra  )r   r  r9   rq   ZassertRegexr¹   rU  )rJ   Zabstract_addressr/  r¥  r   r   r   ÚtestAutobindÅ  s   

ýü"üz'TestLinuxAbstractNamespace.testAutobindN)
rQ   rR   rS   r2  r0  r4  r7  r9  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   r©   r5   )r   r  r9   r  rI   r   r   r   rK   Ö  r«   zTestUnixDomain.setUpc                 C   r@  r5   )r  r!   rI   r   r   r   rN   Ù  rR  zTestUnixDomain.tearDownc              
   C   s8   zt  |¡W S  ty   |  d |t ¡ ¡¡ Y d S w )NzBPathname {0!a} cannot be represented in file system encoding {1!r})r   Úfsencoder2  rs   r@  r¸  Úgetfilesystemencoding©rJ   r  r   r   r   ÚencodedÜ  s   ÿ
þÿzTestUnixDomain.encodedc              
   C   sZ   z	t  ||¡ W d S  ty, } zt|ƒdkr |  d |¡¡ n‚ W Y d }~d S d }~ww )NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r   r  r   r<  rs   r@  )rJ   r  r  rš   r   r   r   rq   ç  s   þü€þzTestUnixDomain.bindc                 C   s   |   | j ¡ d¡ d S )N)ra  N)rM  r  r¹   rI   r   r   r   rS  ó  r8  zTestUnixDomain.testUnboundc                 C   s@   t j tj¡}|  | j|¡ |  tj|¡ |  	| j 
¡ |¡ d S r5   )r   r  Úabspathr   ÚTESTFNrq   r  rf   r  rÕ   r¹   r?  r   r   r   ÚtestStrAddr÷  s   zTestUnixDomain.testStrAddrc                 C   sF   t j tj¡}|  | j|  |¡¡ |  tj	|¡ |  
| j ¡ |¡ d S r5   )r   r  rA  r   rB  rq   r  r@  rf   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  rA  r   ZTESTFN_UNICODEr@  rq   r  rÅ  rf   r  rÕ   r¹   )rJ   r  r5  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_UNENCODABLErs   r   r  rA  rq   r  rf   r  rÕ   r¹   r?  r   r   r   ÚtestUnencodableAddr  s   

z"TestUnixDomain.testUnencodableAddrrÐ  r+  c                 C   r   )Nra  )r\  r   r  rq   rI   r   r   r   ÚtestEmptyAddress  rÏ  zTestUnixDomain.testEmptyAddressN)rQ   rR   rS   rK   rN   r@  rq   rS  rC  rD  rG  rH  rÁ   rº  r¸  rÕ  rI  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   rá   r¤   rn  r§   r   r   r   r[   "  râ   zBufferIOTest.__init__c                 C   sZ   t   ddgttƒ ¡}| j |¡}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S ©Nré  r   )rê  r-  rÖ   rã   rC  rÕ   rN  ©rJ   rÈ  rI  r×   r   r   r   ÚtestRecvIntoArray%  s   zBufferIOTest.testRecvIntoArrayc                 C   ó   t tƒ}| j |¡ d S r5   ©r  rÖ   rç   rÜ   ©rJ   rÈ  r   r   r   Ú_testRecvIntoArray-  ó   zBufferIOTest._testRecvIntoArrayc                 C   sD   t dƒ}| j |¡}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S rÐ   )r  rã   rC  rÕ   r-  rÖ   rL  r   r   r   ÚtestRecvIntoBytearray1  s
   z"BufferIOTest.testRecvIntoBytearrayc                 C   sH   t dƒ}| j t|ƒ¡}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S rÐ   )r  rã   rC  rS  rÕ   r-  rÖ   rL  r   r   r   ÚtestRecvIntoMemoryview:  ó
   z#BufferIOTest.testRecvIntoMemoryviewc                 C   s^   t   ddgttƒ ¡}| j |¡\}}|  |ttƒ¡ | ¡ }|d ttƒ… }|  |t¡ d S rK  )rê  r-  rÖ   rã   rF  rÕ   rN  ©rJ   rÈ  rI  rå   r×   r   r   r   ÚtestRecvFromIntoArrayC  s   z"BufferIOTest.testRecvFromIntoArrayc                 C   rN  r5   rO  rP  r   r   r   Ú_testRecvFromIntoArrayK  rR  z#BufferIOTest._testRecvFromIntoArrayc                 C   sH   t dƒ}| j |¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S rÐ   )r  rã   rF  rÕ   r-  rÖ   rV  r   r   r   ÚtestRecvFromIntoBytearrayO  rU  z&BufferIOTest.testRecvFromIntoBytearrayc                 C   sL   t dƒ}| j t|ƒ¡\}}|  |ttƒ¡ |d ttƒ… }|  |t¡ d S rÐ   )r  rã   rF  rS  rÕ   r-  rÖ   rV  r   r   r   ÚtestRecvFromIntoMemoryviewX  s
   z'BufferIOTest.testRecvFromIntoMemoryviewc                 C   s    t dƒ}|  t| jj|d¡ d S )Nrn   rÑ   )r  r\  rÝ  rã   rF  rP  r   r   r   ÚtestRecvFromIntoSmallBuffera  s   z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   rq  r5   rr  rI   r   r   r   Ú_testRecvFromIntoSmallBufferf  r  z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t ƒ }| j |¡ | j |d¡ d S r·   )r  rã   rF  rP  r   r   r   ÚtestRecvFromIntoEmptyBufferi  s   z(BufferIOTest.testRecvFromIntoEmptyBufferNr¯   )rQ   rR   rS   r[   rM  rQ  rS  Z_testRecvIntoBytearrayrT  Z_testRecvIntoMemoryviewrW  rX  rY  Z_testRecvFromIntoBytearrayrZ  Z_testRecvFromIntoMemoryviewr[  r\  r]  Z_testRecvFromIntoEmptyBufferr   r   r   r   rJ    s&    
rJ  iÐ  éÈ   éÒ   c               
   C   sŒ   	 t tdƒsdS ztddd} W n tttfy   Y dS w |  | D ]}| d¡r3 W d   ƒ dS q#W d   ƒ dS 1 s?w   Y  dS )NÚAF_TIPCFz/proc/modulesr   rf  ztipc T)r   r   r   ÚFileNotFoundErrorÚIsADirectoryErrorrÓ   rÖ  )r   rÀ  r   r   r   ÚisTipcAvailableu  s&   
ý
ýÿ
ÿürc  z6TIPC module is not loaded, please 'sudo modprobe tipc'c                   @   rV   )Ú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`  rk  rf   r!   r  rl  rm  ÚTIPC_ADDR_NAMESEQÚ
TIPC_STYPEÚ
TIPC_LOWERÚ
TIPC_UPPERrq   ÚTIPC_ADDR_NAMEr¤  re  rÖ   rô  rÕ   r¹   )rJ   ru  rª   ÚsrvaddrZsendaddrr×   Zrecvaddrr   r   r   ÚtestRDMŒ  s    ÿ
ÿzTIPCTest.testRDMN)rQ   rR   rS   rk  r   r   r   r   rd  ‰  rÉ  rd  c                   @   r½   )ÚTIPCThreadableTestr¢   c                 C   r¿   r¤   rÀ   r§   r   r   r   r[   ¤  rÃ   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`  r9   ru  rf   r!   r  rl  rm  re  rf  rg  rh  rq   rH   r   rÇ   rÈ   rÉ   )rJ   rj  r   r   r   rK   ¨  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`  r9   rª   rf   r!   ri  rf  rg  r¤  rh  rÏ   r¹   Úcliaddr)rJ   rå   r   r   r   r•   ´  s   
ÿzTIPCThreadableTest.clientSetUpc                 C   s,   | j  d¡}|  |t¡ |  | j| j¡ d S rÐ   )rÈ   rÒ   rÕ   rÖ   rm  rÉ   r_  r   r   r   rÙ   À  s   zTIPCThreadableTest.testStreamc                 C   rÚ   r5   rÛ   rI   r   r   r   rÝ   Å  rÞ   zTIPCThreadableTest._testStreamNr¯   rß   r   r   r   r   rl  ¡  s    
rl  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w   Y  |  |j¡ t   ¡ }| ¡  W d   ƒ n1 s3w   Y  |  |j¡ t   ¡ }|  t|jd¡ W d   ƒ n1 sUw   Y  |  |j¡ d S ©Nrb  )r   r  r’  rE  r!   r\  r   rH  r  r   r   r   Ú_testSocketClassÌ  s   
ÿ

ÿ
ÿz$ContextManagersTest._testSocketClassc                 C   ó2   | j  ¡ \}}|  |j¡ | d¡}| |¡ d S rÐ   ©rE   rÇ   rf   r!   rÒ   rH  ©rJ   rÈ   rå   rï  r   r   r   ÚtestCreateConnectionBaseÚ  r  z,ContextManagersTest.testCreateConnectionBasec                 C   sl   | j  ¡ }t |¡}|  |j¡ | d¡ |  | d¡d¡ W d   ƒ n1 s)w   Y  |  	|j¡ d S )Nrb  rÑ   )
rE   r¹   r   rë  r  r’  rH  rÕ   rÒ   rE  ©rJ   rÞ  r  r   r   r   Ú_testCreateConnectionBaseà  s   

ýz-ContextManagersTest._testCreateConnectionBasec                 C   rq  rÐ   rr  rs  r   r   r   ÚtestCreateConnectionCloseè  r  z-ContextManagersTest.testCreateConnectionClosec                 C   s\   | j  ¡ }t |¡}| ¡  W d   ƒ n1 sw   Y  |  |j¡ |  t|j	d¡ d S ro  )
rE   r¹   r   rë  r!   rE  r’  r\  r   rH  ru  r   r   r   Ú_testCreateConnectionCloseî  s   

ÿz.ContextManagersTest._testCreateConnectionCloseN)rQ   rR   rS   rp  rt  rv  rw  rx  r   r   r   r   rn  Ê  s    rn  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   sZ   t   t jt jt jB ¡}|  |jt j¡ |  | ¡ ¡ W d   ƒ d S 1 s&w   Y  d S r5   )r   rD   r9   r  rÕ   r&  r  Úget_inheritablerP  r   r   r   Útest_SOCK_CLOEXEC÷  s   
ÿ"ýz!InheritanceTest.test_SOCK_CLOEXECc                 C   sB   t   ¡ }| |  | ¡ d¡ W d   ƒ d S 1 sw   Y  d S rO  )r   rÕ   rz  r  r   r   r   Útest_default_inheritable   s   "ÿz(InheritanceTest.test_default_inheritablec              	   C   s†   t   ¡ }|3 | ¡ }| ¡  | |  | ¡ d¡ W d   ƒ n1 s$w   Y  W d   ƒ d S W d   ƒ d S 1 s<w   Y  d S rO  )r   rˆ  r!   rÕ   rz  )rJ   r  Znewsockr   r   r   Útest_dup  s   ÿý"ýzInheritanceTest.test_dupc                 C   sf   t   ¡ }|# | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ W d   ƒ d S 1 s,w   Y  d S )NTF)r   Úset_inheritablerÕ   rz  r  r   r   r   Útest_set_inheritable  s   

"ûz$InheritanceTest.test_set_inheritableNr»   c                 C   s„   t   ¡ }|2 | ¡ }|  | ¡ d¡ t |tj¡}|tj M }t |tj|¡ |  | ¡ d¡ W d   ƒ d S 1 s;w   Y  d S r   )r   rN  rÕ   rz  r   ÚF_GETFDÚ
FD_CLOEXECÚF_SETFD)rJ   r  r—  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   ƒ d S 1 s8w   Y  d S rO  )r   rN  rÕ   r   r€  r  r~  )rJ   r  r—  r   r   r   Útest_set_inheritable_cloexec$  s   ÿ
ÿ"úz,InheritanceTest.test_set_inheritable_cloexecc                 C   sH   t  ¡ \}}|  |j¡ |  |j¡ |  | ¡ d¡ |  | ¡ d¡ d S rO  )r   ré   rf   r!   rÕ   rz  )rJ   r/  r¥  r   r   r   Útest_socketpair1  s
   zInheritanceTest.test_socketpair)rQ   rR   rS   rÁ   r¸  r   r   r   r™  r{  r|  r}  r  rº  r   rƒ  r„  r…  r   r   r   r   ry  ö  s    ÿ	

ry  r  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¾   |r7|   |jtj¡ |   | ¡ |¡ |  t |tjtj	¡tj	@ ¡ |dkr.|  
| ¡ ¡ d S |  | ¡ ¡ d S |   |jtj¡ |   | ¡ d ¡ |  
t |tjtj	¡tj	@ ¡ |  | ¡ ¡ d S r·   )rÕ   r&  r   r9   rÜ  rE  r   r‚  r   rƒ  r  r  )rJ   r#   Únonblockr>   r   r   r   ÚcheckNonblock<  s   ÿ	ÿz"NonblockConstantTest.checkNonblockr¼   r‹  rŒ  c                 C   sÂ  t   t jt jt jB ¡G}|  |¡ | d¡ | j|dd | d¡ |  |¡ | d ¡ | j|dd | d¡ | j|dd | d¡ | j|dd W d   ƒ n1 sUw   Y  t  ¡ }t  d¡ t   ¡ }|  |¡ W d   ƒ n1 sww   Y  t  d ¡ t   ¡ }|  |d¡ W d   ƒ n1 s–w   Y  t  d¡ t   ¡ }| j|dd W d   ƒ n1 s¶w   Y  t  d ¡ t   ¡ }|  |d¡ W d   ƒ n1 sÕw   Y  t  |¡ d S )NTF)r‡  g       @r  r€  )	r   rD   r9   r  rˆ  rŽ  r  r<   r=   )rJ   r#   Útr   r   r   Útest_SOCK_NONBLOCKU  sD   
ÿ






ô

ÿ

ÿ

ÿ

ÿz'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr€  )rQ   rR   rS   rˆ  r   r™  rŠ  r   r   r   r   r†  9  s    
r†  rs  rt  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 r5   )r‚   r   Ú	fromsharerÇ   rH  r!   )rî  ÚqZsdataÚmessager#   r¥  rK  r   r   r   ÚremoteProcessServer|  s   

z%TestSocketSharing.remoteProcessServerc           	      C   s²   t  ¡ }t j| j|fd}| ¡  | j |j¡}| j ¡ }| j 	¡  | 
|¡ d}| 
|¡ t |¡}g }	 | d¡}|s>n| |¡ q6| 	¡  d |¡}|  ||¡ | ¡  d S )N©rK  r`   s
   slapmahfroTr  r€  )Úmultiprocessingr‹   ÚProcessr  rN  rE   ÚshareÚpidr¹   r!   r—   r   rë  rÒ   rj  r9  rÕ   )	rJ   r  rY  rï  rå   rŽ  r#   ÚmÚreceivedr   r   r   Ú	testShareŠ  s*   






ü
zTestSocketSharing.testSharec                 C   s@   | j  t ¡ ¡}|  ttj|d d… ¡ |  ttj|d ¡ d S )Nr¬  rb  )rE   r“  r   Úgetpidr\  rÝ  r   rŒ  )rJ   rï  r   r   r   ÚtestShareLength­  s   z!TestSocketSharing.testShareLengthc                 C   sf   |   | ¡ d ¡ |   | ¡ | ¡ ¡ |   |j|j¡ |   |j|j¡ |jdkr1|   |j|j¡ d S d S r·   )rÕ   rÜ  rR  r&  rS  )rJ   ZorgÚotherr   r   r   ÚcompareSockets²  s   
ÿz TestSocketSharing.compareSocketsc                 C   sB   | j  t ¡ ¡}t |¡}z|  | j |¡ W | ¡  d S | ¡  w r5   )rE   r“  r   r˜  r   rŒ  r›  r!   )rJ   rï  r#   r   r   r   ÚtestShareLocalÂ  s
   
z TestSocketSharing.testShareLocalc              
   C   s¦   t jt jg}t jt jg}|D ]B}|D ]=}zt   ||¡}W n	 ty%   Y qw z$| t ¡ ¡}t  	|¡}z|  
||¡ W | ¡  n| ¡  w W | ¡  q| ¡  w qd S r5   )r   rD   r  r9   r&   r   r“  r   r˜  rŒ  r›  r!   )rJ   ÚfamiliesÚtypesr   r‰  Úsourcerï  Zsharedr   r   r   Ú	testTypesÊ  s$   ÿ
óÿzTestSocketSharing.testTypesN)
rQ   rR   rS   r  r  r—  r™  r›  rœ  r   r   r   r   r   r‹  w  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    ry   r€  c                 C   s¨   dd„ }d  dd„ t| jƒD ƒ¡}ttjdƒ}|| j| jƒD ]}| |¡ qW d   ƒ n1 s1w   Y  ttjdƒ}| ¡ | _	W d   ƒ d S 1 sMw   Y  d S )Nc                 s   s2    | |kr|V  | |8 } | |ks| r| V  d S d S r5   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_lettersri  r  r   r   r   r2  ò  s    ÿz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>rc  r   )
r9  rm  ÚBUFSIZEr   r   rB  ÚFILESIZErh  r‚  ÚFILEDATA)rî  r¤  Úchunkr   Zcsizer   r   r   Ú
setUpClassè  s   
ÿÿÿ"ÿz SendfileUsingSendTest.setUpClassc                 C   s   t  t j¡ d S r5   )r   r  rB  )rî  r   r   r   ÚtearDownClassû  rê  z#SendfileUsingSendTest.tearDownClassc                 C   s8   | j  tj¡ | j  ¡ \}}| | j¡ |  |j¡ |S r5   )rE   r  r   r–  rÇ   ÚTIMEOUTrf   r!   rä   r   r   r   Úaccept_connÿ  s
   z!SendfileUsingSendTest.accept_connc                 C   s.   g }	 |  | j¡}|sn| |¡ qd |¡S )NTr€  )rÒ   r©  rj  r9  )rJ   rÈ   r–  r¬  r   r   r   Ú	recv_data  s   
ü
zSendfileUsingSendTest.recv_datac                 C   ó
   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 |¡<}|!}|  |¡}||ƒ}|  || j	¡ |  | 
¡ | j	¡ W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   Y  d S )Nr   ©rE   r¹   r   r   rB  r   rë  rµ  rÕ   rª  Útell©rJ   rÞ  Úfiler  ÚmethÚsentr   r   r   Ú_testRegularFile  s   

Püz&SendfileUsingSendTest._testRegularFilec                 C   ó6   |   ¡ }|  |¡}|  t|ƒ| j¡ |  || j¡ d S r5   ©r°  r±  rÕ   r-  rª  r«  ©rJ   rÈ   rï  r   r   r   ÚtestRegularFile  ó   
z%SendfileUsingSendTest.testRegularFilec              	   C   s¶   | j  ¡ }t | j¡}t |¡A}|&}| |¡}|  || j	¡ |  | 
¡ | j	¡ |  tj|j|¡ W d   ƒ n1 s<w   Y  W d   ƒ d S W d   ƒ d S 1 sTw   Y  d S r5   )rE   r¹   ÚioÚBytesIOr«  r   rë  r™  rÕ   rª  r·  r\  r   r¡  )rJ   rÞ  r¹  r  r»  r   r   r   Ú_testNonRegularFile'  s   

ÿPüz)SendfileUsingSendTest._testNonRegularFilec                 C   r½  r5   r¾  r¿  r   r   r   ÚtestNonRegularFile1  rÁ  z(SendfileUsingSendTest.testNonRegularFilec              	   C   sè   | j  ¡ }tjd }t|dƒ |  tj|¡ W d   ƒ n1 s!w   Y  t|dƒ}t |¡:}|}|  	|¡}||ƒ}|  
|d¡ |  
| ¡ d¡ W d   ƒ n1 sUw   Y  W d   ƒ d S W d   ƒ d S 1 smw   Y  d S )NÚ2rc  r   r   )rE   r¹   r   rB  r   rf   r  r   rë  rµ  rÕ   r·  )rJ   rÞ  Úfilenamer¹  r  rº  r»  r   r   r   Ú_testEmptyFileSend9  s   

ÿ

Püz(SendfileUsingSendTest._testEmptyFileSendc                 C   s"   |   ¡ }|  |¡}|  |d¡ d S r™  )r°  r±  rÕ   r¿  r   r   r   ÚtestEmptyFileSendE  s   
z'SendfileUsingSendTest.testEmptyFileSendc              	   C   s´   | j  ¡ }ttjdƒ}t |¡@}|%}|  |¡}||dd}|  || j	d ¡ |  | 
¡ | j	¡ W d   ƒ n1 s;w   Y  W d   ƒ d S W d   ƒ d S 1 sSw   Y  d S )Nr   éˆ  )Úoffsetr¶  r¸  r   r   r   Ú_testOffsetL  s   

Püz!SendfileUsingSendTest._testOffsetc                 C   sB   |   ¡ }|  |¡}|  t|ƒ| jd ¡ |  || jdd … ¡ d S )NrÊ  r¾  r¿  r   r   r   Ú
testOffsetU  s   
z SendfileUsingSendTest.testOffsetc              	   C   óº   | j  ¡ }ttjdƒ}tj|tjd}|> |# d}|  	|¡}|||d}|  
||¡ |  
| ¡ |¡ W d   ƒ n1 s>w   Y  W d   ƒ d S W d   ƒ d S 1 sVw   Y  d S )Nr   r  éGKL ©r  ©rE   r¹   r   r   rB  r   rë  r   rÂ  rµ  rÕ   r·  ©rJ   rÞ  r¹  r  r  rº  r»  r   r   r   Ú
_testCount]  ó   
ÿ
Pûz SendfileUsingSendTest._testCountc                 C   ó@   d}|   ¡ }|  |¡}|  t|ƒ|¡ |  || jd |… ¡ d S )NrÏ  ©r°  r±  rÕ   r-  r«  ©rJ   r  rÈ   rï  r   r   r   Ú	testCounti  ó
   
zSendfileUsingSendTest.testCountc              	   C   rÎ  )Nr   r  r   rÐ  rÑ  rÒ  r   r   r   Ú_testCountSmallr  rÔ  z%SendfileUsingSendTest._testCountSmallc                 C   rÕ  r  rÖ  r×  r   r   r   ÚtestCountSmall~  rÙ  z$SendfileUsingSendTest.testCountSmallc              	   C   sº   | j  ¡ }ttjdƒ}tj|ddA}|&}d}|  |¡}||d|d}|  ||¡ |  | 	¡ |d ¡ W d   ƒ n1 s>w   Y  W d   ƒ d S W d   ƒ d S 1 sVw   Y  d S )Nr   r¼   r  é§† é×  )rË  r  )
rE   r¹   r   r   rB  r   rë  rµ  rÕ   r·  rÒ  r   r   r   Ú_testCountWithOffset‡  s   

Pû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 |¡<}|!}| d¡ |  |¡}|  	t
||¡ |  	t
|j|¡ W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   Y  d S )Nr   F)rE   r¹   r   r   rB  r   rë  rŽ  rµ  r\  rÝ  r™  ©rJ   rÞ  r¹  r  rº  r   r   r   Ú_testNonBlockingš  s   


Püz&SendfileUsingSendTest._testNonBlockingc                 C   s$   |   ¡ }| d¡r|  d¡ d S d S )Nry   z$was not supposed to receive any data)r°  rÒ   rX  ©rJ   rÈ   r   r   r   ÚtestNonBlocking£  s   
ÿz%SendfileUsingSendTest.testNonBlockingc              	   C   s¤   | j  ¡ }ttjdƒ}tj|tjd}|3 | |  	|¡}||ƒ}|  
|| j¡ W d   ƒ n1 s3w   Y  W d   ƒ d S W d   ƒ d S 1 sKw   Y  d S )Nr   r  )rE   r¹   r   r   rB  r   rë  r   rÂ  rµ  rÕ   rª  r¸  r   r   r   Ú_testWithTimeoutª  s   
ÿ
Pýz&SendfileUsingSendTest._testWithTimeoutc                 C   r½  r5   r¾  r¿  r   r   r   ÚtestWithTimeout´  rÁ  z%SendfileUsingSendTest.testWithTimeoutc              	   C   s˜   | j  ¡ }ttjdƒ7}t |¡}| d¡ |  |¡}|  	t
||¡ W d   ƒ n1 s-w   Y  W d   ƒ d S W d   ƒ d S 1 sEw   Y  d S )Nr   g{®Gáz„?)rE   r¹   r   r   rB  r   rë  r  rµ  r\  rJ  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   rë   r5   r   rI   r   r   r   Ú_test_errorsË  rì   z"SendfileUsingSendTest._test_errorsc              	   C   s¨  t tjdƒ,}tjtjd}|  |¡}|  td||¡ W d   ƒ n1 s&w   Y  W d   ƒ n1 s5w   Y  t tjdd)}t ¡ }|  |¡}|  td||¡ W d   ƒ n1 s^w   Y  W d   ƒ n1 smw   Y  t tjdƒR}t ¡ 5}|  |¡}| jtd||dd	 | jtd||d
d	 | jtd||dd	 | jtd||dd	 W d   ƒ n1 sµw   Y  W d   ƒ d S W d   ƒ d S 1 sÍw   Y  d S )Nr   r(  r9   r   rf  zbinary modezpositive integerrÆ  rÐ  rÊ   r   r¬  )	r   r   rB  r   r&   rµ  rk  rÝ  r™   )rJ   r¹  r#   rº  r   r   r   Útest_errorsÎ  sJ   
ÿþ€ÿ

ÿþ€ÿ

ÿÿÿÿøÿ"ÿz!SendfileUsingSendTest.test_errorsN)%rQ   rR   rS   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¡  Þ  sF    

		
			
		
r¡  r™  z%os.sendfile() required for this test.c                   @   r  )ÚSendfileUsingSendfileTestc                 C   r²  )Nr¡  r´  r  r   r   r   rµ  ì  r›  z(SendfileUsingSendfileTest.meth_from_sockN)rQ   rR   rS   rµ  r   r   r   r   rê  æ  s    rê  zAF_ALG requiredc                   @   s|   e Zd Zdd„ Ze dd¡dd„ ƒZdd„ Ze dd	¡d
d„ ƒZe dd¡dd„ ƒZ	e dd	¡dd„ ƒZ
dd„ Zdd„ ZdS )ÚLinuxKernelCryptoAPIc              
   C   sZ   t   t jt jd¡}z
| ||f¡ W |S  ty, } z| ¡  t t|ƒ||¡‚d }~ww r·   )	r   r1   r.   rq   ra  r!   rÁ   ZSkipTestr<  )rJ   Útypr1  r  rš   r   r   r   Ú
create_algó  s   û€ýzLinuxKernelCryptoAPI.create_algrd  r  c              	   C   s  t  d¡}|  dd¡r}| ¡ \}}| | d¡ |  | d¡|¡ W d   ƒ n1 s-w   Y  | ¡ \}}|+ | dtj	¡ | dtj	¡ | dtj	¡ | d	¡ |  | d¡|¡ W d   ƒ n1 shw   Y  W d   ƒ d S W d   ƒ d S 1 s€w   Y  d S )
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adÚhashZsha256s   abcrç  ó   aó   bó   cr€  )
r  Úfromhexrí  rÇ   rH  rÕ   rÒ   rÜ   r   ÚMSG_MORE)rJ   rT  ÚalgoÚopr…   r   r   r   Útest_sha256   s$   

þ
ûù"ùz LinuxKernelCryptoAPI.test_sha256c              	   C   s²   d}d}t  d¡}|  dd¡@}| tjtj|¡ | ¡ \}}| | |¡ |  	| 
d¡|¡ W d   ƒ n1 s:w   Y  W d   ƒ d S W d   ƒ d S 1 sRw   Y  d S )Ns   Python loves AF_ALGs   what do ya want for nothing?Z(193dbb43c6297b47ea6277ec0ce67119a3f3aa66rî  z
hmac(sha1)rç  )r  rò  rí  r  r   ÚSOL_ALGÚALG_SET_KEYrÇ   rH  rÕ   rÒ   )rJ   Úkeyrï  rT  rô  rõ  r…   r   r   r   Útest_hmac_sha1  s   

þý"ýz#LinuxKernelCryptoAPI.test_hmac_sha1ru  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 sPw   Y  | ¡ \}}| |j	|gtj|d |  | |¡|¡ W d   ƒ n1 s{w   Y  d	}	|g|	 }
| ¡ \}}| |j	|
tj
|d | ||	 ¡}W d   ƒ n1 sªw   Y  |  t|ƒ||	 ¡ |  |d |… |¡ | ¡ \}}| |j	|gtj|d | ||	 ¡}W d   ƒ n1 sçw   Y  |  t|ƒ||	 ¡ |  |||	 ¡ W d   ƒ d S 1 s
w   Y  d S )
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41s   Single block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))rõ  Úivr)  )rõ  rû  rÑ   )r  rò  r-  rí  r  r   r÷  rø  rÇ   Úsendmsg_afalgÚALG_OP_ENCRYPTró  rH  rÕ   rÒ   ÚALG_OP_DECRYPT)rJ   rù  rû  r×   Z
ciphertextZmsglenrô  rõ  r…   Z
multiplierZlongmsgÚencZdecr   r   r   Útest_aes_cbc!  sV   



ÿ
üÿý
ÿýÿý$àz!LinuxKernelCryptoAPI.test_aes_cbcrQ  c                 C   sZ  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 s¢w   Y  |
 ¡ \}}|8 || }|j|gtj||	d | |	t|ƒ | ¡}|  |||	| … ¡ |  ||| d … ¡ W d   ƒ n1 sêw   Y  t d¡j}|
 ¡ \}}|O || }| |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 sPw   Y  |
 ¡ \}}|, || | }|j|gtj||	d | t|ƒ| ¡}|  |||	d … ¡ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s¦w   Y  d S )NZLinux)r‹  r¾  )r‹  r  zupstream Linux kernel issueZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))rõ  rû  Úassoclenr)  )rõ  rû  r  r   )r   Z_get_kernel_versionrs   r  rò  r-  rí  r  r   r÷  rø  ÚALG_SET_AEAD_AUTHSIZErÇ   rü  rý  ró  rH  rÒ   rÕ   r   ÚStructrè  rE  Ú
ALG_SET_OPÚ
ALG_SET_IVÚALG_SET_AEAD_ASSOCLENrþ  )rJ   Zkernel_versionrù  rû  ZplainZassocZexpected_ctZexpected_tagZtaglenr  rô  rõ  r…   Úresr×   Zpack_uint32r   r   r   Útest_aead_aes_gcmJ  s‚   







ÿ
ÿ
ù
ÿú	þþõÿ ûÔ,$Ôz&LinuxKernelCryptoAPI.test_aead_aes_gcmc              	   C   s¨   |   dd¡D}t d¡}| tjtj|¡ | ¡ \}}| | d¡}|  	t
|ƒd¡ W d   ƒ n1 s5w   Y  W d   ƒ d S W d   ƒ d S 1 sMw   Y  d S )NÚrngZdrbg_pr_sha256r½  )rí  r   Úurandomr  r   r÷  rø  rÇ   rÒ   rÕ   r-  )rJ   rô  Z
extra_seedrõ  r…   Zrnr   r   r   Útest_drbg_pr_sha256  s   

þü"üz(LinuxKernelCryptoAPI.test_drbg_pr_sha256c              	   C   s\  t   t jt jd¡}|™ |  t¡ | ¡  W d   ƒ n1 s w   Y  |  t¡ |jd d W d   ƒ n1 s;w   Y  |  t¡ | d¡ W d   ƒ n1 sUw   Y  |  t¡ |jt jd d W d   ƒ n1 srw   Y  |  t¡ |jt jdd W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s§w   Y  d S )Nr   )rõ  r   )rõ  r  r¬  )r   r1   r.   r\  r™   rü  rý  r  r   r   r   Útest_sendmsg_afalg_argsš  s(   
ÿÿÿÿÿó"óz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc                 C   sø   t   t jt jd¡}|  |j¡ |  t¡ | d¡ W d   ƒ n1 s$w   Y  |  t	d¡ | d¡ W d   ƒ n1 s?w   Y  |  t¡ | d¡ W d   ƒ n1 sYw   Y  |  t	d¡ | d¡ W d   ƒ d S 1 suw   Y  d S )Nr   )Ztttttttttttttr1  ztype too long)Zttttttttttttttr1  )r&  Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)r&  Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r1   r.   rf   r!   r\  ra  rq   rk  rÝ  r  r   r   r   Útest_length_restriction¬  s   ÿÿÿ"ÿz,LinuxKernelCryptoAPI.test_length_restrictionN)rQ   rR   rS   rí  r   r™  rö  rú  r   r  r  r  r  r   r   r   r   rë  ð  s    




(

D

rë  rw  rx  c                   @   rV   )ÚTestMacOSTCPFlagsc                 C   s   |   tj¡ d S r5   )rE  r   ZTCP_KEEPALIVErI   r   r   r   Útest_tcp_keepaliveÀ  r  z$TestMacOSTCPFlags.test_tcp_keepaliveN)rQ   rR   rS   r  r   r   r   r   r  ¾  rX   r  Úwinzrequires Windowsc                   @   s   e Zd Zh d£Zdd„ ZdS )ÚTestMSWindowsTCPFlags>   ÚTCP_NODELAYÚTCP_FASTOPENÚTCP_KEEPINTVLÚTCP_KEEPIDLEÚ
TCP_MAXSEGÚ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Ö  ©r0  r#   r   r   r   r2  Ô  r3  z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>c                    s   g | ]	}|ˆ j vr|‘qS r   )ÚknownTCPFlagsr  rI   r   r   r2  Õ  r3  zANew TCP flags were discovered. See bpo-32394 for more information)r  r   rÕ   )rJ   ZprovidedÚunknownr   rI   r   Útest_new_tcp_flagsÓ  s
   ÿz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rQ   rR   rS   r  r  r   r   r   r   r  Ä  r[  r  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¡}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ n1 s*w   Y  t jrctjd|ftjd}|  | ¡ d d¡ |  | ¡ d |¡ W d   ƒ d S 1 s\w   Y  d S d S )NrK  r   r   rï  r'  )r   r	  r   Úcreate_serverrÕ   r¹   r.  r  ©rJ   rG   r  r   r   r   Útest_addressÝ  s   þ
ÿ"ýÿzCreateServerTest.test_addressc                 C   sª   t  d¡}|  |jt j¡ |  |jt j¡ W d   ƒ n1 s w   Y  tjrSt jdt j	d}|  |jt j	¡ |  |jt j¡ W d   ƒ d S 1 sLw   Y  d S d S )NrJ  ©rï  r   r'  )
r   r  rÕ   rR  rD   r&  r9   r   r.  r  )rJ   r  r#   r   r   r   Útest_family_and_typeè  s   þ"þÿz%CreateServerTest.test_family_and_typec                 C   sÞ   t tdƒs$|  t¡ tjddd W d   ƒ d S 1 sw   Y  d S t d¡}| tjtj¡}|  |d¡ W d   ƒ n1 sBw   Y  tjddd}| tjtj¡}|  	|d¡ W d   ƒ d S 1 shw   Y  d S )NÚSO_REUSEPORT)r"  r   T)Ú
reuse_portr   )
r   r   r\  rÝ  r  r  rl  r"  rÕ   rU  )rJ   r  rŽ  r   r   r   Útest_reuse_portñ  s   
"ÿþ"þz CreateServerTest.test_reuse_portrq  rr  rs  ry  c                 C   s6   t jdt jd	}W d   ƒ d S 1 sw   Y  d S )Nr   r'  )r   r  r  r  r   r   r   Útest_ipv6_only_defaultý  s   6z'CreateServerTest.test_ipv6_only_defaultúdualstack_ipv6 not supportedc                 C   sH   t jdt jdd}|  |jt j¡ W d   ƒ d S 1 sw   Y  d S )Nr   T©rR  Údualstack_ipv6)r   r  r  rÕ   rR  r  r   r   r   Útest_dualstack_ipv6_family  s   
ÿ"þz+CreateServerTest.test_dualstack_ipv6_familyN)rQ   rR   rS   r  r!  r$  rÁ   rº  r   rD  r¸  r   r.  r%  r   Úhas_dualstack_ipv6r)  r   r   r   r   r  Û  s    	
þÿr  c                   @   s   e Zd ZejZdd„ Zdd„ Zdd„ Ze	 
ejd¡dd	„ ƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZe	 e ¡  d
¡e	 
ejd¡dd„ ƒƒZdS )ÚCreateServerFunctionalTestc                    sV   ‡ ‡fdd„}t  ¡ ‰ | ˆj¡ t j||fd}| ¡  ˆ |jˆj¡ ˆ  ¡  d S )Nc              	      s¬   | J |   ¡ \}}|) ˆ  ˆj¡ | d¡}|s(	 W d   ƒ W d   ƒ d S | |¡ W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   Y  d S rÐ   )rÇ   r“   r>   rÒ   rH  )r  rÈ   r…   r×   ©r  rJ   r   r   Úrun  s   
üþûþ"þz3CreateServerFunctionalTest.echo_server.<locals>.runr  )	r\   rˆ   r  r>   rL  rN  rf   r9  r~   )rJ   r  r-  r   r   r,  r   Úecho_server  s   
z&CreateServerFunctionalTest.echo_serverc                 C   sd   t j |d"}| | j¡ | |¡ | d¡ |  | d¡d¡ W d   ƒ d S 1 s+w   Y  d S )Nr'  rb  rÑ   )r   r  r>   rÏ   rH  rÕ   rÒ   )rJ   rå   rR  r  r   r   r   Úecho_client#  s   

"üz&CreateServerFunctionalTest.echo_clientc                 C   sX   t  ¡ }t d|f¡}|  |¡ |  d|ftj¡ W d   ƒ d S 1 s%w   Y  d S )Nra  rK  )r   r	  r   r  r.  r/  rD   r  r   r   r   Ú	test_tcp4*  s
   
"þz$CreateServerFunctionalTest.test_tcp4ry  c                 C   s^   t  ¡ }tjd|ftjd}|  |¡ |  d|ftj¡ W d   ƒ d S 1 s(w   Y  d S )Nra  r'  rï  ©r   r	  r   r  r  r.  r/  r  r   r   r   Ú	test_tcp60  s   
ÿ
"ýz$CreateServerFunctionalTest.test_tcp6r&  c                 C   s`   t  ¡ }tjd|ftjdd}|  |¡ |  d|ftj¡ W d   ƒ d S 1 s)w   Y  d S )Nra  Tr'  rK  )r   r	  r   r  r  r.  r/  rD   r  r   r   r   Útest_dual_stack_client_v4:  ó   ÿ
"ýz4CreateServerFunctionalTest.test_dual_stack_client_v4c                 C   s`   t  ¡ }tjd|ftjdd}|  |¡ |  d|ftj¡ W d   ƒ d S 1 s)w   Y  d S )Nra  Tr'  rï  r1  r  r   r   r   Útest_dual_stack_client_v6D  r4  z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rQ   rR   rS   r   rÂ  r>   r.  r/  r0  rÁ   r¸  r   r.  r2  rº  r   r*  r3  r5  r   r   r   r   r+    s"    
	ÿÿr+  Úsend_fdsÚrecv_fdsc                   @   rV   )ÚSendRecvFdsTestsc              	   C   sj  dd„ }dd„ }dd„ t dƒD ƒ}|  ||¡ dd„ |D ƒ}t tjtj¡\}}|; |) t |tg|¡ t |t	tƒd	 t	|ƒd	 ¡\}}}	}
|  ||¡ W d   ƒ n1 sYw   Y  W d   ƒ n1 shw   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 r5   ©r   r!   )Úpipesr’  Úfd2r   r   r   Úclose_pipesS  s   
þz8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipesc                 S   s   | D ]}t  |¡ qd S r5   r9  )rk  r—  r   r   r   Ú	close_fdsX  s   ÿz6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   rœ  r   )r   Úpipe)r0  r…   r   r   r   r2  ]  ó    z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>rÛ  c                 S   s   g | ]\}}|‘qS r   r   )r0  ÚrfdÚwfdr   r   r   r2  _  r?  r¼   r   r  )rm  rf   r   ré   r  r9   r6  rÖ   r7  r-  rÕ   rm  r   rh  r<  ri  r‚  )rJ   r<  r=  r:  rk  rz  r{  r×   Zfds2r)  rå   r¨  r@  rA  rï  r   r   r   ÚtestSendAndRecvFdsR  s.   &ü€ þz#SendRecvFdsTests.testSendAndRecvFdsN)rQ   rR   rS   rB  r   r   r   r   r8  N  r  r8  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S r5   )r   Zthreading_setuprÁ   ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModulex  s   rD  Ú__main__)ÙrÁ   Útestr   Ztest.supportr   r   r   r   rÂ  r  r   rK  rý   rË   r  r€   r¸  r   rÕ  rê  rô  Úweakrefr   rE  r>  rn  r   r¥  r§  r§  Ú_threadr   r\   r‘  rý  r   r¸   ri  rÖ   rÎ   rÆ   Úsystemr
   rD  r   r$   r(   r*   r/   r2   r4   r7   r;   rõ  r?   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]  rz  rÂ   rC   rT   rW   rY   rj   rx   rz   r¡   r²   r¸  r³   rµ   r¶   rº  r¾   rà   rè   rí   rõ   rø   rû   rü   r	  r  r  r  r  r  r  r  r  r.  r;  rB  rC  r»  rë  r  r  r2  r7  rN  r[  rc  rm  r–  r¦  r§  rÄ  rË  rÑ  rÓ  rÖ  rÙ  rÜ  r  r  r  r>  rD  rG  rX  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$  r%  r&  r.  r/  r0  r1  r2  r3  r4  r5  r=  rJ  rU  r\  rg  r~  rš  rÑ  râ  rå  ræ  rè  ré  rö  rê  rì  rî  rö  r  r
  r  r$  r&  r,  r<  rJ  rf  rg  rh  rc  rd  rl  rn  ry  r†  r1  r‹  r¡  rê  rë  r  rÖ  r  r  r+  r8  rD  rQ   Úmainr   r   r   r   Ú<module>   sj   ÿÿ
ÿ






	

3qÿÿÿ$!$ÿÿ$	
        

S
Z
*
=
>ÿÿ.ÿ%{ÿ7ww= #P;  k   7þ


þ
	


ÿ
þÿþÿ
ÿ
ÿ
ÿþ
	ÿ
ÿ
ÿ
ÿÿ
ÿþÿ

ÿ
ÿþ






ÿ



ÿÿ

ÿ
ÿÿ
 ÿ)ÿþ7#j ! $l


	?G9ÿ7JSÿÿ',Cÿ<e  
ÿ N3
@
'ÿ