Your IP : 216.73.216.85


Current Path : /opt/alt/python38/lib64/python3.8/test/__pycache__/
Upload File :
Current File : //opt/alt/python38/lib64/python3.8/test/__pycache__/test_socket.cpython-38.opt-2.pyc

U

i�f��
@s�
ddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZddlZddlZddlZzddlZWnek
r�dZYnXzddlZWnek
�r$dZYnXej Z d�!d�Z"dZ#dZ$e�%�d	kZ&zddl'Z'Wnek
�rpdZ'YnXd
d�Z(dd
�Z)dd�Z*dd�Z+dd�Z,dd�Z-dd�Z.ej/dd��Z0e)�Z1e*�Z2e+�Z3e,�Z4e-�Z5e.�Z6e�d�j7Z8Gdd�dej9�Z:Gdd�dej9�Z;Gdd �d ej9�Z<Gd!d"�d"ej9�Z=Gd#d$�d$ej9�Z>Gd%d&�d&�Z?Gd'd(�d(e:e?�Z@Gd)d*�d*e;e?�ZAGd+d,�d,e=e?�ZBGd-d.�d.e>e?�ZCe�Dedkd/�e�Ee6d0�e�Ee(�d1kd2�Gd3d4�d4ej9e?����ZFGd5d6�d6e@�ZGGd7d8�d8ej9e?�ZHGd9d:�d:ej9�ZIGd;d<�d<eI�ZJGd=d>�d>e<eIe?�ZKGd?d@�d@eJeK�ZLGdAdB�dBeI�ZMGdCdD�dDeM�ZNGdEdF�dFeI�ZOGdGdH�dHeO�ZPGdIdJ�dJeO�ZQGdKdL�dLeO�ZRGdMdN�dNeO�ZSGdOdP�dPeS�ZTdQdR�ZUdSdT�ZVdUdV�ZWGdWdX�dXej9�ZXe�Ee1dY�GdZd[�d[ej9��ZYe�Ee1dY�Gd\d]�d]eB��ZZe�Ee2d^�Gd_d`�d`ej9��Z[e�Ee3da�Gdbdc�dcej9��Z\e�Ee3da�Gddde�deeC��Z]e�Ee5df�Gdgdh�dhej9��Z^e�Dedkd/�e�Ee6d0�Gdidj�djej9���Z_Gdkdl�dleG�Z`Gdmdn�dneA�ZaGdodp�dpe<�ZbGdqdr�dreb�ZcGdsdt�dteb�ZdGdudv�dveb�ZeGdwdx�dxeb�ZfGdydz�dzeb�ZgGd{d|�d|eb�ZhGd}d~�d~eh�ZiGdd��d�ei�ZjGd�d��d�ei�ZkGd�d��d�eb�ZlGd�d��d�el�ZmGd�d��d�el�ZnGd�d��d�ecel�ZoGd�d��d�ej9�ZpGd�d��d�eh�ZqGd�d��d�eh�ZrGd�d��d�edefeKeQ�ZseVejd��Gd�d��d�ekes��ZteVejd��Gd�d��d�enes��ZueVejd��Gd�d��d�eoes��ZvGd�d��d�edefeKeT�ZweVejd��e�Eejxd��eWd�d��Gd�d��d�ekew����ZyeVejd��e�Eejxd��eWd�d��Gd�d��d�enew����ZzeVejd��e�Eejxd��eWd�d��Gd�d��d�eoew����Z{eVejd��e�Eejxd��eVed��eWd�d��Gd�d��d�erew�����Z|eVejd��e�Eejxd��eVed��eWd�d��Gd�d��d�ecerew�����Z}Gd�d��d�egeLeP�Z~eVejd��Gd�d��d�eje~��ZeVejd��Gd�d��d�eneme~��Z�eVejd��Gd�d��d�eoeme~��Z�Gd�d��d�eeegeLeR�Z�eVejd��e�De&d��eWd�d�d��Gd�d��d�eje�����Z�eVejd��e�De&d��eWd�d�d��Gd�d��d�eneme�����Z�eVejd��e�De&d��eWd�d�d��Gd�d��d�eoeme�����Z�Gd�d��d�egeLeN�Z�eVejd��eVedƒGd�dĄd�eje����Z�eVejd��eVedƒGd�dƄd�eneme����Z�eVejd��eVedƒGd�dȄd�eoeme����Z�eVejd�d��eVed�d�dʃGd�d̄d�eqe����Z�eVejd�d��eVed�d�dʃGd�d΄d�eceqe����Z�Gd�dЄd�ej9�Z�eVedуe�Ee�ed҃�	p�e�edӃdԡGd�dքd�e�eQ���Z�eVedуe�Ee�ed҃�
p4e�edӃdԡGd�d؄d�e�e<eJeP���Z�Gd�dڄd�e@�Z�Gd�d܄d�eH�Z�Gd�dބd�eH�Z�Gd�d�d�e@�Z�Gd�d�d�eG�Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e�e`�Z�Gd�d�d�ej9�Z�Gd�d��d�e:e?�Z�Gd�d��d�e:e?�Z�Gd�d��d�e:�Z�Gd�d��d�e;�Z�Gd�d��d�ej9�Z�e�Eejd�k�d�G�d�d��dej9��Z�e�Ee�edƒ�d�G�d�d��dej9��Z�G�d�d��deG�Z��dZ��d	Z��d
Z��d�d�Z�e�Ee���d
�G�d�d��dej9��Z�e�Ee���d
�G�d�d��dej9e?��Z�G�d�d��de@�Z�G�d�d��dej9�Z�e�Ee�e�d��d�G�d�d��dej9��Z�e�Ee
j��dk�d�e�Ee�d�G�d�d��de:���Z�G�d�d ��d e@�Z�e�Ee�e
�d!��d"�G�d#�d$��d$e���Z�e�Ee4�d%�G�d&�d'��d'ej9��Z�e�Eej���d(��d)�G�d*�d+��d+ej9��Z�G�d,�d-��d-ej9�Z�G�d.�d/��d/ej9�Z��d0�d1�Z�e��d2k�
r�e��dS(3�N)�support)�proxyFuMichael Gilfix was hereሴ
�utf-8gN@���AIXc	CsptdkrdSttd�sdSz*tdd��}t�|tjd�}W5QRXWntk
rZYdSXt�d|�dSdS)N�IOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsock�rbz    �Ir)	�fcntl�hasattr�socket�open�ioctlr�OSError�struct�unpack)�f�r�r�5/opt/alt/python38/lib64/python3.8/test/test_socket.py�get_cid2s
rc	Cs@zt�tjtjtj�}Wnttfk
r2YdSX|��dS�NFT)r�PF_CAN�SOCK_RAW�CAN_RAW�AttributeErrorr�close��srrr�_have_socket_can?src	Cs@zt�tjtjtj�}Wnttfk
r2YdSX|��dSr)rr�
SOCK_DGRAM�	CAN_ISOTPrrrrrrr�_have_socket_can_isotpIsr"c	Cs>zt�tjtjd�}Wnttfk
r0YdSX|��dS�NrFT)r�PF_RDS�SOCK_SEQPACKETrrrrrrr�_have_socket_rdsSsr&c	Cs>zt�tjtjd�}Wnttfk
r0YdSX|��dSr#)r�AF_ALGr%rrrrrrr�_have_socket_alg]sr(c	Cs>zt�tjtjd�}Wnttfk
r0YdSX|��dSr#)r�
AF_QIPCRTRr rrrrrrr�_have_socket_qipcrtrgsr*cCst�dk	}|S�N)r)�retrrr�_have_socket_vsockqs
r-c	cs.t��}zt�|�dVW5t�|�XdSr+)r�getdefaulttimeout�setdefaulttimeout)�timeoutZold_timeoutrrr�socket_setdefaulttimeoutws


r1�ic@seZdZdd�Zdd�ZdS)�
SocketTCPTestcCs.t�tjtj�|_t�|j�|_|j��dSr+)r�AF_INET�SOCK_STREAM�servr�	bind_port�port�listen��selfrrr�setUp�szSocketTCPTest.setUpcCs|j��d|_dSr+�r6rr:rrr�tearDown�s
zSocketTCPTest.tearDownN��__name__�
__module__�__qualname__r<r>rrrrr3�sr3c@seZdZdd�Zdd�ZdS)�
SocketUDPTestcCs$t�tjtj�|_t�|j�|_dSr+)rr4r r6rr7r8r:rrrr<�szSocketUDPTest.setUpcCs|j��d|_dSr+r=r:rrrr>�s
zSocketUDPTest.tearDownNr?rrrrrC�srCcs4eZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)�ThreadSafeCleanupTestCasecst�j||�t��|_dSr+)�super�__init__�	threading�RLock�
_cleanup_lock�r;�args�kwargs��	__class__rrrF�sz"ThreadSafeCleanupTestCase.__init__c
s,|j�t�j||�W5QR�SQRXdSr+)rIrE�
addCleanuprJrMrrrO�sz$ThreadSafeCleanupTestCase.addCleanupc
s,|j�t�j||�W5QR�SQRXdSr+)rIrE�
doCleanupsrJrMrrrP�sz$ThreadSafeCleanupTestCase.doCleanups)r@rArBrFrOrP�
__classcell__rrrMrrD�srDc@sDeZdZdZdZdZe�e�ZdZ	e	de�e	�d7Z	dd�Z
d	S)
�
SocketCANTest�vcan0�z=IB3x8sz@3I4l2I�x�cCsbt�tjtjtj�|_|�|jj�z|j�|jf�Wn$t	k
r\|�
d|j�YnXdS)N�%network interface `%s` does not exist)rrrrrrOr�bind�	interfacer�skipTestr:rrrr<�s�zSocketCANTest.setUpN)r@rArBrY�bufsize�
can_frame_fmtrZcalcsizeZcan_frame_size�bcm_cmd_msg_fmtr<rrrrrR�s

rRc@seZdZdZdd�ZdS)�
SocketRDSTest� cCsXt�tjtjd�|_|�|jj�zt�|j�|_Wnt	k
rR|�
d�YnXdS)Nrzunable to bind RDS socket)rr$r%r6rOrrr7r8rrZr:rrrr<�szSocketRDSTest.setUpN)r@rArBr[r<rrrrr^�sr^c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ThreadableTestcCs$|j|_|j|_|j|_|j|_dSr+)r<�_ThreadableTest__setUpr>�_ThreadableTest__tearDown�_setUp�	_tearDownr:rrrrF!szThreadableTest.__init__cCs|j��dSr+)�server_ready�setr:rrr�serverExplicitReady(sz"ThreadableTest.serverExplicitReadycCs�t��|_|j��t��|_t��|_t��|_t	�
d�|_	d|_|��}|�
d�}||dd�}t|d|�}t�|j|f�|_z&z|��Wnd|_�YnXW5|j��X|j��dS)N�F�.�_T)rZwait_threads_exit�wait_threads�	__enter__rG�Eventre�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadrfra�wait)r;Z
methodnamer2Ztest_methodrrrrc/s,





�zThreadableTest._setUpcCs>|��|j��|j�ddd�|j��r:|j��}|�dSr+)rbroryrk�__exit__rpZqsize�get�r;�excrrrrdJs


zThreadableTest._tearDownc
Cs�|j��zRz|��Wn@tk
rX}z"|j�|�|��WY�W�dSd}~XYnXW5|j��X|j	r||��dSt
|d�s�td��z>z
|�Wn.tk
r�}z|j�|�W5d}~XYnXW5|��XdS)N�__call__z%test_func must be a callable function)reryrnrf�clientSetUp�
BaseExceptionrp�put�clientTearDownrrr�	TypeError)r;Z	test_func�errrrxSs$
 

"zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedErrorr:rrrriszThreadableTest.clientSetUpcCs|j��t��dSr+)rorfrv�exitr:rrrr�ls
zThreadableTest.clientTearDownN)
r@rArBrFrgrcrdrxrr�rrrrr`�s&	r`c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcCstj||d�t�|�dS�N)�
methodName�r3rFr`�r;r�rrrrFrszThreadedTCPSocketTest.__init__cCst�tjtj�|_dSr+)rr4r5�clir:rrrrvsz!ThreadedTCPSocketTest.clientSetUpcCs|j��d|_t�|�dSr+�r�rr`r�r:rrrr�ys
z$ThreadedTCPSocketTest.clientTearDownN)r��r@rArBrFrr�rrrrr�ps
r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPSocketTestr�cCstj||d�t�|�dSr�)rCrFr`r�rrrrF�szThreadedUDPSocketTest.__init__cCst�tjtj�|_dSr+)rr4r r�r:rrrr�sz!ThreadedUDPSocketTest.clientSetUpcCs|j��d|_t�|�dSr+r�r:rrrr��s
z$ThreadedUDPSocketTest.clientTearDownN)r�r�rrrrr�~s
r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedCANSocketTestr�cCstj||d�t�|�dSr�)rRrFr`r�rrrrF�szThreadedCANSocketTest.__init__cCsDt�tjtjtj�|_z|j�|jf�Wntk
r>YnXdSr+)rrrrr�rXrYrr:rrrr�s
z!ThreadedCANSocketTest.clientSetUpcCs|j��d|_t�|�dSr+r�r:rrrr��s
z$ThreadedCANSocketTest.clientTearDownN)r�r�rrrrr��s
	r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedRDSSocketTestr�cCstj||d�t�|�dSr�)r^rFr`r�rrrrF�szThreadedRDSSocketTest.__init__cCsNt�tjtjd�|_z |j�tdf�|j��|_Wntk
rHYnXdS�Nr)	rr$r%r�rX�HOST�getsockname�cli_addrrr:rrrr�sz!ThreadedRDSSocketTest.clientSetUpcCs|j��d|_t�|�dSr+r�r:rrrr��s
z$ThreadedRDSSocketTest.clientTearDownN)r�r�rrrrr��s
r��
need fcntlz%VSOCK sockets required for this test.�z-This test can only be run on a virtual guest.c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�ThreadedVSOCKSocketStreamTestr�cCstjj||d�t�|�dSr���unittest�TestCaserFr`r�rrrrF�sz&ThreadedVSOCKSocketStreamTest.__init__cCsht�tjtj�|_|�|jj�|j�tjtf�|j�	�|�
�|j��\|_|_
|�|jj�dSr+)r�AF_VSOCKr5r6rOrrX�VMADDR_CID_ANY�	VSOCKPORTr9rg�accept�conn�connaddrr:rrrr<�s
z#ThreadedVSOCKSocketStreamTest.setUpcCsDt�d�t�tjtj�|_|�|jj�t�}|j�	|t
f�dS)N皙�����?)�time�sleeprr�r5r�rOrr�connectr�)r;Zcidrrrr�s

z)ThreadedVSOCKSocketStreamTest.clientSetUpcCs|j�d�}|�|t�dS�N�)r��recv�assertEqual�MSG�r;�msgrrr�
testStream�sz(ThreadedVSOCKSocketStreamTest.testStreamcCs|j�t�|j��dSr+�r��sendr�rr:rrr�_testStream�sz)ThreadedVSOCKSocketStreamTest._testStreamN)r��r@rArBrFr<rr�r�rrrrr��s

	r�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketConnectedTestr�cCstj||d�dSr�)r�rFr�rrrrF�szSocketConnectedTest.__init__cCs*t�|�|��|j��\}}||_dSr+)r�r<rgr6r��cli_conn�r;r��addrrrrr<�s
zSocketConnectedTest.setUpcCs|j��d|_t�|�dSr+)r�rr�r>r:rrrr>�s
zSocketConnectedTest.tearDowncCs(t�|�|j�t|jf�|j|_dSr+)r�rr�r�r�r8�	serv_connr:rrrr�s
zSocketConnectedTest.clientSetUpcCs|j��d|_t�|�dSr+)r�rr�r�r:rrrr��s
z"SocketConnectedTest.clientTearDownN)r�)r@rArBrFr<r>rr�rrrrr��s

r�c@s>eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�SocketPairTestr�cCs*tjj||d�t�|�d|_d|_dSr�)r�r�rFr`r�r6r�rrrrF�s
zSocketPairTest.__init__cCst��Sr+)r�
socketpairr:rrrr�szSocketPairTest.socketpaircCs|��\|_|_dSr+)r�r6r�r:rrrr<szSocketPairTest.setUpcCs|jr|j��d|_dSr+r=r:rrrr>	s
zSocketPairTest.tearDowncCsdSr+rr:rrrrszSocketPairTest.clientSetUpcCs$|jr|j��d|_t�|�dSr+r�r:rrrr�s
zSocketPairTest.clientTearDownN)r�)	r@rArBrFr�r<r>rr�rrrrr��s
r�c@s$eZdZdd�Zdd�Zdd�ZdS)�SocketTestBasecCs|��|_|��dSr+)�	newSocketr6�
bindServerr:rrrr<'s
zSocketTestBase.setUpcCs|�|j�|j��|_dSr+)�bindSockr6r��	serv_addrr:rrrr�+szSocketTestBase.bindServercCs|j��d|_dSr+r=r:rrrr>0s
zSocketTestBase.tearDownN)r@rArBr<r�r>rrrrr�s	r�cseZdZ�fdd�Z�ZS)�SocketListeningTestMixincst���|j��dSr+)rEr<r6r9r:rMrrr<8s
zSocketListeningTestMixin.setUp�r@rArBr<rQrrrMrr�5sr�cs<eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�ZS)�ThreadedSocketTestMixincst�j||�t�|�dSr+)rErFr`rJrMrrrFEsz ThreadedSocketTestMixin.__init__cCs|��|_|��dSr+)�newClientSocketr��
bindClientr:rrrrIs
z#ThreadedSocketTestMixin.clientSetUpcCs|��Sr+)r�r:rrrr�Msz'ThreadedSocketTestMixin.newClientSocketcCs|�|j�|j��|_dSr+)r�r�r�r�r:rrrr�Qsz"ThreadedSocketTestMixin.bindClientcCs|j��d|_t�|�dSr+r�r:rrrr�Vs
z&ThreadedSocketTestMixin.clientTearDown)	r@rArBrFrr�r�r�rQrrrMrr�=s
r�cs@eZdZ�fdd�Z�fdd�Z�fdd�Z�fdd�Z�ZS)	�ConnectedStreamTestMixincs*t���|��|j��\}}||_dSr+)rEr<rgr6r�r�r�rMrrr<es
zConnectedStreamTestMixin.setUpcs|j��d|_t���dSr+)r�rrEr>r:rMrrr>ms
z!ConnectedStreamTestMixin.tearDowncs$t���|j�|j�|j|_dSr+)rErr�r�r�r�r:rMrrrrs
z$ConnectedStreamTestMixin.clientSetUpcs8z|j��d|_Wntk
r(YnXt���dSr+)r�rrrEr�r:rMrrr�ws

z'ConnectedStreamTestMixin.clientTearDown)r@rArBr<r>rr�rQrrrMrr�\s	r�cs$eZdZ�fdd�Zdd�Z�ZS)�UnixSocketTestBasecs(t��|_|�tj|j�t���dSr+)�tempfile�mkdtemp�dir_pathrO�os�rmdirrEr<r:rMrrr<�s
zUnixSocketTestBase.setUpcCs,tj|jd�}t�||�|�tj|�dS)N)�dir)r�Zmktempr�r�bind_unix_socketrO�unlink)r;�sock�pathrrrr��szUnixSocketTestBase.bindSock)r@rArBr<r�rQrrrMrr��sr�c@seZdZdd�ZdS)�UnixStreamBasecCst�tjtj�Sr+)r�AF_UNIXr5r:rrrr��szUnixStreamBase.newSocketN�r@rArBr�rrrrr��sr�cs(eZdZeZ�fdd�Zdd�Z�ZS)�InetTestBasecst���|jd|_dS�Nrh)rEr<r�r8r:rMrrr<�s
zInetTestBase.setUpcCstj||jd�dS)N��host)rr7r��r;r�rrrr��szInetTestBase.bindSock)r@rArBr�r�r<r�rQrrrMrr��sr�c@seZdZdd�ZdS)�TCPTestBasecCst�tjtj�Sr+)rr4r5r:rrrr��szTCPTestBase.newSocketNr�rrrrr��sr�c@seZdZdd�ZdS)�UDPTestBasecCst�tjtj�Sr+)rr4r r:rrrr��szUDPTestBase.newSocketNr�rrrrr��sr�c@seZdZdd�ZdS)�SCTPStreamBasecCst�tjtjtj�Sr+)rr4r5�IPPROTO_SCTPr:rrrr��s�zSCTPStreamBase.newSocketNr�rrrrr��sr�c@seZdZejZdS)�
Inet6TestBaseN)r@rArBr�HOSTv6r�rrrrr��sr�c@seZdZdd�ZdS)�UDP6TestBasecCst�tjtj�Sr+)r�AF_INET6r r:rrrr��szUDP6TestBase.newSocketNr�rrrrr��sr�cs*dd����fdd�}dd�}|r&|S|S)Nc_sdSr+r�rKrLrrr�client_pass�sz%skipWithClientIf.<locals>.client_passcs*t���|�}t|t�s&�fdd�|_|S)Ncs�Sr+r�r)r�rr�<lambda>��z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)r��skip�
isinstance�type�client_skip)�objZretval�r��reasonrr�skipdec�s
z!skipWithClientIf.<locals>.skipdeccSs"t|t�st|d�sdd�|_|S)Nr�cSs|Sr+rr�rrrr��r�z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�rr��r�rrr�	noskipdec�s
z#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�rr�r�skipWithClientIf�s	r�cs0�fdd�|D�}t|dd�dd�|D���S)Ncsg|]}t�|�s|�qSr)r��.0�namer�rr�
<listcomp>�s
z requireAttrs.<locals>.<listcomp>�don't have �, css|]
}|VqdSr+rr�rrr�	<genexpr>�szrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingrr�r�requireAttrs�s
�r�c
Gs�d}dd�|D�}|r0dd�dd�|D��}nPdd�|D�}ztj|�}Wn*tk
rv}zt|�}W5d}~XYn
X|��t|dk	d�d�d	d�|D��|��S)
NcSs$g|]}t|t�rtt|�s|�qSr)r��strrr�r�r�rrrr��s

�z!requireSocket.<locals>.<listcomp>r�r�css|]
}|VqdSr+rr�rrrr��sz requireSocket.<locals>.<genexpr>cSs$g|]}t|t�rtt|�n|�qSr)r�r�rurr�rrrr��s�zcan't create socket({0}): {1}css|]}t|�VqdSr+)r��r��orrrr�s)r�rrr�rr��format)rK�errr�Zcallargsrr�rrr�
requireSocket�s&���rc@sHeZdZdd�Zdd�Ze�edk	d�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
e�ejdkd�dd��Zdd�Zdd�Zdd�Ze�eed�d�e�eed�d �d!d"���Ze�eed#�d$�d%d&��Ze�eed'�d(�d)d*��Ze�eed+�d,�d-d.��Ze�eed/�d0�d1d2��Zd3d4�Zd5d6�Zejd7d8��Z d9d:�Z!d;d<�Z"e�eed=�d>�d?d@��Z#e�eedA�dB�dCdD��Z$e�eedA�dB�dEdF��Z%e�eedG�dH�dIdJ��Z&e�eedG�dH�dKdL��Z'dMdN�Z(dOdP�Z)dQdR�Z*dSdT�Z+dUdV�Z,dWdX�Z-dYdZ�Z.e�ejdkd�d[d\��Z/e�ejdkd�e�eed]�d^�d_d`���Z0dadb�Z1dcdd�Z2e�e�3de�df�dgdh��Z4didj�Z5dkdl�Z6dmdn�Z7dodp�Z8dqdr�Z9dsdt�Z:dudv�Z;dwdx�Z<dydz�Z=d{d|�Z>d}d~�Z?ejdd���Z@e�ejAd��d�d���ZBe�ejAd��d�d���ZCe�ejAd��e�DejEd�kd��e�DeFd��d�d�����ZGe�ejAd��e�ejEd�kd��d�d����ZHe�ejAd��e�DejEd�kd��e�DeFd��d�d�����ZIe�ejAd��e�ejEd�kd��d�d����ZJd�d��ZKd�d��ZLd�d��ZMe�eed��d��d�d���ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSe�Dejdkd��d�d���ZTd�d��ZUd�d��ZVdS)��GeneralModuleTestscCs<ddl}|�tj|jk�t��}|�|tj�|��dSr�)�_socket�
assertTruerZ
SocketType�assertIsInstancer)r;rrrrr�test_SocketType_is_socketobject	s
z2GeneralModuleTests.test_SocketType_is_socketobjectc	Cs�t�tjtj�}|��|�d|��t|��|�dtjt|��|�dtjt|��|�dt|��|�dt|��|�d�|�dt|��|�t|�	��t|��W5QRX|�dt|��|�dt|��dS)	Nzfd=%iz	family=%sztype=%szproto=0Zraddr��	127.0.0.1rZladdrz[closed])
rr4r5�assertIn�fileno�repr�assertNotInrXr�r��r;rrrr�	test_reprs
"zGeneralModuleTests.test_reprNzneed _socket modulecCsrt�tjtj�}z.d|��|j|j|jf}|�	t
|�|�W5|��Xd|j|j|jf}|�	t
|�|�dS)Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)rrr4r5rr	�familyr��protor�r
)r;r�expectedrrr�test_csocket_reprs�
�z$GeneralModuleTests.test_csocket_reprc	Cslt�tjtj��"}t|�}|�|��|���W5QRXd}z|��Wntk
r\YnX|�d�dS)NzSocket proxy still exists)rr4r5rr�r	�ReferenceError�fail)r;r�prrr�test_weakref+szGeneralModuleTests.test_weakrefc	Csrd}|jt|dd��
t�W5QRX|jt|dd��tj�W5QRX|jt|dd��tj�W5QRXdS)Nz$Error raising socket exception (%s).r�r�z
socket.herrorzsocket.gaierror)�assertRaisesrr�herror�gaierrorr�rrr�testSocketError7sz"GeneralModuleTests.testSocketErrorc	CsFt�tjtj�}|�|j�|�d�|��}|�t��}|�	d|�W5QRX|�
t|j�d�|�t��}|�	d|�W5QRX|�
t|j�d�|�t��}|�	dd�W5QRX|�
dt|j��|�t��}|�	dd|�W5QRX|�
t|j�d�|�t��}|�	dd|�W5QRX|�
t|j�d�|�t��}|�	ddd�W5QRX|�
dt|j��|�t��}|�	dd	|�W5QRX|�
d
t|j��|�t��}|�	ddd�W5QRX|�
d
t|j��|�t��}|�	d�W5QRX|�
dt|j��|�t��}|�	dd|d�W5QRX|�
d
t|j��dS)N)�ru☠z*a bytes-like object is required, not 'str'y@z.a bytes-like object is required, not 'complex'�fooznot NoneTyper�barzan integer is requiredz	(1 given)�z	(4 given))rr4r rOrrXr�rr��sendtor�r��	exceptionr)r;r�sockname�cmrrr�testSendtoErrorsAsT
����z#GeneralModuleTests.testSendtoErrorscCs@tjtjrtjtjtjtjtjtjtj	tj
dSr+)rr4�has_ipv6r�r5r r�SOCK_RDMr%�
SOL_SOCKET�SO_REUSEADDRr:rrr�testCrucialConstantsmsz'GeneralModuleTests.testCrucialConstantscCstjtjtjrtjdSr+)rZIPPROTO_TCP�IPPROTO_UDPr$�IPPROTO_IPV6r:rrr�testCrucialIpProtoConstantszsz.GeneralModuleTests.testCrucialIpProtoConstants�nt�Windows specificcCs4tjtjtjtjtjtjtjtjdSr+)	rZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPr�r:rrr�testWindowsSpecificConstants�sz/GeneralModuleTests.testWindowsSpecificConstantscCs�t��}zt�|�}Wntk
r4|�d�YnX|�|�d�dkd�zt�|�\}}}Wntk
r~|�d�YnX||g|}t�|�}||kr�|�	d|t
|�f�dS)N�name lookup failurerirzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r�gethostname�
gethostbynamerrZr�find�
gethostbyaddrZgetfqdnrr
)r;ZhostnameZipZhname�aliasesZipaddrsZall_host_namesZfqhnrrr�testHostnameRes�s
z"GeneralModuleTests.testHostnameRescCsLtjddfD]}|�t�|�|�qtjfD]}|�|t�|�d�q,dS)Nz10.0.0.1�255.255.255.255r�)rZHOSTv4r�rr1rr3)r;r�r�rrr�test_host_resolution�sz'GeneralModuleTests.test_host_resolutionc
CsZd}dD]L}|jt|d��t�|�W5QRX|jt|d��t�|�W5QRXqdS)Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r)rrrr1r3)r;Zexplanationr�rrr� test_host_resolution_bad_address�s�z3GeneralModuleTests.test_host_resolution_bad_address�sethostnameztest needs socket.sethostname()r0ztest needs socket.gethostname()c
Cs�t��}zt�d�Wn<tk
rR}z|jtjkr@|�d�n�W5d}~XYnXz.|�t��d�t�d�|�t��d�W5t�|�XdS)N�newztest should be run as rootsbarr)rr0r9r�errnoZEPERMrZr�)r;Zoldhnr�rrr�test_sethostname�s
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�t��}|D]p\}}|�|t�|�|t�|�|d�t�|�}|�|t�|�||�t�|�}|�|t�|�||�qdSr�)	rr=r�intr��
assertGreater�if_nametoindexr��if_indextoname)r;Z
interfaces�indexr�Z_index�_namerrr�testInterfaceNameIndex�s

z)GeneralModuleTests.testInterfaceNameIndexrAz&socket.if_indextoname() not available.c
Cs�|�ttjd�|�ttjd�|�ttjdd�|�ttjd�ttd�r�tt���}|D]8}|d}||kr^|�ttf��t�|�W5QRXq^dD]0}||kr�|�ttf��t�|�W5QRXq�dS)	Nr���r����	_DEADBEEFr=�)���l����)	rrrrA�
OverflowErrorr�r�dictr=)r;�indicesrBZindex2rrr�testInvalidInterfaceIndexToName�s
z2GeneralModuleTests.testInvalidInterfaceIndexToNamer@z&socket.if_nametoindex() not available.cCs$|�ttjd�|�ttjd�dS)NrrG)rr�rr@rr:rrr�testInvalidInterfaceNameToIndex�sz2GeneralModuleTests.testInvalidInterfaceNameToIndex�getrefcountztest needs sys.getrefcount()cCsLzt�t�}t�td�Wn,tk
rFt�t�|krB|�d�YnXdS)Nrz$socket.getnameinfo loses a reference)�sysrOr@r�getnameinfor�r)r;�origrrr�testRefCountGetNameInfo�s
z*GeneralModuleTests.testRefCountGetNameInfocCs*zt�dd�Wntk
r$YnXdS)N)rUrrrr)rrQrr:rrr�testInterpreterCrash�sz'GeneralModuleTests.testInterpreterCrashc	Cs�tjdtjdtjdtjdi}|��D]d\}}d|>d}dD]$}|�||@||||@��|@�q<||�}|�||@|�|�t|d�q$dS)N� �rh)rrh�i��r�igE#i2Tvl)	r�htonl�ntohl�htons�ntohs�itemsr�rrJ)r;Zsizes�func�size�maskr2Zswappedrrr�testNtoHs�"zGeneralModuleTests.testNtoHcCsddl}ddddg}|dg}ddddd	>g}||jd|jdg}d
|jg}|D]}t�|�t�|�qT|D]}t�|�t�|�qr|D]$}|�t	tj|�|�t	tj|�q�|D]$}|�t	tj|�|�t	tj|�q�|D]$}|�
ttj|�|�
ttj|�q�dS)Nrrhr�rWrIrE���rHrF�)�	_testcapiZINT_MIN�INT_MAXrr[rZrYrXrrJ�assertWarns�DeprecationWarning)r;rcZ
s_good_valuesZ
l_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_values�krrr�testNtoHErrorss.

�


z!GeneralModuleTests.testNtoHErrorsc	Cs&|j}tj�d�stjdkr"d}nd}|D]0}zt�|d�}Wq`Wq*tk
rXYq*Xq*t�ttd�rvt��dkr�t�|�}|||�zt�|d�}Wntk
r�d}YnX|||�t	j
s�|t�|�|�|t�|d�|�|dk	�r|t�|d�|�|�t
tjd	�|�t
tjd
�dS)N)ZfreebsdZnetbsdZgnukfreebsd)�linux�darwin)�daytimeZqotd�domain)ZechorkrlZtcp�getandroidapilevel�ZudprErb)r�rP�platform�
startswithrZ
getservbynamerrrmrZ
is_androidZ
getservbyportrrJ)r;�eqZservicesZservicer8Zport2Zudpportrrr�
testGetServBy.s<�


�




z GeneralModuleTests.testGetServByc
Cs�|�t��d�t���}|�|��d�W5QRXtd��x|�t��d�t���}|�|��d�W5QRXt�d�|�t��d�t���}|�|��d�W5QRXW5QRX|�ttjd�|�ttjd�dS)N�
rEZspam)	r�rr.�
gettimeoutr1r/r�
ValueErrorr�)r;rr�rrr�testDefaultTimeoutZs




$z%GeneralModuleTests.testDefaultTimeout�	inet_atonztest needs socket.inet_aton()cCs(|�dt�d��|�dt�d��dS)N��0.0.0.0�����r6)r�rrwr:rrr�testIPv4_inet_aton_fourbytesssz/GeneralModuleTests.testIPv4_inet_aton_fourbytes�	inet_ptonztest needs socket.inet_pton()cs*ddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
����d|d��ts�||d�||d�||d�||d�||d���d|d����d|d	����d
|d����d|d��||d�||d�||d�||d�||d�dS)Nr)rwr|r4cs
��|�Sr+r��a)r4r|rrr�r�z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>cs��ttf||�Sr+�rrru�r]r~r:rrr��s�rxrys��z255.0.255.0s����z170.170.170.170��1.2.3.4rzr6z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5�::1)rrwr|r4r�r�r;r�g�
assertInvalidr)r4r|r;r�testIPv4toString{s.








z#GeneralModuleTests.testIPv4toStringc
s�z&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�z��d�Wn6tk
r�}z|j	dkr���d�W5d}~XYnX��fd	d
����fdd
�}��
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*�dS)+Nr)r|r�r$�IPv6 not available�+could not import needed symbols from socket�win32�::�&'�IPv6 might not be supportedcs
��|�Sr+rr})r�r|rrr��r�z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>cs��ttf�|�Sr+rr}�rr;rrr��s��z0::0sz1::sE�v�V���$��z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes�B
�'Tzad42:abc::127:0:254:2s
z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:0z1:2:3:4:5:6:7:8:s�*@z::254.42.23.64sB���*@z42::a29b:254.42.23.64sB�������*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)rr|r�r$rZ�ImportErrorrPror�winerrorr�r�r;r$r�r�r)r�rr|r;r�testIPv6toString�sj

�����z#GeneralModuleTests.testIPv6toString�	inet_ntopztest needs socket.inet_ntop()csddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
��||d�||d�||d���d|td	�����d|d����d|d	����d
|d��||d�||d�||d���d|td	���dS)Nr)�	inet_ntoar�r4cs
��|�Sr+rr})r4r�rrr��r�z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs��ttf||�Sr+rr�r:rrr��s�z1.0.1.0sz
170.85.170.85s�U�Ur6rzr�r�ssr�)rr�r�r4r��	bytearrayr�r)r4r�r;r�testStringToIPv4�s$





z#GeneralModuleTests.testStringToIPv4c
sz&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�z��d�Wn6tk
r�}z|j	dkr���d�W5d}~XYnX��fd	d
����fdd
�}��
d�d����
d
�d����
d�d����
d
�td���|d�|d�|d�dS)Nr)r�r�r$r�r�r�r�r�r�cs
��|�Sr+rr})r�r�rrr�r�z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs��ttf�|�Sr+rr}r�rrr�s�r�r�sz!aef:b01:506:1001:ffff:9997:55:170s
�����Upsss)rr�r�r$rZr�rProrr�r�r�r�r)r�rr�r;r�testStringToIPv6�s0

�z#GeneralModuleTests.testStringToIPv6cCs�t��}t�tjtj�}|�|j�|�d|f�|��}zt�	t�
��}Wntk
rj|�d�YnX|�
|dd|fd|d�|�|d|�dS)Nryr/rz
%s invalidrh)r�find_unused_portrr4r5rOrrXr�r1r0rrZrr�)r;r8r�r�Z
my_ip_addrrrr�testSockNameszGeneralModuleTests.testSockNamecCs@t�tjtj�}|�|j�|�tjtj�}|�|dkd�dS)Nrzinitial mode is reuse)	rr4r5rOr�
getsockoptr&r'�assertFalse�r;r�Zreuserrr�testGetSockOpt,sz!GeneralModuleTests.testGetSockOptcCsRt�tjtj�}|�|j�|�tjtjd�|�tjtj�}|�	|dkd�dS)Nrhrzfailed to set reuse mode)
rr4r5rOr�
setsockoptr&r'r�r�r�rrr�testSetSockOpt4s
z!GeneralModuleTests.testSetSockOptc	Cs:t�tjtj��}|�d�W5QRX|�t|jd�dS)Nrh�spam)rr4r5�
settimeoutrrr�r�rrr�testSendAfterClose<sz%GeneralModuleTests.testSendAfterClosec
Cs�t��}|�tjdf�tj|��d���z|��Wn8tk
rp}z|�|jtjtj	f�W5d}~XYnX|�
d�dS)Nr�r	z#close() should raise EBADF/ENOTSOCK)rrXZ
_LOCALHOSTr	rrrr;�EBADF�ENOTSOCKr)r;r�r�rrr�testCloseExceptionBs(z%GeneralModuleTests.testCloseExceptionc	Csvt�tjtj��\}|�|jtj�ttd�rJ|�|jtjtjBtjf�n|�|jtj�|�|j	d�W5QRXdS)N�SOCK_CLOEXECr)
rr4r5r�rrrr�r�rr�rrr�testNewAttributesNs

��z$GeneralModuleTests.testNewAttributescCs�t��}|�|j�t��}|d}|d}|�t|jt|f�|�t|jt|f�t	�
�D]\}t��}z|�t|f�Wn8tk
r�}z|jtj
ks�|dkr��W5d}~XYq\Xq�q\dS)Nrb�)rrOrrr�rrJrXr��	itertools�countrr;Z
EADDRINUSE)r;r�r8Zbig_portZneg_portr2r�rrr�test_getsockaddrarg[sz&GeneralModuleTests.test_getsockaddrargcCs�|�ttjd��|�ttd��|�ttd��|�ttd��|�ttd��t��}|�|j�|�t|jdd�|�tjd�dS)NrZ
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFF�SIO_KEEPALIVE_VALSrE)rh�dr�)	rrrrOrrrurr�rrrr�test_sock_ioctlosz"GeneralModuleTests.test_sock_ioctl�SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc
Cs|t��}|�|j�z|�tjd�Wn<tk
rb}zd}|j|krP|�d��W5d}~XYnX|�t	|jtjd�dS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
rrOrrr�rr�rZrr�)r;rr}Z
WSAEOPNOTSUPPrrr�test_sio_loopback_fast_path{s

z.GeneralModuleTests.test_sio_loopback_fast_pathc

Cs@zt�dd�Wn<tjk
rL}z|jtjkr:|�d��W5d}~XYnXt�td�D]}|�t|�d�qZt�dd�t�dd�t�dd�t	j
r�t�dd�ttd�r�t�
�dkr�t�td	�t�td�t�td�t�tdtjtj�}|D]J\}}}}}|�|tj�|�t|�d
�|�|tj�|�t|�d�q�t�tddtj�}|D]\}}}}}|�|tj��qZt�tdddtj�t�tddddtj�t�ddtjtjdtj�t�td�}tjtdd
�}	|�||	�t�tdtj�}tjtdtjd�}	|�||	�t�tddtj�}tjtdtjd�}	|�||	�t�tdddtj�}tjtdtjd�}	|�||	�t�tddddtj�}tjtdtjd�}	|�||	�t�ddtjtjdtj�}tjddtjtjdtjd�}	|�||	�|�ttjdd�ttd��r<zt�dddddtj�Wntjk
�r:YnXdS)N�	localhost�Pzbuggy libc versionr�rr�rmrnZhttp�AddressFamily.AF_INET�SocketKind.SOCK_STREAMr)r�r8�r�r�)r)�flags)r�r8rr�rr�u��AI_NUMERICSERV)r�getaddrinforr;ZEAI_SERVICErZr�r��lenr�IPV6_ENABLEDrrPrmr4r5r�ZSOL_TCPZ
AI_PASSIVE�	AF_UNSPECr�UnicodeEncodeErrorr�)
r;r��infoZinfosrr�rjZsocktyper~�brrr�testGetaddrinfo�s�


�����z"GeneralModuleTests.testGetaddrinfocCs|�ttjdd�dS)N)zmail.python.orgrr)rrrrQr:rrr�test_getnameinfo�sz#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledc	CsPt�d��t�d�W5QRXd}t�|�t�|�t�|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetrr1Zgethostbyname_exr�r�r5)r;rlrrr�	test_idna�s

zGeneralModuleTests.test_idnac
s�ttd�rttd�s��d��fdd�}�fdd�}t��\}}t�tj|�}zv|r`|�d	���	t
�� t�d
�|�dtj
�W5QRX|r�t�tj|�t�d
���	tj|jdtj
�W5t�d�t�tj|�|��|��XdS)N�alarmr�z9signal.alarm and socket.socketpair required for this testcs��ttjd�dSr��rru�mathZacosh�rKr:rr�
ok_handler�sz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs��ttjd�dddS�Nrrhr�r�r:rr�raising_handler�szEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerrg�?rh�x)r�signalrrZr��SIGALRMr�rr�r�ZeroDivisionError�sendallr�
SOCK_MAX_SIZEr0)r;Zwith_timeoutr�r��cr�	old_alarmrr:r�check_sendall_interrupted�s,



�
z,GeneralModuleTests.check_sendall_interruptedcCs|�d�dS�NF�r�r:rrr�test_sendall_interrupted
sz+GeneralModuleTests.test_sendall_interruptedcCs|�d�dS)NTr�r:rrr�%test_sendall_interrupted_with_timeoutsz8GeneralModuleTests.test_sendall_interrupted_with_timeoutc	Cs�t�tjtj�}t|�}|�t��}d}t��W5QRX|�|t	|j
jd��t�tjtj�}|�d�}t|�}d}t��|�t��d}t��W5QRXdS)Nrr)
rr4r5r
re�ResourceWarningrZ
gc_collectrr�ZwarningrK�makefile)r;r�rr"rrrr�test_dealloc_warns
z$GeneralModuleTests.test_dealloc_warnc	CsBt�tjtj��(}|�d�}|��|�t|�d�W5QRXdS)Nrz<_io.BufferedReader name=-1>)rr4r5r�rr�r
�r;r��fprrr�test_name_closed_socketio$s
z,GeneralModuleTests.test_name_closed_socketioc	Cs�t���p}|jddd�}|�|���|�|���|�|���|��|�t	|j�|�t	|j�|�t	|j�W5QRXdS)Nrr)�	buffering)
rr�r�readabler��writable�seekablerrrur�rrr�test_unusable_closed_socketio*s
z0GeneralModuleTests.test_unusable_closed_socketiocCs�t��}z@|�tdf�t�|���|�t��|�d�W5QRXW5|�t��|��W5QRXX|�t��t�d�W5QRX|�t��t�d�W5QRXdS)NrrhrE)	rrrrrXr�r	r9r�r�rrr�test_socket_close5sz$GeneralModuleTests.test_socket_closecCs^dD]T}|j|d��>t���*}|�|��}|�|j|�W5QRXW5QRXW5QRXqdS)N)rrZrw�w�wb��mode)�subTestrr�r�r�)r;r�r�r�rrr�test_makefile_modeEs

z%GeneralModuleTests.test_makefile_modecCs\dD]R}|j|d��<t���(}|�td��|�|�W5QRXW5QRXW5QRXqdS)N)�rtrU�+r~r�zinvalid mode)r�r�assertRaisesRegexrur�)r;r�r�rrr�test_makefile_invalid_modeLs

z-GeneralModuleTests.test_makefile_invalid_modec	Cs�t��}|�,ttjd�D]}|�ttj||�qW5QRXttjd�D]H}t�t�tj|��}|�	|tj�t�t�tj
|��}|�	|tj
�qLdSr�)r�range�pickleZHIGHEST_PROTOCOLrr��dumps�loadsr4r�r5)r;r�Zprotocolrr�rrr�test_pickleSszGeneralModuleTests.test_picklec
CstdD]8}t�tjtj��}|�tdf�|�|�W5QRXqt�tjtj��}|�tdf�|��W5QRXdS)N)rrEr)rr4r5rXr�r9)r;Zbacklog�srvrrr�test_listen_backlog^sz&GeneralModuleTests.test_listen_backlogc	CsLddl}t�tjtj��*}|�tdf�|�t|j|j	d�W5QRXdSr�)
rcrr4r5rXr�rrJr9rd)r;rcr�rrr�test_listen_backlog_overflowhsz/GeneralModuleTests.test_listen_backlog_overflow�IPv6 required for this test.c	CsR|�ttjtjddfd�t�tjtj��}|�t|jtjddf�W5QRXdS)NrrIi����)	rrJrrQrr�r�r5rXrrrr�
test_flowinfops

�z GeneralModuleTests.test_flowinfocCs0t�ddtjtjtj�\�^}}|�|d�dS)N�ff02::1de:c0:face:8Dr)�ff02::1de:c0:face:8drrr)rr�r�r r)r�)r;rj�sockaddrrrr�test_getaddrinfo_ipv6_basicws�z.GeneralModuleTests.test_getaddrinfo_ipv6_basicr�zdoes not work on WindowszSymbolic scope id does not workcCsLt��d\}}t�d|dtjtjtj�\�^}}|�|ddd|f�dS)Nr�ff02::1de:c0:face:8D%rr�)rr=r�r�r r)r�)r;�ifindex�test_interfacerjr�rrr�&test_getaddrinfo_ipv6_scopeid_symbolic�s�z9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicz.Numeric scope id does not work or undocumentedcCsDd}t�dt|�dtjtjtj�\�^}}|�|ddd|f�dS)N�*r�rr�r)rr�r�r�r r)r�)r;r�rjr�rrr�%test_getaddrinfo_ipv6_scopeid_numeric�s
�z8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericcCsHt��d\}}ddd|f}t�|tjtjB�}|�|d|df�dS)Nrr�r�ff02::1de:c0:face:8d%�1234)rr=rQ�NI_NUMERICHOST�NI_NUMERICSERVr�)r;r�r�r��nameinforrr�&test_getnameinfo_ipv6_scopeid_symbolic�sz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symboliccCs@d}ddd|f}t�|tjtjB�}|�|dt|�df�dS)Nrr�rrrr)rrQrrr�r�)r;r�r�rrrr�%test_getnameinfo_ipv6_scopeid_numeric�sz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericc	CsDt�tjtj��*}|�t|j�d�|�t|j�d�W5QRXdS)Nr�r�)rr4r5r�r�rr�rrrr�test_str_for_enums�sz%GeneralModuleTests.test_str_for_enumsc	Cs�ttdd�}ttdd�}tj|B|B}t�tj|��~}|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�W5QRXdS)N�
SOCK_NONBLOCKrr�rhTF)rurr5r4r�r�r��setblocking)r;rr�Z	sock_typerrrr� test_socket_consistent_sock_type�s



z3GeneralModuleTests.test_socket_consistent_sock_typec	Cs�t�tjtj�}|��}ttjj���d}tdd�tjj�	�D��d}tj||d|d��4}|�
|j|�|�
|j|�|�
|jddh�W5QRXdS)Nrhcss|]\}}|dkr|VqdS)>rr�Nr)r�r�Zkindrrrr��s�zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>rn)rr�rr	r)rr4r5�detach�maxZ
AddressFamily�__members__�valuesZ
SocketKindr\r�rr�rr)r;r��fdZunknown_familyZunknown_typerrrr�test_unknown_socket_family_repr�s$
���z2GeneralModuleTests.test_unknown_socket_family_repr�sendfileztest needs os.sendfile()c
Cs�Gdd�d�}t����}t�tjtj�}t�|�|�tj��|�||��W5QRX|�t	��|�|dd��W5QRX|�t
��|�|d��W5QRXW5QRXdS)Nc@seZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dSr+�r)r;rrrrrF�szEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jSr+rr:rrrr	�szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)r@rArBrFr	rrrr�File�srr�rF)rr�r
�curdir�O_RDONLYrr�_GiveupOnSendfile�_sendfile_use_sendfilerJr�)r;rr�rrrr�test__sendfile_use_sendfile�s

z.GeneralModuleTests.test__sendfile_use_sendfilecCst|�|j|�|�|j|�|��}tj|d�}|�|j�|��|�|j|�|�|j|�|�|��|�dS�Nr�)r�rr�r	rrOrr)r;rr�styper�s2rrr�_test_socket_fileno�sz&GeneralModuleTests._test_socket_filenocCsRt�tjtj�}|�|j�|�tjdf�|�|tjtj�t	td�r�t�tjtj
�}|�|j�|�tjdf�|�|tjtj
�tjr�t�tjtj�}|�|j�|�tj
dddf�|�|tjtj�t	td��rNt��}|�tj|�t�tjtj�}|�|j�z|�tj�|d��Wntk
�r:YnX|�|tjtj�dS)Nrr r�r)rr4r5rOrrXrr�rrr r�r�r�r�r��shutilZrmtreer�r�r�r��PermissionError)r;rZtmpdirrrr�test_socket_filenos4

�z%GeneralModuleTests.test_socket_filenoc	Cs0|�td��tjtjtjdd�W5QRXdS)Nzinteger argument expectedg@E@r��r�r�rr4r5r:rrr� test_socket_fileno_rejects_float$sz3GeneralModuleTests.test_socket_fileno_rejects_floatc	Cs0|�td��tjtjtjdd�W5QRXdS)Nzinteger is required�foor�r#r:rrr�&test_socket_fileno_rejects_other_types(sz9GeneralModuleTests.test_socket_fileno_rejects_other_typesc	Cs0|�td��tjtjtjdd�W5QRXdS)N�negative file descriptorrEr��r�rurr4r5r:rrr�)test_socket_fileno_rejects_invalid_socket,sz<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlyc	Cs0|�td��tjtjtjdd�W5QRXdS)Nr'i���r�r(r:rrr�#test_socket_fileno_rejects_negative0sz6GeneralModuleTests.test_socket_fileno_rejects_negativec	Cs�d}|�t��}tjt��d�W5QRX|�|jjtj|f�|�t��}tjtj	tj
t��d�W5QRX|�|jjtj|f�dS)Ni6'r�)rrrrZmake_bad_fdrr r;r�r4r5)r;ZWSAENOTSOCKr"rrr�$test_socket_fileno_requires_valid_fd5s�z7GeneralModuleTests.test_socket_fileno_requires_valid_fdc
Cs~t���l}|�t��tj|��d�W5QRX|�t��}tjtjtj|��d�W5QRX|�|j	j
t
j�W5QRXdSr)r�ZNamedTemporaryFilerrrr	r4r5r�r r;r�)r;Zafiler"rrr�%test_socket_fileno_requires_socket_fdBs
�z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)Wr@rArBrr
r��
skipUnlessrrrrr#r(r+r�r�r.r5r7r8rrr<rDrMrNrPrSrTr`r�cpython_onlyrhrrrvr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�Zis_resource_enabledr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��skipIfrorrrrr	r
r
rrrr"r$r&r)r*r+r,rrrrrs

,


	�
�
�
�


,�
�
�
>�
�
"

�
N�




	
�

�



rz!SocketCan required for this test.c@s�eZdZdd�Ze�eed�d�dd��Zdd�Z	e�eed�d�d	d
��Z
dd�Zd
d�Ze�eed�d�dd��Z
e�eed�d�dd��ZdS)�BasicCANTestcCstjtjtjdSr+)r�AF_CANrrr:rrrr(Rsz!BasicCANTest.testCrucialConstants�CAN_BCM�&socket.CAN_BCM required for this test.cCs�tjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjtjtjtjtjtjtjtjtjtjdSr+)rr2ZCAN_BCM_TX_SETUPZCAN_BCM_TX_DELETEZCAN_BCM_TX_READ�CAN_BCM_TX_SENDZCAN_BCM_RX_SETUPZCAN_BCM_RX_DELETEZCAN_BCM_RX_READZCAN_BCM_TX_STATUSZCAN_BCM_TX_EXPIREDZCAN_BCM_RX_STATUSZCAN_BCM_RX_TIMEOUTZCAN_BCM_RX_CHANGEDZCAN_BCM_SETTIMERZCAN_BCM_STARTTIMERZCAN_BCM_TX_COUNTEVTZCAN_BCM_TX_ANNOUNCEZCAN_BCM_TX_CP_CAN_IDZCAN_BCM_RX_FILTER_IDZCAN_BCM_RX_CHECK_DLCZCAN_BCM_RX_NO_AUTOTIMERZCAN_BCM_RX_ANNOUNCE_RESUMEZCAN_BCM_TX_RESET_MULTI_IDXZCAN_BCM_RX_RTR_FRAMEr:rrr�testBCMConstantsWs0zBasicCANTest.testBCMConstantsc	Cs$t�tjtjtj��}W5QRXdSr+�rrrrrrrr�testCreateSocketwszBasicCANTest.testCreateSocketc	Cs$t�tjtjtj��}W5QRXdSr+)rrr r2rrrr�testCreateBCMSocket{sz BasicCANTest.testCreateBCMSocketc	CsBt�tjtjtj��$}d}|�|�|�|��|�W5QRXdS)N)r)rrrrrXr�r�)r;r�addressrrr�testBindAny�s
zBasicCANTest.testBindAnyc	Cs6t�tjtjtj��}|�td|jd�W5QRXdS)N�interface name too long)�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rrrrr�rrXrrrr�testTooLongInterfaceName�s
�z%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c	CsXt�tjtjtj��:}dD].}|�tjtj|�|�||�tjtj��qW5QRXdS)N)rrh)	rrrrr��SOL_CAN_RAWr>r�r�)r;rZloopbackrrr�testLoopback�s��zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c	Cs|d\}}t�d||�}t�tjtjtj��H}|�tjtj|�|�	||�
tjtjd��|�tjtjt|��W5QRXdS)N)�iz=IIrV)r�packrrrrr�r?rAr�r�r�)r;�can_idZcan_maskZ
can_filterrrrr�
testFilter�s�zBasicCANTest.testFilterN)r@rArBr(r�r-rrr5r7r8r:r=r@rErrrrr0Os(�
�
�
�r0c@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
�eed�d�dd��Ze
�eed�d�dd��ZdS)�CANTestr�cCstj||d�dSr�)r�rFr�rrrrF�szCANTest.__init__cCs&t|�}|�dd�}t�|j|||�S)NrV�)r��ljustrrCr\)�clsrD�data�can_dlcrrr�build_can_frame�szCANTest.build_can_framecCs&t�|j|�\}}}|||d|�fSr+)rrr\)rI�framerDrKrJrrr�dissect_can_frame�szCANTest.dissect_can_framecCs6|j�|j�\}}|�|j|�|�|d|j�dSr�)r�recvfromr[r��cfrY�r;rPr�rrr�
testSendFrame�szCANTest.testSendFramecCs |�dd�|_|j�|j�dS)Nrs�rLrPr�r�r:rrr�_testSendFrame�szCANTest._testSendFramecCs$|j�|j�\}}|�|j|�dSr+)rrOr[r�rPrQrrr�testSendMaxFrame�szCANTest.testSendMaxFramecCs |�dd�|_|j�|j�dS)NrsrSr:rrr�_testSendMaxFrame�szCANTest._testSendMaxFramecCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr+)rrOr[r��cf1�cf2rQrrr�testSendMultiFrames�szCANTest.testSendMultiFramescCs<|�dd�|_|j�|j�|�dd�|_|j�|j�dS)N�sD3"�s�"3)rLrWr�r�rXr:rrr�_testSendMultiFrames�szCANTest._testSendMultiFramesr2r3cCsP|j�|j�\}}|�|j|�|�|�\}}}|�|j|�|�|j|�dSr+)r�rOr[r�rPrNrDrJ)r;rPr�rDrKrJrrr�_testBCM�s
zCANTest._testBCMcCs�t�tjtjtj�}|�|j�|�|jf�d|_t	dddg�|_
|�|j|j
�|_tj
}d}d}d}}}}d}	d}
t�|j||||||||	|
�
}||j}|�|�}
|�|
t|��dS)N�#����ri"rh)rrr r2rOrr�rYrD�bytesrJrLrPr4rrCr]r�r�r�)r;ZbcmZopcoder�r�Z
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr�testBCM�s4�

zCANTest.testBCMN)r�)r@rArBrF�classmethodrLrNrRrTrUrVrYr\r�r-rrr]rdrrrrrF�s&


�
�rFz!CAN ISOTP required for this test.csVeZdZ�fdd�Zdd�Zdd�Ze�ee	d�d�d	d
��Z
dd�Zd
d�Z�Z
S)�	ISOTPTestcst�j||�d|_dS)NrS)rErFrYrJrMrrrFszISOTPTest.__init__cCstjtjtjtjdSr+)rr1rr!r r:rrrr(szISOTPTest.testCrucialConstantsc	Cs$t�tjtjtj��}W5QRXdSr+r6rrrrr7szISOTPTest.testCreateSocketr!z(socket.CAN_ISOTP required for this test.c	Cs$t�tjtjtj��}W5QRXdSr+)rrr r!rrrr�testCreateISOTPSocketszISOTPTest.testCreateISOTPSocketc
CsFt�tjtjtj��(}|�td��|�d�W5QRXW5QRXdS)Nr;)r<rhr�)rrr r!r�rrXrrrrr=sz"ISOTPTest.testTooLongInterfaceNamec
Cs�zJt�tjtjtj��,}|jddf}|�|�|�|��|�W5QRXWnBtk
r�}z$|j	t	j
krz|�d|j�n�W5d}~XYnXdS)Nr^iVrW)rrr r!rYrXr�r�rr;ZENODEVrZ)r;rr�r�rrr�testBinds
�zISOTPTest.testBind)r@rArBrFr(r7r�r-rrrgr=rhrQrrrMrrf�s�
rfz#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdSr+)rZAF_RDSr$r:rrrr(,sz!BasicRDSTest.testCrucialConstantsc	Cs"t�tjtjd��}W5QRXdSr�)rr$r%rrrrr70szBasicRDSTest.testCreateSocketc	CsJd}t�tjtjd��*}|�tjtj|�|�tjtj|�W5QRXdS)Ni@r)rr$r%r�r&Z	SO_RCVBUFZ	SO_SNDBUF)r;r[rrrr�testSocketBufferSize4sz!BasicRDSTest.testSocketBufferSizeN)r@rArBr(r7rjrrrrri)srics�eZdZddd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	e
j
d�dd��Ze	e
j
d�dd��Zdd�Z
dd�Zdd�Zdd�Z�ZS)�RDSTestr�cCstj||d�dSr�)r�rFr�rrrrF>szRDSTest.__init__cst���t��|_dSr+)rEr<rGrmZevtr:rMrrr<As
z
RDSTest.setUpcCs2|j�|j�\}}|�|j|�|�|j|�dSr+)r6rOr[r�rJr��r;rJr�rrr�testSendAndRecvEszRDSTest.testSendAndRecvcCs"d|_|j�|jdt|jf�dS�Nr�r�rJr�rr�r8r:rrr�_testSendAndRecvJszRDSTest._testSendAndRecvcCsH|j�|jtj�\}}|�|j|�|j�|j�\}}|�|j|�dSr+)r6rOr[r�MSG_PEEKr�rJrlrrr�testPeekNszRDSTest.testPeekcCs"d|_|j�|jdt|jf�dSrnror:rrr�	_testPeekTszRDSTest._testPeek�recvmsgcCs(|j�|j�\}}}}|�|j|�dSr+)r6rtr[r�rJ)r;rJ�ancdataZ	msg_flagsr�rrr�testSendAndRecvMsgXszRDSTest.testSendAndRecvMsg�sendmsgcCs&d|_|j�|jgddt|jf�dS)Ns<hello hello hello hello hello hello hello hello hello hello rr)rJr�rwr�r8r:rrr�_testSendAndRecvMsg]szRDSTest._testSendAndRecvMsgcCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr+)r6rOr[r��data1�data2rlrrr�testSendAndRecvMultibszRDSTest.testSendAndRecvMulticCs@d|_|j�|jdt|jf�d|_|j�|jdt|jf�dS)Nsbaconrsegg)ryr�rr�r8rzr:rrr�_testSendAndRecvMultiiszRDSTest._testSendAndRecvMulticCsLt�|jgggd�\}}}|�|j|�|j�|j�\}}|�|j|�dS)N�@)�selectr6rrOr[r�rJ)r;rr�rUrJr�rrr�
testSelectpszRDSTest.testSelectcCs"d|_|j�|jdt|jf�dS)Nsselectrror:rrr�_testSelectvszRDSTest._testSelect)r�)r@rArBrFr<rmrprrrsr�rrvrxr{r|rr�rQrrrMrrk;s




rkz'QIPCRTR sockets required for this test.c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�BasicQIPCRTRTestcCs
tjdSr+)rr)r:rrrr(~sz%BasicQIPCRTRTest.testCrucialConstantsc	Cs t�tjtj��}W5QRXdSr+)rr)r rrrrr7�sz!BasicQIPCRTRTest.testCreateSocketc	Cs4t�tjtj��}|�|��dd�W5QRXdS�Nrhr)rr)r r�r�rrrr�testUnbound�szBasicQIPCRTRTest.testUnboundc	CsJt�tjtj��0}tj||��dd�|�|��dd�W5QRXdS)Nrr�rh)rr)r rr7r��assertNotEqualrrrr�testBindSock�szBasicQIPCRTRTest.testBindSockc	Cs4t�tjtj��}|jttj|dd�W5QRXdS)Nrar�)rr)r rrrr7rrrr�testInvalidBindSock�sz$BasicQIPCRTRTest.testInvalidBindSockc	Cs>t�tjtj��$}|�d�|�|��dd�W5QRXdS)N)�{r�rhr)rr)r r�r�r�rrrr�testAutoBindSock�s
z!BasicQIPCRTRTest.testAutoBindSockN)	r@rArBr(r7r�r�r�r�rrrrr�zsr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BasicVSOCKTestcCs
tjdSr+)rr�r:rrrr(�sz#BasicVSOCKTest.testCrucialConstantscCs4tjtjtjtjtjtjtjtjdSr+)	r�SO_VM_SOCKETS_BUFFER_SIZE�SO_VM_SOCKETS_BUFFER_MIN_SIZE�SO_VM_SOCKETS_BUFFER_MAX_SIZEr�ZVMADDR_PORT_ANYZVMADDR_CID_HOSTZVM_SOCKETS_INVALID_VERSIONrr:rrr�testVSOCKConstants�sz!BasicVSOCKTest.testVSOCKConstantsc	Cs t�tjtj��}W5QRXdSr+)rr�r5rrrrr7�szBasicVSOCKTest.testCreateSocketc	Cs�t�tjtj���}|�tjtj�}|�tjtj�}|�tjtj�}|�tjtj|d�|�tjtj|d�|�tjtj|d�|�|d|�tjtj��|�|d|�tjtj��|�|d|�tjtj��W5QRXdS�Nr�)	rr�r5r�r�r�r�r�r�)r;rZorig_maxrRZorig_minrrrrj�sJ������
��
��
��z#BasicVSOCKTest.testSocketBufferSizeN)r@rArBr(r�r7rjrrrrr��s
r�c@s�eZdZd+dd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�e�Zejd$d%��Zd&d'�Zd(d)�Zd*S),�BasicTCPTestr�cCstj||d�dSr��r�rFr�rrrrF�szBasicTCPTest.__init__cCs|j�d�}|�|t�dSr�)r�r�r�r�r�rrr�testRecv�szBasicTCPTest.testRecvcCs|j�t�dSr+�r�r�r�r:rrr�	_testRecv�szBasicTCPTest._testRecvcCs8|j�tt�d�}|j�d�}||}|�|t�dS�N�r�)r�r�r�r�r�)r;�seg1�seg2r�rrr�testOverFlowRecv�szBasicTCPTest.testOverFlowRecvcCs|j�t�dSr+r�r:rrr�_testOverFlowRecv�szBasicTCPTest._testOverFlowRecvcCs |j�d�\}}|�|t�dSr�)r�rOr�r��r;r�r�rrr�testRecvFrom�szBasicTCPTest.testRecvFromcCs|j�t�dSr+r�r:rrr�
_testRecvFrom�szBasicTCPTest._testRecvFromcCs@|j�tt�d�\}}|j�d�\}}||}|�|t�dSr�)r�rOr�r�r�)r;r�r�r�r�rrr�testOverFlowRecvFrom�sz!BasicTCPTest.testOverFlowRecvFromcCs|j�t�dSr+r�r:rrr�_testOverFlowRecvFrom�sz"BasicTCPTest._testOverFlowRecvFromcCs0d}|j�d�}|sq ||7}q|�|d�dS)Nr�r��ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r�r�r�)r;r��readrrr�testSendAll�s
zBasicTCPTest.testSendAllcCsd}|j�|�dS)Nr�)r�r�)r;Z	big_chunkrrr�_testSendAll�szBasicTCPTest._testSendAllcCsP|j��}t�|tjtj�}|�|j�|�|tj�|�	d�}|�
|t�dSr�)r�r	rZfromfdr4r5rOrrr�r�r�)r;rr�r�rrr�
testFromFd�s

zBasicTCPTest.testFromFdcCs|j�t�dSr+r�r:rrr�_testFromFd	szBasicTCPTest._testFromFdcCs0|j��}|�|j�|�d�}|�|t�dSr�)r��duprOrr�r�r�)r;r�r�rrr�testDup	s

zBasicTCPTest.testDupcCs|j�t�dSr+r�r:rrr�_testDup	szBasicTCPTest._testDupcCs&|j�d�}|�|t�|j��dSr�)r�r�r�r�roryr�rrr�testShutdown	szBasicTCPTest.testShutdowncCs|j�t�|j�d�dSr�)r�r�r��shutdownr:rrr�
_testShutdown	szBasicTCPTest._testShutdowncCsXddl}|j�t�|�t|jj|jd�|�t|jjd|jd�|j�d�dS)Nrrhr�)	rcr�r�r�rrJr�rd�UINT_MAX�r;rcrrr�_testShutdown_overflow$	s��z#BasicTCPTest._testShutdown_overflowcCs�|j��}|j��}|�||�|�|jj�|�t|jjd�|j�	�t
j
t
jt
j|d�}|�
|j	�|�d�}|�|t�dS)Nr�r�)r�r	rr�r�_closedrrr�rrr4r5rOr�)r;r	rr�r�rrr�
testDetach/	s



zBasicTCPTest.testDetachcCs|j�t�dSr+r�r:rrr�_testDetach?	szBasicTCPTest._testDetachN)r�)r@rArBrFr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr.ZtestShutdown_overflowr�r�r�rrrrr��s,

		


r�c@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestr�cCstj||d�dSr�)r�rFr�rrrrFE	szBasicUDPTest.__init__cCs |j�tt��}|�|t�dSr+)r6r�r�r�r�r�rrr�testSendtoAndRecvH	szBasicUDPTest.testSendtoAndRecvcCs|j�tdt|jf�dSr��r�rr�r�r8r:rrr�_testSendtoAndRecvM	szBasicUDPTest._testSendtoAndRecvcCs$|j�tt��\}}|�|t�dSr+)r6rOr�r�r�r�rrrr�P	szBasicUDPTest.testRecvFromcCs|j�tdt|jf�dSr�r�r:rrrr�U	szBasicUDPTest._testRecvFromcCs|�t|jjd�dS�NrE)rrur6rOr:rrr�testRecvFromNegativeX	sz!BasicUDPTest.testRecvFromNegativecCs|j�tdt|jf�dSr�r�r:rrr�_testRecvFromNegative\	sz"BasicUDPTest._testRecvFromNegativeN)r�)
r@rArBrFr�r�r�r�r�r�rrrrr�C	s
r�cs�eZdZdZ�fdd�Zdd�ZdZdd�Zd	d
�Zdd�Z	d
d�Z
dZdD]Zee
eed�OZqLdZdZdZddd�Z�ZS)�SendrecvmsgBaser}cst��|_t���dSr+)rGrm�
misc_eventrEr<r:rMrrr<�	s
zSendrecvmsgBase.setUpcCs|j�|�Sr+)�cli_sockr�r�rrr�sendToServer�	szSendrecvmsgBase.sendToServerrcGs|jj||jt|�d��Sr+)r�rw�sendmsg_to_server_defaultsr��r;rKrrr�sendmsgToServer�	s�zSendrecvmsgBase.sendmsgToServercGs|j|f|��}|�|�|Sr+)rt�registerRecvmsgResult)r;r�r[rK�resultrrr�	doRecvmsg�	s
zSendrecvmsgBase.doRecvmsgcCsdSr+r�r;r�rrrr��	sz%SendrecvmsgBase.registerRecvmsgResultcCs|�||�dSr+�r��r;Zaddr1Zaddr2rrr�checkRecvmsgAddress�	sz#SendrecvmsgBase.checkRecvmsgAddressr)�
MSG_CTRUNCZMSG_OOBNc
Cs�|j}|j}|r&||jO}||jO}n|dk	rB||jO}||jO}||M}||M}||O}||O}||@|@}|r�td�|���||B|@}	|�||	@||	@�dS)Nz6contradictory set, unset requirements for flags {0:#x})�msg_flags_common_set�msg_flags_common_unset�msg_flags_eor_indicator�msg_flags_non_eor_indicator�	Exceptionr�r�)
r;r��eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothr_rrr�
checkFlags�	s&




�zSendrecvmsgBase.checkFlags)Nrrr)r@rArB�fail_timeoutr<r�r�r�r�r�r�r�r�rurr�r�r�r�rQrrrMrr�z	s
r�c@seZdZdd�ZdS)�RecvmsgIntoMixincGsft|�}|j|gf|��}|�|�|�|dd�|�|d|�t|d|d��f|dd�Sr�)r��recvmsg_intor��assertGreaterEqual�assertLessEqualrb)r;r�r[rK�bufr�rrrr��	s
zRecvmsgIntoMixin.doRecvmsgN)r@rArBr�rrrrr��	sr�cs eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasecst�jtjBSr+)rEr�r�	MSG_TRUNCr:rMrrr�
sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)r@rArB�propertyr�rQrrrMrr��	sr�cs eZdZe�fdd��Z�ZS)�SendrecvmsgSCTPFlagsBasecst�jtjBSr+)rEr�rZMSG_EORr:rMrrr�
sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)r@rArBr�r�rQrrrMrr�
sr�c@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jSr+)r6r:rrr�	serv_sock
sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jSr+)r�r:rrrr�
sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfSr�)r�r:rrrr�
sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j�||j�Sr+)r�rr�r�rrrr�
sz*SendrecvmsgConnectionlessBase.sendToServerN)r@rArBr�r�r�r�r�rrrrr�
s


r�c@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jSr+)r�r:rrrr�(
sz"SendrecvmsgConnectedBase.serv_sockcCs|jSr+)r�r:rrrr�,
sz!SendrecvmsgConnectedBase.cli_sockcCsdSr+rr�rrrr�0
sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)r@rArBr�r�r�r�rrrrr�"
s


r�cseZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasecst���|j�|j�dSr+)rEr<r�r�r�r:rMrrr<9
s
z"SendrecvmsgServerTimeoutBase.setUpr�rrrMrr�6
sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeed�dd��Zejd d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SendmsgTestscCs|�|j�tt��t�dSr+�r�r�r�r�r�r:rrr�testSendmsgB
szSendmsgTests.testSendmsgcCs|�|�tg�tt��dSr+�r�r�r�r�r:rrr�_testSendmsgF
szSendmsgTests._testSendmsgcCs|�|j�tt��t�dSr+r�r:rrr�testSendmsgDataGeneratorI
sz%SendmsgTests.testSendmsgDataGeneratorcCs&|�|�dd�tfD��tt��dS)Ncss|]
}|VqdSr+rr�rrrr�N
sz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>r�r:rrr�_testSendmsgDataGeneratorM
s�z&SendmsgTests._testSendmsgDataGeneratorcCs|�|j�tt��t�dSr+r�r:rrr�testSendmsgAncillaryGeneratorQ
sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|�|�tgdd�dD��tt��dS)Ncss|]
}|VqdSr+rr�rrrr�V
sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>rr�r:rrr�_testSendmsgAncillaryGeneratorU
s�z+SendmsgTests._testSendmsgAncillaryGeneratorcCs|�|j�tt��t�dSr+r�r:rrr�testSendmsgArrayY
szSendmsgTests.testSendmsgArraycCs$|�|�t�dt�g�tt��dS)N�B)r�r��arrayr�r�r:rrr�_testSendmsgArray]
s�zSendmsgTests._testSendmsgArraycCs|�|j�tt��t�dSr+r�r:rrr�testSendmsgGathera
szSendmsgTests.testSendmsgGathercCs.|�|�tdd�tdd�g�tt��dS�Nr�r�r:rrr�_testSendmsgGathere
szSendmsgTests._testSendmsgGathercCs|�|j�d�d�dS�NrF�done�r�r�r�r:rrr�testSendmsgBadArgsh
szSendmsgTests.testSendmsgBadArgscCs�|�t|jj�|�t|jd�|�t|jt��|�t|jt�g�|�t|jtt�g�|�t|jtgt��|�t|jtggt��|�t|jtggdt��|�d�dS)Nsnot in an iterablerr�)rr�r�rwr��objectr�r�r:rrr�_testSendmsgBadArgsl
s:
�
�
�
�
�
�
�z SendmsgTests._testSendmsgBadArgscCs|�|j�d�d�dSr�r�r:rrr�testSendmsgBadCmsg~
szSendmsgTests.testSendmsgBadCmsgcCs�|�t|jtgt�g�|�t|jtgt�ddfg�|�t|jtgdt�dfg�|�t|jtgddt�fg�|�t|jtgdg�|�t|jtgdg�|�d�dS)Nr�data)rr)rrr�rr��rr�r�r�r�r�r:rrr�_testSendmsgBadCmsg�
s2
�
�
�
�
�
�z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs|�|j�d�d�dSr�r�r:rrr�testSendmsgBadMultiCmsg�
sz$SendmsgTests.testSendmsgBadMultiCmsgcCsB|�t|jtgdddg�|�t|jtgdt�g�|�d�dS)Nrr��rrr�r�r�r:rrr�_testSendmsgBadMultiCmsg�
s
�
�z%SendmsgTests._testSendmsgBadMultiCmsgcCs|�|j�d�d�dSr�r�r:rrr�testSendmsgExcessCmsgReject�
sz(SendmsgTests.testSendmsgExcessCmsgRejectc	CsNttd�s@|�t��}|�tgddg�W5QRX|�|jj�|�	d�dS)Nr�r�r�)
rrrrr�r��assertIsNoner r;r��r;r"rrr�_testSendmsgExcessCmsgReject�
s

z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdSr+rr:rrr�testSendmsgAfterClose�
sz"SendmsgTests.testSendmsgAfterClosecCs |j��|�t|jtg�dSr+)r�rrrr�r�r:rrr�_testSendmsgAfterClose�
s
z#SendmsgTests._testSendmsgAfterCloseN)r@rArBr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�rrrrrrrr�>
s,

r�c@sReZdZdd�Zdd�Zdd�Zdd�Zeej	d	kd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs|�|j�tt��t�dSr+r�r:rrr�testSendmsgExplicitNoneAddr�
sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|�|�tggdd�tt��dSr�r�r:rrr�_testSendmsgExplicitNoneAddr�
sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs.|�|j�d�d�|�|jj|jd��dS�NrB�aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�r0�r�r�r�rr�ryr�r:rrr�testSendmsgTimeout�
sz%SendmsgStreamTests.testSendmsgTimeoutc
Cs�zr|j�d�z|�dg�qWnDtjk
r6Yn:tk
rd}z|jtj	krT�W5d}~XYnX|�
d�W5|j��XdS)N���Q��?r�socket.timeout not raised)r�rfr�r�r�rr0rr;�ENOMEMrr|rrr�_testSendmsgTimeout�
sz&SendmsgStreamTests._testSendmsgTimeout>riz<MSG_DONTWAIT not known to work on this platform when sendingcCs.|�|j�d�d�|�|jj|jd��dSrr	r:rrr�testSendmsgDontWait�
sz&SendmsgStreamTests.testSendmsgDontWaitc	Cs\zJ|�t��}|�dggtj�qW5QRX|�|jj	t	j
t	jt	jf�W5|j��XdS�Nr)
r�rfrrr�rZMSG_DONTWAITrr r;ZEAGAINZEWOULDBLOCKr
r�rrr�_testSendmsgDontWait�
s
�z'SendmsgStreamTests._testSendmsgDontWaitN)
r@rArBrrr
rr�rProrr�rrrrrr�
s
�
rc@seZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdSr+rr:rrr�testSendmsgNoDestAddr�
sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|�t|jjtg�|�t|jjtggdd�dSr�)rrr�rwr�r:rrr�_testSendmsgNoDestAddr�
s��z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)r@rArBrrrrrrr�
src@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zeed!�d"d#��Zejd$d%��Zeejd&�d'd(��Zejd)d*��Zd+S),�RecvmsgGenericTestscCsR|�|jtt��\}}}}|�|t�|�||j�|�|g�|j|dd�dS�NT�r��r�r�r�r�r�r�r�r��r;r�rur�r�rrr�testRecvmsgs
zRecvmsgGenericTests.testRecvmsgcCs|�t�dSr+�r�r�r:rrr�_testRecvmsgsz RecvmsgGenericTests._testRecvmsgcCsV|�|jtt�dd�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTrrrrrr�testRecvmsgExplicitDefaultss�z/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|�t�dSr+rr:rrr�_testRecvmsgExplicitDefaultssz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTrrrrrr�testRecvmsgShorters
�z&RecvmsgGenericTests.testRecvmsgShortercCs|�t�dSr+rr:rrr�_testRecvmsgShorter'sz'RecvmsgGenericTests._testRecvmsgShortercCs^|�|jtt�d�\}}}}|�|tdd��|�||j�|�|g�|j|dd�dS)Nr����Frrrrrr�testRecvmsgTrunc*s
�z$RecvmsgGenericTests.testRecvmsgTrunccCs|�t�dSr+rr:rrr�_testRecvmsgTrunc3sz%RecvmsgGenericTests._testRecvmsgTrunccCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrhTrrrrrr�testRecvmsgShortAncillaryBuf6s�z0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|�t�dSr+rr:rrr�_testRecvmsgShortAncillaryBuf?sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)N�(Trrrrrr�testRecvmsgLongAncillaryBufBs�z/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|�t�dSr+rr:rrr�_testRecvmsgLongAncillaryBufKsz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|j��|�t|j|jd�dSr�)r�rrrr�r:rrr�testRecvmsgAfterCloseNs
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdSr+rr:rrr�_testRecvmsgAfterCloseSsz*RecvmsgGenericTests._testRecvmsgAfterClosecCs<z*|j�d�|�tj|j|jtt	��W5|j��XdS)Nr)
r�rfr�r�rrr0r�r�r�r:rrr�testRecvmsgTimeoutVs�z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|�|jj|jd��dS�Nr)rr�ryr�r:rrr�_testRecvmsgTimeout_sz'RecvmsgGenericTests._testRecvmsgTimeoutrqcCs|�|jtt�ddtj�\}}}}|�|tdd��|�||j�|�|g�|j	|dt
tdd�d�|�|jtt�dtj�\}}}}|�|t�|�||j�|�|g�|j	|dd�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dS)	Nr�rr!Fr��r�r�Tr)r�r�r�r�rrqr�r�r�r�rurrrr�testRecvmsgPeekbs2
�
��z#RecvmsgGenericTests.testRecvmsgPeekcCs|�t�dSr+rr:rrr�_testRecvmsgPeek�sz$RecvmsgGenericTests._testRecvmsgPeekrwcCs`|j�|j�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dSr)
r�r�r�r�r�r�r�r�r�r�rrrr�testRecvmsgFromSendmsg�sz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs.|�|�tdd�tdd�g�tt��dSr�r�r:rrr�_testRecvmsgFromSendmsg�sz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)r@rArBrrrrrr r"r#r$r%r'r(r)r*r+r-r�rr/r�r0r1r2rrrrrs0						
"



rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RecvmsgGenericStreamTestscCsN|�|jd�\}}}}|�|d�|�||j�|�|g�|j|dd�dS)Nr�r�r)r�r�r�r�r�r�rrrr�testRecvmsgEOF�s
z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|j��dSr+)r�rr:rrr�_testRecvmsgEOF�sz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|�|jtt�d�\}}}}|�||j�|�|g�|j|dd�|�|jd�\}}}}|�||j�|�|g�|j|dd�||}|�|t�dS)Nr�Frr�T)r�r�r�r�r�r�r�r�)r;r�rur�r�r�r�rrr�testRecvmsgOverflow�s
�z-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|�t�dSr+rr:rrr�_testRecvmsgOverflow�sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)r@rArBr4r5r6r7rrrrr3�sr3c@seZdZdd�Zdd�ZdS)�RecvmsgTestscCs|�t|jj�|�t|jjddd�|�t|jjtt�dd�|�t|jjtd�gdd�|�t|jjt�dd�|�t|jjtt�t�d�|�t|jjtt�dt��|j�tt�dd�\}}}}|�	|t�|�
||j�|�	|g�|j|dd�dS)NrErrsTr)
rr�r�rtrur�r�r�r�r�r�r�r�rrrr�testRecvmsgBadArgs�sH������zRecvmsgTests.testRecvmsgBadArgscCs|�t�dSr+rr:rrr�_testRecvmsgBadArgs�sz RecvmsgTests._testRecvmsgBadArgsN)r@rArBr9r:rrrrr8�sr8c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�RecvmsgIntoTestscCsLttt��}|�t|jj�|�t|jjtt�dd�|�t|jj|dd�|�t|jjt�gdd�|�t|jjdgdd�|�t|jj|t�gdd�|�t|jj|gdd�|�t|jj|gt�d�|�t|jj|gdt��|j�|gdd�\}}}}|�	|tt��|�	|tt��|�
||j�|�	|g�|j|dd�dS)NrsI'm not writablerETr)
r�r�r�rr�r�r�r�rur�r�r�r��r;r��nbytesrur�r�rrr�testRecvmsgIntoBadArgs�s`��������z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|�t�dSr+rr:rrr�_testRecvmsgIntoBadArgs�sz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|j�dd�|fD��\}}}}|�|tt��|�|tt��|�||j�|�|g�|j|dd�dS)Ncss|]
}|VqdSr+rr�rrrr��sz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr)	r�r�r�r�r�r�r�r�r�r<rrr�testRecvmsgIntoGenerator�s�z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|�t�dSr+rr:rrr�_testRecvmsgIntoGeneratorsz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxt�ddgtt��}|j�|g�\}}}}|�|tt��|�|��t�|�||j�|�|g�|j	|dd�dS)Nr�rTr)
r�r�r�r�r�r��tobytesr�r�r�r<rrr�testRecvmsgIntoArray	sz%RecvmsgIntoTests.testRecvmsgIntoArraycCs|�t�dSr+rr:rrr�_testRecvmsgIntoArraysz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|j�|t|�dd�|g�\}}}}|�|td��|�|td��|�|td��|�|td	��|�||j�|�|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	�Mary had a little lambsMarys
01 had a 9slittle lamb---Tr)	r�r�r��
memoryviewr�r�r�r�r�)r;Zb1Zb2Zb3r=rur�r�rrr�testRecvmsgIntoScatters�z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|�d�dS)NrF)r�r:rrr�_testRecvmsgIntoScatter%sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)r@rArBr>r?r@rArCrDrHrIrrrrr;�s
r;c@sbeZdZzddlZWnek
r,dZYnXedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs�|jt�d�d}ttd��tt|d|��}|�t�d�t�d�jd�|D]2}t�|�}|�|t�d�|�|�	||j�qT|�
ttjd�|�
ttj|�|�
ttjtj
�dS)Nrrh�r2r�rE)�socklen_t_limitrrK�listr�r?r��itemsizer�r�rrJrP�maxsize)r;�toobigr�nr,rrr�testCMSG_LEN6s
zCmsgMacroTests.testCMSG_LENr�cCs�|jt�d�d}ttd��tt|d|��}t�d�}|�|t�d�jd�|D]T}t�|�}|�||�|�|t�	|��|�||t�	d��|�
||j�|}qX|�ttjd�|�ttj|�|�ttjt
j�dS)NrhrLrr2r�rE)rMrr�rNr�r?r�rOr�rKr�rrJrPrP)r;rQrZlastrRr,rrr�testCMSG_SPACEKs

zCmsgMacroTests.testCMSG_SPACE)r@rArBrcr�rM�minrdr�rrSrTrrrrrJ)s

rJc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdddd�Z	dd�Z
dd�Zdd�Zdd�Z
eed�dd��Zejdd��Zdd�Zdd �Ze�ejd!kd"�e�ed#�eed�d$d%����Zeje�ejd!kd"�e�ed#�d&d'����Ze�ejd!kd"�e�ed#�eed�d(d)����Zeje�ejd!kd"�e�ed#�d*d+����Zd,d-�Ze�ejd!kd.�d/d0��Zd1d2�Z d3d4�Z!d5d6�Z"eed�d7d8��Z#e#jd9d:��Z$ded;d<�Z%d=d>�Z&d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*dGdH�Z+dIdJ�Z,dKdL�Z-dMdN�Z.dOdP�Z/dfdQdR�Z0dSdT�Z1dUdV�Z2dWdX�Z3dYdZ�Z4d[d\�Z5d]d^�Z6d_d`�Z7dadb�Z8dcS)g�
SCMRightsTesti����cCs\g}t|�D]J}t��\}}|�tj|�|�tj|�t�|t|��	��|�
|�q|Sr+)r�r�ZmkstemprOr�r�r�writer��encode�append)r;rR�fdsr2rr�rrr�newFDslszSCMRightsTest.newFDscCsBt|�D]4\}}t�|dtj�|�t�|d�t|����qdS)Nrr�)�	enumerater��lseek�SEEK_SETr�r�r�rX)r;rZrRrrrr�checkFDsxszSCMRightsTest.checkFDscCs|�|j|�dSr+)rO�closeRecvmsgFDsr�rrrr�sz#SCMRightsTest.registerRecvmsgResultcCsn|dD]`\}}}|tjkr|tjkrt�d�}|�|dt|�t|�|j��|D]}t�|�qXqdS)Nrhr2)	rr&�
SCM_RIGHTSr��	frombytesr�rOr�r)r;Zrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datarZrrrrr`�s
�
�zSCMRightsTest.closeRecvmsgFDsc
Cs8|�|�tgtjtjt�d|�|��fg�tt��dS)Nr2)	r�r�r�rr&rar�r[r�)r;rRrrr�createAndSendFDs�s���zSCMRightsTest.createAndSendFDsrhrcCs�|\}}}}|�|t�|�||j�|j|dtj|d�|�|t�|�	t
|�|�t�d�}	|D]`}
|�|
t�|
\}}}
|�|tj
�|�|tj�|�|
t�|�t
|
�td�|	�|
�qd|�t
|	�|�|�|	�dS)NT�r�r�r�r2r)r�r�r�r�r�rr�rrNr�r�r��tupler&rarb�
SIZEOF_INTrbr_)r;Znumfdsr��maxcmsgs�ignoreflagsr�rur�r�rZ�itemrcrdrerrr�checkRecvmsgFDs�s&�

zSCMRightsTest.checkRecvmsgFDscCs |�d|�|jtt�d��dS)Nrhr&�rmr�r�r�r�r:rrr�testFDPassSimple�s�zSCMRightsTest.testFDPassSimplec
Cs<|�|�tgtjtjt�d|�d����fg�t	t��dS)Nr2rh)
r�r�r�rr&rar�r[rBr�r:rrr�_testFDPassSimple�s���zSCMRightsTest._testFDPassSimplecCs |�d|�|jtt�d��dS)Nrr&rnr:rrr�testMultipleFDPass�s�z SCMRightsTest.testMultipleFDPasscCs|�d�dS�Nr�rfr:rrr�_testMultipleFDPass�sz!SCMRightsTest._testMultipleFDPassr�cCs*|�d|�|jtt�t�dt���dSrr)rmr�r�r�r�rr�rir:rrr�testFDPassCMSG_SPACE�s��z"SCMRightsTest.testFDPassCMSG_SPACEcCs|�d�dSrrrsr:rrr�_testFDPassCMSG_SPACE�sz#SCMRightsTest._testFDPassCMSG_SPACEc
Cs0|jd|�|jtt�t�dt��tjd�dS)Nrhr�rk)	rmr�r�r�r�rrKrir�r:rrr�testFDPassCMSG_LEN�s��z SCMRightsTest.testFDPassCMSG_LENcCs|�d�dSr�rsr:rrr�_testFDPassCMSG_LEN�sz!SCMRightsTest._testFDPassCMSG_LENrjzskipping, see issue #12958zskipping, see issue #22397cCs$|jd|�|jtt�d�dd�dS)Nr�r&)rjrnr:rrr�testFDPassSeparate�s�z SCMRightsTest.testFDPassSeparatecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dS�Nr�r2�	r[r�r�r�rr&rar�r��r;Zfd0Zfd1rrr�_testFDPassSeparate�s����z!SCMRightsTest._testFDPassSeparatecCs@d}|j||�|jtt�t�t�t�t|��dtj	d�dS)Nr�)rjrk)
rmr�r�r�r�rr�rirKr�)r;Znum_fdsrrr�testFDPassSeparateMinSpace�s���z(SCMRightsTest.testFDPassSeparateMinSpacecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dSr{r|r}rrr�_testFDPassSeparateMinSpace
s����z)SCMRightsTest._testFDPassSeparateMinSpacec
Csdz|�|g|�}Wn<tk
rN}z|�|jt�|�|g�}W5d}~XYnX|�|t|��dSr+)r�rrr;r>r�r�)r;r�rur=r�rrr�sendAncillaryIfPossible
sz%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd|�|jtt�d�tjd�dS)Nrr&rw)rmr�r�r�r�rr�r:rrr�testFDPassEmpty
s��zSCMRightsTest.testFDPassEmptycCs|�ttjtjdfg�dS�Nr�)r�r�rr&rar:rrr�_testFDPassEmpty'
s
�zSCMRightsTest._testFDPassEmptycCs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�|D]6\}}}|�|tj�|�|tj�|�
t|�t�q\dS)Nr&Tr.rh)r�r�r�r�r�r�r�r�rr�r�r&ra�
assertLessri�r;r�rur�r�rcrdrerrr�testFDPassPartialInt,
s�z"SCMRightsTest.testFDPassPartialIntc	Cs4|�ttjtjt�d|jg���dd�fg�dS)Nr2rE)r�r�rr&rar��badfdrBr:rrr�_testFDPassPartialInt9
s��z#SCMRightsTest._testFDPassPartialIntc	Cs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�t�d�}|D]J\}}}|�|tj�|�|tj
�|�|dt|�t|�|j��qf|�
t|�d�|�|�dS)Nr&Tr.r�r2)r�r�r�r�r�r�r�r�rr�r�r�r&rarbrOr_)	r;r�rur�r�rZrcrdrerrr�testFDPassPartialIntInMiddle@
s"�
�
z*SCMRightsTest.testFDPassPartialIntInMiddlec
CsZ|�d�\}}|�ttjtjt�d||jg���dd�ftjtjt�d|g�fg�dS)Nr�r2rE)	r[r�r�rr&rar�r�rBr}rrr�_testFDPassPartialIntInMiddleS
s����z+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}|�|t�|�||j�|�|g�|j|dtj|d�dS)NT�r�r�r�)r�r�r�r�r�rr�)r;r�rkr�rur�r�rrr�checkTruncatedHeader_
s�z"SCMRightsTest.checkTruncatedHeadercCs"|j|�|jtt��tjd�dS�Nrw�r�r�r�r�r�rr�r:rrr�testCmsgTruncNoBufSizei
s�z$SCMRightsTest.testCmsgTruncNoBufSizecCs|�d�dSr�rsr:rrr�_testCmsgTruncNoBufSizer
sz%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j|�|jtt�d�tjd�dS)Nrrwr�r:rrr�testCmsgTrunc0u
s�zSCMRightsTest.testCmsgTrunc0cCs|�d�dSr�rsr:rrr�_testCmsgTrunc0z
szSCMRightsTest._testCmsgTrunc0cCs|�|�|jtt�d��dSr�)r�r�r�r�r�r:rrr�testCmsgTrunc1�
szSCMRightsTest.testCmsgTrunc1cCs|�d�dSr�rsr:rrr�_testCmsgTrunc1�
szSCMRightsTest._testCmsgTrunc1cCs"|�|�|jtt�td��dSr�)r�r�r�r�r�rir:rrr�testCmsgTrunc2Int�
s�zSCMRightsTest.testCmsgTrunc2IntcCs|�d�dSr�rsr:rrr�_testCmsgTrunc2Int�
sz SCMRightsTest._testCmsgTrunc2Intc	Cs(|�|�|jtt�t�d�d��dSr�)r�r�r�r�r�rrKr:rrr�testCmsgTruncLen0Minus1�
s�z%SCMRightsTest.testCmsgTruncLen0Minus1cCs|�d�dSr�rsr:rrr�_testCmsgTruncLen0Minus1�
sz&SCMRightsTest._testCmsgTruncLen0Minus1cCs�|�|jtt�|�\}}}}|�|t�|�||j�|j|dtj	d�|dkr\|gkr\dS|�t|�d�|d\}}	}
|�|tj
�|�|	tj�|�t|
�|�|�
t|
�|�t�d�}|�|
dt|
�t|
�|j��|�|�dS)NT�r�r�rrhr2)r�r�r�r�r�r�r�r�rr�r&rar�r�r�rbrOr_)r;�ancbuf�maxdataZmindatar�rur�r�rcrdrerZrrr�checkTruncatedArray�
s(�
�z!SCMRightsTest.checkTruncatedArraycCs|jt�d�dd�dS)Nr�r�r��r�rrKr:rrr�testCmsgTruncLen0�
szSCMRightsTest.testCmsgTruncLen0cCs|�d�dSr�rsr:rrr�_testCmsgTruncLen0�
sz SCMRightsTest._testCmsgTruncLen0cCs|jt�d�ddd�dS)Nrrhr�r�r:rrr�testCmsgTruncLen0Plus1�
sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|�d�dSr�rsr:rrr�_testCmsgTruncLen0Plus1�
sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jt�t�td�dS)Nr��r�rrKrir:rrr�testCmsgTruncLen1�
s�zSCMRightsTest.testCmsgTruncLen1cCs|�d�dSr�rsr:rrr�_testCmsgTruncLen1�
sz SCMRightsTest._testCmsgTruncLen1cCs(|jt�dt�ddtdd�dS)Nr�rhr�r�r:rrr�testCmsgTruncLen2Minus1�
s
�z%SCMRightsTest.testCmsgTruncLen2Minus1cCs|�d�dSr�rsr:rrr�_testCmsgTruncLen2Minus1�
sz&SCMRightsTest._testCmsgTruncLen2Minus1N)rhr)r)r)9r@rArBr�r[r_r�r`rfrmrorprqrtr�rrur�rvrxryr�r/rProrrzr~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�rrrrrVds~

	













	
rVc@seZdZdZdZdd�Zd^dd�Zeed	d
�dd��Z	e	j
d
d��Zeedd	d
�dd��Zej
dd��Z
eejd�eed	d
�dd���Zej
dd��Zd_dd�Zeed	d
dd�dd��Zej
dd ��Zeedd	d
dd�d!d"��Zej
d#d$��Zeejd�eedd	d
dd�d%d&���Zej
d'd(��Zeejd�eedd	d
dd�d)d*���Zej
d+d,��Zd`d-d.�Zeed	d
�d/d0��Zej
d1d2��Zeed	d
�d3d4��Zej
d5d6��Zeed	d
�d7d8��Zej
d9d:��Zeed	d
�d;d<��Z e j
d=d>��Z!eed	d
�d?d@��Z"e"j
dAdB��Z#eed	d
�dCdD��Z$e$j
dEdF��Z%dadGdH�Z&eedd	d
dd�dIdJ��Z'e'j
dKdL��Z(eedd	d
dd�dMdN��Z)e)j
dOdP��Z*eedd	d
dd�dQdR��Z+e+j
dSdT��Z,eedd	d
dd�dUdV��Z-e-j
dWdX��Z.eedd	d
dd�dYdZ��Z/e/j
d[d\��Z0d]S)b�RFC3542AncillaryTestr�rEcCs4i}|D]&\}}}|�||f|�||||f<q|Sr+)r)r;ru�drcrdrerrr�ancillaryMapping�
s
z%RFC3542AncillaryTest.ancillaryMappingr`rcCs|j�tjtjd�|j��|�|jtt	�|�\}}}}|�
|t	�|�||j�|j
|dtj|d�|�
t|�d�|�|dt�|d\}}	}
|�
|tj�|�
|	tj�|�|
t�|�
t|
�t�t�d�}|�|
�|�|dd�|�|d|�dS)NrhTrgrr2)r�r�rr*�IPV6_RECVHOPLIMITr�rfr�r�r�r�r�r�r�r�rrh�
IPV6_HOPLIMITrbrir�rbr�r�)r;�
ancbufsize�maxhoprkr�rur�r�rcrdrer~rrr�
checkHopLimit�
s2
�
��

z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS�Nr&�r�)r�r:rrr�testRecvHopLimitsz%RFC3542AncillaryTest.testRecvHopLimitcCs$|�|jj|jd��|�t�dSr,�rr�ryr�r�r�r:rrr�_testRecvHopLimit	sz&RFC3542AncillaryTest._testRecvHopLimitr�cCs|jt�t�d�dS)Nr�)r�rr�rir:rrr�testRecvHopLimitCMSG_SPACEsz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testRecvHopLimitCMSG_SPACEsz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErwcCs|jd|jd�dS�Nr&)r�r�)r��	hop_limitr:rrr�testSetHopLimit sz$RFC3542AncillaryTest.testSetHopLimitcCsL|�|jj|jd��|�|�tgtjtj	t
�
d|jg�fg�tt��dS�Nrr2)
rr�ryr�r�r�r�rr*r�r�r�r�r:rrr�_testSetHopLimit's���z%RFC3542AncillaryTest._testSetHopLimitcCsB|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|�|�}|tjtjf}	|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�|tjtjf}|�t	|�t�t�d�}
|
�|�|�|
dd�|�|
d|�dS)NrhTrgr�r2rr`)r�r�rr*r��IPV6_RECVTCLASSr�rfr�r�r�r�r�r�r�r�r��IPV6_TCLASSrir�rbr�r�r�)r;r�r�rkr�rur�r�ZancmapZtcdatar~Zhldatarrr�checkTrafficClassAndHopLimit0s@
�
�
��




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr�r�cCs|jdd�dSr�)r�r:rrr�testRecvTrafficClassAndHopLimitTsz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$|�|jj|jd��|�t�dSr,r�r:rrr� _testRecvTrafficClassAndHopLimitZsz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jt�t�dd�dS�Nr�r�)r�rr�rir:rrr�)testRecvTrafficClassAndHopLimitCMSG_SPACE_s�z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dSr,r�r:rrr�*_testRecvTrafficClassAndHopLimitCMSG_SPACEgsz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jd�dSr��r�r�r:rrr�testSetTrafficClassAndHopLimitls�z3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitcCsd|�|jj|jd��|�|�tgtjtj	t
�
d|jg�ftjtjt
�
d|j
g�fg�tt��dSr�)rr�ryr�r�r�r�rr*r�r��
traffic_classr�r�r�r:rrr�_testSetTrafficClassAndHopLimitus�����z4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jd�dSr�r�r:rrr�testOddCmsgSize�s�z$RFC3542AncillaryTest.testOddCmsgSizec
Cs�|�|jj|jd��zJ|�tgtjtjt	�	d|j
g���dftjtjt	�	d|j
g�fg�}Wn~tk
r�}z`|�|jt�|�tgtjtjt	�	d|j
g�ftjtjt	�	d|j
g�fg�}|�|tt��W5d}~XYnXdS)Nrr2rG)rr�ryr�r�r�rr*r�r�r�rBr�r�rrr;r>r�r�)r;r=r�rrr�_testOddCmsgSize�s2��������z%RFC3542AncillaryTest._testOddCmsgSizecCs�|j�tjtjd�|j��|dkr*dn|f}|j|jtt	�f|��\}}}}|�
|t	�|�||j�|�
|g�|j
|dtj|d�dS)NrhrTr�)r�r�rr*r�r�rfr�r�r�r�r�r�r�r�)r;r�rkrKr�rur�r�rrr�checkHopLimitTruncatedHeader�s"
�
���z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N�r�rk�r�rr�r:rrrr��s�z+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$|�|jj|jd��|�t�dSr,r�r:rrrr��sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nrr�r�r:rrr�testSingleCmsgTrunc0�s�z)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSingleCmsgTrunc0�sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nrhr�)r�r:rrr�testSingleCmsgTrunc1�sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSingleCmsgTrunc1�sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dSr�)r�rir:rrr�testSingleCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSingleCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jt�d�dd�dS)Nrrhr�)r�rrKr:rrr�testSingleCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSingleCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|j�tjtjd�|j��|�|jtt	�t�
t�d�\}}}}|�|t	�|�
||j�|j|dtjd�|�t|�d�|r�|d\}}}|�|tj�|�|tj�|�t|�t�dS)NrhTr�r)r�r�rr*r�r�rfr�r�r�rKrir�r�r�r�r�r�r�r�r�rrr�testSingleCmsgTruncInData�s&
�
�z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSingleCmsgTruncInDatasz/RFC3542AncillaryTest._testSingleCmsgTruncInDatacCs|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|d\}}}	|�|tj�|�|tjtjh�|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�dS)NrhTr�rr2r`)r�r�rr*r�r�r�rfr�r�r�r�r�r�r�r�rr�r�rir�rbr�r�)r;r�rkr�rur�r�rcrdrer~rrr�checkTruncatedSecondHeader	s6
�
�
��

z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jt�t�tjd�dSr�)r�rr�rir�r:rrr�testSecondCmsgTrunc0)s�z)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSecondCmsgTrunc0/sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|�t�t�d�dSr��r�rr�rir:rrr�testSecondCmsgTrunc14sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSecondCmsgTrunc19sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|�t�t�dt�dSr�r�r:rrr�testSecondCmsgTrunc2Int>s�z,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSecondCmsgTrunc2IntDsz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|�t�t�t�d�d�dSr�)r�rr�rirKr:rrr�testSecondCmsgTruncLen0Minus1Is
��z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSecondCmsgTruncLen0Minus1Osz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
CsT|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�t�t�t�
t�d�\}}}}|�|t
�|�||j�|j|dtjd�tjtjh}|�d�\}}}|�|tj�|�|�|�t	|�t�t�d�}	|	�|�|�|	dd�|�|	dd�|�rD|�d�\}}}|�|tj�|�|�|�t	|�t�|�|g�dS)NrhTr�rr2r`)r�r�rr*r�r�r�rfr�r�r�r�rirKr�r�r�r�r�r�r��pop�remover�rbr�r�r�)
r;r�rur�r�Z
cmsg_typesrcrdrer~rrr�testSecomdCmsgTruncInDataTs@
�
�
�



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$|�|jj|jd��|�t�dSr,r�r:rrr�_testSecomdCmsgTruncInDataysz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r`r)r`r)r)r)1r@rArBr�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��
s�






	


�
$�


�



�



�





















 
�


�


�


�


�
#r�c@seZdZdS)�SendrecvmsgUDPTestBaseN�r@rArBrrrrr��sr�rwc@seZdZdS)�SendmsgUDPTestNr�rrrrr��sr�rtc@seZdZdS)�RecvmsgUDPTestNr�rrrrr��sr�r�c@seZdZdS)�RecvmsgIntoUDPTestNr�rrrrr��sr�c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs |�|dd�|dd��dSr�r�r�rrrr��sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)r@rArBr�rrrrr��sr�r�r�r c@seZdZdS)�SendmsgUDP6TestNr�rrrrr��sr�c@seZdZdS)�RecvmsgUDP6TestNr�rrrrr��sr�c@seZdZdS)�RecvmsgIntoUDP6TestNr�rrrrr��sr�r*c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestNr�rrrrr��sr�c@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestNr�rrrrr��sr�c@seZdZdS)�SendrecvmsgTCPTestBaseNr�rrrrr��sr�c@seZdZdS)�SendmsgTCPTestNr�rrrrr��sr�c@seZdZdS)�RecvmsgTCPTestNr�rrrrr��sr�c@seZdZdS)�RecvmsgIntoTCPTestNr�rrrrr��sr�c@seZdZdS)�SendrecvmsgSCTPStreamTestBaseNr�rrrrr��sr�z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr4r5r�c@seZdZdS)�SendmsgSCTPStreamTestNr�rrrrr��sr�cseZdZ�fdd�Z�ZS)�RecvmsgSCTPStreamTestc
sRztt|���Wn:tk
rL}z|jtjkr2�|�d�W5d}~XYnXdS�Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rEr�r4rr;�ENOTCONNrZ�r;r�rMrrr4�sz$RecvmsgSCTPStreamTest.testRecvmsgEOF�r@rArBr4rQrrrMrr��sr�cseZdZ�fdd�Z�ZS)�RecvmsgIntoSCTPStreamTestc
sRztt|���Wn:tk
rL}z|jtjkr2�|�d�W5d}~XYnXdSr�)rEr�r4rr;r�rZr�rMrrr4�sz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr�rrrMrr��sr�c@seZdZdS)�SendrecvmsgUnixStreamTestBaseNr�rrrrr��sr�r�c@seZdZdS)�SendmsgUnixStreamTestNr�rrrrr��sr�c@seZdZdS)�RecvmsgUnixStreamTestNr�rrrrr�sr�c@seZdZdS)�RecvmsgIntoUnixStreamTestNr�rrrrr
srr&rac@seZdZdS)�RecvmsgSCMRightsStreamTestNr�rrrrrsrc@seZdZdS)�RecvmsgIntoSCMRightsStreamTestNr�rrrrrsrcsDeZdZ�fdd�ZdZeed�r0dZdd�ZndZd	d�Z�Z	S)
�InterruptedTimeoutBasecs2t���t�tjdd��}|�tjtj|�dS)NcSsddSr�r)ZsignumrMrrrr�)r�z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rEr<r�r�rO)r;Zorig_alrm_handlerrMrrr<&s

�zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCst�tj|�dSr+)r�r�ITIMER_REAL�r;Zsecondsrrr�setAlarm5szInterruptedTimeoutBase.setAlarmr�cCst�|�dSr+)r�r�rrrrr;s)
r@rArBr<r0rr��
alarm_timerrQrrrMrr!s

r�siginterruptr�rz+Don't have signal.alarm or signal.setitimercsleZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	e
j
d
�dd��Ze	e
j
d�dd��Z�Z
S)�InterruptedRecvTimeoutTestcst���|j�|j�dSr+)rEr<r6r�r0r:rMrrr<Hs
z InterruptedRecvTimeoutTest.setUpc	OsBz0|�|j�|�t��}|||�W5QRXW5|�d�XdSr�)rrrr��r;r]rKrLr"rrr�checkInterruptedRecvLs
z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|�|jjd�dSr�)rr6r�r:rrr�testInterruptedRecvTimeoutVsz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs|�|jjtd��dSr�)rr6�	recv_intor�r:rrr�testInterruptedRecvIntoTimeoutYsz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|�|jjd�dSr�)rr6rOr:rrr�testInterruptedRecvfromTimeout\sz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs|�|jjtd��dSr�)rr6�
recvfrom_intor�r:rrr�"testInterruptedRecvfromIntoTimeout_sz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutrtcCs|�|jjd�dSr�)rr6rtr:rrr�testInterruptedRecvmsgTimeoutbsz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr�cCs|�|jjtd�g�dSr�)rr6r�r�r:rrr�!testInterruptedRecvmsgIntoTimeoutfsz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)r@rArBr<rr
rrrr�rrrrQrrrMrr
As



r
csteZdZ�fdd�Zdd�Zdd�Ze�dd�d	d
��Ze�dd�dd��Z	e�dd�e
ejd
�dd���Z�Z
S)�InterruptedSendTimeoutTestcspt���|��|_|�|jj�tj|jd�}|�	�|j
��\|_}|�|jj�|�
�|j�|j�dS)N)�target)rEr<r�r�rOrrG�Thread�	doConnect�startr6r�r�r�r�r0)r;Z
cli_threadr�rMrrr<vs

z InterruptedSendTimeoutTest.setUpcCs|j�|j�dSr+)r�r�r�r:rrrr�sz$InterruptedSendTimeoutTest.doConnectc	OsDz2|�t��}|�|j�|||�qW5QRXW5|�d�XdSr�)rrr�rrrrr�checkInterruptedSend�s
z/InterruptedSendTimeoutTest.checkInterruptedSendrsrZcCs|�|jjd�dSr)rr�r�r:rrr�testInterruptedSendTimeout�sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|�|jjd|j�dSr)rr�rr�r:rrr�testInterruptedSendtoTimeout�s�z7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrwcCs|�|jjdg�dSr)rr�rwr:rrr�testInterruptedSendmsgTimeout�sz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)r@rArBr<rrrZrequires_mac_verrrr�rrrQrrrMrrms	





rc@seZdZdd�Zdd�ZdS)�
TCPCloserTestcCsh|j��\}}|��|j}t�|gggd�\}}}|�||g�|�|�d�d�|��|��dS)N��?rhr�)r6r�rr�r~r�r�)r;r�r�Zsdr�rWr�rrr�	testClose�szTCPCloserTest.testClosecCs |j�t|jf�t�d�dS�Nr)r�r�r�r8r�r�r:rrr�
_testClose�szTCPCloserTest._testCloseN)r@rArBr r"rrrrr�s
rc@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr�cCstj||d�dSr�)r�rFr�rrrrF�szBasicSocketPairTest.__init__cCs\|�|tj�ttd�r*|�|jtj�n|�|jtj�|�|jtj�|�|j	d�dS)Nr�r)
rrrr�rr�r4r�r5rr�rrr�_check_defaults�s
z#BasicSocketPairTest._check_defaultscCs|�|j�dSr+)r$r�r:rrr�
_testDefaults�sz!BasicSocketPairTest._testDefaultscCs|�|j�dSr+)r$r6r:rrr�testDefaults�sz BasicSocketPairTest.testDefaultscCs|j�d�}|�|t�dSr��r6r�r�r�r�rrrr��szBasicSocketPairTest.testRecvcCs|j�t�dSr+�r�r�r�r:rrrr��szBasicSocketPairTest._testRecvcCs|j�t�dSr+�r6r�r�r:rrr�testSend�szBasicSocketPairTest.testSendcCs|j�d�}|�|t�dSr��r�r�r�r�r�rrr�	_testSend�szBasicSocketPairTest._testSendN)r�)r@rArBrFr$r%r&r�r�r*r,rrrrr#�s
	r#cs�eZdZdd�Z�fdd�Z�fdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Ze�
eed�preed�d�e�ejd�dd���Zdd�Zdd�Zdd�Z�ZS)�PurePythonSocketPairTestcCs4zt�tj�WStk
r.t�tj�YSXdSr+)rr�r�rr4r:rrrr��sz#PurePythonSocketPairTest.socketpaircs0ttd�rtj|_tjt_nd|_t���dS)Nr�)rrrr��_orig_spZ_fallback_socketpairrEr<r:rMrrr<�s


zPurePythonSocketPairTest.setUpcs t���|jdk	r|jt_dSr+)rEr>r.rr�r:rMrrr>�s

z!PurePythonSocketPairTest.tearDowncCs|j�d�}|�|t�dSr�r'r�rrr�	test_recv�sz"PurePythonSocketPairTest.test_recvcCs|j�t�dSr+r(r:rrr�
_test_recvsz#PurePythonSocketPairTest._test_recvcCs|j�t�dSr+r)r:rrr�	test_sendsz"PurePythonSocketPairTest.test_sendcCs|j�d�}|�|t�dSr�r+r�rrr�
_test_sendsz#PurePythonSocketPairTest._test_sendcCs$t�tj�\}}|��|��dSr+)rr�r4r�r;r�r�rrr�	test_ipv4sz"PurePythonSocketPairTest.test_ipv4cCsdSr+rr:rrr�
_test_ipv4sz#PurePythonSocketPairTest._test_ipv4r*�IPV6_V6ONLY� IPV6_V6ONLY option not supported�IPv6 required for this testcCs$t�tj�\}}|��|��dSr+)rr�r�rr3rrr�	test_ipv6sz"PurePythonSocketPairTest.test_ipv6cCsdSr+rr:rrr�
_test_ipv6sz#PurePythonSocketPairTest._test_ipv6c	s�tjj�d���fdd�}d}}z.|tj_|�t��t��\}}W5QRXW5�tj_�rf���|rr|��|r~|��XdS)Nc	sh�|�}�dkrdt�tjtj����d�z��|dd��Wnttfk
rXYnX��d�|S)NFr�T)rr4r5rr��BlockingIOError�InterruptedError)r;r!�Zinject_sockZorig_getsocknamerr�inject_getsocketname#s

z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)rr�rrrr�)r;r>Zsock1Zsock2rr=r�$test_injected_authentication_failuresz=PurePythonSocketPairTest.test_injected_authentication_failurecCsdSr+rr:rrr�%_test_injected_authentication_failure@sz>PurePythonSocketPairTest._test_injected_authentication_failure)r@rArBr�r<r>r/r0r1r2r4r5r�r/rrr-rr�r9r:r?r@rQrrrMrr-�s$	
�!r-c@s�eZdZd&dd�Zdd�Zdd�Zdd	�Zejd
d��Z	e�e�Z
e�e
ed�d
�e�ddd�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%S)'�NonBlockingTCPTestsr�cCst��|_tj||d�dSr�)rGrm�eventr�rFr�rrrrFJs
zNonBlockingTCPTests.__init__cCsh|�|j��|�|dk}|�|��|�tdk	rd|dk}t�|tjtj�}|�t|tj@�|�dS)N�)	r�r6rt�getblockingr
�F_GETFLr��
O_NONBLOCK�bool)r;r�r0ZblockingZfd_blocking�flagrrr�assert_sock_timeoutNsz'NonBlockingTCPTests.assert_sock_timeoutcCs�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�dS)NTFrCrrs)r6rrIr�r:rrr�testSetBlocking_sz#NonBlockingTCPTests.testSetBlockingcCsdSr+rr:rrr�_testSetBlockingssz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|�d�|j�d�|�|j��d�|j�|jd�|�|j���dS)Nrzneeds UINT_MAX < ULONG_MAXFrCrh)	rcr�Z	ULONG_MAXrZr6rr�rtr�r�rrr�testSetBlocking_overflowvs
z,NonBlockingTCPTests.testSetBlocking_overflowrztest needs socket.SOCK_NONBLOCKr���cCs4|j��t�tjtjtjB�|_|�|jd�dSr�)r6rrr4r5rrIr:rrr�testInitNonBlocking�s


�z'NonBlockingTCPTests.testInitNonBlockingcCsdSr+rr:rrr�_testInitNonBlocking�sz(NonBlockingTCPTests._testInitNonBlockingc	CsLtd��:|j�d�|j��\}}|�|j�|�|���W5QRXdS)Nrs)r1r6r�r�rOrr�rtr�rrr�testInheritFlagsBlocking�s

z,NonBlockingTCPTests.testInheritFlagsBlockingcCs|j�t|jf�dSr+�r�r�r�r8r:rrr�_testInheritFlagsBlocking�sz-NonBlockingTCPTests._testInheritFlagsBlockingc	CsRd}t|��<|j�d�|j��\}}|�|j�|�|��|�W5QRXdS)Ng4@rs)r1r6r�r�rOrr�rt)r;Zdefault_timeoutr�r�rrr�testInheritFlagsTimeout�s
z+NonBlockingTCPTests.testInheritFlagsTimeoutcCs|j�t|jf�dSr+rRr:rrr�_testInheritFlagsTimeout�sz,NonBlockingTCPTests._testInheritFlagsTimeoutc	Cs�|j�d�t��}|�t��|j��\}}W5QRXt��|}|�|d�|j�	�t
�
|jgggt�\}}}|j|kr�|�d�|j��\}}|�
|j�|�|���dS)Nrrz'Error trying to do accept after select.)r6rr��	monotonicrr;r�r�rBrfr~�MAIN_TIMEOUTrrOrr�rt)r;Z
start_timer�r�Zdtr�rWr�rrr�
testAccept�s


zNonBlockingTCPTests.testAcceptcCs |j��|j�t|jf�dSr+)rBryr�r�r�r8r:rrr�_testAccept�s
zNonBlockingTCPTests._testAcceptc	Cs�|j��\}}|�|j�|�d�|�t��|�tt	��}W5QRX|j
��t�|gggt
�\}}}||kr||�d�|�tt	��}|�|t	�dS)Nrz0Error during select call to non-blocking socket.)r6r�rOrrrr;r�r�r�rBrfr~rWrr�)r;r�r�r�r�rWr�rrrr��s


zNonBlockingTCPTests.testRecvcCs,|j�t|jf�|j��|j�t�dSr+)r�r�r�r8rBryr�r�r:rrrr��s
zNonBlockingTCPTests._testRecvN)r�)r@rArBrFrIrJrKrr.rLZ_testSetBlocking_overflowr�r-rr�requires_linux_versionrOrPrQrSrTrUrXrYr�r�rrrrrAHs*


�	rAc@s�eZdZdZdZdZdZdZeZ	dZ
eZd:dd	�Zd
d�Z
dd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z d2d3�Z!d4d5�Z"d6d7�Z#d8d9�Z$dS);�FileObjectClassTestCaserEr�strictNrr�r�cCstj||d�dSr�r�r�rrrrF�sz FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_t�|�|jj|j	|j
|j|j|j
d�|_dS)NcSsg|]}t���qSr)rGrm�r�r2rrrr�sz1FileObjectClassTestCase.setUp.<locals>.<listcomp>r��encoding�errors�newline)r��evt1�evt2�
serv_finished�cli_finishedr�r<r�r��	read_moder[r_r`ra�	read_filer:rrrr<s�
�zFileObjectClassTestCase.setUpcCs6|j��|j��|�|jj�d|_t�|�dSr+)rdrfrgrr�closedr�r>r:rrrr>s


z FileObjectClassTestCase.tearDowncCs0t�|�|jj|j|j|j|j|jd�|_	dS)Nr^)
r�rr�r��
write_moder[r_r`ra�
write_filer:rrrrs
�z#FileObjectClassTestCase.clientSetUpcCs6|j��|j��|�|jj�d|_t�|�dSr+)rerfrjrrrhr�r�r:rrrr�s


z&FileObjectClassTestCase.clientTearDownc	Csd|j�d�|j�d�|�tj|jjd�|�t��}|j�d�W5QRX|�dt	|j
��dS)Nrhr�z!cannot read from timed out object)r�r�rgr�rrr0rrr�r )r;Zctxrrr�testReadAfterTimeout!sz,FileObjectClassTestCase.testReadAfterTimeoutcCs.|j�|jdd��|j��|j��dS)Nrr�)rjrW�	write_msg�flushrdryr:rrr�_testReadAfterTimeout-s
z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|j�t|j�d�}|j�d�}||}|�||j�dSr�)rgr�r��read_msgr�)r;�	first_segZ
second_segr�rrr�
testSmallRead2sz%FileObjectClassTestCase.testSmallReadcCs|j�|j�|j��dSr+�rjrWrlrmr:rrr�_testSmallRead9sz&FileObjectClassTestCase._testSmallReadcCs|j��}|�||j�dSr+)rgr�r�ror�rrr�testFullRead=s
z$FileObjectClassTestCase.testFullReadcCs|j�|j�|j��dSr+)rjrWrlrr:rrr�
_testFullReadBsz%FileObjectClassTestCase._testFullReadcCs:t|j��}|j�d�}|sq(||7}q|�||j�dSr�)r�rorgr�r�)r;r��charrrr�testUnbufferedReadFs
z*FileObjectClassTestCase.testUnbufferedReadcCs|j�|j�|j��dSr+rrr:rrr�_testUnbufferedReadPsz+FileObjectClassTestCase._testUnbufferedReadcCs|j��}|�||j�dSr+)rg�readliner�ro�r;�linerrr�testReadlineTs
z$FileObjectClassTestCase.testReadlinecCs|j�|j�|j��dSr+rrr:rrr�
_testReadlineYsz%FileObjectClassTestCase._testReadlinecCs&|j��|j��}|�||j�dSr+)r�rrgr�r�ror�rrr�testCloseAfterMakefile]s

z.FileObjectClassTestCase.testCloseAfterMakefilecCs|j�|j�|j��dSr+rrr:rrr�_testCloseAfterMakefiledsz/FileObjectClassTestCase._testCloseAfterMakefilecCs@|j��|j�tt��}t|jt�r.|�	�}|�
||j�dSr+)rgrr�r�r�r�r�ror��decoder�r�rrr�testMakefileAfterMakefileClosehs

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs|j�|j�|j��dSr+rrr:rrr�_testMakefileAfterMakefileCloseosz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|�|jj�dSr+)rrgrhr:rrr�testClosedAttrssz&FileObjectClassTestCase.testClosedAttrcCs|�|jj�dSr+)rrjrhr:rrr�_testClosedAttrvsz'FileObjectClassTestCase._testClosedAttrcCs,|�|jj|j�|�|jj|j���dSr+)r�rgr�rfr�r�r	r:rrr�testAttributesysz&FileObjectClassTestCase.testAttributescCs,|�|jj|j�|�|jj|j���dSr+)r�rjr�rir�r�r	r:rrr�_testAttributes}sz'FileObjectClassTestCase._testAttributescCs8|j��|�t|jj�|j��|�t|jj�dSr+)rgrrrur	r�rr�r:rrr�
testRealClose�s

z%FileObjectClassTestCase.testRealClosecCsdSr+rr:rrr�_testRealClose�sz&FileObjectClassTestCase._testRealClose)r�)%r@rArBr[r_r`rarfr�rorirlrFr<r>rr�rkrnrqrsrtrurwrxr|r}r~rr�r�r�r�r�r�r�r�rrrrr[�sB


r[c@s`eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�!UnbufferedFileObjectClassTestCasercCsL|j��}|�|d|j�|j�dd�|_|j��}|�|d|j�dS)N�A. rr�B. )rgryr�rlr�r�rzrrr�testUnbufferedReadline�s


z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|j�d|j�|j�d|j�|j��dS)Nr�r�rrr:rrr�_testUnbufferedReadline�sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|j��|j�d�}|�||j�|j��|�t|jjd�dSr�)r�rr�r�rorgrrr�rrr�testMakefileClose�s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|j�|j�|j��dSr+rrr:rrr�_testMakefileClose�sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t�|j�}|j��t�|j�}|�|d|�dSr�)rPrOr�rgrr�)r;Zrefcount_beforeZrefcount_afterrrr�testMakefileCloseSocketDestroy�s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdSr+rr:rrr�_testMakefileCloseSocketDestroy�szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|j�d�|�|j�td��d�|�|j�t|j�d�d�|j	�
�|j�d�|j�t|j�d�}|dkr�t
�d�|j�t|j�d�}td�}|j�|�}|�|d�||d|�}|�||j�|�|j�td��d�|�|j�d�d�dS)NFrsr�rg�?rVrh)r�rr�rg�readintor�r�r�rorbrfrcryr�r�)r;rpr�rRr�rrr�testSmallReadNonBlocking�s 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|j�d�|j�|j�|j��|j��|j�d�dS)Nr�@)	rbryrjrWrlrmrcrfrdr:rrr�_testSmallReadNonBlocking�s


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|j�d�|jr|�|j�dS)Nr�)rery�serv_skippedrZr:rrr�testWriteNonBlocking�sz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCstd|_|j�d�dtj}d}|j�|�}|�|d�t|�D](}|j�|�}|dkr\qp|�|d�q@d|_dS)NFr�rsrz$failed to saturate the socket buffer)	r�r�rrr�rjrWr?r�)r;ZBIGZLIMITrRr2rrr�_testWriteNonBlocking�s
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)r@rArBr[r�r�r�r�r�r�r�r�r�r�rrrrr��s
		r�c@seZdZdZdS)�#LineBufferedFileObjectClassTestCaserhN�r@rArBr[rrrrr��sr�c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�Nr�rrrrr��sr�c@s&eZdZdZe�d�ZdZeZdZ	dS)�"UnicodeReadFileObjectClassTestCaserrr�rN�
r@rArBrfr�r�rorirlrarrrrr�s

r�c@s&eZdZdZeZdZe�d�ZdZ	dS)�#UnicodeWriteFileObjectClassTestCaserr�rrN)
r@rArBrfr�rorir�rlrarrrrr�s

r�c@s,eZdZdZe�d�ZdZe�d�ZdZ	dS)�'UnicodeReadWriteFileObjectClassTestCaserrr�rNr�rrrrr�s


r�c@seZdZdd�ZdS)�NetworkConnectionTestcCst�t|jf�|_|j|_dSr+)r�create_connectionr�r8r�r�r:rrrr"sz!NetworkConnectionTest.clientSetUpN)r@rArBrrrrrr�sr�c@seZdZdS)�
BasicTCPTest2Nr�rrrrr�(sr�c@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGst�d��dS)Nz	timed out)rr0r�rrrr�/sz,NetworkConnectionNoServer.MockSocket.connectN)r@rArBr�rrrr�
MockSocket.sr�ccs&tj}|jt_z
dVW5|t_XdSr+)rr�)r;Z
old_socketrrr�mocked_socket_module2s

z.NetworkConnectionNoServer.mocked_socket_modulec	Cs^t��}t�tjtj�}|�|j�|�t��}|�	t
|f�W5QRX|�|jj
t
j�dSr+)rr�rr4r5rOrrrr�r�r�r r;ZECONNREFUSED)r;r8r�r"rrr�test_connect<sz&NetworkConnectionNoServer.test_connectc	CsHt��}|�t��}t�t|f�W5QRXt��}|�|j	j
|�dSr+)rr�rrrr�r�Zget_socket_conn_refused_errsrr r;)r;r8r"Zexpected_errnosrrr�test_create_connectionDs
z0NetworkConnectionNoServer.test_create_connectioncCs�|���nzt�tdf�WnJtjk
r2Yn@tk
rf}ztjsT|jtj	krV�W5d}~XYnX|�
d�W5QRXdS)Nrr)r�rr�r�r0rrr�r;ZEAFNOSUPPORTrr|rrr�test_create_connection_timeout\s
z8NetworkConnectionNoServer.test_create_connection_timeoutN)r@rArBrr��
contextlib�contextmanagerr�r�r�r�rrrrr�,s
	r�c@sveZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestr�cCstj||d�t�|�dSr�r�r�rrrrFmsz(NetworkConnectionAttributesTest.__init__cCst��|_dSr+)rr��source_portr:rrrrqsz+NetworkConnectionAttributesTest.clientSetUpcCs|j��d|_t�|�dSr+r�r:rrrr�ts
z.NetworkConnectionAttributesTest.clientTearDowncCs|j��\}}|��dSr+)r6r�rr�rrr�_justAcceptysz+NetworkConnectionAttributesTest._justAcceptcCs8tjt|jfdd�|_|�|jj�|�|jjd�dS)N�rr�)	rr�r�r8r�rOrr�rr:rrr�_testFamily~sz+NetworkConnectionAttributesTest._testFamilycCsHtjt|jfdd|jfd�|_|�|jj�|�|j�	�d|j�dS)Nr�r)r0Zsource_addressrh)
rr�r�r8r�r�rOrr�r�r:rrr�_testSourceAddress�s
�z2NetworkConnectionAttributesTest._testSourceAddressc	Csd|�t��dk�t�d�z$t�t|jf�|_|�|jj	�W5t�d�X|�
|j��d�dS)Nr�rrr.r/r�r�r8r�rOrr�rtr:rrr�_testTimeoutDefault�s
z3NetworkConnectionAttributesTest._testTimeoutDefaultc	Csh|�t��dk�t�d�z(tjt|jfdd�|_|�|jj	�W5t�d�X|�
|j��d�dS�Nr�rr�r:rrr�_testTimeoutNone�s
z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd�|_|�|j��d�dSr�)rr�r�r8r�r�rtr:rrr�_testTimeoutValueNamed�sz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8t�t|jfd�|_|�|jj�|�|j��d�dS)Nr�)	rr�r�r8r�rOrr�rtr:rrr�_testTimeoutValueNonamed�sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r�)r@rArBrFrr�r�Z
testFamilyr�ZtestSourceAddressr�ZtestTimeoutDefaultr�ZtestTimeoutNoner�ZtestTimeoutValueNamedr�ZtestTimeoutValueNonamedr�rrrrr�ks 
r�c@sBeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestr�cCstj||d�t�|�dSr�r�r�rrrrF�sz'NetworkConnectionBehaviourTest.__init__cCsdSr+rr:rrrr�sz*NetworkConnectionBehaviourTest.clientSetUpcCs|j��d|_t�|�dSr+r�r:rrrr��s
z-NetworkConnectionBehaviourTest.clientTearDowncCs2|j��\}}|�|j�t�d�|�d�dS)Nr��done!)r6r�rOrr�r�r�r�rrr�testInsideTimeout�s
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0t�t|jf�|_}|�d�}|�|d�dS)Nr�r�)rr�r�r8r�r�r�)r;r�rJrrr�_testInsideTimeout�s
z1NetworkConnectionBehaviourTest._testInsideTimeoutcs4tjt|jfdd�|_�|�tj�fdd��dS)Nrhrcs
��d�S)Nr�)r�r�r�rrr��r�zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)rr�r�r8r�rr0r:rr�r�_testOutsideTimeout�sz2NetworkConnectionBehaviourTest._testOutsideTimeoutN)r�)
r@rArBrFrr�r�ZtestOutsideTimeoutr�r�rrrrr��s
r�c@s6eZdZdd�Zdd�Ze�eed�d�dd��Z	d	S)
�TCPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j��dSr!)r6r�r�r�r:rr�
raise_timeout�sz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)�rrr0�r;r�rr:r�testTCPTimeout�s
�zTCPTimeoutTest.testTCPTimeoutcCs|d}z|j�d�|j��}WnJtjk
r>|�d�Yn,tk
rTd}Yn|�d�YnX|sx|�d�dS)NFrCz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r6r�r�rr0rr�r;�okr%rrr�testTimeoutZero�szTCPTimeoutTest.testTimeoutZeror�ztest needs signal.alarm()c
s
|j�d�Gdd�dt���fdd�}t�tj|�}z�z�z�zt�d�|j��}Wn`tjk
rt|�	d�YnL�k
r�Yn:|�	d	t
��dd�t�
�f�YnX|�	d
�W5t�d�XWn�k
r�|�	d�YnXW5t�tj|�XdS)Nr�c@seZdZdS)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr�rrrr�Alarm�sr�cs��dSr+r)r�rM�r�rr�
alarm_handler�sz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerrr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtzgot Alarm in wrong place)r6r�r�r�r�r�r�rr0rrP�exc_info�	traceback�
format_exc)r;r�r�r%rr�r�testInterruptedTimeout�s*
�z%TCPTimeoutTest.testInterruptedTimeoutN)
r@rArBr�r�r�r-rr�r�rrrrr��s�r�c@seZdZdd�Zdd�ZdS)�UDPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j�d�dS)Nrr�)r6r�r�r�r:rrr�sz4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)r�r�rr:r�testUDPTimeout
s
�zUDPTimeoutTest.testUDPTimeoutcCs~d}z|j�d�|j�d�}WnJtjk
r@|�d�Yn,tk
rVd}Yn|�d�YnX|sz|�d�dS)NFrCr�z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)z1recv() returned success when we did not expect it)r6r�r�rr0rrr�rrrr�szUDPTimeoutTest.testTimeoutZeroN)r@rArBr�r�rrrrr�sr�c@seZdZdd�Zdd�ZdS)�TestExceptionscCsJ|�ttt��|�ttjt��|�ttjt��|�ttjt��dSr+)r�
issubclassrr�rrrr0r:rrr�testExceptionTree!sz TestExceptions.testExceptionTreec	Csbt�tjtjd�}t�tjtjd|���}|��|�|j�|�t��|�	d�W5QRXdS)NrF)
rr4r5r	rrOrrrr)r;Zsock0r�rrr�test_setblocking_invalidfd's�z)TestExceptions.test_setblocking_invalidfdN)r@rArBr�r�rrrrr�sr�rizLinux specific testc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TestLinuxAbstractNamespace�lcCs�d}t�tjtj��z}|�|�|��t�tjtj��L}|�|���|��d�&}|�|��|�|�|�	�|�W5QRXW5QRXW5QRXdS)Nspython-test-hello�r)
rr�r5rXr9r�r�r�r�Zgetpeername)r;r9�s1rZs3rrr�testLinuxAbstractNamespace9s
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec	CsLdd|jd}t�tjtj�� }|�|�|�|��|�W5QRXdS)NrG�hrh)�
UNIX_PATH_MAXrr�r5rXr�r��r;r9rrrr�testMaxNameDs
z&TestLinuxAbstractNamespace.testMaxNamec	Cs>dd|j}t�tjtj��}|�t|j|�W5QRXdS)N��h)r�rr�r5rrrXr�rrr�testNameOverflowJsz+TestLinuxAbstractNamespace.testNameOverflowcCs>t�tjtj�}z|�d�|�|��d�W5|��XdS)Nz
pythontest�
pythontest)rr�r5rrXr�r�rrrr�testStrNameOs

z&TestLinuxAbstractNamespace.testStrNamec	Cs>t�tjtj��$}|�td��|�|��d�W5QRXdS)Nr�)rr�r5rXr�r�r�rrrr�testBytearrayNameXsz,TestLinuxAbstractNamespace.testBytearrayNameN)	r@rArBr�r�r�r�r�r�rrrrr�4s	r�ztest needs socket.AF_UNIXc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestUnixDomaincCst�tjtj�|_dSr+)rr�r5r�r:rrrr<aszTestUnixDomain.setUpcCs|j��dSr+)r�rr:rrrr>dszTestUnixDomain.tearDownc
Cs<zt�|�WStk
r6|�d�|t����YnXdS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoder�rZr�rP�getfilesystemencoding�r;r�rrr�encodedgs��zTestUnixDomain.encodedc
CsXzt�||�WnBtk
rR}z$t|�dkr@|�d�|��n�W5d}~XYnXdS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rr�rr�rZr�)r;r�r�r�rrrrXrs��zTestUnixDomain.bindcCs|�|j��d�dS)N)rN)rr�r�r:rrrr�~szTestUnixDomain.testUnboundcCs@tj�tj�}|�|j|�|�tj|�|�	|j�
�|�dSr+)r�r��abspathr�TESTFNrXr�rOr�r�r�r�rrr�testStrAddr�szTestUnixDomain.testStrAddrcCsFtj�tj�}|�|j|�|��|�tj	|�|�
|j��|�dSr+)r�r�r�rr�rXr�r�rOr�r�r�r�rrr�
testBytesAddr�szTestUnixDomain.testBytesAddrcCsRtj�tj�}|�|�}|�|j|�dd��|�	tj
|�|�|j��|�dS)N�ascii�surrogateescape)
r�r�r�rZTESTFN_UNICODEr�rXr�r�rOr�r�r�)r;r�r�rrr�testSurrogateescapeBind�s

z&TestUnixDomain.testSurrogateescapeBindcCsTtjdkr|�d�tj�tj�}|�|j|�|�tj	|�|�
|j��|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLErZr�r�r�rXr�rOr�r�r�r�rrr�testUnencodableAddr�s

z"TestUnixDomain.testUnencodableAddrN)r@rArBr<r>r�rXr�r�r�r�r�rrrrr�^s	r�c@s�eZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
dd�Zdd�ZeZ
dd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestr�cCstj||d�dSr�r�r�rrrrF�szBufferIOTest.__init__cCsZt�ddgtt��}|j�|�}|�|tt��|��}|dtt��}|�|t�dS�Nr�r)r�r�r�r�rr�rB�r;r�r=r�rrr�testRecvIntoArray�szBufferIOTest.testRecvIntoArraycCstt�}|j�|�dSr+�rbr�r�r��r;r�rrr�_testRecvIntoArray�szBufferIOTest._testRecvIntoArraycCsDtd�}|j�|�}|�|tt��|dtt��}|�|t�dSr�)r�r�rr�r�r�r�rrr�testRecvIntoBytearray�s
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|j�t|��}|�|tt��|dtt��}|�|t�dSr�)r�r�rrGr�r�r�r�rrr�testRecvIntoMemoryview�s
z#BufferIOTest.testRecvIntoMemoryviewcCs^t�ddgtt��}|j�|�\}}|�|tt��|��}|dtt��}|�|t�dSr�)r�r�r�r�rr�rB�r;r�r=r�r�rrr�testRecvFromIntoArray�sz"BufferIOTest.testRecvFromIntoArraycCstt�}|j�|�dSr+r�r�rrr�_testRecvFromIntoArray�sz#BufferIOTest._testRecvFromIntoArraycCsHtd�}|j�|�\}}|�|tt��|dtt��}|�|t�dSr�)r�r�rr�r�r�r�rrr�testRecvFromIntoBytearray�s
z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|j�t|��\}}|�|tt��|dtt��}|�|t�dSr�)r�r�rrGr�r�r�r�rrr�testRecvFromIntoMemoryview�s
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|�t|jj|d�dS)NrVr�)r�rrur�rr�rrr�testRecvFromIntoSmallBuffer�sz(BufferIOTest.testRecvFromIntoSmallBuffercCs|j�t�dSr+r�r:rrr�_testRecvFromIntoSmallBuffer�sz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|j�|�|j�|d�dSr�)r�r�rr�rrr�testRecvFromIntoEmptyBuffer�sz(BufferIOTest.testRecvFromIntoEmptyBufferN)r�)r@rArBrFr�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�r�Z_testRecvFromIntoBytearrayr�Z_testRecvFromIntoMemoryviewr�r�r�Z_testRecvFromIntoEmptyBufferrrrrr��s"
r�i�����c
Cspttd�sdSztd�}Wntttfk
r6YdSX|�*|D]}|�d�rBW5QR�dSqBW5QRXdS)N�AF_TIPCFz
/proc/modulesztipc T)rrr
�FileNotFoundError�IsADirectoryErrorr!rp)rr{rrr�isTipcAvailable�s

rz6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZdd�ZdS)�TIPCTestcCs�t�tjtj�}t�tjtj�}|�|j�|�|j�|�tjtjd�tjt	t
tf}|�|�tj
t	t
ttt
d�df}|�t|�|�d�\}}|�|��|�|�|t�dS)Nrhr�rr�)rrr%rOrr�r&r'�TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERrX�TIPC_ADDR_NAMEr>rr�rOr�r�)r;r�r��srvaddrZsendaddrr�Zrecvaddrrrr�testRDMs$�
�zTIPCTest.testRDMN)r@rArBrrrrrrsrc@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�TIPCThreadableTestr�cCstjj||d�t�|�dSr�r�r�rrrrF*szTIPCThreadableTest.__init__cCs�t�tjtj�|_|�|jj�|j�tjtjd�tj	t
ttf}|j�
|�|j��|��|j��\|_|_|�|jj�dSr�)rrr5r�rOrr�r&r'rrrrrXr9rgr�r�r�)r;r
rrrr<.s�
zTIPCThreadableTest.setUpcCsdt�d�t�tjtj�|_|�|jj�tjt	t
ttt
d�df}|j�
|�|j��|_dS)Nr�r�r)r�r�rrr5r�rOrr	rrr>rr�r��cliaddr)r;r�rrrr:s
�zTIPCThreadableTest.clientSetUpcCs,|j�d�}|�|t�|�|j|j�dSr�)r�r�r�r�r
r�r�rrrr�FszTIPCThreadableTest.testStreamcCs|j�t�|j��dSr+r�r:rrrr�KszTIPCThreadableTest._testStreamN)r�r�rrrrr's

rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestc	Cs�t���}|�|j�W5QRX|�|j�t���}|��W5QRX|�|j�t���}|�t|jd�W5QRX|�|j�dS�Nr)rr�r�rrrrr�r�rrr�_testSocketClassRs


z$ContextManagersTest._testSocketClasscCs2|j��\}}|�|j�|�d�}|�|�dSr��r6r�rOrr�r��r;r�r�rJrrr�testCreateConnectionBase`s
z,ContextManagersTest.testCreateConnectionBasec	CsX|j��}t�|��.}|�|j�|�d�|�|�d�d�W5QRX|�	|j�dS)Nrr�)
r6r�rr�r�r�r�r�r�r�r;r9r�rrr�_testCreateConnectionBasefs

z-ContextManagersTest._testCreateConnectionBasecCs2|j��\}}|�|j�|�d�}|�|�dSr�rrrrr�testCreateConnectionClosens
z-ContextManagersTest.testCreateConnectionClosec	CsH|j��}t�|��}|��W5QRX|�|j�|�t|j	d�dSr)
r6r�rr�rrr�rrr�rrrr�_testCreateConnectionClosets

z.ContextManagersTest._testCreateConnectionCloseN)r@rArBrrrrrrrrrrPs
rc@s�eZdZe�eed�d�e�ddd�dd���Z	dd	�Z
d
d�Zdd
�Ze�
edkd�dd��Ze�
edkd�dd��Zdd�ZdS)�InheritanceTestr�zSOCK_CLOEXEC not definedr�rMrNc	CsDt�tjtjtjB��$}|�|jtj�|�|���W5QRXdSr+)rr4r5r�r�r�r��get_inheritablerrrr�test_SOCK_CLOEXEC}s
�z!InheritanceTest.test_SOCK_CLOEXECc	Cs,t��}|�|�|��d�W5QRXdSr�)rr�rr�rrr�test_default_inheritable�sz(InheritanceTest.test_default_inheritablec
CsLt��}|�6|��}|��|�|�|��d�W5QRXW5QRXdSr�)rr�rr�r)r;r�Znewsockrrr�test_dup�szInheritanceTest.test_dupc	CsPt��}|�:|�d�|�|��d�|�d�|�|��d�W5QRXdS)NTF)r�set_inheritabler�rr�rrr�test_set_inheritable�s

z$InheritanceTest.test_set_inheritableNr�c	Csnt��}|�X|��}|�|��d�t�|tj�}|tjM}t�|tj|�|�|��d�W5QRXdSr)rr	r�rr
�F_GETFD�
FD_CLOEXECZF_SETFD)r;r�rr�rrr�test_get_inheritable_cloexec�sz,InheritanceTest.test_get_inheritable_cloexecc	Csht��}|�R|��}|�t�|tj�tj@tj�|�d�|�t�|tj�tj@d�W5QRXdS)NTr)rr	r�r
rr r)r;r�rrrr�test_set_inheritable_cloexec�s�
�z,InheritanceTest.test_set_inheritable_cloexeccCsHt��\}}|�|j�|�|j�|�|��d�|�|��d�dSr�)rr�rOrr�r)r;r�rrrr�test_socketpair�s
zInheritanceTest.test_socketpair)r@rArBr�r-rrrrZrrrrr/r
r!r"r#rrrrr|s�	


rrzSOCK_NONBLOCK not definedc@s,eZdZddd�Ze�ddd�dd	��Zd
S)�NonblockConstantTestTrCcCs�|rj|�|jtj�|�|��|�|�t�|tjtj	�tj	@�|dkrZ|�
|���q�|�|���nL|�|jtj�|�|��d�|�
t�|tjtj	�tj	@�|�|���dSr�)r�r�rr5rtrr
rEr�rFr�rD)r;r�nonblockr0rrr�
checkNonblock�s�	�z"NonblockConstantTest.checkNonblockr�rMrNc	Cs^t�tjtjtjB���}|�|�|�d�|j|dd�|�d�|�|�|�d�|j|dd�|�d�|j|dd�|�d�|j|dd�W5QRXt��}t�d�t���}|�|�W5QRXt�d�t���}|�|d�W5QRXt�d�t���}|j|dd�W5QRXt�d�t���}|�|d�W5QRXt�|�dS)NrhF)r%rg@rrC)	rr4r5rr&rr�r.r/)r;r�trrr�test_SOCK_NONBLOCK�s:
�














z'NonblockConstantTest.test_SOCK_NONBLOCKN)TrC)r@rArBr&rrZr(rrrrr$�s
r$r,r-zneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|��}|��}t�|�}|��\}}|�|�|��|��dSr+)r{r�	fromsharer�r�r)rI�qZsdata�messagerrr�rrr�remoteProcessServers

z%TestSocketSharing.remoteProcessServerc	Cs�t��}tj|j|fd�}|��|j�|j�}|j��}|j�	�|�
|�d}|�
|�t�|�}g}|�
d�}|szq�|�|�qj|�	�d�|�}|�||�|��dS)N�rrKs
slapmahfror�r�)�multiprocessingrqZProcessr-rr6�share�pidr�rr�rr�r�rYr�r�)	r;r+rrJr�r,r�m�receivedrrr�	testShares&






zTestSocketSharing.testSharecCs@|j�t���}|�ttj|dd��|�ttj|d�dS)NrEr)r6r0r��getpidrrurr*)r;rJrrr�testShareLength3sz!TestSocketSharing.testShareLengthcCsb|�|��d�|�|��|���|�|j|j�|�|j|j�|jdkr^|�|j|j�dSr�)r�rtrr�r)r;Zorg�otherrrr�compareSockets8s
z TestSocketSharing.compareSocketscCs<|j�t���}t�|�}z|�|j|�W5|��XdSr+)r6r0r�r5rr*rr8)r;rJrrrr�testShareLocalHs

z TestSocketSharing.testShareLocalc
Cs�tjtjg}tjtjg}|D]|}|D]r}zt�||�}Wntk
rPYq$YnXz8|�t�	��}t�
|�}z|�||�W5|��XW5|��Xq$qdSr+)rr4r�r5r rrr0r�r5r*r8)r;Zfamilies�typesrr'�sourcerJZsharedrrr�	testTypesPs

zTestSocketSharing.testTypesN)
r@rArBrer-r4r6r8r9r<rrrrr)�s

#r)c@s�eZdZdZdZdZdZedd��Zedd��Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"d;S)<�SendfileUsingSendTesti�r_r�r�c	Cs~dd�}d�dd�t|j�D��}ttjd��$}||j|j�D]}|�|�q>W5QRXttjd��}|��|_	W5QRXdS)Ncss&||kr|V||8}q|r"|VdSr+r)Ztotal�steprrr�chunksps

z0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSsg|]}t�tj����qSr)�randomZchoice�stringZ
ascii_lettersrXr]rrrr�xs�z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r�r)
r�r��BUFSIZEr
rr��FILESIZErWr��FILEDATA)rIr?�chunkrZcsizerrr�
setUpClassns
�
z SendfileUsingSendTest.setUpClasscCst�tj�dSr+)rr�r�)rIrrr�
tearDownClass�sz#SendfileUsingSendTest.tearDownClasscCs6|j�t�|j��\}}|�|j�|�|j�|Sr+)r6r�rWr��TIMEOUTrOrr�rrr�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs,g}|�|j�}|sq"|�|�qd�|�Sr�)r�rBrYr�)r;r�r3rErrr�	recv_data�szSendfileUsingSendTest.recv_datacCs
t|d�S)NZ_sendfile_use_send�rur�rrr�meth_from_sock�sz$SendfileUsingSendTest.meth_from_sockc
Csr|j��}ttjd�}t�|��H}|�8}|�|�}||�}|�||j	�|�|�
�|j	�W5QRXW5QRXdS)Nr�r6r�r
rr�rr�rLr�rC�tell�r;r9�filer��meth�sentrrr�_testRegularFile�s

z&SendfileUsingSendTest._testRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dSr+�rIrJr�r�rCrD�r;r�rJrrr�testRegularFile�s
z%SendfileUsingSendTest.testRegularFilec
Cs||j��}t�|j�}t�|��R}|�B}|�|�}|�||j	�|�|�
�|j	�|�tj|j
|�W5QRXW5QRXdSr+)r6r��io�BytesIOrDrr�rr�rCrNrrr)r;r9rPr�rRrrr�_testNonRegularFile�s

�z)SendfileUsingSendTest._testNonRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dSr+rTrUrrr�testNonRegularFile�s
z(SendfileUsingSendTest.testNonRegularFilec
Cs�|j��}tjd}t|d��|�tj|�W5QRXt|d�}t�|��D}|�4}|�	|�}||�}|�
|d�|�
|��d�W5QRXW5QRXdS)N�2r�rr)r6r�rr�r
rOr�rr�rLr�rN)r;r9�filenamerPr�rQrRrrr�_testEmptyFileSend�s



z(SendfileUsingSendTest._testEmptyFileSendcCs"|��}|�|�}|�|d�dSr�)rIrJr�rUrrr�testEmptyFileSend�s
z'SendfileUsingSendTest.testEmptyFileSendc
Csz|j��}ttjd�}t�|��P}|�@}|�|�}||dd�}|�||j	d�|�|�
�|j	�W5QRXW5QRXdS)Nr�)�offsetrMrOrrr�_testOffset�s

z!SendfileUsingSendTest._testOffsetcCsB|��}|�|�}|�t|�|jd�|�||jdd��dS)Nr_rTrUrrr�
testOffset�s
z SendfileUsingSendTest.testOffsetc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�W5QRXW5QRXdS)Nrr�r�GKL�r��
r6r�r
rr�rr�rLr�rN�r;r9rPr�r�rQrRrrr�
_testCount�s

z SendfileUsingSendTest._testCountcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)Nrc�rIrJr�r�rD�r;r�r�rJrrr�	testCount�s

zSendfileUsingSendTest.testCountc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�W5QRXW5QRXdS)Nrr�rrhrdrerfrrr�_testCountSmall�s

z%SendfileUsingSendTest._testCountSmallcCs@d}|��}|�|�}|�t|�|�|�||jd|��dSr�rhrirrr�testCountSmalls

z$SendfileUsingSendTest.testCountSmallc
Cs�|j��}ttjd�}tj|dd��R}|�B}d}|�|�}||d|d�}|�||�|�|�	�|d�W5QRXW5QRXdS)Nrr�r駆��)r`r�rerfrrr�_testCountWithOffset	s

z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|��}|�|�}|�t|�|�|�||jd|d��dS)Nrmrnrhrirrr�testCountWithOffsets

z)SendfileUsingSendTest.testCountWithOffsetc
Csr|j��}ttjd�}t�|��H}|�8}|�d�|�|�}|�	t
||�|�	t
|j|�W5QRXW5QRXdS)NrF)r6r�r
rr�rr�rrLrrur�r;r9rPr�rQrrr�_testNonBlockings


z&SendfileUsingSendTest._testNonBlockingcCs |��}|�d�r|�d�dS)Nr_z$was not supposed to receive any data)rIr�r�r;r�rrr�testNonBlocking%s
z%SendfileUsingSendTest.testNonBlockingc
Csd|j��}ttjd�}tj|dd��6}|�&}|�|�}||�}|�||j	�W5QRXW5QRXdS)Nrr�r)
r6r�r
rr�rr�rLr�rCrOrrr�_testWithTimeout,s

z&SendfileUsingSendTest._testWithTimeoutcCs6|��}|�|�}|�t|�|j�|�||j�dSr+rTrUrrr�testWithTimeout4s
z%SendfileUsingSendTest.testWithTimeoutc
Cs`|j��}ttjd��@}t�|��*}|�d�|�|�}|�	tj
||�W5QRXW5QRXdS)Nrg{�G�z�?)r6r�r
rr�rr�r�rLrr0rqrrr�_testWithTimeoutTriggeredSend<s


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|��}|�d�dS)Ni�X)rIr�rsrrr�testWithTimeoutTriggeredSendDsz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdSr+rr:rrr�_test_errorsJsz"SendfileUsingSendTest._test_errorsc
Csttjd��:}tjtjd�� }|�|�}|�td||�W5QRXW5QRXttjd��4}t��� }|�|�}|�td||�W5QRXW5QRXttjd��t}t���`}|�|�}|jtd||dd�|jtd||d	d�|jtd||d
d�|jtd||dd�W5QRXW5QRXdS)Nrr�r5r�zbinary modezpositive integerr[rdr�rrE)	r
rr�rr rLr�rur�)r;rPrrQrrr�test_errorsMsR
�

�

����z!SendfileUsingSendTest.test_errorsN)#r@rArBrCrBrDrHrerFrGrIrJrLrSrVrYrZr]r^rarbrgrjrkrlrorprrrtrurvrwrxryrzrrrrr=dsB

		
	
	
	
		r=rz%os.sendfile() required for this test.c@seZdZdd�ZdS)�SendfileUsingSendfileTestcCs
t|d�S)NrrKr�rrrrLksz(SendfileUsingSendfileTest.meth_from_sockN)r@rArBrLrrrrr{esr{zAF_ALG requiredc@s|eZdZdd�Ze�dd�dd��Zdd�Ze�dd	�d
d��Ze�dd�d
d��Z	e�dd	�dd��Z
dd�Zdd�ZdS)�LinuxKernelCryptoAPIc
Csjt�tjtjd�}z|�||f�Wn<tk
r`}z|��t�t|�||��W5d}~XYnX|SdSr�)	rr'r%rXrrr�ZSkipTestr�)r;�typr�r�r�rrr�
create_algrs$zLinuxKernelCryptoAPI.create_algrr�c
Cs�t�d�}|�dd���}|��\}}|�"|�d�|�|�d�|�W5QRX|��\}}|�L|�dtj	�|�dtj	�|�dtj	�|�d	�|�|�d�|�W5QRXW5QRXdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabcrB�a�b�cr�)
rb�fromhexr~r�r�r�r�r�r�MSG_MORE�r;r�algo�oprjrrr�test_sha256s


z LinuxKernelCryptoAPI.test_sha256c
Cspt�d�}|�dd��P}|�tjtjd�|��\}}|�"|�d�|�	|�
d�|�W5QRXW5QRXdS)NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79rz
hmac(sha1)sJefeswhat do ya want for nothing?rB)rbr�r~r�r�SOL_ALG�ALG_SET_KEYr�r�r�r�r�rrr�test_hmac_sha1�s

z#LinuxKernelCryptoAPI.test_hmac_sha1r�c

Cs�t�d�}t�d�}d}t�d�}t|�}|�dd���z}|�tjtj|�|��\}}|�6|j	tj
|tjd�|�|�|�
|�|�|�W5QRX|��\}}|�,|j	|gtj|d�|�
|�|�|�W5QRXd	}	|g|	}
|��\}}|�&|j	|
tj
|d�|�||	�}W5QRX|�
t|�||	�|�
|d|�|�|��\}}|�(|j	|gtj|d�|�||	�}W5QRX|�
t|�||	�|�
|||	�W5QRXdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))r��ivr�)r�r�r�)rbr�r�r~r�rr�r�r��
sendmsg_afalg�ALG_OP_ENCRYPTr�r�r�r��ALG_OP_DECRYPT)
r;�keyr�r�Z
ciphertextZmsglenr�r�rjZ
multiplierZlongmsg�encZdecrrr�test_aes_cbc�sR



�
�
��z!LinuxKernelCryptoAPI.test_aes_cbcrEcCs�t�d�}t�d�}t�d�}t�d�}t�d�}t�d�}t|�}t|�}|�dd���N}	|	�tjtj|�|	�tjtjd|�|	�	�\}
}|
�v|
j
tj||tjd	�|
�
|tj�|
�
|�|
�|t|�|�}|�||||��|�|||d��W5QRX|	�	�\}
}|
�f||}
|
j
|
gtj||d
�|
�|t|�|�}|�||||��|�|||d��W5QRXt�d�j}|	�	�\}
}|
��||}
|
�|
gtjtj|tj�gtjtj|t|��|gtjtj||�gf�|
�t|
�|�}|�||||��|�|||d��W5QRX|	�	�\}
}|
�N|||}
|
j
|
gtj||d
�|
�t|
�|�}|�|||d��W5QRXW5QRXdS)NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r�r��assoclenr�)r�r�r�r	)rbr�r�r~r�rr�r�ZALG_SET_AEAD_AUTHSIZEr�r�r�r�r�r�r�rZStructrCrwZ
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENr�)r;r�r�ZplainZassocZexpected_ctZexpected_tagZtaglenr�r�r�rj�resr�Zpack_uint32rrr�test_aead_aes_gcm�sp





�
�
 � �� �z&LinuxKernelCryptoAPI.test_aead_aes_gcmc
Csn|�dd��X}t�d�}|�tjtj|�|��\}}|� |�d�}|�	t
|�d�W5QRXW5QRXdS)N�rngZdrbg_pr_sha256rU)r~r��urandomr�rr�r�r�r�r�r�)r;r�Z
extra_seedr�rjZrnrrr�test_drbg_pr_sha256s

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c
Cs�t�tjtjd�}|��|�t��|��W5QRX|�t��|jdd�W5QRX|�t��|�d�W5QRX|�t��|jtjdd�W5QRX|�t��|jtjdd�W5QRXW5QRXdS)Nr)r�rh)r�r�rE)rr'r%rr�r�r�r�rrr�test_sendmsg_afalg_argssz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc	Cs�t�tjtjd�}|�|j�|�t��|�d�W5QRX|�t	d��|�d�W5QRX|�t��|�d�W5QRX|�t	d��|�d�W5QRXdS)Nr)Z
tttttttttttttr�z
type too long)Zttttttttttttttr�)r�Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz
name too long)r�Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
rr'r%rOrrrrXr�rur�rrr�test_length_restriction!sz,LinuxKernelCryptoAPI.test_length_restrictionN)
r@rArBr~rrZr�r�r�r�r�r�r�rrrrr|os



(

>


r|�winzrequires Windowsc@s$eZdZddddddhZdd�Zd	S)
�TestMSWindowsTCPFlagsZ
TCP_MAXSEGZTCP_NODELAYZTCP_FASTOPENZTCP_KEEPCNTZTCP_KEEPIDLEZ
TCP_KEEPINTVLcs6dd�tt�D�}�fdd�|D�}��g|d�dS)NcSsg|]}|�d�r|�qS)ZTCP)rp�r�rrrrr�Cs
z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]}|�jkr|�qSr)�
knownTCPFlagsr�r:rrr�Ds
zANew TCP flags were discovered. See bpo-32394 for more information)r�rr�)r;Zprovided�unknownrr:r�test_new_tcp_flagsBs
�z(TestMSWindowsTCPFlags.test_new_tcp_flagsN)r@rArBr�r�rrrrr�3s�
r�c@s�eZdZdd�Zdd�Zdd�Ze�ee	d�p:ee	d�d	�e�
ejd
�dd���Z
e�e��d
�e�
ejd
�dd���ZdS)�CreateServerTestc	Cs�t��}t�d|f��.}|�|��dd�|�|��d|�W5QRXtjr�tjd|ftjd��.}|�|��dd�|�|��d|�W5QRXdS)Nrrrhr�r�)rr�r�
create_serverr�r�r�r��r;r8r�rrr�test_addressLs
�zCreateServerTest.test_addressc	Cs|t�d��&}|�|jtj�|�|jtj�W5QRXtjrxtjdtj	d��&}|�|jtj	�|�|jtj�W5QRXdS)Nr�r�rr�)
rr�r�rr4r�r5rr�r�)r;r�rrrr�test_family_and_typeWsz%CreateServerTest.test_family_and_typec	Cs�ttd�s0|�t��tjddd�W5QRXnht�d��"}|�tjtj�}|�|d�W5QRXtjddd��"}|�tjtj�}|�	|d�W5QRXdS)N�SO_REUSEPORT)r�rT)Z
reuse_portr)
rrrrur�r�r&r�r�r�)r;r��optrrr�test_reuse_port`s
z CreateServerTest.test_reuse_portr*r6r7r8c	Cs tjdtjd��}W5QRXdS)Nr�r�)rr�r�r�rrr�test_ipv6_only_defaultlsz'CreateServerTest.test_ipv6_only_default�dualstack_ipv6 not supportedc	Cs2tjdtjdd��}|�|jtj�W5QRXdS)Nr�T�rZdualstack_ipv6)rr�r�r�rr�rrr�test_dualstack_ipv6_familyts

�z+CreateServerTest.test_dualstack_ipv6_familyN)r@rArBr�r�r�r�r/rrr-rr�r�r�has_dualstack_ipv6r�rrrrr�Js	
��r�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Ze	�
ejd�d
d��Z
e	�e��d�e	�
ejd�dd���Ze	�e��d�e	�
ejd�dd���ZdS)�CreateServerFunctionalTestr�cCs
d|_dSr+)rvr:rrrr<�sz CreateServerFunctionalTest.setUpcCs|jdk	r|j�|j�dSr+)rvr�r0r:rrrr>�s
z#CreateServerFunctionalTest.tearDowncsJ��fdd�}t���|��j�tj||fd��_�j�����dS)Nc
sl|�^|��\}}|�B���j�|�d�}|sJW5QR�W5QR�dS|�|�W5QRXW5QRXdSr�)r�ryr0r�r�)r�r�rjr��rBr;rr�run�s
z3CreateServerFunctionalTest.echo_server.<locals>.runr.)rGrmr�r0rrvrrf)r;r�r�rr�r�echo_server�s

z&CreateServerFunctionalTest.echo_serverc	CsNtj|d��8}|�|j�|�|�|�d�|�|�d�d�W5QRXdS)Nr�rr�)rr�r0r�r�r�r�)r;r�rr�rrr�echo_client�s


z&CreateServerFunctionalTest.echo_clientc	CsBt��}t�d|f��"}|�|�|�d|ftj�W5QRXdS)Nrr)rr�rr�r�r�r4r�rrr�	test_tcp4�s
z$CreateServerFunctionalTest.test_tcp4r8c	CsHt��}tjd|ftjd��"}|�|�|�d|ftj�W5QRXdS)Nrr�r��rr�rr�r�r�r�r�rrr�	test_tcp6�s
�
z$CreateServerFunctionalTest.test_tcp6r�c	CsJt��}tjd|ftjdd��"}|�|�|�d|ftj�W5QRXdS)NrTr�r)rr�rr�r�r�r�r4r�rrr�test_dual_stack_client_v4�s�
z4CreateServerFunctionalTest.test_dual_stack_client_v4c	CsJt��}tjd|ftjdd��"}|�|�|�d|ftj�W5QRXdS)NrTr�r�r�r�rrr�test_dual_stack_client_v6�s�
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)r@rArBr0r<r>r�r�r�r�r-rr�r�r/rr�r�r�rrrrr�}s$
	��r�cCstttttttttt	t
g}|�tt
ttttttttttttg�|�t�|�t�|�t�|�ttg�|�t t!g�|�t"t#g�|�t$�|�t%�|�t&t'g�|�t(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=t>t?t@g�|�tA�tB�C�}tBjD|�tBjE|�dSr+)Frr�rr�r�r�r�r�r�r�r��extendrAr[r�r�r�r�r�r�r�r�r�rrr$rYr#r�r�rrr0rFrirkr|r�r�r�rJr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rr)r=r{r�rZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_main�s���




��

r��__main__)�r�Ztestrr;rWr�rr~r�r�r�rprPr�ror�r��weakrefrr�r�r�rr@r rA�_threadrvrGr/r�r
r�rXr�rWr��systemrrrrr"r&r(r*r-r�r1ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKrOrir�r3rCrDrRr^r`r�r�r�r�r/r-r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr0rFrfrirkr�r�r�r�r�r�r�r�r�r�r�r�rrrr3r8r;rJrVr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr
rrr#r-rAr[r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr$r�r)r=r{r|rpr�r�r�r�r@rrrr�<module>s�










	
3u��!$��$	
P
S
Z
*

>��.{7ww=#P;k7�


�	



�
��

�
��





�



�
�

�
��
 �)��7#j!$l


	?E9)ES��',C�<e�D3GC