o
    g                    @   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'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 Z/dd Z0dd Z1dd Z2dd Z3ej4dd Z5e, Z6e- Z7e. Z8e/ Z9e0 Z:e1 Z;e2 Z<e=e
d Z>e3 Z?ed!j@ZAG d"d# d#e jBZCG d$d% d%e jBZDG d&d' d'eDZEG d(d) d)e jBZFG d*d+ d+e jBZGG d,d- d-e jBZHG d.d/ d/ZIG d0d1 d1eCeIZJG d2d3 d3eDeIZKe Le>d4G d5d6 d6eEeIZMG d7d8 d8eGeIZNG d9d: d:eHeIZOe Pe#du d;e Le<d<e Le+ d=kd>G d?d@ d@e jBeIZQG dAdB dBeJZRG dCdD dDe jBeIZSG dEdF dFe jBZTG dGdH dHeTZUG dIdJ dJeFeTeIZVG dKdL dLeUeVZWG dMdN dNeTZXG dOdP dPeXZYG dQdR dReTZZG dSdT dTeZZ[G dUdV dVeZZ\G dWdX dXeZZ]G dYdZ dZeZZ^G d[d\ d\eZZ_G d]d^ d^e_Z`G d_d` d`e_Zadadb Zbdcdd Zcdedf ZdG dgdh dhe jBZee Le6diG djdk dke jBZfe Le6diG dldm dmeNZge Le7dnG dodp dpe jBZhe Le8dqG drds dse jBZie Le9dtG dudv dve jBZje Le9dtG dwdx dxeOZke Le;dyG dzd{ d{e jBZle Pe#du d;e Le<d<G d|d} d}e jBZme Le?d~G dd de jBZnG dd deRZoG dd deKZpe Le>d4G dd deMZqG dd deFZrG dd derZsG dd derZtG dd derZuG dd derZvG dd derZwG dd derZxG dd dexZyG dd deyZzG dd deyZ{G dd derZ|G dd de|Z}G dd de|Z~G dd dese|ZG dd de jBZG dd dexZG dd dexZG dd deteveVe\Zece
j
dG dd de{eZece
j
dG dd de~eZece
j
dG dd deeZG dd deteveVe`Zece
j
de LejdedddG dd de{eZece
j
de LejdedddG dd de~eZece
j
de LejdedddG dd deeZece
j
de Lejdece
dedddG dd deeZece
j
de Lejdece
dedddG ddÄ deseeZe Le>d4G ddń deteveVe]Ze Le>d4ece
j
dG ddǄ de{eZe Le>d4ece
j
dG ddɄ de~eZe Le>d4ece
j
dG dd˄ deeZe Le>d4G dd̈́ deteveVeaZece
j
de Lejde Le>d4edddG ddτ de{eZece
j
de Lejde Le>d4edddG ddф de~eZece
j
de Lejde Le>d4edddG ddӄ deeZece
j
de Lejde Le>d4ece
dedddG ddՄ deeZece
j
de Lejde Le>d4ece
dedddG ddׄ deseeZG ddل deweWe[Zece
j
dG ddۄ dezeZece
j
dG dd݄ de~e}eZece
j
dG dd߄ dee}eZG dd deueweWe^Zece
j
de Pe)deddddG dd dezeZece
j
de Pe)deddddG dd de~e}eZece
j
de Pe)deddddG dd dee}eZG dd deweWeYZece
j
dece
dG dd dezeZece
j
dece
dG dd de~e}eZece
j
dece
dG dd dee}eZece
j
ddece
dddG dd deeZece
j
ddece
dddG dd deseeZG dd de jBZecede Le=edpe=edd G dd dee\Zecede Le=edpe=edd G dd deeFeUe[ZG dd deJZG dd deSZG d	d
 d
eJZG dd deRZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deeoZG dd de jBZG dd  d eCeIZG d!d" d"eCeIZG d#d$ d$eCZG d%d& d&eDZe Le>d4G d'd( d(eEZG d)d* d*e jBZe Lejd+kd,G d-d. d.e jBZe Le=e
dd/G d0d1 d1e jBZG d2d3 d3eRZd4Zd5Zd6Zd7d8 Ze LeÃ d9G d:d; d;e jBZe LeÃ d9G d<d= d=e jBeIZG d>d? d?eJZG d@dA dAe jBZe Le=e
dBdCG dDdE dEe jBZe LejɐdFkdGe Le!dHG dIdJ dJeCZG dKdL dLeJZe Le=edMdNG dOdP dPe˃Ze Le:dQG dRdS dSe jBZe LejdTkdUG dVdW dWe jBZe LejϐdXdYG dZd[ d[e jBZG d\d] d]e jBZG d^d_ d_e jBZece
d`ece
daece
dG dbdc dce jBZӐddde ZeՐdfkreԃ  dS dS (g      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   F/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_socket.pyget_cid4   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_canA      r#   c               	   C   r   r   )r   r   
SOCK_DGRAM	CAN_ISOTPr   r   r    r!   r   r   r   _have_socket_can_isotpK   r$   r'   c               	   C   r   r   )r   r   r%   	CAN_J1939r   r   r    r!   r   r   r   _have_socket_can_j1939U   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_algi   r/   r1   c               	   C   r*   r+   )r   
AF_QIPCRTRr%   r   r   r    r!   r   r   r   _have_socket_qipcrtrs   r/   r3   c                  C   s   	 t  d u} | S N)r   )retr   r   r   _have_socket_vsock}   s   
r6   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 r4   )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 r4   )r   AF_INETr8   servr   	bind_portportlistenselfr   r   r   setUp   s   zSocketTCPTest.setUpc                 C      | j   d | _ d S r4   rD   r    rH   r   r   r   tearDown      

zSocketTCPTest.tearDownN__name__
__module____qualname__rJ   rM   r   r   r   r   rB      s    rB   c                   @   rA   )SocketUDPTestc                 C   s$   t  t jt j| _t| j| _d S r4   )r   rC   r%   rD   r   rE   rF   rH   r   r   r   rJ         zSocketUDPTest.setUpc                 C   rK   r4   rL   rH   r   r   r   rM      rN   zSocketUDPTest.tearDownNrO   r   r   r   r   rS      s    rS   c                   @      e Zd Zdd ZdS )SocketUDPLITETestc                 C   s(   t  t jt jt j| _t| j| _d S r4   )r   rC   r%   r?   rD   r   rE   rF   rH   r   r   r   rJ      s   zSocketUDPLITETest.setUpN)rP   rQ   rR   rJ   r   r   r   r   rV          rV   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 r4   )super__init__	threadingRLock_cleanup_lockrI   argskwargs	__class__r   r   rZ         z"ThreadSafeCleanupTestCase.__init__c                    <   | j  t j|i |W  d    S 1 sw   Y  d S r4   )r]   rY   
addCleanupr^   ra   r   r   re         $z$ThreadSafeCleanupTestCase.addCleanupc                    rd   r4   )r]   rY   
doCleanupsr^   ra   r   r   rg      rf   z$ThreadSafeCleanupTestCase.doCleanups)rP   rQ   rR   rZ   re   rg   __classcell__r   r   ra   r   rX      s
    rX   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"   re   r    bind	interfacer   skipTestrH   r   r   r   rJ     s   zSocketCANTest.setUpN)rP   rQ   rR   rq   bufsizecan_frame_fmtr   calcsizeZcan_frame_sizebcm_cmd_msg_fmtrJ   r   r   r   r   ri      s    
ri   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-   rD   re   r    r   rE   rF   r   rr   rH   r   r   r   rJ     s   zSocketRDSTest.setUpN)rP   rQ   rR   rs   rJ   r   r   r   r   rw     s    rw   c                   @   sF   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S )ThreadableTestc                 C   s$   | j | _| j| _| j| _ | j| _d S r4   )rJ   _ThreadableTest__setUprM   _ThreadableTest__tearDown_setUp	_tearDownrH   r   r   r   rZ   F  s   zThreadableTest.__init__c                 C   s   	 | j   d S r4   )server_readysetrH   r   r   r   serverExplicitReadyM  s   z"ThreadableTest.serverExplicitReadyc                 C   s   t  | _| j  t | _t | _t | _t	
d| _	d| _|  }|d}||d d  }t| d| }t| j|f| _zz|   W n   d| _ W | j  n| j  w | j  d S )N   F._T)r   Zwait_threads_exitwait_threads	__enter__r[   Eventr~   client_readydonequeueQueueserver_crashedidrfindgetattrthreadstart_new_thread	clientRunZclient_threadrz   r   wait)rI   Z
methodnamer@   Ztest_methodr   r   r   r|   T  s,   





zThreadableTest._setUpc                 C   s>   |    | j  | jd d d  | j r| j }|d S r4   )r{   r   r   r   __exit__r   qsizegetrI   excr   r   r   r}   o  s   


zThreadableTest._tearDownc              
   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)rI   Z	test_funcer   r   r   r   x  s6   


zThreadableTest.clientRunc                 C      t d)Nz clientSetUp must be implemented.)NotImplementedErrorrH   r   r   r   r        zThreadableTest.clientSetUpc                 C   s   | j   t  d S r4   )r   r   r   exitrH   r   r   r   r        
zThreadableTest.clientTearDownN)
rP   rQ   rR   rZ   r   r|   r}   r   r   r   r   r   r   r   ry      s    %	ry   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rB   rZ   ry   rI   r   r   r   r   rZ        zThreadedTCPSocketTest.__init__c                 C      t  t jt j| _d S r4   )r   rC   r8   clirH   r   r   r   r        z!ThreadedTCPSocketTest.clientSetUpc                 C      | j   d | _ t|  d S r4   r   r    ry   r   rH   r   r   r   r        
z$ThreadedTCPSocketTest.clientTearDownNr   rP   rQ   rR   rZ   r   r   r   r   r   r   r         
r   c                   @   r   )
ThreadedUDPSocketTestr   c                 C   r   r   )rS   rZ   ry   r   r   r   r   rZ     r   zThreadedUDPSocketTest.__init__c                 C   r   r4   )r   rC   r%   r   rH   r   r   r   r     r   z!ThreadedUDPSocketTest.clientSetUpc                 C   r   r4   r   rH   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   )rV   rZ   ry   r   r   r   r   rZ     r   z"ThreadedUDPLITESocketTest.__init__c                 C   s   t  t jt jt j| _d S r4   )r   rC   r%   r?   r   rH   r   r   r   r        z%ThreadedUDPLITESocketTest.clientSetUpc                 C   r   r4   r   rH   r   r   r   r     r   z(ThreadedUDPLITESocketTest.clientTearDownNr   r   r   r   r   r   r     s    
r   c                   @   r   )
ThreadedCANSocketTestr   c                 C   r   r   )ri   rZ   ry   r   r   r   r   rZ     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 r4   )r   r   r   r   r   rp   rq   r   rH   r   r   r   r     s   z!ThreadedCANSocketTest.clientSetUpc                 C   r   r4   r   rH   r   r   r   r     r   z$ThreadedCANSocketTest.clientTearDownNr   r   r   r   r   r   r     s    
	r   c                   @   r   )
ThreadedRDSSocketTestr   c                 C   r   r   )rw   rZ   ry   r   r   r   r   rZ     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   rp   HOSTgetsocknamecli_addrr   rH   r   r   r   r     s   z!ThreadedRDSSocketTest.clientSetUpc                 C   r   r4   r   rH   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TestCaserZ   ry   r   r   r   r   rZ        z&ThreadedVSOCKSocketStreamTest.__init__c                 C   sh   t  t jt j| _| | jj | jt jtf | j	  | 
  | j \| _| _| | jj d S r4   )r   AF_VSOCKr8   rD   re   r    rp   VMADDR_CID_ANY	VSOCKPORTrG   r   acceptconnconnaddrrH   r   r   r   rJ     s   
z#ThreadedVSOCKSocketStreamTest.setUpc                 C   sD   t d ttjtj| _| | jj t }| j	|t
f d S )N皙?)timesleepr   r   r8   r   re   r    r   connectr   )rI   Zcidr   r   r   r     s
   
z)ThreadedVSOCKSocketStreamTest.clientSetUpc                 C      | j d}| |t d S N   )r   recvassertEqualMSGrI   msgr   r   r   
testStream     z(ThreadedVSOCKSocketStreamTest.testStreamc                 C      | j t | j   d S r4   r   sendr   r    rH   r   r   r   _testStream
     z)ThreadedVSOCKSocketStreamTest._testStreamNr   rP   rQ   rR   rZ   rJ   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   rZ   r   r   r   r   rZ        zSocketConnectedTest.__init__c                 C   s*   t |  |   | j \}}|| _d S r4   )r   rJ   r   rD   r   cli_connrI   r   addrr   r   r   rJ        

zSocketConnectedTest.setUpc                 C   r   r4   )r   r    r   rM   rH   r   r   r   rM      r   zSocketConnectedTest.tearDownc                 C   s(   t |  | jt| jf | j| _d S r4   )r   r   r   r   r   rF   	serv_connrH   r   r   r   r   %  s   
zSocketConnectedTest.clientSetUpc                 C   r   r4   )r   r    r   r   rH   r   r   r   r   *  r   z"SocketConnectedTest.clientTearDownNr   rP   rQ   rR   rZ   rJ   rM   r   r   r   r   r   r   r     s    
r   c                   @   r   )SocketPairTestr   c                 C   r   r   r   r   r   r   r   rZ   1  r   zSocketPairTest.__init__c                 C   s   t  \| _| _d S r4   )r   
socketpairrD   r   rH   r   r   r   rJ   5     zSocketPairTest.setUpc                 C   rK   r4   rL   rH   r   r   r   rM   8  rN   zSocketPairTest.tearDownc                 C      d S r4   r   rH   r   r   r   r   <     zSocketPairTest.clientSetUpc                 C   r   r4   r   rH   r   r   r   r   ?  r   zSocketPairTest.clientTearDownNr   r   r   r   r   r   r   /  s    
r   c                   @   s&   e Zd Z	 dd Zdd Zdd ZdS )SocketTestBasec                 C      |   | _|   d S r4   )	newSocketrD   
bindServerrH   r   r   r   rJ   T  r   zSocketTestBase.setUpc                 C      	 |  | j | j | _d S r4   )bindSockrD   r   	serv_addrrH   r   r   r   r   X     zSocketTestBase.bindServerc                 C   rK   r4   rL   rH   r   r   r   rM   ]  rN   zSocketTestBase.tearDownN)rP   rQ   rR   rJ   r   rM   r   r   r   r   r   K  s
    r   c                       s   e Zd Z	  fddZ  ZS )SocketListeningTestMixinc                    s   t    | j  d S r4   )rY   rJ   rD   rG   rH   ra   r   r   rJ   e     
zSocketListeningTestMixin.setUprP   rQ   rR   rJ   rh   r   r   ra   r   r   b  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 r4   )rY   rZ   ry   r^   ra   r   r   rZ   r  rc   z ThreadedSocketTestMixin.__init__c                 C   r   r4   )newClientSocketr   
bindClientrH   r   r   r   r   v  r   z#ThreadedSocketTestMixin.clientSetUpc                 C   s
   	 |   S r4   )r   rH   r   r   r   r   z  s   z'ThreadedSocketTestMixin.newClientSocketc                 C   r   r4   )r   r   r   r   rH   r   r   r   r   ~  r   z"ThreadedSocketTestMixin.bindClientc                 C   r   r4   r   rH   r   r   r   r     r   z&ThreadedSocketTestMixin.clientTearDown)	rP   rQ   rR   rZ   r   r   r   r   rh   r   r   ra   r   r   j  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 r4   )rY   rJ   r   rD   r   r   r   ra   r   r   rJ     r   zConnectedStreamTestMixin.setUpc                    s   | j   d | _ t   d S r4   )r   r    rY   rM   rH   ra   r   r   rM     r   z!ConnectedStreamTestMixin.tearDownc                    s$   t    | j| j | j| _d S r4   )rY   r   r   r   r   r   rH   ra   r   r   r     s   
z$ConnectedStreamTestMixin.clientSetUpc                    s6   z
| j   d | _ W n	 ty   Y nw t   d S r4   )r   r    r   rY   r   rH   ra   r   r   r     s   

z'ConnectedStreamTestMixin.clientTearDown)rP   rQ   rR   rJ   rM   r   r   rh   r   r   ra   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 r4   )tempfilemkdtempdir_pathre   osrmdirrY   rJ   rH   ra   r   r   rJ     s   
zUnixSocketTestBase.setUpc                 C   s,   t j| jd}t|| | tj| d S )N)dir)r   mktempr  r   bind_unix_socketre   r   unlink)rI   sockpathr   r   r   r     s   zUnixSocketTestBase.bindSock)rP   rQ   rR   rJ   r   rh   r   r   ra   r   r     s    r   c                   @      e Zd Z	 dd ZdS )UnixStreamBasec                 C      t  t jt jS r4   )r   AF_UNIXr8   rH   r   r   r   r        zUnixStreamBase.newSocketNrP   rQ   rR   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   )rY   rJ   r   rF   rH   ra   r   r   rJ     s   
zInetTestBase.setUpc                 C   s   t j|| jd d S )Nhost)r   rE   r  rI   r	  r   r   r   r     r   zInetTestBase.bindSock)rP   rQ   rR   r   r  rJ   r   rh   r   r   ra   r   r    s
    r  c                   @   r  )TCPTestBasec                 C   r  r4   )r   rC   r8   rH   r   r   r   r     r  zTCPTestBase.newSocketNr  r   r   r   r   r    r  r  c                   @   r  )UDPTestBasec                 C   r  r4   )r   rC   r%   rH   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 r4   )r   rC   r%   r?   rH   r   r   r   r     r   zUDPLITETestBase.newSocketNr  r   r   r   r   r    r  r  c                   @   r  )SCTPStreamBasec                 C   r  r4   )r   rC   r8   IPPROTO_SCTPrH   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)rP   rQ   rR   r   HOSTv6r  r   r   r   r   r    s    
r  c                   @   r  )UDP6TestBasec                 C   r  r4   )r   AF_INET6r%   rH   r   r   r   r     r  zUDP6TestBase.newSocketNr  r   r   r   r   r    r  r  c                   @   r  )UDPLITE6TestBasec                 C   r  r4   )r   r   r%   r?   rH   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   r4   r   r_   r`   r   r   r   client_pass	  r   z%skipWithClientIf.<locals>.client_passc                    s*   t | }t| ts fdd|_|S )Nc                    s    S r4   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 r4   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.  r0  r   r,  r   skipWithClientIf   s
   r1  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 r4   r   r2  r   r   r   	<genexpr>      zrequireAttrs.<locals>.<genexpr>)r1  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   r3  r+  r   r   r   r5  )  s
    
z!requireSocket.<locals>.<listcomp>r7  r8  c                 s   r9  r4   r   r2  r   r   r   r:  ,  r;  z requireSocket.<locals>.<genexpr>c                 S   s$   g | ]}t |trtt|n|qS r   )r(  r?  r   r   r@  r   r   r   r5  .  s    zcan't create socket({0}): {1}c                 s   s    | ]}t |V  qd S r4   )r?  r3  or   r   r   r:  :  s    )r<  r   r   r?  r    r1  format)r_   errr=  Zcallargsr"   r   r   r   r   requireSocket!  s*   rE  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 ZAdd ZBdd ZCe"j#dd ZDeejddd ZEeejddd ZFeejdeGejdkdeGeHdeeed(ddd ZIeejdeejdkddd ZJeejdeGejdkdeGeHdeeed(ddd ZKeejdeejdkddd ZLdd ZMdd ZNdd ZOeeedddd ZPdd ZQdd ZRdd ZSdd ZTdd ZUeGejdkddd ZVdd ZWdd ZXdS )GeneralModuleTestsc                 C   s<   dd l }| tj|ju  t }| |tj |  d S r   )_socket
assertTruer   
SocketTypeassertIsInstancer    )rI   rG  r"   r   r   r   test_SocketType_is_socketobjectB  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   rC   r8   assertInfilenoreprassertNotInrp   r?  r   rI   r"   r   r   r   	test_reprI  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>)rG  r   rC   r8   rQ  familyr)  protor   rR  r    )rI   r"   expectedr   r   r   test_csocket_reprW  s   z$GeneralModuleTests.test_csocket_reprc                 C   s   t  t jt j}t|}| | |  W d    n1 s!w   Y  d }z|  W n
 ty8   Y d S w | d d S )NzSocket proxy still exists)r   rC   r8   r   r   rQ  ReferenceErrorfail)rI   r"   pr   r   r   test_weakrefd  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gaierrorr   r   r   r   testSocketErrorp  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 sw   Y  | 
t|jd | t}|	dd| W d    n1 sw   Y  | 
t|jd | t}|	ddd  W d    n1 sw   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   rC   r%   re   r    rp   r   r_  r   sendtor   r?  	exceptionrP  )rI   r"   Zsocknamecmr   r   r   testSendtoErrorsz  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 r4   )r   rC   has_ipv6r   r8   r%   r   SOCK_RDMr-   
SOL_SOCKETSO_REUSEADDRrH   r   r   r   testCrucialConstants  s   
z'GeneralModuleTests.testCrucialConstantsc                 C   s    t j t j t jrt j d S d S r4   )r   IPPROTO_TCPIPPROTO_UDPrk  IPPROTO_IPV6rH   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 r4   )	r   ZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPr  rH   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_PKTINFOIPV6_NEXTHOPIPV6_RECVRTHDRIPV6_RECVPATHMTUIPV6_HOPOPTSIPV6_TCLASSIPV6_RECVDSTOPTSIPV6_RECVPKTINFOIPV6_DSTOPTSIPV6_RECVHOPLIMITIPV6_RECVHOPOPTSIPV6_USE_MIN_MTU
IPV6_RTHDRIPV6_HOPLIMITIPV6_CHECKSUMIPV6_DONTFRAGIPV6_PATHMTUIPV6_RTHDR_TYPE_0IPV6_RTHDRDSTOPTSIPV6_RECVTCLASSzMissing RFC3542 socket option '')rH  r   r   )rI   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   rr   rH  findgethostbyaddrgetfqdnr[  rR  )rI   hostnameZipZhnamealiasesipaddrsZall_host_namesZfqhnr   r   r   testHostnameRes  s"   
z"GeneralModuleTests.testHostnameResc                 C   sL   t jddfD ]}| t|| qt jfD ]}| |t|d  qd S )Nz10.0.0.1255.255.255.255r   )r   ZHOSTv4r   r   r  rP  r  )rI   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    q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  )rI   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   barre  )r   r  r  r   errnoZEPERMrr   r   )rI   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  rJ  intr?  assertGreaterif_nametoindexr   if_indextoname)rI   Z
interfacesindexr4  _index_namer   r   r   testInterfaceNameIndex   s   

z)GeneralModuleTests.testInterfaceNameIndexr  z&socket.if_indextoname() not available.c                 C   $   |  ttjd |  ttjd d S Nr   Z	_DEADBEEF)r_  r   r   r  r   rH   r   r   r   testInvalidInterfaceIndexToName0     z2GeneralModuleTests.testInvalidInterfaceIndexToNamer  z&socket.if_nametoindex() not available.c                 C   r  r  )r_  r   r   r  r   rH   r   r   r   testInvalidInterfaceNameToIndex6  r  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  rP   r   getnameinfor   r[  )rI   origr   r   r   testRefCountGetNameInfo<  s   
z*GeneralModuleTests.testRefCountGetNameInfoc                 C   s(   z	t dd W d S  ty   Y d S w )N)rl   r   r   r   r   )r   r  r   rH   r   r   r   testInterpreterCrashH  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_  OverflowError)rI   Zsizesfuncsizemaskr@   Zswappedr   r   r   testNtoHP  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      l        r        )
	_testcapiZINT_MININT_MAXr   r  r  r  r  r_  r  )rI   r  Zs_good_valuesZl_good_valuesZl_bad_valuesZs_bad_valueskr   r   r   testNtoHErrors^  s.   


z!GeneralModuleTests.testNtoHErrorsc              	   C   s  | j }tjdstjdv rd}nd}|D ]}z	t|d}W  q, 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)linuxrx  )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  )rI   eqZservicesZservicerF   Zport2Zudpportr   r   r   testGetServByv  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 sw   Y  | ttjd | ttjd d S )N
   r  Zspam)	r   r   r;   
gettimeoutr>   r<   r_  
ValueErrorr   )rI   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  rH   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  rC   c                    
    | S r4   r   a)rC   r  r   r   r%       
 z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>c                         ttf| |S r4   r_  r   r  r  r  rH   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  rC   r   r	   rI   r   gassertInvalidr   )rC   r  rI   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   rk  IPv6 not available+could not import needed symbols from socketwin32::&'  IPv6 might not be supportedc                    r  r4   r   r  )r   r  r   r   r%    r  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>c                        ttf | S r4   r  r  r   rI   r   r   r%    r                     z0::0s                  z1::s   Ev 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   rk  rr   ImportErrorr  r  r   winerrorr   r	   rI   rk  r   r  r   )r   r   r  rI   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   rC   c                    r  r4   r   r  )rC   r   r   r   r%  (  r  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>c                    r  r4   r  r  rH   r   r   r%  )  r  z1.0.1.0s     z170.85.170.85s   UUr  r  r  r  s      s        r  )r   r  r   rC   r   	bytearrayr  r   )rC   r   rI   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   rk  r  r  r  r  r  r  c                    r  r4   r   r  )r   r   r   r   r%  O  r  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>c                    r  r4   r  r  r  r   r   r%  P  r  r  r  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
 Ups   s   s   )r   r   r   rk  rr   r  r  r  r   r  r   r  r  r   )r   r   r   rI   r   testStringToIPv6>  s8   



z#GeneralModuleTests.testStringToIPv6c                 C   s   t  }ttjtj}| |j |d|f | }z	t	t
 }W n ty4   | d Y nw | |d d|fd|d   | |d | d S )Nr  r  r   z
%s invalidr   )r   find_unused_portr   rC   r8   re   r    rp   r   r  r  r   rr   rP  r   )rI   rF   r	  r4  Z
my_ip_addrr   r   r   testSockNameb  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   rC   r8   re   r    
getsockoptrm  rn  assertFalserI   r	  Zreuser   r   r   testGetSockOptt  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   rC   r8   re   r    
setsockoptrm  rn  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   rC   r8   
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   rQ  z#close() should raise EBADF/ENOTSOCK)r   rp   
_LOCALHOSTrQ  r    r   rP  r  EBADFENOTSOCKr[  )rI   r	  rD  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   rC   r8   r   rV  r   rP  r)  r  rW  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   re   r    r   r  r_  r  rp   r   	itertoolscountr   r  Z
EADDRINUSE)rI   r	  rF   Zbig_portZneg_portr@   r   r   r   r   test_getsockaddrarg  s&   z&GeneralModuleTests.test_getsockaddrargc                 C   s   |  ttjd |  ttd |  ttd |  ttd |  ttd t }| |j | t|jdd  |tjd d S )Nr   Z
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFFSIO_KEEPALIVE_VALSr  )r   d   r  )	rH  r   r   re   r    r_  r  r   r  rT  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   re   r    r   r  r   r  rr   r_  r   )rI   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 qt 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rzt dd dddt j W d S  t jy   Y d S w d S )N	localhostP   zbuggy libc versionr  rN  r  r  r  httpAddressFamily.AF_INETSocketKind.SOCK_STREAMr   )r  rF   rV  r)  )rW  )flags)r  rF   rV  r)  rW  r'  u   AI_NUMERICSERV)r   getaddrinfora  r  EAI_SERVICErr   r   r   lenr   IPV6_ENABLEDr   r  r  rC   r8   r?  SOL_TCP
AI_PASSIVE	AF_UNSPECr_  UnicodeEncodeErrorr(  )
rI   rD  infoZinfosrV  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  rH   r   r   r   test_getnameinfo!     z#GeneralModuleTests.test_getnameinfoZ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)  r/  r8   )rI   r  r   r   r   	test_idna%  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  |rt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_   rH   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=  rH   r   r   raising_handler>  s   zEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg      ?r      xr   )r   signalr   rr   r   SIGALRMr  r_  ZeroDivisionErrorr9  sendallr   SOCK_MAX_SIZETimeoutErrorr    )rI   Zwith_timeoutr>  r@  cr"   	old_alarmr   rH   r   check_sendall_interrupted6  s@   








z,GeneralModuleTests.check_sendall_interruptedc                 C      |  d d S NFrJ  rH   r   r   r   test_sendall_interruptedU     z+GeneralModuleTests.test_sendall_interruptedc                 C   rK  )NTrM  rH   r   r   r   %test_sendall_interrupted_with_timeoutX  rO  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   rC   r8   rR  ZassertWarnsResourceWarningr   
gc_collectrP  r?  warningr_   makefile)rI   r	  r   ri  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   rC   r8   rT  r    r   rR  rI   r	  fpr   r   r   test_name_closed_socketiol  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   rT  rH  readabler  writableseekabler    r_  r  rV  r   r   r   test_unusable_closed_socketior  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 sw   Y  d S )Nr   r   r  )	r   rp   r   r    rQ  r_  r   rG   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    q1 sOw   Y  qd S )N)r   r   rwwwbmoder3  r   encoding)subTestr   rT  r   rc  )rI   rc  r	  re  rW  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    q1 sDw   Y  qd S )N)Zrtrl   +r  rb  zinvalid mode)rf  r   assertRaisesRegexr  rT  )rI   rc  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loadsrC   r   r8   )rI   r	  protocolrV  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    q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   rC   r8   rp   r   rG   )rI   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 r?  )
r  r   rC   r8   rp   r   r_  r  rG   r  )rI   r  rs  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   r8   rp   rT  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%   rq  r   )rI   r   sockaddrr   r   r   test_getaddrinfo_ipv6_basic  s   z.GeneralModuleTests.test_getaddrinfo_ipv6_basicr  zdoes not work on WindowszSymbolic scope id does not 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   ry  )r   r  r)  r   r%   rq  r   )rI   ifindextest_interfacer   rz  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   ry  r   )r   r)  r?  r   r%   rq  r   )rI   r}  r   rz  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   rx  r   ff02::1de:c0:face:8d%1234)r   r  r  NI_NUMERICHOSTNI_NUMERICSERVr   )rI   r}  r~  rz  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  rx  r   r   r  r  )r   r  r  r  r   r?  )rI   r}  rz  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   rC   r8   r   r?  rV  r)  rT  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   r8   rC   r   r)  r  setblocking)rI   r  r  Z	sock_typer"   r   r   r    test_socket_consistent_sock_type  s   



"z3GeneralModuleTests.test_socket_consistent_sock_typec                 C   s   t  t jt j}| }tt jj d }tdd t jj	 D d }t j ||d|d }| 
|j| | 
|j| | |jddh W d    d S 1 sQw   Y  d S )Nr   c                 s   s     | ]\}}|d vr|V  qdS )>   r  r  Nr   )r3  r4  kindr   r   r   r:  #  s    
zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>r  )rV  r)  rW  rQ  r   )r   rC   r8   detachmaxAddressFamily__members__values
SocketKindr  r   rV  r)  rP  rW  )rI   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 sw   Y  d S )Nc                   @   rA   )z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.Filec                 S   s
   || _ d S r4   r  )rI   r  r   r   r   rZ   4     
zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__c                 S      | j S r4   r  rH   r   r   r   rQ  7  s   zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rP   rQ   rR   rZ   rQ  r   r   r   r   File3  s    r  r   r  )r   r  r   curdirO_RDONLYr    r_  _GiveupOnSendfile_sendfile_use_sendfiler  r   )rI   r  r	  r  r   r   r   test__sendfile_use_sendfile1  s    

"z.GeneralModuleTests.test__sendfile_use_sendfilec                 C   st   |  |j| |  |j| | }tj|d}| |j |  |  |j| |  |j| |  | | d S Nr  )r   rV  r)  rQ  r   re   r    r  )rI   r"   rV  styper  s2r   r   r   _test_socket_filenoC  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rt }| 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   rC   r8   re   r    rp   r   r   r  r   r%   r,  r   r  r   r  shutilrmtreer  r  r
  r<  PermissionError)rI   r"   Ztmpdirr   r   r   test_socket_filenoP  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   rC   r8   rH   r   r   r    test_socket_fileno_rejects_floato     "z3GeneralModuleTests.test_socket_fileno_rejects_floatc                 C   r  )Nfoor  r  rH   r   r   r   &test_socket_fileno_rejects_other_typess  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  ri  r  r   rC   r8   rH   r   r   r   )test_socket_fileno_rejects_invalid_socketw  s   "z<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlyc                 C   r  )Nr  ir  r  rH   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_fdrP  rh  r  r  rC   r8   )rI   ZWSAENOTSOCKri  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   rQ  rC   r8   r   rh  r  r  )rI   Zafileri  r   r   r   %test_socket_fileno_requires_socket_fd  s   
"z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)YrP   rQ   rR   rK  rU  r   
skipUnlessrG  rY  r]  rb  rj  ro  rs  r  r4  rw  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  r4  r5  Zis_resource_enabledr8  rJ  rN  rP  rU  rX  r]  r^  rg  rj  rq  rt  ru  rw  r{  skipIfr	   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rF  @  s   

*

	





,


>

"
N




	



rF  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 r4   )r   AF_CANr   r   rH   r   r   r   ro    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 r4   )r   r  ZCAN_BCM_TX_SETUPZCAN_BCM_TX_DELETEZCAN_BCM_TX_READCAN_BCM_TX_SENDZCAN_BCM_RX_SETUPZCAN_BCM_RX_DELETEZCAN_BCM_RX_READZCAN_BCM_TX_STATUSZCAN_BCM_TX_EXPIREDZCAN_BCM_RX_STATUSZCAN_BCM_RX_TIMEOUTZCAN_BCM_RX_CHANGEDZCAN_BCM_SETTIMERZCAN_BCM_STARTTIMERZCAN_BCM_TX_COUNTEVTZCAN_BCM_TX_ANNOUNCEZCAN_BCM_TX_CP_CAN_IDZCAN_BCM_RX_FILTER_IDZCAN_BCM_RX_CHECK_DLCZCAN_BCM_RX_NO_AUTOTIMERZCAN_BCM_RX_ANNOUNCE_RESUMEZCAN_BCM_TX_RESET_MULTI_IDXZCAN_BCM_RX_RTR_FRAMErH   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 r4   r   r   r   r   rT  r   r   r   testCreateSocket     "zBasicCANTest.testCreateSocketc                 C   r  r4   )r   r   r%   r  rT  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)rc  )r   r   r   r   rp   r   r   )rI   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   ri  r   rp   rT  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  )rI   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=IIrm   )r   packr   r   r   r   r  r  r  r   r  r  )rI   can_idZcan_maskZ
can_filterr"   r   r   r   
testFilter  s   "zBasicCANTest.testFilterN)rP   rQ   rR   ro  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   rZ   r   r   r   r   rZ     r   zCANTest.__init__c                 C   s(   	 t |}|dd}t| j|||S )Nrm       )r+  ljustr   r  rt   )clsr  datacan_dlcr   r   r   build_can_frame  s   zCANTest.build_can_framec                 C   s(   	 t | j|\}}}|||d | fS r4   )r   r   rt   )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"   recvfromrs   r   cfrq   rI   r  r   r   r   r   testSendFrame  s   zCANTest.testSendFramec                 C       |  dd| _| j| j d S )Nr   s   r  r  r   r   rH   r   r   r   _testSendFrame     zCANTest._testSendFramec                 C   s$   | j | j\}}| | j| d S r4   )r"   r  rs   r   r  r  r   r   r   testSendMaxFrame
  rT   zCANTest.testSendMaxFramec                 C   r  )Nr   s   r  rH   r   r   r   _testSendMaxFrame  r  zCANTest._testSendMaxFramec                 C   D   | j | j\}}| | j| | j | j\}}| | j| d S r4   )r"   r  rs   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  rH   r   r   r   _testSendMultiFrames  s   zCANTest._testSendMultiFramesr  r  c                 C   sP   | j | j\}}| | j| | |\}}}| | j| | | j| d S r4   )r   r  rs   r   r  r  r  r  )rI   r  r   r  r  r  r   r   r   _testBCM   s
   zCANTest._testBCMc                 C   s   t  t jt jt j}| |j || jf d| _t	g d| _
| | j| j
| _t j}d}d}d } } }}d}	d}
t| j||||||||	|

}|| j }||}| |t| d S )N#  )         r   i"  r   )r   r   r%   r  re   r    r   rq   r  bytesr  r  r  r  r   r  rv   r   r   r+  )rI   ZbcmZopcoder'  r  Zival1_secondsZ
ival1_usecZival2_secondsZ
ival2_usecZ
bcm_can_idZnframesheaderZheader_plus_frameZ
bytes_sentr   r   r   testBCM)  s4   

zCANTest.testBCMNr   )rP   rQ   rR   rZ   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 Nrj   rY   rZ   rq   r^   ra   r   r   rZ   L     
zISOTPTest.__init__c                 C   s   t j t j t j t j d S r4   )r   r  r   r&   r%   rH   r   r   r   ro  P  s   
zISOTPTest.testCrucialConstantsc                 C   r  r4   r  rT  r   r   r   r  V  r  zISOTPTest.testCreateSocketr&   z(socket.CAN_ISOTP required for this test.c                 C   r  r4   )r   r   r%   r&   rT  r   r   r   testCreateISOTPSocketZ  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&   ri  r   rp   rT  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  ro   )r   r   r%   r&   rq   rp   r   r   r   r  ENODEVrr   rI   r"   r   r   r   r   r   testBindf  s   
&zISOTPTest.testBind)rP   rQ   rR   rZ   ro  r  r   r  r   r   r  r  r  rh   r   r   ra   r   r  I  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^   ra   r   r   rZ   w  r  zJ1939Test.__init__r(   z(socket.CAN_J1939 required for this test.c                 C   r  r4   )r   r(   ZJ1939_MAX_UNICAST_ADDRZJ1939_IDLE_ADDRJ1939_NO_ADDRJ1939_NO_NAMEZJ1939_PGN_REQUESTZJ1939_PGN_ADDRESS_CLAIMEDZJ1939_PGN_ADDRESS_COMMANDEDZJ1939_PGN_PDU1_MAXZJ1939_PGN_MAXJ1939_NO_PGNZSO_J1939_FILTERZSO_J1939_PROMISCZSO_J1939_SEND_PRIOZSO_J1939_ERRQUEUEZSCM_J1939_DEST_ADDRZSCM_J1939_DEST_NAMEZSCM_J1939_PRIOZSCM_J1939_ERRQUEUEZJ1939_NLA_PADZJ1939_NLA_BYTES_ACKEDZJ1939_EE_INFO_NONEZJ1939_EE_INFO_TX_ABORTZJ1939_FILTER_MAXrH   r   r   r   testJ1939Constants{  s0   
zJ1939Test.testJ1939Constantsc                 C   r  r4   )r   r   r%   r(   rT  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 rn   )r   r   r%   r(   rq   r  r  r  rp   r   r   r   r  r  rr   r  r   r   r   r    s   
&zJ1939Test.testBind)rP   rQ   rR   rZ   r   r  r   r   r  r  r  rh   r   r   ra   r   r   t  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 r4   )r   ZAF_RDSr,   rH   r   r   r   ro    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-   rT  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  rm  	SO_RCVBUF	SO_SNDBUF)rI   rs   r"   r   r   r   testSocketBufferSize  s
   "z!BasicRDSTest.testSocketBufferSizeN)rP   rQ   rR   ro  r  r	  r   r   r   r   r    s    r  c                       s   e Zd ZdddZ fddZdd Zdd	 Zd
d Zdd Ze	e
j
ddd Ze	e
j
ddd Zdd Zdd Zdd Zdd Z  ZS )RDSTestr   c                 C   r   r   )r   rZ   r   r   r   r   rZ     r   zRDSTest.__init__c                    s   t    t | _d S r4   )rY   rJ   r[   r   ZevtrH   ra   r   r   rJ     r   zRDSTest.setUpc                 C   s2   | j | j\}}| | j| | | j| d S r4   )rD   r  rs   r   r  r   rI   r  r   r   r   r   testSendAndRecv  s   zRDSTest.testSendAndRecvc                 C   "   d| _ | j| j dt| jf d S Nr  r   r  r   rg  r   rF   rH   r   r   r   _testSendAndRecv     zRDSTest._testSendAndRecvc                 C   sH   | j | jtj\}}| | j| | j | j\}}| | j| d S r4   )rD   r  rs   r   MSG_PEEKr   r  r  r   r   r   testPeek  s   zRDSTest.testPeekc                 C   r  r  r  rH   r   r   r   	_testPeek  r  zRDSTest._testPeekrecvmsgc                 C   s(   | j | j\}}}}| | j| d S r4   )rD   r  rs   r   r  )rI   r  ancdataZ	msg_flagsr   r   r   r   testSendAndRecvMsg  s   zRDSTest.testSendAndRecvMsgsendmsgc                 C   s&   d| _ | j| j gddt| jf d S )Ns<   hello hello hello hello hello hello hello hello hello hello r   r   )r  r   r  r   rF   rH   r   r   r   _testSendAndRecvMsg  s    zRDSTest._testSendAndRecvMsgc                 C   r  r4   )rD   r  rs   r   data1data2r  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)r  r   rg  r   rF   r  rH   r   r   r   _testSendAndRecvMulti  s   zRDSTest._testSendAndRecvMultic                 C   sL   t  | jgg g d\}}}| | j| | j| j\}}| | j| d S )Ng      @)selectrD   rP  r  rs   r   r  )rI   r   r`  rl   r  r   r   r   r   
testSelect  s   zRDSTest.testSelectc                 C   r  )Ns   selectr   r  rH   r   r   r   _testSelect  r  zRDSTest._testSelectr   )rP   rQ   rR   rZ   rJ   r  r  r  r  r>  r   r  r  r  r  r  r   rh   r   r   ra   r   r
    s    




r
  z'QIPCRTR sockets required for this test.c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )BasicQIPCRTRTestc                 C   
   t j d S r4   )r   r2   rH   r   r   r   ro  	  r  z%BasicQIPCRTRTest.testCrucialConstantsc                 C   6   t  t jt j	}W d    d S 1 sw   Y  d S r4   )r   r2   r%   rT  r   r   r   r  
	     "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   r2   r%   r   r   rT  r   r   r   testUnbound	     "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   r2   r%   r   rE   r   assertNotEqualrT  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   r2   r%   r_  r   r   rE   rT  r   r   r   testInvalidBindSock	  r'  z$BasicQIPCRTRTest.testInvalidBindSockc                 C   sT   t  t jt j}|d | | d d W d    d S 1 s#w   Y  d S )N){   r+  r   r   )r   r2   r%   r   r(  r   rT  r   r   r   testAutoBindSock	  s   
"z!BasicQIPCRTRTest.testAutoBindSockN)	rP   rQ   rR   ro  r  r&  r)  r*  r,  r   r   r   r   r!  	  s    r!  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
BasicVSOCKTestc                 C   r"  r4   )r   r   rH   r   r   r   ro  %	  r  z#BasicVSOCKTest.testCrucialConstantsc                 C   rv  r4   )	r   SO_VM_SOCKETS_BUFFER_SIZESO_VM_SOCKETS_BUFFER_MIN_SIZESO_VM_SOCKETS_BUFFER_MAX_SIZEr   ZVMADDR_PORT_ANYZVMADDR_CID_HOSTZVM_SOCKETS_INVALID_VERSIONr
   rH   r   r   r   testVSOCKConstants(	  s   
z!BasicVSOCKTest.testVSOCKConstantsc                 C   r#  r4   )r   r   r8   rT  r   r   r   r  2	  r$  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   r8   r  r1  r/  r0  r  r   )rI   r"   Zorig_maxr  Zorig_minr   r   r   r	  6	  sF   





"z#BasicVSOCKTest.testSocketBufferSizeN)rP   rQ   rR   ro  r2  r  r	  r   r   r   r   r.   	  s
    
r.  z)Bluetooth sockets required for this test.c                   @   sv   e Zd Zdd Zdd Zeejdkddd Z	eejdkd	d
d Z
eejdk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_LOCALr7   r9   r  r  BTPROTO_HCIZSOL_HCIBTPROTO_L2CAPr  BTPROTO_SCOrH   r   r   r   testBluetoothConstantsU	  s   

z)BasicBluetoothTest.testBluetoothConstantsc                 C   r  r4   )r   r7   r8   r9   rT  r   r   r   testCreateRfcommSocketc	  r  z)BasicBluetoothTest.testCreateRfcommSocketr  z&windows does not support L2CAP socketsc                 C   r  r4   )r   r7   r-   r6  rT  r   r   r   testCreateL2capSocketg	     "z(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketsc                 C   r  r4   )r   r7   r   r5  rT  r   r   r   testCreateHciSocketl	  r;  z&BasicBluetoothTest.testCreateHciSocketr  z.windows and freebsd do not support SCO socketsc                 C   r  r4   )r   r7   r-   r7  rT  r   r   r   testCreateScoSocketq	  r  z&BasicBluetoothTest.testCreateScoSocketN)rP   rQ   rR   r8  r9  r   r  r  r  r:  r<  r  r=  r   r   r   r   r4  Q	  s    

r4  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   rZ   r   r   r   r   rZ   z	  r   zBasicTCPTest.__init__c                 C   r   r   )r   r   r   r   r   r   r   r   testRecv}	  s   zBasicTCPTest.testRecvc                 C      | j t d S r4   r   r   r   rH   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   )rI   seg1seg2r   r   r   r   testOverFlowRecv	  s   zBasicTCPTest.testOverFlowRecvc                 C   rA  r4   rB  rH   r   r   r   _testOverFlowRecv	  r  zBasicTCPTest._testOverFlowRecvc                 C   s    | j d\}}| |t d S r   )r   r  r   r   rI   r   r   r   r   r   testRecvFrom	     zBasicTCPTest.testRecvFromc                 C   rA  r4   rB  rH   r   r   r   _testRecvFrom	  r  zBasicTCPTest._testRecvFromc                 C   s@   | j ttd \}}| j d\}}|| }| |t d S rD  )r   r  r+  r   r   )rI   rF  r   rG  r   r   r   r   testOverFlowRecvFrom	  s   z!BasicTCPTest.testOverFlowRecvFromc                 C   rA  r4   rB  rH   r   r   r   _testOverFlowRecvFrom	  r  z"BasicTCPTest._testOverFlowRecvFromc                 C   s2   d}	 | j d}|sq||7 }q| |d d S )N    r   r      ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r   r   r   )rI   r   readr   r   r   testSendAll	  s   zBasicTCPTest.testSendAllc                 C   s   d}| j | d S )NrQ  )r   rE  )rI   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   rQ  r   fromfdrC   r8   re   r    rJ  r   r   r   )rI   r  r	  r   r   r   r   
testFromFd	  s   

zBasicTCPTest.testFromFdc                 C   rA  r4   rB  rH   r   r   r   _testFromFd	  r  zBasicTCPTest._testFromFdc                 C   s0   | j  }| |j |d}| |t d S r   )r   dupre   r    r   r   r   )rI   r	  r   r   r   r   testDup	  s   

zBasicTCPTest.testDupc                 C   rA  r4   rB  rH   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 r3  )r   r   r   shutdownrH   r   r   r   _testShutdown	  r   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rI   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   rQ  r  r   rH  _closedr_  r   r   r    r   rC   r8   re   r   )rI   rQ  r   r	  r   r   r   r   
testDetach	  s   



zBasicTCPTest.testDetachc                 C   rA  r4   rB  rH   r   r   r   _testDetach	  r  zBasicTCPTest._testDetachNr   )rP   rQ   rR   rZ   r@  rC  rH  rI  rK  rM  rN  rO  rS  rT  rV  rW  rY  rZ  r[  r]  r   r  ZtestShutdown_overflowr`  rb  rc  r   r   r   r   r>  x	  s.    

		


r>  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   rZ   r   r   r   r   rZ   	  r   zBasicUDPTest.__init__c                 C       | j tt}| |t d S r4   rD   r   r+  r   r   r   r   r   r   testSendtoAndRecv	  rL  zBasicUDPTest.testSendtoAndRecvc                 C      | j tdt| jf d S r   r   rg  r   r   rF   rH   r   r   r   _testSendtoAndRecv	  r   zBasicUDPTest._testSendtoAndRecvc                 C   $   | j tt\}}| |t d S r4   rD   r  r+  r   r   rJ  r   r   r   rK   
     zBasicUDPTest.testRecvFromc                 C   ri  r   rj  rH   r   r   r   rM  
  r   zBasicUDPTest._testRecvFromc                 C      |  t| jjd d S Nr  r_  r  rD   r  rH   r   r   r   testRecvFromNegative
  r6  z!BasicUDPTest.testRecvFromNegativec                 C   ri  r   rj  rH   r   r   r   _testRecvFromNegative
  r   z"BasicUDPTest._testRecvFromNegativeNr   
rP   rQ   rR   rZ   rh  rk  rK  rM  rr  rs  r   r   r   r   re  	  s    
re  c                   @   rd  )BasicUDPLITETestr   c                 C   r   r   )r   rZ   r   r   r   r   rZ   
  r   zBasicUDPLITETest.__init__c                 C   rf  r4   rg  r   r   r   r   rh  
  rL  z"BasicUDPLITETest.testSendtoAndRecvc                 C   ri  r   rj  rH   r   r   r   rk  
  r   z#BasicUDPLITETest._testSendtoAndRecvc                 C   rl  r4   rm  rJ  r   r   r   rK  
  rn  zBasicUDPLITETest.testRecvFromc                 C   ri  r   rj  rH   r   r   r   rM  $
  r   zBasicUDPLITETest._testRecvFromc                 C   ro  rp  rq  rH   r   r   r   rr  '
  r6  z%BasicUDPLITETest.testRecvFromNegativec                 C   ri  r   rj  rH   r   r   r   rs  +
  r   z&BasicUDPLITETest._testRecvFromNegativeNr   rt  r   r   r   r   ru  
  s    
ru  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 r4   )r[   r   
misc_eventrY   rJ   rH   ra   r   r   rJ   P
  r   zSendrecvmsgBase.setUpc                 C   s   | j |S r4   )cli_sockr   r   r   r   r   sendToServerT
  s   zSendrecvmsgBase.sendToServerr   c                 G   s   | j j|| jt|d    S r4   )rx  r  sendmsg_to_server_defaultsr+  rI   r_   r   r   r   sendmsgToServer\
  s   zSendrecvmsgBase.sendmsgToServerc                 G   s    |j |g|R  }| | |S r4   )r  registerRecvmsgResult)rI   r	  rs   r_   resultr   r   r   	doRecvmsgd
  s   
zSendrecvmsgBase.doRecvmsgc                 C   r   r4   r   rI   r~  r   r   r   r}  n
  s   z%SendrecvmsgBase.registerRecvmsgResultc                 C   s   |  || d S r4   r   rI   Zaddr1Zaddr2r   r   r   checkRecvmsgAddresst
     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	ExceptionrC  r   )
rI   r'  eorcheckset
checkunsetignoreZ
defaultsetZdefaultunsetZinbothr  r   r   r   
checkFlags
  s&   




zSendrecvmsgBase.checkFlags)Nr   r   r   )rP   rQ   rR   r   LOOPBACK_TIMEOUTfail_timeoutrJ   ry  rz  r|  r  r}  r  r  r4  r   r   r  r  r  r  rh   r   r   ra   r   rv  I
  s     
rv  c                   @   rU   )RecvmsgIntoMixinc                 G   sh   t |}|j|gg|R  }| | | |d d | |d | t|d |d  f|dd   S r?  )r  recvmsg_intor}  assertGreaterEqualassertLessEqualr  )rI   r	  rs   r_   bufr~  r   r   r   r  
  s   
"zRecvmsgIntoMixin.doRecvmsgN)rP   rQ   rR   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 r4   )rY   r  r   	MSG_TRUNCrH   ra   r   r   r  
     z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rP   rQ   rR   propertyr  rh   r   r   ra   r   r  
      r  c                       r  )SendrecvmsgSCTPFlagsBasec                    r  r4   )rY   r  r   MSG_EORrH   ra   r   r   r  
  r  z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rP   rQ   rR   r  r  rh   r   r   ra   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  r4   )rD   rH   r   r   r   	serv_sock
     z'SendrecvmsgConnectionlessBase.serv_sockc                 C   r  r4   )r   rH   r   r   r   rx  
  r  z&SendrecvmsgConnectionlessBase.cli_sockc                 C   s   g g d| j fS r   )r   rH   r   r   r   rz  
  r  z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultsc                 C   s   | j || jS r4   )rx  rg  r   r   r   r   r   ry  
  r  z*SendrecvmsgConnectionlessBase.sendToServerN)rP   rQ   rR   r  r  rx  rz  ry  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  r4   )r   rH   r   r   r   r  
  r  z"SendrecvmsgConnectedBase.serv_sockc                 C   r  r4   )r   rH   r   r   r   rx  
  r  z!SendrecvmsgConnectedBase.cli_sockc                 C   r   r4   r   r  r   r   r   r  
     z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rP   rQ   rR   r  r  rx  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 r4   )rY   rJ   r  r  r  rH   ra   r   r   rJ        
z"SendrecvmsgServerTimeoutBase.setUpr   r   r   ra   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 r4   r   r  r   r+  r   rH   r   r   r   testSendmsg     zSendmsgTests.testSendmsgc                 C   s   |  | tgtt d S r4   r   r|  r   r+  rH   r   r   r   _testSendmsg     zSendmsgTests._testSendmsgc                 C   r  r4   r  rH   r   r   r   testSendmsgDataGenerator  r  z%SendmsgTests.testSendmsgDataGeneratorc                 C   s&   |  | dd tfD tt d S )Nc                 s   r9  r4   r   rA  r   r   r   r:    r;  z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>r  rH   r   r   r   _testSendmsgDataGenerator  s   z&SendmsgTests._testSendmsgDataGeneratorc                 C   r  r4   r  rH   r   r   r   testSendmsgAncillaryGenerator   r  z*SendmsgTests.testSendmsgAncillaryGeneratorc                 C   s(   |  | tgdd dD tt d S )Nc                 s   r9  r4   r   rA  r   r   r   r:  %  r;  z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r   r  rH   r   r   r   _testSendmsgAncillaryGenerator$  s   z+SendmsgTests._testSendmsgAncillaryGeneratorc                 C   r  r4   r  rH   r   r   r   testSendmsgArray(  r  zSendmsgTests.testSendmsgArrayc                 C   s$   |  | tdtgtt d S )NB)r   r|  arrayr   r+  rH   r   r   r   _testSendmsgArray,  s   zSendmsgTests._testSendmsgArrayc                 C   r  r4   r  rH   r   r   r   testSendmsgGather0  r  zSendmsgTests.testSendmsgGatherc                 C   .   |  | td d tdd  gtt d S NrE  r  rH   r   r   r   _testSendmsgGather4  s   .zSendmsgTests._testSendmsgGatherc                 C      |  | jdd d S Nr     doner   r  r   rH   r   r   r   testSendmsgBadArgs7     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   rx  r  r|  objectr   ry  rH   r   r   r   _testSendmsgBadArgs;  s.   







z SendmsgTests._testSendmsgBadArgsc                 C   r  r  r  rH   r   r   r   testSendmsgBadCmsgM  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  ry  rH   r   r   r   _testSendmsgBadCmsgQ  s&   






z SendmsgTests._testSendmsgBadCmsg
CMSG_SPACEc                 C   r  r  r  rH   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   rP  r  r  rH   r   r   r   _testSendmsgBadMultiCmsgf  s   


z%SendmsgTests._testSendmsgBadMultiCmsgc                 C   r  r  r  rH   r   r   r   testSendmsgExcessCmsgRejectn     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   assertIsNonerh  r  ry  rI   ri  r   r   r   _testSendmsgExcessCmsgRejects  s   
z)SendmsgTests._testSendmsgExcessCmsgRejectc                 C   r   r4   r   rH   r   r   r   testSendmsgAfterClose{  s   z"SendmsgTests.testSendmsgAfterClosec                 C   s    | j   | t| jtg d S r4   )rx  r    r_  r   r|  r   rH   r   r   r   _testSendmsgAfterClose  s   
z#SendmsgTests._testSendmsgAfterCloseN)rP   rQ   rR   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r>  r   r  r*  r  r  r  r  r  r   r   r   r   r    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  r4   r  rH   r   r   r   testSendmsgExplicitNoneAddr  r  z.SendmsgStreamTests.testSendmsgExplicitNoneAddrc                 C   s"   |  | tgg dd tt d S r   r  rH   r   r   r   _testSendmsgExplicitNoneAddr  s   "z/SendmsgStreamTests._testSendmsgExplicitNoneAddrc                 C   .   |  | jdd | | jj| jd d S Nr     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar=   r   r  r   rH  rw  r   r  rH   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  TimeoutError not raised)
rx  r  r|  rG  r   r  ENOMEMr[  rw  r   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  rH   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_DONTWAITrP  rh  r  EAGAINEWOULDBLOCKr  rw  r   r  r   r   r   _testSendmsgDontWait  s   
z'SendmsgStreamTests._testSendmsgDontWaitN)rP   rQ   rR   r  r  r  r  r1  r  r  r  r*  r  r   r   r   r   r    s    

r  c                   @   rA   )SendmsgConnectionlessTestsc                 C   r   r4   r   rH   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   rx  r  r   rH   r   r   r   _testSendmsgNoDestAddr  s   
z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rP   rQ   rR   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  rI   r   r  r'  r   r   r   r   testRecvmsg  s
   zRecvmsgGenericTests.testRecvmsgc                 C      |  t d S r4   ry  r   rH   r   r   r   _testRecvmsg  rO  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  r4   r  rH   r   r   r   _testRecvmsgExplicitDefaults  rO  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  r4   r  rH   r   r   r   _testRecvmsgShorter  rO  z'RecvmsgGenericTests._testRecvmsgShorterc                 C   s^   |  | jttd \}}}}| |td d  | || j | |g  | j|dd d S )NrE  Fr  r  r  r   r   r   testRecvmsgTrunc  s   
z$RecvmsgGenericTests.testRecvmsgTruncc                 C   r  r4   r  rH   r   r   r   _testRecvmsgTrunc  rO  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  r4   r  rH   r   r   r   _testRecvmsgShortAncillaryBuf  rO  z1RecvmsgGenericTests._testRecvmsgShortAncillaryBufc                 C   r  )N (  Tr  r  r  r   r   r   testRecvmsgLongAncillaryBuf  r  z/RecvmsgGenericTests.testRecvmsgLongAncillaryBufc                 C   r  r4   r  rH   r   r   r   _testRecvmsgLongAncillaryBuf  rO  z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufc                 C   s"   | j   | t| j| j d d S r   )r  r    r_  r   r  rH   r   r   r   testRecvmsgAfterClose  s   
z)RecvmsgGenericTests.testRecvmsgAfterClosec                 C   r   r4   r   rH   r   r   r   _testRecvmsgAfterClose"  r   z*RecvmsgGenericTests._testRecvmsgAfterClosec                 C   sB   z| j d | t| j| j tt W | j  d S | j  w )Nr  )	r  r  r_  rG  r  r+  r   rw  r   rH   r   r   r   testRecvmsgTimeout%  s   z&RecvmsgGenericTests.testRecvmsgTimeoutc                 C   s   |  | jj| jd d S Nr  )rH  rw  r   r  rH   r   r   r   _testRecvmsgTimeout.  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 )	NrE  r   r  Fr  r  r  Tr  )r  r  r+  r   r   r  r   r  r   r  r   r  r   r   r   testRecvmsgPeek1  s.   
z#RecvmsgGenericTests.testRecvmsgPeekc                 C   r  r4   r  rH   r   r   r   _testRecvmsgPeekT  r  z$RecvmsgGenericTests._testRecvmsgPeekr  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   testRecvmsgFromSendmsgX  s   z*RecvmsgGenericTests.testRecvmsgFromSendmsgc                 C   r  r  r  rH   r   r   r   _testRecvmsgFromSendmsgc  s   .z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rP   rQ   rR   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r>  r   r	  r*  r
  r  r  r   r   r   r   r    s2    						
"



r  c                   @   r-  )
RecvmsgGenericStreamTestsc                 C   sN   |  | jd\}}}}| |d | || j | |g  | j|d d d S )Nr   rP  r  )r  r  r   r  r   r  r  r   r   r   testRecvmsgEOFl  s
   z(RecvmsgGenericStreamTests.testRecvmsgEOFc                 C      | j   d S r4   )rx  r    rH   r   r   r   _testRecvmsgEOFt  rO  z)RecvmsgGenericStreamTests._testRecvmsgEOFc                 C   s   |  | jttd \}}}}| || j | |g  | j|dd |  | jd\}}}}| || j | |g  | j|dd || }| |t d S )NrE  Fr  r   T)r  r  r+  r   r  r   r   r  )rI   rF  r  r'  r   rG  r   r   r   r   testRecvmsgOverfloww  s   
z-RecvmsgGenericStreamTests.testRecvmsgOverflowc                 C   r  r4   r  rH   r   r   r   _testRecvmsgOverflow  rO  z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rP   rQ   rR   r  r  r  r  r   r   r   r   r  h  s
    r  c                   @   rA   )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  r  r  r+  r   r  r  r   r  r   r  r  r   r   r   testRecvmsgBadArgs  s0   
zRecvmsgTests.testRecvmsgBadArgsc                 C   r  r4   r  rH   r   r   r   _testRecvmsgBadArgs  rO  z RecvmsgTests._testRecvmsgBadArgsN)rP   rQ   rR   r  r  r   r   r   r   r    s    r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )RecvmsgIntoTestsc                 C   sL  t tt}| t| jj | t| jjttdd | t| jj|dd | t| jjt gdd | t| jjdgdd | t| jj|t gdd | t| jj|gdd | t| jj|gt d | t| jj|gdt  | j|gdd\}}}}| 	|tt | 	|t t | 
|| j | 	|g  | j|dd d S )Nr   s   I'm not writabler  Tr  )r  r+  r   r_  r   r  r  r  r  r   r  r   r  rI   r  nbytesr  r'  r   r   r   r   testRecvmsgIntoBadArgs  s@   



z'RecvmsgIntoTests.testRecvmsgIntoBadArgsc                 C   r  r4   r  rH   r   r   r   _testRecvmsgIntoBadArgs  rO  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   r9  r4   r   rA  r   r   r   r:    r;  z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr  )	r  r+  r   r  r  r   r  r   r  r  r   r   r   testRecvmsgIntoGenerator  s   z)RecvmsgIntoTests.testRecvmsgIntoGeneratorc                 C   r  r4   r  rH   r   r   r   _testRecvmsgIntoGenerator  rO  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  r  r   r   r   testRecvmsgIntoArray  s   z%RecvmsgIntoTests.testRecvmsgIntoArrayc                 C   r  r4   r  rH   r   r   r   _testRecvmsgIntoArray  rO  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  )rI   b1b2Zb3r  r  r'  r   r   r   r   testRecvmsgIntoScatter  s   z'RecvmsgIntoTests.testRecvmsgIntoScatterc                 C   rK  )Nr!  )ry  rH   r   r   r   _testRecvmsgIntoScatter  rO  z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rP   rQ   rR   r  r  r  r  r  r  r%  r&  r   r   r   r   r    s    
r  c                   @   s`   e Zd ZzddlZW n ey   dZY n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     r@   r   r  )socklen_t_limitr   r(  listrk  r  r  itemsizer   r  r_  r  r  maxsize)rI   toobigr  nr5   r   r   r   testCMSG_LEN  s   
zCmsgMacroTests.testCMSG_LENr  c                 C   s   | j td d }ttdtt|d | }td}| |tdjd  |D ]*}t|}| || | |t	| | ||t	d  | 
|| j  |}q,| ttjd | ttj| | ttjtj d S )Nr   r)  r   r@   r   r  )r*  r   r  r+  rk  r  r  r,  r  r(  r  r_  r  r  r-  )rI   r.  r  Zlastr/  r5   r   r   r   testCMSG_SPACE  s   

zCmsgMacroTests.testCMSG_SPACE)rP   rQ   rR   r  r  r*  minr  r>  r   r0  r1  r   r   r   r   r'    s    
r'  c                   @   sH  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZddddZ	dd Z
dd Zdd Zdd Zeeddd Zejdd Zdd Zdd  Zeejd!kd"eed#eedd$d% Zejeejd!kd"eed#d&d' Zeejd!kd"eed#eedd(d) Zejeejd!kd"eed#d*d+ Zd,d- Zeejd!kd.d/d0 Zd1d2 Z d3d4 Z!d5d6 Z"eedd7d8 Z#e#jd9d: Z$ded;d<Z%d=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*dGdH Z+dIdJ Z,dKdL Z-dMdN Z.dOdP Z/dedQdRZ0dSdT Z1dUdV Z2dWdX Z3dYdZ Z4d[d\ Z5d]d^ Z6d_d` Z7dadb Z8dcS )fSCMRightsTestic                 C   s\   g }t |D ]%}t \}}| tj| | tj| t|t|	  |
| q|S r4   )rk  r   mkstempre   r  r  r    writer?  encodeappend)rI   r/  fdsr@   r  r
  r   r   r   newFDs;  s   zSCMRightsTest.newFDsc                 C   sB   t |D ]\}}t|dtj | t|dt|  qd S )Nr   r   )	enumerater  lseekSEEK_SETr   rR  r?  r6  )rI   r8  r/  r  r   r   r   checkFDsG  s   zSCMRightsTest.checkFDsc                 C   s   |  | j| d S r4   )re   closeRecvmsgFDsr  r   r   r   r}  N  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   r@   )	r   rm  
SCM_RIGHTSr  	frombytesr+  r,  r  r    )rI   Zrecvmsg_result
cmsg_level	cmsg_type	cmsg_datar8  r  r   r   r   r>  Q  s   

zSCMRightsTest.closeRecvmsgFDsc                 C   s8   |  | tgtjtjtd| |fgtt d S )Nr@   )	r   r|  r   r   rm  r?  r  r9  r+  )rI   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  r@   r   )r   r   r  r   r  r   r  rJ  r+  r  r+  r  tuplerm  r?  r  
SIZEOF_INTr@  r=  )rI   Znumfdsr~  maxcmsgsignoreflagsr   r  r'  r   r8  itemrA  rB  rC  r   r   r   checkRecvmsgFDsg  s&   

zSCMRightsTest.checkRecvmsgFDsc                 C       |  d| | jttd d S )Nr   r   rK  r  r  r+  r   rH   r   r   r   testFDPassSimple     
zSCMRightsTest.testFDPassSimplec                 C   s<   |  | tgtjtjtd| d fgt	t d S )Nr@   r   )
r   r|  r   r   rm  r?  r  r9  r  r+  rH   r   r   r   _testFDPassSimple  s   zSCMRightsTest._testFDPassSimplec                 C   rL  )Nrf  r   rM  rH   r   r   r   testMultipleFDPass  rO  z SCMRightsTest.testMultipleFDPassc                 C   rK  Nrf  rD  rH   r   r   r   _testMultipleFDPass  rO  z!SCMRightsTest._testMultipleFDPassr  c                 C   s*   |  d| | jtttdt  d S rR  )rK  r  r  r+  r   r   r  rG  rH   r   r   r   testFDPassCMSG_SPACE  s
   z"SCMRightsTest.testFDPassCMSG_SPACEc                 C   rK  rR  rS  rH   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   rf  rI  )	rK  r  r  r+  r   r   r(  rG  r  rH   r   r   r   testFDPassCMSG_LEN  s   
z SCMRightsTest.testFDPassCMSG_LENc                 C   rK  r  rS  rH   r   r   r   _testFDPassCMSG_LEN  rO  z!SCMRightsTest._testFDPassCMSG_LENrx  zskipping, see issue #12958zskipping, see issue #22397c                 C   s$   | j d| | jttddd d S )Nr   r   )rH  rM  rH   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   r@   	r9  r   r|  r   r   rm  r?  r  r+  rI   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   )rH  rI  )
rK  r  r  r+  r   r   r  rG  r(  r  )rI   Znum_fdsr   r   r   testFDPassSeparateMinSpace  s   
z(SCMRightsTest.testFDPassSeparateMinSpacec                 C   r[  r\  r]  r^  r   r   r   _testFDPassSeparateMinSpace  ra  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 r4   )r|  r   rJ  r  r  r   r+  )rI   r   r  r  r   r   r   r   sendAncillaryIfPossible  s   z%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725c                 C   s&   | j d| | jttdtjd d S )Nr   r   rW  )rK  r  r  r+  r   r   r  rH   r   r   r   testFDPassEmpty  s
   
zSCMRightsTest.testFDPassEmptyc                 C   s   |  ttjtjdfg d S NrP  )rd  r   r   rm  r?  rH   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 )Nr   Tr  r   )r  r  r+  r   r   r  r   r  r   r  r  rm  r?  
assertLessrG  rI   r   r  r'  r   rA  rB  rC  r   r   r   testFDPassPartialInt  s   z"SCMRightsTest.testFDPassPartialIntc              	   C   s4   |  ttjtjtd| jg d d fg d S )Nr@   r  )rd  r   r   rm  r?  r  badfdr  rH   r   r   r   _testFDPassPartialInt  s   z#SCMRightsTest._testFDPassPartialIntc           	      C   s   |  | jttd\}}}}| |t | || j | j|dtj	d | 
t|d td}|D ]%\}}}| |tj | |tj ||d t|t||j    q3| 
t|d | | d S )Nr   Tr  r   r@   )r  r  r+  r   r   r  r   r  r   r  r  r  rm  r?  r@  r,  r=  )	rI   r   r  r'  r   r8  rA  rB  rC  r   r   r   testFDPassPartialIntInMiddle  s    

z*SCMRightsTest.testFDPassPartialIntInMiddlec              
   C   sZ   |  d\}}| ttjtjtd|| jg d d ftjtjtd|gfg d S )Nr   r@   r  )	r9  rd  r   r   rm  r?  r  rk  r  r^  r   r   r   _testFDPassPartialIntInMiddle"  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  )rI   r~  rI  r   r  r'  r   r   r   r   checkTruncatedHeader.  s   
z"SCMRightsTest.checkTruncatedHeaderc                 C   s"   | j | | jtttjd d S NrW  rp  r  r  r+  r   r   r  rH   r   r   r   testCmsgTruncNoBufSize8  s   
z$SCMRightsTest.testCmsgTruncNoBufSizec                 C   rK  r  rS  rH   r   r   r   _testCmsgTruncNoBufSizeA  rO  z%SCMRightsTest._testCmsgTruncNoBufSizec                 C   s$   | j | | jttdtjd d S )Nr   rW  rr  rH   r   r   r   testCmsgTrunc0D  s   
zSCMRightsTest.testCmsgTrunc0c                 C   rK  r  rS  rH   r   r   r   _testCmsgTrunc0I  rO  zSCMRightsTest._testCmsgTrunc0c                 C   s   |  | | jttd d S r  )rp  r  r  r+  r   rH   r   r   r   testCmsgTrunc1O  s   zSCMRightsTest.testCmsgTrunc1c                 C   rK  r  rS  rH   r   r   r   _testCmsgTrunc1R  rO  zSCMRightsTest._testCmsgTrunc1c                 C   s"   |  | | jtttd  d S r3  )rp  r  r  r+  r   rG  rH   r   r   r   testCmsgTrunc2IntU  s   
zSCMRightsTest.testCmsgTrunc2Intc                 C   rK  r  rS  rH   r   r   r   _testCmsgTrunc2Int\  rO  z SCMRightsTest._testCmsgTrunc2Intc              	   C   s(   |  | | jtttdd  d S r?  )rp  r  r  r+  r   r   r(  rH   r   r   r   testCmsgTruncLen0Minus1_  s   
z%SCMRightsTest.testCmsgTruncLen0Minus1c                 C   rK  r  rS  rH   r   r   r   _testCmsgTruncLen0Minus1c  rO  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   r@   )r  r  r+  r   r   r  r   r  r   r  rm  r?  r  r  r  r@  r,  r=  )rI   ancbufmaxdataZmindatar   r  r'  r   rA  rB  rC  r8  r   r   r   checkTruncatedArrayi  s&   
z!SCMRightsTest.checkTruncatedArrayc                 C   s   | j tddd d S )Nr   r~  r  r  r   r(  rH   r   r   r   testCmsgTruncLen0     zSCMRightsTest.testCmsgTruncLen0c                 C   rK  r  rS  rH   r   r   r   _testCmsgTruncLen0  rO  z SCMRightsTest._testCmsgTruncLen0c                 C   s   | j tdd dd d S )Nr   r   r  r  rH   r   r   r   testCmsgTruncLen0Plus1  r  z$SCMRightsTest.testCmsgTruncLen0Plus1c                 C   rK  r3  rS  rH   r   r   r   _testCmsgTruncLen0Plus1  rO  z%SCMRightsTest._testCmsgTruncLen0Plus1c                 C   s   | j tttd d S )Nr  r  r   r(  rG  rH   r   r   r   testCmsgTruncLen1  s   
zSCMRightsTest.testCmsgTruncLen1c                 C   rK  r3  rS  rH   r   r   r   _testCmsgTruncLen1  rO  z SCMRightsTest._testCmsgTruncLen1c                 C   s(   | j tdt d dt d d d S )Nr   r   r  r  rH   r   r   r   testCmsgTruncLen2Minus1  s   

z%SCMRightsTest.testCmsgTruncLen2Minus1c                 C   rK  r3  rS  rH   r   r   r   _testCmsgTruncLen2Minus1  rO  z&SCMRightsTest._testCmsgTruncLen2Minus1N)r   r   r   )9rP   rQ   rR   rk  r9  r=  r}  r>  rD  rK  rN  rP  rQ  rT  r>  r   rU  r*  rV  rX  rY  r   r  r  r  r	   rZ  r`  rb  rc  rd  re  rg  rj  rl  rm  rn  rp  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r  r  r  r  r  r  r  r  r  r   r   r   r   r3  3  s    

	












	
r3  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 r4   )rS  )rI   r  drA  rB  rC  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   TrE  r   r@   )r  r  r   rr  r  rw  r   r  r+  r   r   r  r   r  r  rJ  rF  r  r  rG  r  r@  r  r  )rI   
ancbufsizemaxhoprI  r   r  r'  r   rA  rB  rC  r  r   r   r   checkHopLimit  s.   



z"RFC3542AncillaryTest.checkHopLimitr  r  c                 C      | j dd d S Nr   r  )r  rH   r   r   r   testRecvHopLimit  r  z%RFC3542AncillaryTest.testRecvHopLimitc                 C   $   |  | jj| jd | t d S r  rH  rw  r   r  ry  r   rH   r   r   r   _testRecvHopLimit  s   z&RFC3542AncillaryTest._testRecvHopLimitr  c                 C   s   | j ttd d S )Nr  )r  r   r  rG  rH   r   r   r   testRecvHopLimitCMSG_SPACE     z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEc                 C   r  r  r  rH   r   r   r   _testRecvHopLimitCMSG_SPACE     z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr  c                 C      | j d| jd d S Nr   )r  r  )r  	hop_limitrH   r   r   r   testSetHopLimit  s   z$RFC3542AncillaryTest.testSetHopLimitc                 C   sL   |  | jj| jd | | tgtjtj	t

d| jgfgtt d S Nr  r@   )rH  rw  r   r  r   r|  r   r   rr  r  r  r  r+  rH   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   TrE  r   r@   r   r  )r  r  r   rr  r  r  rw  r   r  r+  r   r   r  r   r  r  r  r  rG  r  r@  r  r  r  )rI   r  r  rI  r   r  r'  r   ZancmapZtcdatar  Zhldatar   r   r   checkTrafficClassAndHopLimit  s:   







z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr  r  c                 C   r  r  )r  rH   r   r   r   testRecvTrafficClassAndHopLimit#  s   z4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitc                 C   r  r  r  rH   r   r   r    _testRecvTrafficClassAndHopLimit)  r  z5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitc                 C   s   | j ttd d d S Nr   r  )r  r   r  rG  rH   r   r   r   )testRecvTrafficClassAndHopLimitCMSG_SPACE.  s   
z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   r  r  r  rH   r   r   r   *_testRecvTrafficClassAndHopLimitCMSG_SPACE6  r  z?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEc                 C   r  r  r  r  rH   r   r   r   testSetTrafficClassAndHopLimit;  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  )rH  rw  r   r  r   r|  r   r   rr  r  r  traffic_classr  r  r+  rH   r   r   r   _testSetTrafficClassAndHopLimitD  s   z4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitc                 C   r  r  r  rH   r   r   r   testOddCmsgSizeO  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  r@   r  )rH  rw  r   r  r|  r   r   rr  r  r  r  r  r  r  r   rJ  r  r  r   r+  )rI   r  r   r   r   r   _testOddCmsgSizeY  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   Tro  )r  r  r   rr  r  rw  r   r  r+  r   r   r  r   r  r  )rI   r  rI  r_   r   r  r'  r   r   r   r   checkHopLimitTruncatedHeadero  s    


z1RFC3542AncillaryTest.checkHopLimitTruncatedHeaderc                 C   s   | j d tjd d S )Nr  rI  r  r   r  rH   r   r   r   rs    s   
z+RFC3542AncillaryTest.testCmsgTruncNoBufSizec                 C   r  r  r  rH   r   r   r   rt    r  z,RFC3542AncillaryTest._testCmsgTruncNoBufSizec                 C   s   | j dtjd d S )Nr   r  r  rH   r   r   r   testSingleCmsgTrunc0  s   
z)RFC3542AncillaryTest.testSingleCmsgTrunc0c                 C   r  r  r  rH   r   r   r   _testSingleCmsgTrunc0  r  z*RFC3542AncillaryTest._testSingleCmsgTrunc0c                 C   r  )Nr   r  )r  rH   r   r   r   testSingleCmsgTrunc1     z)RFC3542AncillaryTest.testSingleCmsgTrunc1c                 C   r  r  r  rH   r   r   r   _testSingleCmsgTrunc1  r  z*RFC3542AncillaryTest._testSingleCmsgTrunc1c                 C   s   | j dt d d S r  )r  rG  rH   r   r   r   testSingleCmsgTrunc2Int     z,RFC3542AncillaryTest.testSingleCmsgTrunc2Intc                 C   r  r  r  rH   r   r   r   _testSingleCmsgTrunc2Int  r  z-RFC3542AncillaryTest._testSingleCmsgTrunc2Intc                 C   s   | j tdd d d S )Nr   r   r  )r  r   r(  rH   r   r   r   testSingleCmsgTruncLen0Minus1     z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1c                 C   r  r  r  rH   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   rr  r  rw  r   r  r+  r   r(  rG  r   r  r   r  r  r  r  rh  ri  r   r   r   testSingleCmsgTruncInData  s"   

z.RFC3542AncillaryTest.testSingleCmsgTruncInDatac                 C   r  r  r  rH   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   Tro  r   r@   r  )r  r  r   rr  r  r  rw  r   r  r+  r   r   r  r   r  r  rP  r  r  rG  r  r@  r  r  )rI   r  rI  r   r  r'  r   rA  rB  rC  r  r   r   r   checkTruncatedSecondHeader  s0   




z/RFC3542AncillaryTest.checkTruncatedSecondHeaderc                 C   s   | j tttjd d S rq  )r  r   r  rG  r  rH   r   r   r   testSecondCmsgTrunc0  s   
z)RFC3542AncillaryTest.testSecondCmsgTrunc0c                 C   r  r  r  rH   r   r   r   _testSecondCmsgTrunc0  r  z*RFC3542AncillaryTest._testSecondCmsgTrunc0c                 C   s   |  ttd  d S r  r  r   r  rG  rH   r   r   r   testSecondCmsgTrunc1  r  z)RFC3542AncillaryTest.testSecondCmsgTrunc1c                 C   r  r  r  rH   r   r   r   _testSecondCmsgTrunc1  r  z*RFC3542AncillaryTest._testSecondCmsgTrunc1c                 C   s   |  ttdt   d S r3  r  rH   r   r   r   testSecondCmsgTrunc2Int  s   
z,RFC3542AncillaryTest.testSecondCmsgTrunc2Intc                 C   r  r  r  rH   r   r   r   _testSecondCmsgTrunc2Int  r  z-RFC3542AncillaryTest._testSecondCmsgTrunc2Intc                 C   s"   |  tttd d  d S r?  )r  r   r  rG  r(  rH   r   r   r   testSecondCmsgTruncLen0Minus1  s
   
z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1c                 C   r  r  r  rH   r   r   r   _testSecondCmsgTruncLen0Minus1  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   r@   r  )r  r  r   rr  r  r  rw  r   r  r+  r   r  rG  r(  r   r  r   r  r  r  r  popremover  r@  r  r  rh  )
rI   r   r  r'  r   Z
cmsg_typesrA  rB  rC  r  r   r   r   testSecondCmsgTruncInData#  s:   







z.RFC3542AncillaryTest.testSecondCmsgTruncInDatac                 C   r  r  r  rH   r   r   r   _testSecondCmsgTruncInDataH  r  z/RFC3542AncillaryTest._testSecondCmsgTruncInDataN)r  r   r  )1rP   rQ   rR   r  r  r  r  r>  r   r  r*  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs  rt  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rP   rQ   rR   r   r   r   r   r  P      r  r  c                   @   r  )SendmsgUDPTestNr  r   r   r   r   r  U      r  r  c                   @   r  )RecvmsgUDPTestNr  r   r   r   r   r  Y  r  r  r  c                   @   r  )RecvmsgIntoUDPTestNr  r   r   r   r   r  ]  r  r  c                   @   rU   )SendrecvmsgUDP6TestBasec                 C       |  |d d |d d  d S rp  r  r  r   r   r   r  f      z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressNrP   rQ   rR   r  r   r   r   r   r  b      r  rv  r   r%   c                   @   r  )SendmsgUDP6TestNr  r   r   r   r   r  k      r  c                   @   r  )RecvmsgUDP6TestNr  r   r   r   r   r  q  r  r  c                   @   r  )RecvmsgIntoUDP6TestNr  r   r   r   r   r  w  r  r  rr  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                   @   rU   )SendrecvmsgUDPLITE6TestBasec                 C   r  rp  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 AIXrC   r8   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)rY   r  r  r   r  ENOTCONNrr   rI   r   ra   r   r   r       z$RecvmsgSCTPStreamTest.testRecvmsgEOFrP   rQ   rR   r  rh   r   r   ra   r   r         r  c                       r  )RecvmsgIntoSCTPStreamTestc              
      r  r  )rY   r  r  r   r  r  rr   r  ra   r   r   r    r  z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr  r   r   ra   r   r    r  r  c                   @   r  )SendrecvmsgUnixStreamTestBaseNr  r   r   r   r   r    r  r  r  c                   @   r  )SendmsgUnixStreamTestNr  r   r   r   r   r  !  r  r  c                   @   r  )RecvmsgUnixStreamTestNr  r   r   r   r   r  &  r  r  c                   @   r  )RecvmsgIntoUnixStreamTestNr  r   r   r   r   r  ,  r  r  rm  r?  c                   @   r  )RecvmsgSCMRightsStreamTestNr  r   r   r   r   r   2  r  r   c                   @   r  )RecvmsgIntoSCMRightsStreamTestNr  r   r   r   r   r  7  r  r  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 r%  r   )signumr  r   r   r   r%  K  s    z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rY   rJ   rB  rC  re   )rI   Zorig_alrm_handlerra   r   r   rJ   H  s
   
zInterruptedTimeoutBase.setUp	setitimerg?c                 C   s   t t j| d S r4   )rB  r  ITIMER_REALrI   Zsecondsr   r   r   setAlarmW  r   zInterruptedTimeoutBase.setAlarmr   c                 C   s   t | d S r4   )rB  r9  r  r   r   r   r  ]  rO  )rP   rQ   rR   rJ   r   r  r=   r   rB  
alarm_timer  rh   r   r   ra   r   r  C  s    
r  siginterruptr9  r  z+Don't have signal.alarm or signal.setitimerc                       sl   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Ze	e
j
ddd Ze	e
j
ddd Z  ZS )InterruptedRecvTimeoutTestc                    r  r4   )rY   rJ   rD   r  r=   rH   ra   r   r   rJ   j  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_  rD  rI   r  r_   r`   ri  r   r   r   checkInterruptedRecvn  s   z/InterruptedRecvTimeoutTest.checkInterruptedRecvc                 C      |  | jjd d S r   )r  rD   r   rH   r   r   r   testInterruptedRecvTimeoutx  r   z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutc                 C      |  | jjtd d S r   )r  rD   	recv_intor  rH   r   r   r   testInterruptedRecvIntoTimeout{  r  z9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutc                 C   r  r   )r  rD   r  rH   r   r   r   testInterruptedRecvfromTimeout~  r   z9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutc                 C   r  r   )r  rD   recvfrom_intor  rH   r   r   r   "testInterruptedRecvfromIntoTimeout  r  z=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr  c                 C   r  r   )r  rD   r  rH   r   r   r   testInterruptedRecvmsgTimeout  r  z8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr  c                 C   s   |  | jjtdg d S r   )r  rD   r  r  rH   r   r   r   !testInterruptedRecvmsgIntoTimeout  r  z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rP   rQ   rR   rJ   r  r  r  r  r  r>  r   r  r  rh   r   r   ra   r   r
  c  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)rY   rJ   r   r   re   r    r[   Thread	doConnectstartrD   r   r   r<  r  r=   )rI   Z
cli_threadr   ra   r   r   rJ     s   

z InterruptedSendTimeoutTest.setUpc                 C   s   | j | j d S r4   )r   r   r   rH   r   r   r   r    r   z$InterruptedSendTimeoutTest.doConnectc              	   O   sX   z%|  t}	 | | j ||i | q1 sw   Y  W | d d S | d w NTr   )r_  rD  r  r  r  r   r   r   checkInterruptedSend  s   z/InterruptedSendTimeoutTest.checkInterruptedSendr  r  c                 C   r  Nr  )r  r   r   rH   r   r   r   testInterruptedSendTimeout  r  z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutc                 C   s   |  | jjd| j d S r  )r  r   rg  r   rH   r   r   r   testInterruptedSendtoTimeout  s   z7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr  c                 C   s   |  | jjdg d S r  )r  r   r  rH   r   r   r   testInterruptedSendmsgTimeout  r  z8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rP   rQ   rR   rJ   r  r  r   Zrequires_mac_verr  r   r>  r   r!  rh   r   r   ra   r   r    s    	





r  c                   @   rA   )TCPCloserTestc                 C   sh   | j  \}}|  | j}t|gg g d\}}}| ||g | |dd |  |  d S )N      ?r   rP  )rD   r   r    r   r  r   r   )rI   r   r   sdrR  r5  rD  r   r   r   	testClose  s   zTCPCloserTest.testClosec                 C   s    | j t| jf td d S Nr#  )r   r   r   rF   r   r   rH   r   r   r   
_testClose  rc   zTCPCloserTest._testCloseN)rP   rQ   rR   r%  r'  r   r   r   r   r"        r"  c                   @   sN   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dS )BasicSocketPairTestr   c                 C   r   r   )r   rZ   r   r   r   r   rZ     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   )
rJ  r   r   r   rV  r  rC   r)  r8   rW  r  r   r   r   _check_defaults  s   
z#BasicSocketPairTest._check_defaultsc                 C      |  | j d S r4   )r*  r   rH   r   r   r   _testDefaults  r  z!BasicSocketPairTest._testDefaultsc                 C   r+  r4   )r*  rD   rH   r   r   r   testDefaults  r  z BasicSocketPairTest.testDefaultsc                 C   r   r   )rD   r   r   r   r   r   r   r   r@    r   zBasicSocketPairTest.testRecvc                 C   rA  r4   )r   r   r   rH   r   r   r   rC    r  zBasicSocketPairTest._testRecvc                 C   rA  r4   )rD   r   r   rH   r   r   r   testSend  r  zBasicSocketPairTest.testSendc                 C   r   r   )r   r   r   r   r   r   r   r   	_testSend  r   zBasicSocketPairTest._testSendNr   )rP   rQ   rR   rZ   r*  r,  r-  r@  rC  r.  r/  r   r   r   r   r)    s    
	r)  c                   @   s   e Zd Zd&ddZdd Zdd Zdd	 Zejd
d Z	eeZ
eeeddeddddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )'NonBlockingTCPTestsr   c                 C   s   t  | _tj| |d d S r   )r[   r   eventr   rZ   r   r   r   r   rZ     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   rD   r  getblockingr   F_GETFLr  
O_NONBLOCKbool)rI   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 )NTFr2  r   r  )rD   r  r9  r  rH   r   r   r   testSetBlocking  s   z#NonBlockingTCPTests.testSetBlockingc                 C   r   r4   r   rH   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_MAXFr2  r   )	r  r^  Z	ULONG_MAXrr   rD   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   )rD   r    r   rC   r8   r  r9  rH   r   r   r   testInitNonBlocking=  s
   

z'NonBlockingTCPTests.testInitNonBlockingc                 C   r   r4   r   rH   r   r   r   _testInitNonBlockingG  r   z(NonBlockingTCPTests._testInitNonBlockingc                 C   sb   t d # | jd | j \}}| |j | |  W d    d S 1 s*w   Y  d S )Nr  )r>   rD   r  r   re   r    r  r  r   r   r   r   testInheritFlagsBlockingJ  s   
"z,NonBlockingTCPTests.testInheritFlagsBlockingc                 C      | j t| jf d S r4   r   r   r   rF   rH   r   r   r   _testInheritFlagsBlockingS  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>   rD   r  r   re   r    r   r  )rI   Zdefault_timeoutr   r   r   r   r   testInheritFlagsTimeoutV  s   
"z+NonBlockingTCPTests.testInheritFlagsTimeoutc                 C   rB  r4   rC  rH   r   r   r   _testInheritFlagsTimeouta  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 )NFr#  z'Error trying to do accept after select.)rD   r  r   	monotonicr_  BlockingIOErrorr   rh  r1  r   r  r   LONG_TIMEOUTr[  re   r    r  r  )rI   Z
start_timer   r   ZdtrR  r5  rD  r   r   r   
testAcceptd  s   


zNonBlockingTCPTests.testAcceptc                 C   s    | j   | jt| jf d S r4   )r1  r   r   r   r   rF   rH   r   r   r   _testAcceptz  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.)rD   r   re   r    r  r_  rH  r   r+  r   r1  r   r  r   rI  r[  r   )rI   r   r   r   rR  r5  rD  r   r   r   r@    s   


zNonBlockingTCPTests.testRecvc                 C   s,   | j t| jf | j  | j t d S r4   )r   r   r   rF   r1  r   rE  r   rH   r   r   r   rC    s   
zNonBlockingTCPTests._testRecvNr   )rP   rQ   rR   rZ   r9  r:  r;  r   r  r<  Z_testSetBlocking_overflowr   r  r   r   requires_linux_versionr?  r@  rA  rD  rE  rF  rJ  rK  r@  rC  r   r   r   r   r0     s,    


	r0  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   ra  r   c                 C   r   r   r?  r   r   r   r   rZ     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   r3  r@   r   r   r   r5    s    z1FileObjectClassTestCase.setUp.<locals>.<listcomp>rf  re  errorsnewline)rk  evt1evt2serv_finishedcli_finishedr   rJ   r   rT  	read_moders   re  rR  rS  	read_filerH   r   r   r   rJ     s   
zFileObjectClassTestCase.setUpc                 C   6   | j   | j  | | jj d | _t|  d S r4   )rV  r   rY  r    rH  closedr   rM   rH   r   r   r   rM     
   

z FileObjectClassTestCase.tearDownc                 C   s0   t |  | jj| j| j| j| j| jd| _	d S )NrQ  )
r   r   r   rT  
write_moders   re  rR  rS  
write_filerH   r   r   r   r     s   
z#FileObjectClassTestCase.clientSetUpc                 C   rZ  r4   )rW  r   r^  r    rH  r[  r   r   rH   r   r   r   r     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   rE  z!cannot read from timed out object)
r   r  rY  rR  r_  rG  r   rP  r?  rh  )rI   ctxr   r   r   testReadAfterTimeout  s   z,FileObjectClassTestCase.testReadAfterTimeoutc                 C   s.   | j | jdd  | j   | j  d S )Nr   rE  )r^  r5  	write_msgflushrV  r   rH   r   r   r   _testReadAfterTimeout  s   
z-FileObjectClassTestCase._testReadAfterTimeoutc                 C   s<   | j t| jd }| j d}|| }| || j d S r  )rY  rR  r+  read_msgr   )rI   	first_segZ
second_segr   r   r   r   testSmallRead  s   z%FileObjectClassTestCase.testSmallReadc                 C      | j | j | j   d S r4   r^  r5  ra  rb  rH   r   r   r   _testSmallRead  r   z&FileObjectClassTestCase._testSmallReadc                 C      | j  }| || j d S r4   )rY  rR  r   rd  r   r   r   r   testFullRead     
z$FileObjectClassTestCase.testFullReadc                 C   rg  r4   )r^  r5  ra  r    rH   r   r   r   _testFullRead  r   z%FileObjectClassTestCase._testFullReadc                 C   s<   t | j }	 | jd}|sq||7 }q| || j d S r  )r)  rd  rY  rR  r   )rI   r  charr   r   r   testUnbufferedRead  s   z*FileObjectClassTestCase.testUnbufferedReadc                 C   rg  r4   rh  rH   r   r   r   _testUnbufferedRead  r   z+FileObjectClassTestCase._testUnbufferedReadc                 C   rj  r4   )rY  readliner   rd  rI   liner   r   r   testReadline  rl  z$FileObjectClassTestCase.testReadlinec                 C   rg  r4   rh  rH   r   r   r   _testReadline  r   z%FileObjectClassTestCase._testReadlinec                 C   s&   | j   | j }| || j d S r4   )r   r    rY  rR  r   rd  r   r   r   r   testCloseAfterMakefile  s   

z.FileObjectClassTestCase.testCloseAfterMakefilec                 C   rg  r4   rh  rH   r   r   r   _testCloseAfterMakefile  r   z/FileObjectClassTestCase._testCloseAfterMakefilec                 C   s@   | j   | jtt}t| jtr|	 }| 
|| j d S r4   )rY  r    r   r   r+  r   r(  rd  r?  decoder   r   r   r   r   testMakefileAfterMakefileClose   s
   
z6FileObjectClassTestCase.testMakefileAfterMakefileClosec                 C   rg  r4   rh  rH   r   r   r   _testMakefileAfterMakefileClose'  r   z7FileObjectClassTestCase._testMakefileAfterMakefileClosec                 C      |  | jj  d S r4   )rH  rY  r[  rH   r   r   r   testClosedAttr+  r   z&FileObjectClassTestCase.testClosedAttrc                 C   r{  r4   )rH  r^  r[  rH   r   r   r   _testClosedAttr.  r   z'FileObjectClassTestCase._testClosedAttrc                 C   ,   |  | jj| j |  | jj| j  d S r4   )r   rY  rc  rX  r4  r   rQ  rH   r   r   r   testAttributes1     z&FileObjectClassTestCase.testAttributesc                 C   r~  r4   )r   r^  rc  r]  r4  r   rQ  rH   r   r   r   _testAttributes5  r  z'FileObjectClassTestCase._testAttributesc                 C   s8   | j   | t| j j | j  | t| jj d S r4   )rY  r    r_  r  rQ  r   r   r   rH   r   r   r   testRealClose9  s   

z%FileObjectClassTestCase.testRealClosec                 C   r   r4   r   rH   r   r   r   _testRealClose?  r   z&FileObjectClassTestCase._testRealCloser   )%rP   rQ   rR   rs   re  rR  rS  rX  r   rd  r]  ra  rZ   rJ   rM   r   r   r`  rc  rf  ri  rk  rm  ro  rp  rt  ru  rv  rw  ry  rz  r|  r}  r  r  r  r  r   r   r   r   rM    sF    


rM  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. )rY  rq  r   ra  r   rT  rr  r   r   r   testUnbufferedReadlineO  s
   

z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinec                 C   s2   | j d| j  | j d| j  | j   d S )Nr  r  rh  rH   r   r   r   _testUnbufferedReadlineW  s   z9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinec                 C   sD   | j   | j d}| || j | j  | t| j jd d S r   )r   r    r   r   rd  rY  r_  r   r   r   r   r   testMakefileClose\  s
   

z3UnbufferedFileObjectClassTestCase.testMakefileClosec                 C   rg  r4   rh  rH   r   r   r   _testMakefileClosee  r   z4UnbufferedFileObjectClassTestCase._testMakefileClosec                 C   s6   t | j}| j  t | j}| |d | d S r  )r  r  r   rY  r    r   )rI   Zrefcount_beforeZrefcount_afterr   r   r   testMakefileCloseSocketDestroyi  s   
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroyc                 C   r   r4   r   rH   r   r   r   _testMakefileCloseSocketDestroyo  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  rE  r#  g      ?r  r   )r   r  r   rY  readintor  rR  r+  rd  rT  r   rU  r   r   r   )rI   re  r  r/  r   r   r   r   testSmallReadNonBlockingv  s    

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingc                 C   s>   | j d | j| j | j  | j  | jd d S )Nr#        @)	rT  r   r^  r5  ra  rb  rU  r   rV  rH   r   r   r   _testSmallReadNonBlocking  s
   

z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingc                 C   s&   | j d | jr| | j d S d S )Nr  )rW  r   serv_skippedrr   rH   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 )NFrA  r  r   z$failed to saturate the socket buffer)	r  r   r  r   rF  r^  r5  r  rk  )rI   ZBIGZLIMITr/  r@   r   r   r   _testWriteNonBlocking  s   

z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rP   rQ   rR   rs   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  C  s    		r  c                   @      e Zd ZdZdS )#LineBufferedFileObjectClassTestCaser   NrP   rQ   rR   rs   r   r   r   r   r        r  c                   @   r  )$SmallBufferedFileObjectClassTestCaser   Nr  r   r   r   r   r    r  r  c                   @   s(   e Zd Z	 dZedZdZeZdZ	dS )"UnicodeReadFileObjectClassTestCaser   r   ra  rc  N
rP   rQ   rR   rX  r   rx  rd  r]  ra  rS  r   r   r   r   r    s    
r  c                   @   s(   e Zd Z	 dZeZdZedZdZ	dS )#UnicodeWriteFileObjectClassTestCaser   r`  r   rc  N)
rP   rQ   rR   rX  r   rd  r]  rx  ra  rS  r   r   r   r   r    s    
r  c                   @   s.   e Zd Z	 dZedZdZedZdZ	dS )'UnicodeReadWriteFileObjectClassTestCaser   r   r`  rc  Nr  r   r   r   r   r    s    

r  c                   @   r  )NetworkConnectionTestc                 C   s   t t| jf| _| j| _d S r4   )r   create_connectionr   rF   r   r   rH   r   r   r   r     s   z!NetworkConnectionTest.clientSetUpN)rP   rQ   rR   r   r   r   r   r   r    r  r  c                   @   r  )BasicTCPTest2Nr  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                   @   rU   )z$NetworkConnectionNoServer.MockSocketc                 G   r   )Nz	timed out)rG  r{  r   r   r   r     r   z,NetworkConnectionNoServer.MockSocket.connectN)rP   rQ   rR   r   r   r   r   r   
MockSocket  s    r  c                 c   s.    	 t j }| jt _ z	d V  W |t _ d S |t _ w r4   )r   r  )rI   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 r4   )r   r  r   rC   r8   re   r    r_  r   r   r   r   rh  r  ZECONNREFUSED)rI   rF   r   ri  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 r4   )r   r  r_  r   r   r  r   Zget_socket_conn_refused_errsrP  rh  r  )rI   rF   ri  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   r  )r  r   r  r   rG  r   r   r,  r  ZEAFNOSUPPORTr[  r   r   r   r   test_create_connection_timeout  s"   
"z8NetworkConnectionNoServer.test_create_connection_timeoutN)rP   rQ   rR   r   r  
contextlibcontextmanagerr  r  r  r  r   r   r   r   r    s    
	r  c                   @   sv   e Zd ZdddZdd Zdd Zdd	 ZeZd
d ZeZ	dd Z
eZdd ZeZdd ZeZdd ZeZdd ZdS )NetworkConnectionAttributesTestr   c                 C   r   r   r   r   r   r   r   rZ   %  r   z(NetworkConnectionAttributesTest.__init__c                 C   s   t  | _d S r4   )r   r  source_portrH   r   r   r   r   )  rO  z+NetworkConnectionAttributesTest.clientSetUpc                 C   r   r4   r   rH   r   r   r   r   ,  r   z.NetworkConnectionAttributesTest.clientTearDownc                 C   s   | j  \}}|  d S r4   )rD   r   r    r   r   r   r   _justAccept1  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   rF   r   r  r   re   r    r   rV  rH   r   r   r   _testFamily6  s
   z+NetworkConnectionAttributesTest._testFamilyc                 C   sJ   t jt| jftjd| jfd| _| | jj	 | 
| j d | j d S )Nrc  )r=   source_addressr   )r   r  r   rF   r   r  r  r   re   r    r   r   rH   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  rH  r   r;   r<   r  r   rF   r   re   r    r   r  rH   r   r   r   _testTimeoutDefaultG  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  rH   r   r   r   _testTimeoutNoneS  s   
z0NetworkConnectionAttributesTest._testTimeoutNonec                 C   s,   t jt| jfdd| _| | j d d S r  )r   r  r   rF   r   r   r  rH   r   r   r   _testTimeoutValueNamed_  s   z6NetworkConnectionAttributesTest._testTimeoutValueNamedc                 C   s8   t t| jfd| _| | jj | | j d d S )Nr  )	r   r  r   rF   r   re   r    r   r  rH   r   r   r   _testTimeoutValueNonamedd  s   z8NetworkConnectionAttributesTest._testTimeoutValueNonamedNr   )rP   rQ   rR   rZ   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   rZ   l  r   z'NetworkConnectionBehaviourTest.__init__c                 C   r   r4   r   rH   r   r   r   r   p  r   z*NetworkConnectionBehaviourTest.clientSetUpc                 C   r   r4   r   rH   r   r   r   r   s  r   z-NetworkConnectionBehaviourTest.clientTearDownc                 C   s2   | j  \}}| |j td |d d S )NrE     done!)rD   r   re   r    r   r   r   r   r   r   r   testInsideTimeoutx     
z0NetworkConnectionBehaviourTest.testInsideTimeoutc                 C   s0   t t| jf | _}|d}| |d d S )Nr  r  )r   r  r   rF   r   r   r   )rI   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   rF   r   r_  rG  rH   r   r  r   _testOutsideTimeout  s   z2NetworkConnectionBehaviourTest._testOutsideTimeoutNr   )
rP   rQ   rR   rZ   r   r   r  ZtestOutsideTimeoutr  r  r   r   r   r   r  j  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 r&  )rD   r  r   r"  rH   r   r   raise_timeout  r   z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)r_  rG  rI   r  r   rH   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 )NFr2  z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rD   r  r   rG  r[  r   rI   okr  r   r   r   testTimeoutZero  s   zTCPTimeoutTest.testTimeoutZeror9  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   Alarm  r  r  c                    s    r4   r   )rB  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)rD   r  r  rB  rC  r9  r   rG  r[  r  exc_info	traceback
format_exc)rI   r  rI  r  r   r  r   testInterruptedTimeout  s4   


"z%TCPTimeoutTest.testInterruptedTimeoutN)
rP   rQ   rR   r  r  r   r  r   rB  r  r   r   r   r   r    s    r  c                   @   rA   )UDPTimeoutTestc                    r  )Nc                         j d  j d d S Nr#  r   rD   r  r   r"  rH   r   r   r    r   z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)r  r  r   rH   r   testUDPTimeout  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 )NFr2  r   z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)1recv() returned success when we did not expect itrD   r  r   rG  r[  r   r  r   r   r   r       zUDPTimeoutTest.testTimeoutZeroN)rP   rQ   rR   r  r  r   r   r   r   r    s    r  c                   @   rA   )UDPLITETimeoutTestc                    r  )Nc                     r  r  r  r"  rH   r   r   r    r   z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)r  r  r   rH   r   testUDPLITETimeout  r  z%UDPLITETimeoutTest.testUDPLITETimeoutc                 C   r  )NFr2  r   z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)r  r  r  r   r   r   r    r  z"UDPLITETimeoutTest.testTimeoutZeroN)rP   rQ   rR   r  r  r   r   r   r   r    s    r  c                   @   rA   )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 r4   )rH  
issubclassr   r  r   r`  ra  r=   ZassertIserrorrG  rH   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   rC   r8   rQ  r    re   r  r_  r   r  )rI   Zsock0r	  r   r   r   test_setblocking_invalidfd  s   "z)TestExceptions.test_setblocking_invalidfdN)rP   rQ   rR   r  r  r   r   r   r   r    s    r  r  zLinux specific testc                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestLinuxAbstractNamespacel   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  r8   rp   rG   r   r   r   r   getpeername)rI   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  r8   rp   r   r   rI   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)r  r   r  r8   r_  r   rp   r  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  r8   rp   r   r   r    rT  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 )Nr  )r   r  r8   rp   r  r   r   rT  r   r   r   testBytearrayName-  s   "z,TestLinuxAbstractNamespace.testBytearrayNameN)	rP   rQ   rR   r  r  r  r  r  r  r   r   r   r   r  	  s    	r  ztest needs socket.AF_UNIXc                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestUnixDomainc                 C   r   r4   )r   r  r8   r	  rH   r   r   r   rJ   6  r   zTestUnixDomain.setUpc                 C   r  r4   )r	  r    rH   r   r   r   rM   9  rO  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  fsencoder0  rr   rC  r  getfilesystemencodingrI   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?  rr   rC  )rI   r	  r
  r   r   r   r   rp   G  s   zTestUnixDomain.bindc                 C   s   |  | j d d S )N)rc  N)rP  r	  r   rH   r   r   r   r&  S  r6  zTestUnixDomain.testUnboundc                 C   s@   t jtj}| | j| | tj| | 	| j
 | d S r4   )r  r
  abspathr   TESTFNrp   r	  re   r  r   r   r  r   r   r   testStrAddrW  s   zTestUnixDomain.testStrAddrc                 C   sF   t jtj}| | j| | | tj	| | 
| j | d S r4   )r  r
  r  r   r  rp   r	  r  re   r  r   r   r  r   r   r   testBytesAddr^  s   zTestUnixDomain.testBytesAddrc                 C   sR   t jtj}| |}| | j|dd | 	tj
| | | j | d S )Nasciisurrogateescape)r  r
  r  r   ZTESTFN_UNICODEr  rp   r	  rx  re   r  r   r   )rI   r
  r3  r   r   r   testSurrogateescapeBinde  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_UNENCODABLErr   r  r
  r  rp   r	  re   r  r   r   r  r   r   r   testUnencodableAddrn  s   

z"TestUnixDomain.testUnencodableAddrN)rP   rQ   rR   rJ   rM   r  rp   r&  r  r  r  r  r   r   r   r   r  3  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   r?  r   r   r   r   rZ   }  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   r  r   r  rI   r  r  r   r   r   r   testRecvIntoArray  s   zBufferIOTest.testRecvIntoArrayc                 C      t t}| j| d S r4   r  r   r   r   rI   r  r   r   r   _testRecvIntoArray     zBufferIOTest._testRecvIntoArrayc                 C   sD   t d}| j|}| |tt |d tt }| |t d S r   )r  r   r  r   r+  r   r  r   r   r   testRecvIntoBytearray  s
   z"BufferIOTest.testRecvIntoBytearrayc                 C   sH   t d}| jt|}| |tt |d tt }| |t d S r   )r  r   r  r"  r   r+  r   r  r   r   r   testRecvIntoMemoryview  
   z#BufferIOTest.testRecvIntoMemoryviewc                 C   s^   t  ddgtt }| j|\}}| |tt | }|d tt }| |t d S r  )r  r+  r   r   r  r   r  rI   r  r  r   r   r   r   r   testRecvFromIntoArray  s   z"BufferIOTest.testRecvFromIntoArrayc                 C   r  r4   r  r   r   r   r   _testRecvFromIntoArray  r  z#BufferIOTest._testRecvFromIntoArrayc                 C   sH   t d}| j|\}}| |tt |d tt }| |t d S r   )r  r   r  r   r+  r   r  r   r   r   testRecvFromIntoBytearray  r  z&BufferIOTest.testRecvFromIntoBytearrayc                 C   sL   t d}| jt|\}}| |tt |d tt }| |t d S r   )r  r   r  r"  r   r+  r   r  r   r   r   testRecvFromIntoMemoryview  s
   z'BufferIOTest.testRecvFromIntoMemoryviewc                 C   s    t d}| t| jj|d d S )Nrm   r   )r  r_  r  r   r  r   r   r   r   testRecvFromIntoSmallBuffer  s   z(BufferIOTest.testRecvFromIntoSmallBufferc                 C   rA  r4   rB  rH   r   r   r   _testRecvFromIntoSmallBuffer  r  z)BufferIOTest._testRecvFromIntoSmallBufferc                 C   s$   t  }| j| | j|d d S r   )r  r   r  r   r   r   r   testRecvFromIntoEmptyBuffer  s   z(BufferIOTest.testRecvFromIntoEmptyBufferNr   )rP   rQ   rR   rZ   r  r  r  Z_testRecvIntoBytearrayr  Z_testRecvIntoMemoryviewr  r  r	  Z_testRecvFromIntoBytearrayr
  Z_testRecvFromIntoMemoryviewr  r  r  Z_testRecvFromIntoEmptyBufferr   r   r   r   r  y  s&    
r  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   rd  ztipc T)r   r   r   FileNotFoundErrorIsADirectoryErrorr  r  )r   rs  r   r   r   isTipcAvailable  s&   


r  z6TIPC module is not loaded, please 'sudo modprobe tipc'c                   @   rU   )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  rl  re   r    r  rm  rn  TIPC_ADDR_NAMESEQ
TIPC_STYPE
TIPC_LOWER
TIPC_UPPERrp   TIPC_ADDR_NAMEr  rg  r   r  r   r   )rI   rs  r   srvaddrZsendaddrr   Zrecvaddrr   r   r   testRDM  s    
zTIPCTest.testRDMN)rP   rQ   rR   r  r   r   r   r   r    r  r  c                   @   r   )TIPCThreadableTestr   c                 C   r   r   r   r   r   r   r   rZ     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  r8   rs  re   r    r  rm  rn  r  r  r  r  rp   rG   r   r   r   r   )rI   r  r   r   r   rJ     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  r8   r   re   r    r  r  r  r  r  r   r   cliaddr)rI   r   r   r   r   r     s   
zTIPCThreadableTest.clientSetUpc                 C   s,   | j d}| |t | | j| j d S r   )r   r   r   r   r  r   r   r   r   r   r     s   zTIPCThreadableTest.testStreamc                 C   r   r4   r   rH   r   r   r   r      r   zTIPCThreadableTest._testStreamNr   r   r   r   r   r   r    s    
r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )ContextManagersTestc                 C   s   t   }| |j W d    n1 sw   Y  | |j t   }|  W d    n1 s3w   Y  | |j t   }| t|jd W d    n1 sUw   Y  | |j d S Nrd  )r   r  ra  rH  r    r_  r   rE  r  r   r   r   _testSocketClass'  s   



z$ContextManagersTest._testSocketClassc                 C   2   | j  \}}| |j |d}|| d S r   rD   r   re   r    r   rE  rI   r   r   r  r   r   r   testCreateConnectionBase5  r  z,ContextManagersTest.testCreateConnectionBasec                 C   sl   | j  }t|}| |j |d | |dd W d    n1 s)w   Y  | 	|j d S )Nrd  r   )
rD   r   r   r  r  ra  rE  r   r   rH  rI   r  r	  r   r   r   _testCreateConnectionBase;  s   

z-ContextManagersTest._testCreateConnectionBasec                 C   r!  r   r"  r#  r   r   r   testCreateConnectionCloseC  r  z-ContextManagersTest.testCreateConnectionClosec                 C   s\   | j  }t|}|  W d    n1 sw   Y  | |j | t|j	d d S r  )
rD   r   r   r  r    rH  ra  r_  r   rE  r%  r   r   r   _testCreateConnectionCloseI  s   

z.ContextManagersTest._testCreateConnectionCloseN)rP   rQ   rR   r   r$  r&  r'  r(  r   r   r   r   r  %  s    r  c                   @   s   e Zd Zeeeddeddddd Z	dd	 Z
d
d Zdd Zeedu ddd Zeedu ddd Zdd ZdS )InheritanceTestr  zSOCK_CLOEXEC not definedr   r=  r>  c                 C   sZ   t  t jt jt jB }| |jt j | |  W d    d S 1 s&w   Y  d S r4   )r   rC   r8   r  r   r)  r  get_inheritablerT  r   r   r   test_SOCK_CLOEXECR  s   
"z!InheritanceTest.test_SOCK_CLOEXECc                 C   sB   t   }| | | d W d    d S 1 sw   Y  d S rL  )r   r   r*  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 rL  )r   rX  r    r   r*  )rI   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   r*  r  r   r   r   test_set_inheritableh  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   rQ  r   r*  r   F_GETFD
FD_CLOEXECF_SETFD)rI   r	  r  r'  r   r   r   test_get_inheritable_cloexecq  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 r  )r   rQ  r   r   r0  r1  r.  )rI   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 rL  )r   r   re   r    r   r*  )rI   r  r  r   r   r   test_socketpair  s
   zInheritanceTest.test_socketpair)rP   rQ   rR   r   r  r   r   r   rL  r+  r,  r-  r/  r  r   r3  r4  r5  r   r   r   r   r)  Q  s    	

r)  r  zSOCK_NONBLOCK not definedc                   @   s,   e Zd ZdddZeddddd	 Zd
S )NonblockConstantTestTr2  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   r8   r  rH  r   r4  r  r5  r  r3  )rI   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 sw   Y  t d t   }| j|dd W d    n1 sw   Y  t d  t   }| |d W d    n1 sw   Y  t | d S )NTF)r7  g       @r  r2  )	r   rC   r8   r  r8  r  r  r;   r<   )rI   r"   tr   r   r   test_SOCK_NONBLOCK  sD   















z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr2  )rP   rQ   rR   r8  r   rL  r:  r   r   r   r   r6    s    
r6  rt  ru  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 r4   )r   r   	fromsharer   rE  r    )r  qZsdatamessager"   r  rH  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>qD|| q6|	  d|}| || |  d S )Nr  r_   s
   slapmahfroTr  rP  )multiprocessingr   Processr?  r  rD   sharepidr   r    r   r   r  r   r7  r<  r   )	rI   r=  r\  r  r   r>  r"   mreceivedr   r   r   	testShare  s*   







zTestSocketSharing.testSharec                 C   s@   | j t }| ttj|d d  | ttj|d  d S )Nr  rd  )rD   rC  r  getpidr_  r  r   r<  )rI   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  rV  r)  rW  )rI   Zorgotherr   r   r   compareSockets  s   
z TestSocketSharing.compareSocketsc                 C   sB   | j t }t|}z| | j | W |  d S |  w r4   )rD   rC  r  rH  r   r<  rK  r    )rI   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 r4   )r   rC   r   r8   r%   r   rC  r  rH  r<  rK  r    )rI   familiestypesr   r9  sourcer  Zsharedr   r   r   	testTypes%  s$   
zTestSocketSharing.testTypesN)
rP   rQ   rR   r  r?  rG  rI  rK  rL  rP  r   r   r   r   r;    s    
#r;  c                   @   s   e Zd Z	 dZdZdZejZe	dd Z
e	dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z d2d3 Z!d4d5 Z"d6d7 Z#d8d9 Z$d:S );SendfileUsingSendTesti   rx   rP  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 r4   r   )totalstepr   r   r   chunksE  s   
z0SendfileUsingSendTest.setUpClass.<locals>.chunksrP  c                 S   s   g | ]
}t tj qS r   )randomchoicestringascii_lettersr6  rP  r   r   r   r5  M  s    z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>ra  r   )
r<  rk  BUFSIZEr   r   r  FILESIZEr5  rR  FILEDATA)r  rT  chunkr   Zcsizer   r   r   
setUpClassC  s   
"z SendfileUsingSendTest.setUpClassc                 C   s   t t j d S r4   )r   r  r  )r  r   r   r   tearDownClassV  r  z#SendfileUsingSendTest.tearDownClassc                 C   s8   | j tj | j  \}}|| j | |j |S r4   )rD   r  r   rI  r   TIMEOUTre   r    r   r   r   r   accept_connZ  s
   z!SendfileUsingSendTest.accept_connc                 C   s.   g }	 | | j}|sq|| qd|S )NTrP  )r   rY  r7  r<  )rI   r   rF  r\  r   r   r   	recv_dataa  s   

zSendfileUsingSendTest.recv_datac                 C   
   t |dS )N_sendfile_use_sendr   r  r   r   r   meth_from_sockj  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   rD   r   r   r   r  r   r  re  r   rZ  tellrI   r  filer	  methsentr   r   r   _testRegularFileq  s   

Pz&SendfileUsingSendTest._testRegularFilec                 C   6   |   }| |}| t|| j | || j d S r4   r`  ra  r   r+  rZ  r[  rI   r   r  r   r   r   testRegularFilez     
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 r4   )rD   r   ioBytesIOr[  r   r  r  r   rZ  rg  r_  r  r  )rI   r  ri  r	  rk  r   r   r   _testNonRegularFile  s   

Pz)SendfileUsingSendTest._testNonRegularFilec                 C   rm  r4   rn  ro  r   r   r   testNonRegularFile  rq  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2ra  r   r   )rD   r   r   r  r   re   r  r   r  re  r   rg  )rI   r  filenameri  r	  rj  rk  r   r   r   _testEmptyFileSend  s   



Pz(SendfileUsingSendTest._testEmptyFileSendc                 C   s"   |   }| |}| |d d S rf  )r`  ra  r   ro  r   r   r   testEmptyFileSend  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     )offsetrf  rh  r   r   r   _testOffset  s   

Pz!SendfileUsingSendTest._testOffsetc                 C   sB   |   }| |}| t|| jd  | || jdd   d S )Nrz  rn  ro  r   r   r   
testOffset  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  rD   r   r   r   r  r   r  r   r  re  r   rg  rI   r  ri  r	  r  rj  rk  r   r   r   
_testCount     

Pz SendfileUsingSendTest._testCountc                 C   @   d}|   }| |}| t|| | || jd |  d S )Nr  r`  ra  r   r+  r[  rI   r  r   r  r   r   r   	testCount  
   
zSendfileUsingSendTest.testCountc              	   C   r~  )Nr   r  r   r  r  r  r   r   r   _testCountSmall  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  )
rD   r   r   r   r  r   r  re  r   rg  r  r   r   r   _testCountWithOffset  s   

Pz*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)rD   r   r   r   r  r   r  r  re  r_  r  r  rI   r  ri  r	  rj  r   r   r   _testNonBlocking  s   


Pz&SendfileUsingSendTest._testNonBlockingc                 C   s$   |   }|dr| d d S d S )Nrx   z$was not supposed to receive any data)r`  r   r[  rI   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  )rD   r   r   r   r  r   r  r   r  re  r   rZ  rh  r   r   r   _testWithTimeout  s   

Pz&SendfileUsingSendTest._testWithTimeoutc                 C   rm  r4   rn  ro  r   r   r   testWithTimeout  rq  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{Gz?)rD   r   r   r   r  r   r  r  re  r_  rG  r  r   r   r   _testWithTimeoutTriggeredSend  s   


"z3SendfileUsingSendTest._testWithTimeoutTriggeredSendc                 C   s   |   }|d d S )NiX )r`  r   r  r   r   r   testWithTimeoutTriggeredSend  s   z2SendfileUsingSendTest.testWithTimeoutTriggeredSendc                 C   r   r4   r   rH   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 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r&  r8   r   rd  zbinary modezpositive integerrv  r  r   r   r  )	r   r   r  r   r%   re  ri  r  r   )rI   ri  r"   rj  r   r   r   test_errors(  sJ   




"z!SendfileUsingSendTest.test_errorsN)%rP   rQ   rR   rZ  rY  r[  r   r  r_  r  r]  r^  r`  ra  re  rl  rp  rt  ru  rx  ry  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rQ  9  sF    

		
			
		
rQ  r  z%os.sendfile() required for this test.c                   @   r  )SendfileUsingSendfileTestc                 C   rb  )Nr  rd  r  r   r   r   re  F  r  z(SendfileUsingSendfileTest.meth_from_sockN)rP   rQ   rR   re  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   r0   r-   rp   r  r    r   ZSkipTestr?  )rI   typr4  r	  r   r   r   r   
create_algM  s   zLinuxKernelCryptoAPI.create_algrf  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 sw   Y  d S )
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adhashZsha256s   abcr     a   b   crP  )
r  fromhexr  r   rE  r   r   r   r   MSG_MORErI   rX  algoopr   r   r   r   test_sha256Z  s$   


"z LinuxKernelCryptoAPI.test_sha256c              	   C   s   t d}| dd@}|tjtjd | \}}| |d | 	|
d| W d    n1 s6w   Y  W d    d S W d    d S 1 sNw   Y  d S )NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79r  z
hmac(sha1)s   Jefes   what do ya want for nothing?r  )r  r  r  r  r   SOL_ALGALG_SET_KEYr   rE  r   r   r  r   r   r   test_hmac_sha1l  s   

"z#LinuxKernelCryptoAPI.test_hmac_sha1rE  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 sw   Y  | t|||	  | |d | | | \}}| |j	|gtj|d |||	 }W d    n1 sw   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  rE  r   r   ALG_OP_DECRYPT)rI   keyr  r   Z
ciphertextZmsglenr  r  r   Z
multiplierZlongmsgencZdecr   r   r   test_aes_cbcw  sV   





$z!LinuxKernelCryptoAPI.test_aes_cbcr   c                 C   s.  t d}t d}t d}t d}t d}t d}t|}t|}| dd_}	|	tjtj| |	tjtjd | |		 \}
}|
@ |
j
tj||tjd	 |
|tj |
| |
|t| | }| ||||   | ||| d   W d    n1 sw   Y  |		 \}
}|
8 || }|
j
|gtj||d
 |
|t| | }| ||||   | ||| d   W d    n1 sw   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 s:w   Y  |		 \}
}|
, || | }|
j
|gtj||d
 |
t|| }| |||d   W d    n1 sww   Y  W d    d S W d    d S 1 sw   Y  d S )NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r  r  assoclenr'  )r  r  r  r   )r  r  r+  r  r  r   r  r  ZALG_SET_AEAD_AUTHSIZEr   r  r  r  rE  r   r   r   Structr  r  Z
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENr  )rI   r  r  ZplainZassocZexpected_ctZexpected_tagZtaglenr  r  r  r   resr   Zpack_uint32r   r   r   test_aead_aes_gcm  sz   








	 ,$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+  )rI   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 sw   Y  d S )Nr   )r  r   )r  r  r  )r   r0   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tttttttttttttr4  ztype too long)Zttttttttttttttr4  )r)  Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)r)  Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r0   r-   re   r    r_  r  rp   ri  r  r  r   r   r   test_length_restriction  s   "z,LinuxKernelCryptoAPI.test_length_restrictionN)rP   rQ   rR   r  r   rL  r  r  r  r  r  r  r  r   r   r   r   r  J  s    




(

>

r  rx  ry  c                   @   rU   )TestMacOSTCPFlagsc                 C   s   |  tj d S r4   )rH  r   TCP_KEEPALIVErH   r   r   r   test_tcp_keepalive  r  z$TestMacOSTCPFlags.test_tcp_keepaliveN)rP   rQ   rR   r  r   r   r   r   r    rW   r  winzrequires Windowsc                   @   s   e Zd Zh dZdd ZdS )TestMSWindowsTCPFlags>   TCP_KEEPINTVLZTCP_KEEPIDLETCP_KEEPCNTTCP_NODELAYTCP_FASTOPEN
TCP_MAXSEGc                    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  r3  r"   r   r   r   r5  $  r6  z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>c                    s   g | ]	}| j vr|qS r   )knownTCPFlagsr  rH   r   r   r5  %  r6  zANew TCP flags were discovered. See bpo-32394 for more information)r  r   r   )rI   Zprovidedunknownr   rH   r   test_new_tcp_flags#  s
   z(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rP   rQ   rR   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 )NrN  r   r   r  r%  )r   r  r   create_serverr   r   r,  r   rI   rF   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 )NrM  r  r   r%  )
r   r  r   rV  rC   r)  r8   r   r,  r   )rI   r	  r"   r   r   r   test_family_and_type8  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  rm  r  r   r(  )rI   r	  r  r   r   r   test_reuse_portA  s   
""z CreateServerTest.test_reuse_portrr  IPV6_V6ONLYz IPV6_V6ONLY option not supportedrz  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_defaultM  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rV  dualstack_ipv6)r   r  r   r   rV  r  r   r   r   test_dualstack_ipv6_familyU  s   
"z+CreateServerTest.test_dualstack_ipv6_familyN)rP   rQ   rR   r  r  r  r   r  r   rG  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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                 C   s
   d | _ d S r4   )r   rH   r   r   r   rJ   a  r  z CreateServerFunctionalTest.setUpc                 C   s    | j d ur| j | j d S d S r4   )r   r<  r=   rH   r   r   r   rM   d  s   
z#CreateServerFunctionalTest.tearDownc                    sJ    fdd}t   |j t j||fd_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   rE  )r	  r   r   r   r1  rI   r   r   runi  s   
"z3CreateServerFunctionalTest.echo_server.<locals>.runr@  )r[   r   r  r=   r  r   r  r   )rI   r	  r  r   r  r   echo_serverh  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%  rd  r   )r   r  r=   r   rE  r   r   )rI   r   rV  r	  r   r   r   echo_clienty  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 )Nrc  rN  )r   r  r   r  r  r  rC   r  r   r   r   	test_tcp4  s
   
"z$CreateServerFunctionalTest.test_tcp4rz  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 )Nrc  r%  r  r   r  r   r  r   r  r  r  r   r   r   	test_tcp6  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 )Nrc  Tr  rN  )r   r  r   r  r   r  r  rC   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 )Nrc  Tr  r  r  r  r   r   r   test_dual_stack_client_v6  r  z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rP   rQ   rR   r   r  r=   rJ   rM   r  r  r  r   r  r   r,  r  r  r   r  r  r  r   r   r   r   r  ^  s&    
	r  send_fdsrecv_fdsc                   @   rU   )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|  qt|D ]\}}t|d}| 
|t|  qd S )Nc                 S   s&   | D ]\}}t | t | qd S r4   r  r    )pipesr_  fd2r   r   r   close_pipes  s   
z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipesc                 S   s   | D ]}t | qd S r4   r  )r8  r  r   r   r   	close_fds  s   z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdsc                 S   rO  r   )r  pipe)r3  r   r   r   r   r5        z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r  c                 S   s   g | ]\}}|qS r   r   )r3  rfdwfdr   r   r   r5    r  r   r   r  )rk  re   r   r   r  r8   r  r   r  r+  r   r:  r  r5  r?  r6  rR  )rI   r  r  r  r8  Zsock1Zsock2r   Zfds2r'  r   r  r  r  r  r   r   r   testSendAndRecvFds  s.   & z#SendRecvFdsTests.testSendAndRecvFdsN)rP   rQ   rR   r  r   r   r   r   r    r  r  c                  C   sx  t ttttttttt	t
tg} | ttttttttttttttg | t | t | t | tt g | t!t"g | t#t$g | t% | t& | t't(g | t) | g t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=t>t?t@tAtBtCtDtEtFtGtHtItJ | tK | tL tMN }tOjP|   tMjQ|  d S r4   )RrF  r>  r"  r  r  r  r  re  r  r  r  r  extendr0  rM  r  r  r  r  r  r  r  r  r  r  r)  r6  r7  r)  r  r  r  r  r  r  r  r
  r  r!  r.  r   r4  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;  rQ  r  r  r  r   Zthreading_setupr   Zrun_unittestZthreading_cleanup)Zteststhread_infor   r   r   	test_main  s   





	
 !"
$

r  __main__)r   testr   Ztest.supportr   r   r   r  rr  r  r   r  r   r   r  r   r  r  r  r  r  weakrefr   rB  r;  rl  r   rU  r  rW  _threadr   r[   rA  r  r   r   r6  r   r   systemr	   rG  r   r#   r'   r)   r.   r1   r3   r6   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,  rG  r   rB   rS   rV   rX   ri   rw   ry   r   r   r  r   r   r   r  r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r!  r1  r>  rE  rF  r  r  r  r   r  r
  r!  r.  r4  r>  re  ru  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r3  r  r  r  r  r  r  r,  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r"  r)  r0  rM  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)  r6  r4  r;  rQ  r  r  r  r  r  r  r  r  r  rP   r   r   r   r   <module>   sf   







	

3u!$	
        
b
S
Z
*
=
>.%{7ww= #P;  k   7



	







	





















 )7# ! $l


	?G9)ES',C<e  	 D3
F
'O
