Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/test_socket.cpython-310.opt-2.pyc

o

0�i���@sddlZddlmZddlmZddlmZddlmZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZddlZddlZddl Z zddl!Z!Wne"y�dZ!Ynwzddl#Z#Wne"y�dZ#Ynwej$Z$d�%d	�Z&d
Z'dZ(e�)�dkZ*zddl+Z+Wne"y�dZ+Ynwd
d�Z,dd�Z-dd�Z.dd�Z/dd�Z0dd�Z1dd�Z2dd�Z3dd�Z4ej5dd ��Z6e-�Z7e.�Z8e/�Z9e0�Z:e1�Z;e2�Z<e3�Z=e>e
d!�Z?e4�Z@e�d"�jAZBGd#d$�d$ejC�ZDGd%d&�d&ejC�ZEGd'd(�d(eE�ZFGd)d*�d*�ZGGd+d,�d,ejC�ZHGd-d.�d.ejC�ZIGd/d0�d0�ZJGd1d2�d2eDeJ�ZKGd3d4�d4eEeJ�ZLe�Me?d5�Gd6d7�d7eFeJ��ZNGd8d9�d9eHeJ�ZOGd:d;�d;eIeJ�ZPe�Qe#dud<�e�Me=d=�e�Me,�d>kd?�Gd@dA�dAejCeJ����ZRGdBdC�dCeK�ZSGdDdE�dEejCeJ�ZTGdFdG�dGejC�ZUGdHdI�dIeU�ZVGdJdK�dKeGeUeJ�ZWGdLdM�dMeVeW�ZXGdNdO�dOeU�ZYGdPdQ�dQeY�ZZGdRdS�dSeU�Z[GdTdU�dUe[�Z\GdVdW�dWe[�Z]GdXdY�dYe[�Z^GdZd[�d[e[�Z_Gd\d]�d]e[�Z`Gd^d_�d_e`�ZaGd`da�dae`�Zbdbdc�Zcddde�Zddfdg�ZeGdhdi�diejC�Zfe�Me7dj�Gdkdl�dlejC��Zge�Me7dj�Gdmdn�dneO��Zhe�Me8do�Gdpdq�dqejC��Zie�Me9dr�Gdsdt�dtejC��Zje�Me:du�Gdvdw�dwejC��Zke�Me:du�Gdxdy�dyeP��Zle�Me<dz�Gd{d|�d|ejC��Zme�Qe#dud<�e�Me=d=�Gd}d~�d~ejC���Zne�Me@d�Gd�d��d�ejC��ZoGd�d��d�eS�ZpGd�d��d�eL�Zqe�Me?d5�Gd�d��d�eN��ZrGd�d��d�eG�ZsGd�d��d�es�ZtGd�d��d�es�ZuGd�d��d�es�ZvGd�d��d�es�ZwGd�d��d�es�ZxGd�d��d�es�ZyGd�d��d�ey�ZzGd�d��d�ez�Z{Gd�d��d�ez�Z|Gd�d��d�es�Z}Gd�d��d�e}�Z~Gd�d��d�e}�ZGd�d��d�ete}�Z�Gd�d��d�ejC�Z�Gd�d��d�ey�Z�Gd�d��d�ey�Z�Gd�d��d�eueweWe]�Z�ede
j
d��Gd�d��d�e|e���Z�ede
j
d��Gd�d��d�ee���Z�ede
j
d��Gd�d��d�e�e���Z�Gd�d��d�eueweWea�Z�ede
j
d��e�Mej�d��eed�d��Gd�d��d�e|e�����Z�ede
j
d��e�Mej�d��eed�d��Gd�d��d�ee�����Z�ede
j
d��e�Mej�d��eed�d��Gd�d��d�e�e�����Z�ede
j
d��e�Mej�d��ede
d��eed�d��Gd�d„d�e�e������Z�ede
j
d��e�Mej�d��ede
d��eed�d��Gd�dĄd�ete�e������Z�e�Me?d5�Gd�dƄd�eueweWe^��Z�e�Me?d5�ede
j
d��Gd�dȄd�e|e����Z�e�Me?d5�ede
j
d��Gd�dʄd�ee����Z�e�Me?d5�ede
j
d��Gd�d̄d�e�e����Z�e�Me?d5�Gd�d΄d�eueweWeb��Z�ede
j
d��e�Mej�d��e�Me?d5�eed�d��Gd�dЄd�e|e������Z�ede
j
d��e�Mej�d��e�Me?d5�eed�d��Gd�d҄d�ee������Z�ede
j
d��e�Mej�d��e�Me?d5�eed�d��Gd�dԄd�e�e������Z�ede
j
d��e�Mej�d��e�Me?d5�ede
d��eed�d��Gd�dքd�e�e�������Z�ede
j
d��e�Mej�d��e�Me?d5�ede
d��eed�d��Gd�d؄d�ete�e�������Z�Gd�dڄd�exeXe\�Z�ede
j
d��Gd�d܄d�e{e���Z�ede
j
d��Gd�dބd�ee~e���Z�ede
j
d��Gd�d�d�e�e~e���Z�Gd�d�d�evexeXe_�Z�ede
j
d��e�Qe*d�eed�d�d�Gd�d�d�e{e�����Z�ede
j
d��e�Qe*d�eed�d�d�Gd�d�d�ee~e�����Z�ede
j
d��e�Qe*d�eed�d�d�Gd�d�d�e�e~e�����Z�Gd�d�d�exeXeZ�Z�ede
j
d��ede
d�Gd�d�d�e{e����Z�ede
j
d��ede
d�Gd�d�d�ee~e����Z�ede
j
d��ede
d�Gd�d��d�e�e~e����Z�ede
j
d�d��ede
d�d�d��Gd�d��d�e�e����Z�ede
j
d�d��ede
d�d�d��Gd�d��d�ete�e����Z�Gd�d��d��Z�eded��e�Me>ed���p~e>e�d��d�G�d�d��de�e]���Z�eded��e�Me>ed���p�e>e�d��d�G�d�d��de�eGeVe\���Z�G�d�d��deK�Z�G�d�d	��d	eT�Z�G�d
�d��deT�Z�G�d�d
��d
eK�Z�G�d�d��deS�Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de�ep�Z�G�d �d!��d!ejC�Z�G�d"�d#��d#eDeJ�Z�G�d$�d%��d%eDeJ�Z�G�d&�d'��d'eD�Z�G�d(�d)��d)eE�Z�e�Me?d5�G�d*�d+��d+eF��Z�G�d,�d-��d-ejC�Z�e�Mej�d.k�d/�G�d0�d1��d1ejC��Z�e�Me>e
d��d2�G�d3�d4��d4ejC��Z�G�d5�d6��d6eS�Z��d7Zd8ZÐd9ZĐd:�d;�Z�e�MeŃ�d<�G�d=�d>��d>ejC��Z�e�MeŃ�d<�G�d?�d@��d@ejCeJ��Z�G�dA�dB��dBeK�Z�G�dC�dD��dDejC�Z�e�Me>e
�dE��dF�G�dG�dH��dHejC��Z�e�MejːdIk�dJ�e�Me!�dK�G�dL�dM��dMeD���Z�G�dN�dO��dOeK�Z�e�Me>e�dP��dQ�G�dR�dS��dSe̓�Z�e�Me;�dT�G�dU�dV��dVejC��Z�e�Mej�dWk�dX�G�dY�dZ��dZejC��Z�e�Mej�ѐd[��d\�G�d]�d^��d^ejC��Z�G�d_�d`��d`ejC�Z�G�da�db��dbejC�Z�ede
�dc�ede
�dd�ede
d�G�de�df��dfejC����ZՐdg�dh�Z�eאdik�r�e�ءdSdS(j�N)�support)�	os_helper)�
socket_helper)�threading_helper)�proxyFuMichael Gilfix was hereሴ
�utf-8����AIXcCs~tdurdSttd�s
dSztdd��}t�|tjd�}Wd�n1s&wYWn
ty6YdSwt�d|�dS)N�IOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsock�rbz    �Ir)	�fcntl�hasattr�socket�open�ioctlr�OSError�struct�unpack)�f�r�r�7/opt/alt/python310/lib64/python3.10/test/test_socket.py�get_cid5s
���rc	C�@	zt�tjtjtj�}WnttfyYdSw|��dS�NFT)r�PF_CAN�SOCK_RAW�CAN_RAW�AttributeErrorr�close��srrr�_have_socket_canB��r$c	Crr)rr�
SOCK_DGRAM�	CAN_ISOTPr rr!r"rrr�_have_socket_can_isotpLr%r(c	Crr)rrr&�	CAN_J1939r rr!r"rrr�_have_socket_can_j1939Vr%r*c	C�>	zt�tjtjd�}WnttfyYdSw|��dS�NrFT)r�PF_RDS�SOCK_SEQPACKETr rr!r"rrr�_have_socket_rds`��r/c	Cr+r,)r�AF_ALGr.r rr!r"rrr�_have_socket_algjr0r2c	Cr+r,)r�
AF_QIPCRTRr&r rr!r"rrr�_have_socket_qipcrtrtr0r4cCs	t�}|duS�N)r)�cidrrr�_have_socket_vsock~sr7c	Crr)r�AF_BLUETOOTH�SOCK_STREAM�BTPROTO_RFCOMMr rr!r"rrr�_have_socket_bluetooth�s�r;c	cs8�t��}zt�|�dVWt�|�dSt�|�wr5)r�getdefaulttimeout�setdefaulttimeout)�timeoutZold_timeoutrrr�socket_setdefaulttimeout�s�
r?�IPPROTO_UDPLITE�ic@�eZdZdd�Zdd�ZdS)�
SocketTCPTestcCs.t�tjtj�|_t�|j�|_|j��dSr5)r�AF_INETr9�servr�	bind_port�port�listen��selfrrr�setUp�szSocketTCPTest.setUpcC�|j��d|_dSr5�rEr!rIrrr�tearDown��

zSocketTCPTest.tearDownN��__name__�
__module__�__qualname__rKrNrrrrrC�srCc@rB)�
SocketUDPTestcCs$t�tjtj�|_t�|j�|_dSr5)rrDr&rErrFrGrIrrrrK��zSocketUDPTest.setUpcCrLr5rMrIrrrrN�rOzSocketUDPTest.tearDownNrPrrrrrT�srTc@�eZdZdd�ZdS)�SocketUDPLITETestcCs(t�tjtjtj�|_t�|j�|_dSr5)rrDr&r@rErrFrGrIrrrrK�szSocketUDPLITETest.setUpN)rQrRrSrKrrrrrW��rWcs6eZdZ	�fdd�Z�fdd�Z�fdd�Z�ZS)�ThreadSafeCleanupTestCasecs t�j|i|��t��|_dSr5)�super�__init__�	threading�RLock�
_cleanup_lock�rJ�args�kwargs��	__class__rrr[��z"ThreadSafeCleanupTestCase.__init__c�<|j�t�j|i|��Wd�S1swYdSr5)r^rZ�
addCleanupr_rbrrrf��$�z$ThreadSafeCleanupTestCase.addCleanupcrer5)r^rZ�
doCleanupsr_rbrrrh�rgz$ThreadSafeCleanupTestCase.doCleanups)rQrRrSr[rfrh�
__classcell__rrrbrrY�s
rYc@sJeZdZ	dZdZ	dZe�e�Z	dZ	e	de�e	�d7Z	dd�Z
d	S)
�
SocketCANTest�vcan0�z=IB3x8sz@3I4l2I�x�cCs`t�tjtjtj�|_|�|jj�z|j�|jf�WdSt	y/|�
d|j�YdSw�N�%network interface `%s` does not exist)rrrrr#rfr!�bind�	interfacer�skipTestrIrrrrKs��zSocketCANTest.setUpN)rQrRrSrr�bufsize�
can_frame_fmtrZcalcsizeZcan_frame_size�bcm_cmd_msg_fmtrKrrrrrj�s
rjc@seZdZ	dZdd�ZdS)�
SocketRDSTest� cCsVt�tjtjd�|_|�|jj�z
t�|j�|_WdSt	y*|�
d�YdSw)Nrzunable to bind RDS socket)rr-r.rErfr!rrFrGrrsrIrrrrKs�zSocketRDSTest.setUpN)rQrRrSrtrKrrrrrwsrwc@s>eZdZ	dd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ThreadableTestcCs|j|_|j|_dSr5)rK�_ThreadableTest__setUp�_setUprIrrrr[GszThreadableTest.__init__cCs	|j��dSr5)�server_ready�setrIrrr�serverExplicitReadyLsz"ThreadableTest.serverExplicitReadycst���_�j�����jjddd�t���_t���_	t���_
t�d��_d�_
�fdd�}��|����}|�d�}||dd�}t�d|�}t��j|f��_zz���Wnd�_
�W�j��n�j��w�j	�����j
j�dS)NrFcs�j��r
�j���dSr5)�queueZqsize�getrrIrr�raise_queued_exception^s

�z5ThreadableTest._setUp.<locals>.raise_queued_exception�.�_T)rZwait_threads_exitZwait_threads�	__enter__rf�__exit__r\�Eventr|�client_ready�doner�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadrzr}�wait)rJr�Z
methodnamerAZtest_methodrrIrr{Ss4






��
zThreadableTest._setUpc
Cs|j��z1z|��Wn#ty/}z|j�|�|��WYd}~W|j��dSd}~wwW|j��n|j��w|j	rF|��dSt
|d�sOtd��z,z|�Wntym}z|j�|�WYd}~nd}~wwW|��dSW|��dS|��w)N�__call__z%test_func must be a callable function)r|r��clientSetUp�
BaseExceptionr�put�clientTearDownr�r}r�r�	TypeError)rJZ	test_func�errrr�us6
���

����zThreadableTest.clientRuncC�td��)Nz clientSetUp must be implemented.)�NotImplementedErrorrIrrrr���zThreadableTest.clientSetUpcCs|j��t��dSr5)r�r}r��exitrIrrrr���
zThreadableTest.clientTearDownN)	rQrRrSr[r~r{r�r�r�rrrrry!s%"ryc@�&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcC�tj||d�t�|�dS�N)�
methodName�rCr[ry�rJr�rrrr[��zThreadedTCPSocketTest.__init__cC�t�tjtj�|_dSr5)rrDr9�clirIrrrr���z!ThreadedTCPSocketTest.clientSetUpcC�|j��d|_t�|�dSr5�r�r!ryr�rIrrrr���
z$ThreadedTCPSocketTest.clientTearDownN�r��rQrRrSr[r�r�rrrrr���
r�c@r�)
�ThreadedUDPSocketTestr�cCr�r�)rTr[ryr�rrrr[�r�zThreadedUDPSocketTest.__init__cCr�r5)rrDr&r�rIrrrr��r�z!ThreadedUDPSocketTest.clientSetUpcCr�r5r�rIrrrr��r�z$ThreadedUDPSocketTest.clientTearDownNr�r�rrrrr��r�r�z'UDPLITE sockets required for this test.c@r�)
�ThreadedUDPLITESocketTestr�cCr�r�)rWr[ryr�rrrr[�r�z"ThreadedUDPLITESocketTest.__init__cCst�tjtjtj�|_dSr5)rrDr&r@r�rIrrrr���z%ThreadedUDPLITESocketTest.clientSetUpcCr�r5r�rIrrrr��r�z(ThreadedUDPLITESocketTest.clientTearDownNr�r�rrrrr��s
r�c@r�)
�ThreadedCANSocketTestr�cCr�r�)rjr[ryr�rrrr[�r�zThreadedCANSocketTest.__init__cCsBt�tjtjtj�|_z|j�|jf�WdSty YdSwr5)rrrrr�rqrrrrIrrrr��s�z!ThreadedCANSocketTest.clientSetUpcCr�r5r�rIrrrr��r�z$ThreadedCANSocketTest.clientTearDownNr�r�rrrrr��s
	r�c@r�)
�ThreadedRDSSocketTestr�cCr�r�)rwr[ryr�rrrr[�r�zThreadedRDSSocketTest.__init__cCsLt�tjtjd�|_z|j�tdf�|j��|_WdSty%YdSw�Nr)	rr-r.r�rq�HOST�getsockname�cli_addrrrIrrrr��s�z!ThreadedRDSSocketTest.clientSetUpcCr�r5r�rIrrrr��r�z$ThreadedRDSSocketTest.clientTearDownNr�r�rrrrr��s
r��
need fcntlz%VSOCK sockets required for this test.�z-This test can only be run on a virtual guest.c@�6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�ThreadedVSOCKSocketStreamTestr�cC�tjj||d�t�|�dSr���unittest�TestCaser[ryr�rrrr[��z&ThreadedVSOCKSocketStreamTest.__init__cCsht�tjtj�|_|�|jj�|j�tjtf�|j�	�|�
�|j��\|_|_
|�|jj�dSr5)r�AF_VSOCKr9rErfr!rq�VMADDR_CID_ANY�	VSOCKPORTrHr~�accept�conn�connaddrrIrrrrK�s
z#ThreadedVSOCKSocketStreamTest.setUpcCsXt�d�t�tjtj�|_|�|jj�t�}|tj	tj
fvr"t}|j�|t
f�dS)N皙�����?)�time�sleeprr�r9r�rfr!r�VMADDR_CID_HOSTr��VMADDR_CID_LOCAL�connectr�)rJr6rrrr��s
z)ThreadedVSOCKSocketStreamTest.clientSetUpc
CsTz|j�d�}Wnty!}z
|�t|��WYd}~nd}~ww|�|t�dS�N�)r��recv�PermissionErrorrs�repr�assertEqual�MSG)rJ�msg�excrrr�
testStreams��z(ThreadedVSOCKSocketStreamTest.testStreamcC�|j�t�|j��dSr5�r��sendr�r!rIrrr�_testStream
�z)ThreadedVSOCKSocketStreamTest._testStreamNr��rQrRrSr[rKr�r�r�rrrrr��s
	
r�c@s8eZdZ	d
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketConnectedTestr�cC�tj||d�dSr�)r�r[r�rrrr[�zSocketConnectedTest.__init__cCs*t�|�|��|j��\}}||_dSr5)r�rKr~rEr��cli_conn�rJr��addrrrrrK�

zSocketConnectedTest.setUpcCr�r5)r�r!r�rNrIrrrrN#r�zSocketConnectedTest.tearDowncCs(t�|�|j�t|jf�|j|_dSr5)r�r�r�r�r�rG�	serv_connrIrrrr�(s
zSocketConnectedTest.clientSetUpcCr�r5)r�r!r�r�rIrrrr�-r�z"SocketConnectedTest.clientTearDownNr�)rQrRrSr[rKrNr�r�rrrrr�s
r�c@s>eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�SocketPairTestr�cCs*tjj||d�t�|�d|_d|_dSr�)r�r�r[ryr�rEr�rrrr[4s

zSocketPairTest.__init__cCst��Sr5)r�
socketpairrIrrrr�:szSocketPairTest.socketpaircCs|��\|_|_dSr5)r�rEr�rIrrrrK>�zSocketPairTest.setUpcCs|jr|j��d|_dSr5rMrIrrrrNAs

zSocketPairTest.tearDowncC�dSr5rrIrrrr�F�zSocketPairTest.clientSetUpcCs$|jr|j��d|_t�|�dSr5r�rIrrrr�Is
zSocketPairTest.clientTearDownNr�)	rQrRrSr[r�rKrNr�r�rrrrr�2s
r�c@s&eZdZ	dd�Zdd�Zdd�ZdS)�SocketTestBasecC�|��|_|��dSr5)�	newSocketrE�
bindServerrIrrrrK_r�zSocketTestBase.setUpcC�	|�|j�|j��|_dSr5)�bindSockrEr��	serv_addrrIrrrr�c�zSocketTestBase.bindServercCrLr5rMrIrrrrNhrOzSocketTestBase.tearDownN)rQrRrSrKr�rNrrrrr�Vs
r�cseZdZ	�fdd�Z�ZS)�SocketListeningTestMixincst���|j��dSr5)rZrKrErHrIrbrrrKp�
zSocketListeningTestMixin.setUp�rQrRrSrKrirrrbrr�msr�cs>eZdZ	�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�ZS)�ThreadedSocketTestMixincs t�j|i|��t�|�dSr5)rZr[ryr_rbrrr[}rdz ThreadedSocketTestMixin.__init__cCr�r5)�newClientSocketr��
bindClientrIrrrr��r�z#ThreadedSocketTestMixin.clientSetUpcCs
	|��Sr5)r�rIrrrr��sz'ThreadedSocketTestMixin.newClientSocketcCr�r5)r�r�r�r�rIrrrr��r�z"ThreadedSocketTestMixin.bindClientcCr�r5r�rIrrrr��r�z&ThreadedSocketTestMixin.clientTearDown)	rQrRrSr[r�r�r�r�rirrrbrr�usr�csBeZdZ	�fdd�Z�fdd�Z�fdd�Z�fdd�Z�ZS)	�ConnectedStreamTestMixincs*t���|��|j��\}}||_dSr5)rZrKr~rEr�r�r�rbrrrK�r�zConnectedStreamTestMixin.setUpcs|j��d|_t���dSr5)r�r!rZrNrIrbrrrN�r�z!ConnectedStreamTestMixin.tearDowncs$t���|j�|j�|j|_dSr5)rZr�r�r�r�r�rIrbrrr��s
z$ConnectedStreamTestMixin.clientSetUpcs6z
|j��d|_Wn	tyYnwt���dSr5)r�r!r rZr�rIrbrrr��s

�z'ConnectedStreamTestMixin.clientTearDown)rQrRrSrKrNr�r�rirrrbrr��sr�cs&eZdZ	�fdd�Zdd�Z�ZS)�UnixSocketTestBasecs(t��|_|�tj|j�t���dSr5)�tempfile�mkdtemp�dir_pathrf�os�rmdirrZrKrIrbrrrK�s
zUnixSocketTestBase.setUpcCs,tj|jd�}t�||�|�tj|�dS)N)�dir)r�Zmktempr�r�bind_unix_socketrfr�unlink)rJ�sock�pathrrrr��szUnixSocketTestBase.bindSock)rQrRrSrKr�rirrrbrr��sr�c@�eZdZ	dd�ZdS)�UnixStreamBasecC�t�tjtj�Sr5)r�AF_UNIXr9rIrrrr���zUnixStreamBase.newSocketN�rQrRrSr�rrrrr��rcs*eZdZ	eZ�fdd�Zdd�Z�ZS)�InetTestBasecst���|jd|_dS�Nr)rZrKr�rGrIrbrrrK�s
zInetTestBase.setUpcCstj||jd�dS)N��host)rrFr�rJrrrrr��r�zInetTestBase.bindSock)rQrRrSr�rrKr�rirrrbrr�s
rc@r)�TCPTestBasecCrr5)rrDr9rIrrrr��r	zTCPTestBase.newSocketNr
rrrrr�rrc@r)�UDPTestBasecCrr5)rrDr&rIrrrr��r	zUDPTestBase.newSocketNr
rrrrr�rrc@r)�UDPLITETestBasecC�t�tjtjtj�Sr5)rrDr&r@rIrrrr��r�zUDPLITETestBase.newSocketNr
rrrrr�rrc@r)�SCTPStreamBasecCrr5)rrDr9�IPPROTO_SCTPrIrrrr��s�zSCTPStreamBase.newSocketNr
rrrrr�rrc@seZdZ	ejZdS)�
Inet6TestBaseN)rQrRrSr�HOSTv6rrrrrr�s
rc@r)�UDP6TestBasecCrr5)r�AF_INET6r&rIrrrr��r	zUDP6TestBase.newSocketNr
rrrrr�rrc@r)�UDPLITE6TestBasecCrr5)rrr&r@rIrrrr�r�zUDPLITE6TestBase.newSocketNr
rrrrrrrcs,	dd����fdd�}dd�}|r|S|S)Nc_r�r5r�r`rarrr�client_passr�z%skipWithClientIf.<locals>.client_passcs*t���|�}t|t�s�fdd�|_|S)Ncs�Sr5r�r)rrr�<lambda>�z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)r��skip�
isinstance�type�client_skip)�objZretval�r�reasonrr�skipdecs
z!skipWithClientIf.<locals>.skipdeccSs"t|t�st|d�sdd�|_|S)Nr$cSs|Sr5rrrrrrr z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r"r#rr$�r%rrr�	noskipdecs
z#skipWithClientIf.<locals>.noskipdecr)Z	conditionr'r(r*rr&r�skipWithClientIfs
r+cs2	�fdd�|D�}t|dd�dd�|D���S)Ncsg|]	}t�|�s|�qSr)r��.0�namer)rr�
<listcomp>'�z requireAttrs.<locals>.<listcomp>�don't have �, cs��|]}|VqdSr5rr,rrr�	<genexpr>)��zrequireAttrs.<locals>.<genexpr>)r+�join)r%Z
attributes�missingrr)r�requireAttrs"s
�r8c
Gs�	d}dd�|D�}|rdd�dd�|D��}n)dd�|D�}ztj|�}Wnty=}z
t|�}WYd}~n	d}~ww|��t|dud�d�d	d�|D��|��S)
NcSs$g|]}t|t�rtt|�s|�qSr)r"�strrr�r-r%rrrr/4s
�
�z!requireSocket.<locals>.<listcomp>r1r2csr3r5rr,rrrr47r5z requireSocket.<locals>.<genexpr>cSs$g|]}t|t�rtt|�n|�qSr)r"r9r�rr:rrrr/9s�zcan't create socket({0}): {1}css�|]}t|�VqdSr5)r9�r-�orrrr4Es�)r6rrr9r!r+�format)r`�errr7Zcallargsr#r�rrr�
requireSocket,s*�����r?c@s�eZdZdd�Zdd�Ze�edud�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
e�ejdkd�dd��Ze�ejdkd�e�ejd�dd���Zdd�Zdd�Zd d!�Ze�eed"�d#�e�eed$�d%�d&d'���Ze�eed(�d)�d*d+��Ze�eed,�d-�d.d/��Ze�eed0�d1�d2d3��Ze�eed4�d5�d6d7��Zd8d9�Z d:d;�Z!e"j#d<d=��Z$d>d?�Z%d@dA�Z&e�eedB�dC�dDdE��Z'e�eedF�dG�dHdI��Z(e�eedF�dG�dJdK��Z)e�eedL�dM�dNdO��Z*e�eedL�dM�dPdQ��Z+dRdS�Z,dTdU�Z-dVdW�Z.dXdY�Z/dZd[�Z0d\d]�Z1d^d_�Z2e�ejdkd�d`da��Z3e�ejdkd�e�eedb�dc�ddde���Z4dfdg�Z5dhdi�Z6e�e"�7dj�dk�dldm��Z8dndo�Z9dpdq�Z:drds�Z;dtdu�Z<dvdw�Z=dxdy�Z>dzd{�Z?d|d}�Z@d~d�ZAd�d��ZBd�d��ZCe"j#d�d���ZDe�ejd��d�d���ZEe�ejd��d�d���ZFd�d��ZGe�ejd��e�Hejd�kd��e�HeId��e�eed(�d��d�d������ZJe�ejd��e�ejd�kd��d�d����ZKe�ejd��e�Hejd�kd��e�HeId��e�eed(�d��d�d������ZLe�ejd��e�ejd�kd��d�d����ZMd�d��ZNd�d��ZOd�d��ZPe�eed��d��d�d���ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVe�Hejdkd��d�d���ZWd�d��ZXd�d��ZYdS)��GeneralModuleTestscCs<ddl}|�tj|ju�t��}|�|tj�|��dSr�)�_socket�
assertTruerZ
SocketType�assertIsInstancer!)rJrAr#rrr�test_SocketType_is_socketobjectMs
z2GeneralModuleTests.test_SocketType_is_socketobjectcCs�t�tjtj�}|�S|�d|��t|��|�dtjt|��|�dtjt|��|�dt|��|�dt|��|�d�|�dt|��|�t|�	��t|��Wd�n1s`wY|�dt|��|�dt|��dS)	Nzfd=%iz	family=%sztype=%szproto=0Zraddr��	127.0.0.1rZladdrz[closed])
rrDr9�assertIn�filenor��assertNotInrqr9r��rJr#rrr�	test_reprTs
�	zGeneralModuleTests.test_reprNzneed _socket modulecCszt�tjtj�}zd|��|j|j|jf}|�t	|�|�W|�
�n|�
�wd|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>)rArrDr9rH�familyr#�protor�r�r!)rJr#�expectedrrr�test_csocket_reprbs��z$GeneralModuleTests.test_csocket_reprcCs�t�tjtj��}t|�}|�|��|���Wd�n1s!wYd}t��z|��Wn
ty<YdSw|�	d�dS)NzSocket proxy still exists)
rrDr9rr�rHr�
gc_collect�ReferenceError�fail)rJr#�prrr�test_weakrefos��zGeneralModuleTests.test_weakrefcCs�d}|jt|dd��t�1swY|jt|dd��tj�1s&wY|jt|dd��tj�1s;wYdS)Nz$Error raising socket exception (%s).r�r�z
socket.herrorzsocket.gaierror)�assertRaisesrr�herror�gaierror�rJr�rrr�testSocketError|s���z"GeneralModuleTests.testSocketErrorcCs�t�tjtj�}|�|j�|�d�|��}|�t��}|�	d|�Wd�n1s-wY|�
t|j�d�|�t��}|�	d|�Wd�n1sQwY|�
t|j�d�|�t��}|�	dd�Wd�n1suwY|�
dt|j��|�t��}|�	dd|�Wd�n1s�wY|�
t|j�d�|�t��}|�	dd|�Wd�n1s�wY|�
t|j�d�|�t��}|�	ddd�Wd�n1s�wY|�
dt|j��|�t��}|�	dd	|�Wd�n	1�s
wY|�t��}|�	ddd�Wd�n	1�s'wY|�t��
}|�	d�Wd�n	1�sBwY|�
d
t|j��|�t��}|�	dd|d�Wd�n	1�siwY|�
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�barz	(1 given)�z	(4 given))rrDr&rfr!rqr�rVr��sendtor�r9�	exceptionrG)rJr#�sockname�cmrrr�testSendtoErrors�sd
��������������z#GeneralModuleTests.testSendtoErrorscCs@tjtjr	tjtjtjtjtjtjtj	tj
dSr5)rrD�has_ipv6rr9r&r�SOCK_RDMr.�
SOL_SOCKET�SO_REUSEADDRrIrrr�testCrucialConstants�s
z'GeneralModuleTests.testCrucialConstantscCs tjtjtjrtjdSdSr5)rZIPPROTO_TCP�IPPROTO_UDPrd�IPPROTO_IPV6rIrrr�testCrucialIpProtoConstants�s

�z.GeneralModuleTests.testCrucialIpProtoConstants�nt�Windows specificcC�4tjtjtjtjtjtjtjtjdSr5)	rZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPrrIrrr�testWindowsSpecificConstants�s
z/GeneralModuleTests.testWindowsSpecificConstants�darwin�macOS specific test�IPv6 required for this testcCs0hd�}|D]}|�tt|�d|�d��qdS)N>Z
IPV6_CHECKSUMZ
IPV6_RTHDRZIPV6_USE_MIN_MTU�IPV6_TCLASSZIPV6_RECVDSTOPTSZIPV6_PKTINFOZIPV6_RECVRTHDRZIPV6_RECVHOPOPTSZIPV6_NEXTHOPZIPV6_DSTOPTSZIPV6_PATHMTU�
IPV6_HOPLIMIT�IPV6_RECVHOPLIMITZIPV6_RECVPKTINFOZIPV6_RTHDR_TYPE_0Z
IPV6_DONTFRAG�IPV6_RECVTCLASSZIPV6_RTHDRDSTOPTSZIPV6_HOPOPTSZIPV6_RECVPATHMTUzMissing RFC3542 socket option '�')rBrr)rJZopts�optrrr�test3542SocketOptions�s��z(GeneralModuleTests.test3542SocketOptionscCs�t��}zt�|�}Wnty|�d�Ynw|�|�d�dkd�z
t�|�\}}}Wnty=|�d�Ynw||g|}t�|�}||vrZ|�	d|t
|�f�dSdS)N�name lookup failurer�rzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r�gethostname�
gethostbynamerrsrB�find�
gethostbyaddr�getfqdnrRr�)rJZhostnameZipZhname�aliasesZipaddrsZall_host_namesZfqhnrrr�testHostnameRes�s"��
�z"GeneralModuleTests.testHostnameRescCsLtjddfD]}|�t�|�|�qtjfD]
}|�|t�|�d�qdS)Nz10.0.0.1�255.255.255.255r�)rZHOSTv4r�rr|rGr~)rJr�rrrr�test_host_resolutions
�z'GeneralModuleTests.test_host_resolutionc	Cs�d}dD]:}|jt|d��
t�|�Wd�n1swY|jt|d��
t�|�Wd�n1s9wYqdS)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:1rU)rVrrr|r~)rJZexplanationr�rrr� test_host_resolution_bad_address	s�����z3GeneralModuleTests.test_host_resolution_bad_address�sethostnameztest needs socket.sethostname()r{ztest needs socket.gethostname()c
Cs�t��}zt�d�Wnty*}z|jtjkr|�d�n�WYd}~nd}~wwz|�t��d�t�d�|�t��d�Wt�|�dSt�|�w)N�newztest should be run as rootsbarr])rr{r�r�errnoZEPERMrsr�)rJZoldhnr�rrr�test_sethostnames���
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�t��}|D]8\}}|�|t�|�|t�|�|d�t�|�}|�|t�|�||�t�|�}|�|t�|�||�qdSr�)	rr�rC�intr9�
assertGreater�if_nametoindexr��if_indextoname)rJZ
interfaces�indexr.Z_index�_namerrr�testInterfaceNameIndex,s

�z)GeneralModuleTests.testInterfaceNameIndexr�z&socket.if_indextoname() not available.c	Cs�|�ttjd�|�ttjd�|�ttjdd�|�ttjd�ttd�r{tt���}|D]&}|d}||vrU|�ttf��
t�|�Wd�n1sPwYq/dD]$}||vrz|�ttf��
t�|�Wd�n1suwYqXdSdS)	Nr���r����	_DEADBEEFr��)���l����)	rVrrr��
OverflowErrorr�r�dictr�)rJ�indicesr�Zindex2rrr�testInvalidInterfaceIndexToName<s*
�����z2GeneralModuleTests.testInvalidInterfaceIndexToNamer�z&socket.if_nametoindex() not available.cCs$|�ttjd�|�ttjd�dS)Nrr�)rVr�rr�rrIrrr�testInvalidInterfaceNameToIndexOsz2GeneralModuleTests.testInvalidInterfaceNameToIndex�getrefcountztest needs sys.getrefcount()cCsPzt�t�}t�td�WdSty't�t�|kr$|�d�YdSYdSw)Nrz$socket.getnameinfo loses a reference)�sysr�rQr�getnameinfor�rR)rJ�origrrr�testRefCountGetNameInfoUs
��z*GeneralModuleTests.testRefCountGetNameInfocCs(z	t�dd�WdStyYdSw)N)rmrrrr)rr�rrIrrr�testInterpreterCrashas
�z'GeneralModuleTests.testInterpreterCrashc	Cs�tjdtjdtjdtjdi}|��D]2\}}d|>d}dD]}|�||@||||@��|@�q||�}|�||@|�|�t|d�qdS)N� �r)rr�i��r�igE#i2Tvl)	r�htonl�ntohl�htons�ntohs�itemsr�rVr�)rJZsizes�func�size�maskrAZswappedrrr�testNtoHis�"�zGeneralModuleTests.testNtoHcCs�ddl}gd�}|dg}ddddd>g}||jd|jdgd	|jg}|D]}t�|�t�|�q(|D]}t�|�t�|�q7|D]}|�t	tj|�|�t	tj|�qF|D]}|�t	tj|�|�t	tj|�q[dS)
Nr)rrr�r�r�r����r�rr��)
�	_testcapiZINT_MIN�INT_MAXrr�r�r�r�rVr�)rJr�Z
s_good_valuesZ
l_good_valuesZl_bad_valuesZs_bad_values�krrr�testNtoHErrorsws.
���

�z!GeneralModuleTests.testNtoHErrorsc	Cs|j}tj�d�stjdvrd}nd}|D]}z	t�|d�}Wnty)Yqwt�ttd�r7t��dkrAt�|�}|||�zt�|d�}WntyTd}Ynw|||�t	j
se|t�|�|�|t�|d�|�|dur{|t�|d�|�|�t
tjd	�|�t
tjd
�dS)N)�freebsdZnetbsdZgnukfreebsd)�linuxrp)�daytimeZqotd�domain)Zechor�r�Ztcp�getandroidapilevel�Zudpr�r�)r�r��platform�
startswithrZ
getservbynamerrr�rZ
is_androidZ
getservbyportrVr�)rJ�eqZservicesZservicerGZport2Zudpportrrr�
testGetServBy�s<
�


�
z GeneralModuleTests.testGetServByc	Cs.|�t��d�t���}|�|��d�Wd�n1swYtd��U|�t��d�t���}|�|��d�Wd�n1sHwYt�d�|�t��d�t���}|�|��d�Wd�n1sqwYWd�n1s�wY|�ttjd�|�ttjd�dS)N�
r�Zspam)	r�rr<�
gettimeoutr?r=rV�
ValueErrorr�)rJr#rrrr�testDefaultTimeout�s$
�

�

���z%GeneralModuleTests.testDefaultTimeout�	inet_atonztest needs socket.inet_aton()cCs(|�dt�d��|�dt�d��dS)N��0.0.0.0�����r�)r�rr�rIrrr�testIPv4_inet_aton_fourbytes�sz/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��tsF||d�||d�||d�||d�||d���d|d����d|d	����d
|d����d|d��||d�||d�||d�||d�||d�dS)Nr)r�r�rDc�
��|�Sr5r��a)rDr�rrr��
z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>c���ttf||�Sr5�rVrr��r�r�rIrrr��
�r�r�s��z255.0.255.0s����z170.170.170.170��1.2.3.4r�r�z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5�::1)rr�r�rDr�r
�rJr�g�
assertInvalidr)rDr�rJr�testIPv4toString�s.








z#GeneralModuleTests.testIPv4toStringc
s�zddlm�m�m}|s��d�Wnty!��d�YnwtjdkrKz��d�WntyJ}z|j	dkr@��d�WYd}~nd}~ww��fd	d
����fdd
�}��
d�d����
d�d
����
d�d����
d�d����
d�d����
d�d��|d�|d�|d�|d�|d�|d�|d�|d�ts�|d���
d�d ����
d!�d"����
d#�d$��|d%�|d&�|d'�|d(�|d)�|d*�dS)+Nr)r�rrd�IPv6 not available�+could not import needed symbols from socket�win32�::�&'�IPv6 might not be supportedcr�r5rr�)rr�rrrr�z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>c���ttf�|�Sr5r�r��rrJrrrr��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)rr�rrdrs�ImportErrorr�r�r�winerrorr�r
�rJrdr�r�r)rrr�rJr�testIPv6toString�sr
��


�������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�rDcr�r5rr�)rDr�rrrAr�z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cr�r5r�r�rIrrrBr�z1.0.1.0sz
170.85.170.85s�U�Ur�r�r�r�ssr�)rr�r�rDr��	bytearrayr�r)rDr�rJr�testStringToIPv4=s$





z#GeneralModuleTests.testStringToIPv4c
szddlm�m�m}|s��d�Wnty!��d�YnwtjdkrKz��d�WntyJ}z|j	dkr@��d�WYd}~nd}~ww��fd	d
����fdd
�}��
d�d����
d
�d����
d�d����
d
�td���|d�|d�|d�dS)Nr)r�rrdr�r�r�r�r�r�cr�r5rr�)rr�rrrhr�z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cr�r5r�r�r�rrrir�r�r�sz!aef:b01:506:1001:ffff:9997:55:170s
�����Upsss)rr�rrdrsr�r�r�rr�r�r�r�r)rrr�rJr�testStringToIPv6Ws8
��


���z#GeneralModuleTests.testStringToIPv6cCs�t�tjtj�}|�|j�t��D]-}t��}z	|�	d|f�Wnt
y>}z|jtjks3|dkr4�WYd}~qd}~ww|�
�}z	t�t���}Wnt
y[|�d�Ynw|�|dd|fd|d�|�|d|�dS)Nr��rzrz
%s invalidr)rrDr9rfr!�	itertools�countr�find_unused_portrqrr��
EADDRINUSEr�r|r{rsrGr�)rJrrArGr�r.Z
my_ip_addrrrr�testSockName{s*����zGeneralModuleTests.testSockNamecCs@t�tjtj�}|�|j�|�tjtj�}|�|dkd�dS)Nrzinitial mode is reuse)	rrDr9rfr!�
getsockoptrfrg�assertFalse�rJrZreuserrr�testGetSockOpt�sz!GeneralModuleTests.testGetSockOptcCsRt�tjtj�}|�|j�|�tjtjd�|�tjtj�}|�	|dkd�dS)Nrrzfailed to set reuse mode)
rrDr9rfr!�
setsockoptrfrgr�r�r�rrr�testSetSockOpt�s
z!GeneralModuleTests.testSetSockOptcCsNt�tjtj��
}|�d�Wd�n1swY|�t|jd�dS)Nr�spam)rrDr9�
settimeoutrVrr�rrrr�testSendAfterClose�s�z%GeneralModuleTests.testSendAfterClosec
Cs�t��}|�tjdf�tj|��d���z|��Wnty:}z|�|jtjtj	f�WYd}~dSd}~ww|�
d�dS)Nr�rHz#close() should raise EBADF/ENOTSOCK)rrqZ
_LOCALHOSTrHr!rrGr��EBADF�ENOTSOCKrR)rJrr>rrr�testCloseException�s$��z%GeneralModuleTests.testCloseExceptioncCs�t�tjtj��4}|�|jtj�ttd�r%|�|jtjtjBtjf�n|�|jtj�|�|j	d�Wd�dS1s?wYdS)N�SOCK_CLOEXECr)
rrDr9r�rLrrGr#r�rMrrrr�testNewAttributes�s

��"�z$GeneralModuleTests.testNewAttributescCs�t��}|�|j�t��}|d}|d}|�t|jt|f�|�t|jt|f�t	�
�D].}t��}z|�t|f�WdSty\}z|jtj
ksQ|dkrR�WYd}~q.d}~wwdS)Nr�r�)rrfr!rr�rVr�rqr�r�r�rr�r�)rJrrGZbig_portZneg_portrAr�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_VALSr�)r�dr�)	rBrrrfr!rVr�rr�rJrrr�test_sock_ioctl�sz"GeneralModuleTests.test_sock_ioctl�SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc
Csrt��}|�|j�z	|�tjd�Wnty,}z
d}|j|kr'|�d��d}~ww|�t	|jtjd�dS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
rrfr!rrrr�rsrVr�)rJr#r�Z
WSAEOPNOTSUPPrrr�test_sio_loopback_fast_path�s

��z.GeneralModuleTests.test_sio_loopback_fast_pathc

Cs6zt�dd�Wntjy!}z|jtjkr|�d��d}~wwt�td�D]
}|�t|�d�q(t�dd�t�dd�t�dd�t	j
rNt�dd�ttd�rYt�
�dkr_t�td	�t�td�t�td�t�tdtjtj�}|D]%\}}}}}|�|tj�|�t|�d
�|�|tj�|�t|�d�qwt�tddtj�}|D]\}}}}}|�|tj�q�t�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�WdStj�y�YdSwdS)N�	localhost�Pzbuggy libc versionr�rFr�r�r�Zhttp�AddressFamily.AF_INET�SocketKind.SOCK_STREAMr)rrG�rL�r#)rM)�flags)rrGrLr#rMr	u��AI_NUMERICSERV)r�getaddrinforXr�ZEAI_SERVICErsr�r��lenr�IPV6_ENABLEDrr�r�rDr9r9ZSOL_TCPZ
AI_PASSIVE�	AF_UNSPECrV�UnicodeEncodeErrorr
)
rJr>�infoZinfosrLr#r�Zsocktyper��brrr�testGetaddrinfo�s�
��
���
���z"GeneralModuleTests.testGetaddrinfocCs|�ttjdd�dS)N)zmail.python.orgrr)rVrrr�rIrrr�test_getnameinfoE�z#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledcCsdt�d��
t�d�Wd�n1swYd}t�|�t�|�t�|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetrr|Zgethostbyname_exrrr9)rJr�rrr�	test_idnaIs�

zGeneralModuleTests.test_idnac
s\ttd�r
ttd�s��d��fdd�}�fdd�}t��\}}t�tj|�}zp|r0|�d���t��t�	d	�|�
d
tj�Wd�n1sMwY|r�t�tj|�t�	d	���t
|j
d
tj�Wt�	d�t�tj|�|��|��dSWt�	d�t�tj|�|��|��dSt�	d�t�tj|�|��|��w)N�alarmr�z9signal.alarm and socket.socketpair required for this testcs��ttjd�dSr��rVr��mathZacosh�r`rIrr�
ok_handler`r�z@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs��ttjd�dddS�NrrrrrIrr�raising_handlerbszEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg�?r�xr)r�signalrrsr��SIGALRMr�rV�ZeroDivisionErrorr�sendallr�
SOCK_MAX_SIZE�TimeoutErrorr!)rJZwith_timeoutrr�cr#�	old_alarmrrIr�check_sendall_interruptedZs@


�

�
�

�
z,GeneralModuleTests.check_sendall_interruptedcC�|�d�dS�NF�r&rIrrr�test_sendall_interruptedy�z+GeneralModuleTests.test_sendall_interruptedcCr')NTr)rIrrr�%test_sendall_interrupted_with_timeout|r+z8GeneralModuleTests.test_sendall_interrupted_with_timeoutcCs�t�tjtj�}t|�}|�t��}d}t��Wd�n1s"wY|�|t	|j
jd��t�tjtj�}|�d�}t|�}d}t��|�t��d}t��Wd�dS1sawYdS)Nrr)
rrDr9r�ZassertWarns�ResourceWarningrrPrGr9Zwarningr`�makefile)rJrrrbrrrr�test_dealloc_warns 
�

"�z$GeneralModuleTests.test_dealloc_warncCsXt�tjtj��}|�d�}|��|�t|�d�Wd�dS1s%wYdS)Nrz<_io.BufferedReader name=-1>)rrDr9r.r!r�r��rJr�fprrr�test_name_closed_socketio�s

"�z,GeneralModuleTests.test_name_closed_socketiocCs�t���>}|jddd�}|�|���|�|���|�|���|��|�t	|j�|�t	|j�|�t	|j�Wd�dS1sEwYdS)Nrr)�	buffering)
rr.rB�readabler��writable�seekabler!rVr�r0rrr�test_unusable_closed_socketio�s
"�z0GeneralModuleTests.test_unusable_closed_socketiocCs2t��}zC|�tdf�t�|���|�t��
|�d�Wd�n1s(wYW|�t��|��Wd�n1sBwYn|�t��|��Wd�w1s\wYw|�t��
t�d�Wd�n1swwY|�t��t�d�Wd�dS1s�wYdS)Nrrr�)	rrqr�r!rHrVrrHr�rrrr�test_socket_close�s*��
��
��"�z$GeneralModuleTests.test_socket_closecCs�dD]R}|j|d��Bt���.}d|vrdnd}|j||d��}|�|j|�Wd�n1s1wYWd�n1s@wYWd�n1sOwYqdS)N)rrZrw�w�wb��moderr��encoding)�subTestrr.r�r<)rJr<rr>r1rrr�test_makefile_mode�s
�������z%GeneralModuleTests.test_makefile_modecCs�dD]G}|j|d��7t���#}|�td��
|�|�Wd�n1s&wYWd�n1s5wYWd�n1sDwYqdS)N)Zrtrm�+r�r;zinvalid mode)r?r�assertRaisesRegexr�r.)rJr<rrrr�test_makefile_invalid_mode�s
�������z-GeneralModuleTests.test_makefile_invalid_modecCs�t��}|�ttjd�D]}|�ttj||�qWd�n1s$wYttjd�D]$}t�t�tj|��}|�	|tj�t�t�tj
|��}|�	|tj
�q0dSr
)r�range�pickleZHIGHEST_PROTOCOLrVr��dumps�loadsrDr�r9)rJrZprotocolrLr#rrr�test_pickle�s���zGeneralModuleTests.test_picklec	Cs�dD]&}t�tjtj��}|�tdf�|�|�Wd�n1s#wYqt�tjtj��}|�tdf�|��Wd�dS1sHwYdS)N)rr�r)rrDr9rqr�rH)rJZbacklog�srvrrr�test_listen_backlog�s��
"�z&GeneralModuleTests.test_listen_backlogcCsbddl}t�tjtj��}|�tdf�|�t|j|j	d�Wd�dS1s*wYdSr)
r�rrDr9rqr�rVr�rHr�)rJr�rIrrr�test_listen_backlog_overflow�s
"�z/GeneralModuleTests.test_listen_backlog_overflow�IPv6 required for this test.cCsh|�ttjtjddfd�t�tjtj��}|�t|jtjddf�Wd�dS1s-wYdS)Nrr�i����)	rVr�rr�rrrr9rqrJrrr�
test_flowinfo�s
�"�z GeneralModuleTests.test_flowinfocCs0t�ddtjtjtj�\�^}}|�|d�dS)N�ff02::1de:c0:face:8Dr	)�ff02::1de:c0:face:8dr	rr)rrrr&rir�)rJr��sockaddrrrr�test_getaddrinfo_ipv6_basic�s�z.GeneralModuleTests.test_getaddrinfo_ipv6_basiccCs0|�t��t�d��|�t��t�d��dS)Nr�r�)r�rrrIrrr�test_getfqdn_filter_localhost�sz0GeneralModuleTests.test_getfqdn_filter_localhostr�zdoes not work on WindowszSymbolic scope id does not workz test needs socket.if_nameindex()cCsLt��d\}}t�d|dtjtjtj�\�^}}|�|ddd|f�dS)Nr�ff02::1de:c0:face:8D%r	rO)rr�rrr&rir�)rJ�ifindex�test_interfacer�rPrrr�&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�*rSr	rOr)rrr9rr&rir�)rJrTr�rPrrr�%test_getaddrinfo_ipv6_scopeid_numerics
�z8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericcCsHt��d\}}ddd|f}t�|tjtjB�}|�|d|df�dS)NrrNr	�ff02::1de:c0:face:8d%�1234)rr�r��NI_NUMERICHOST�NI_NUMERICSERVr�)rJrTrUrP�nameinforrr�&test_getnameinfo_ipv6_scopeid_symbolicsz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symboliccCs@d}ddd|f}t�|tjtjB�}|�|dt|�df�dS)NrWrNr	rrYrZ)rr�r[r\r�r9)rJrTrPr]rrr�%test_getnameinfo_ipv6_scopeid_numericsz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericcCsZt�tjtj��}|�t|j�d�|�t|j�d�Wd�dS1s&wYdS)Nrr)rrDr9r�r9rLr#rJrrr�test_str_for_enums)s"�z%GeneralModuleTests.test_str_for_enumscCs�ttdd�}ttdd�}tj|B|B}t�tj|��E}|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�Wd�dS1sbwYdS)N�
SOCK_NONBLOCKrr�rTF)r�rr9rDr�r#r��setblocking)rJrar�Z	sock_typer#rrr� test_socket_consistent_sock_type0s



"�z3GeneralModuleTests.test_socket_consistent_sock_typecCs�t�tjtj�}|��}ttjj���d}tdd�tjj�	�D��d}tj||d|d�� }|�
|j|�|�
|j|�|�
|jddh�Wd�dS1sQwYdS)Nrcss �|]\}}|dvr|VqdS)>rar�Nr)r-r.�kindrrrr4Ks���zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>r�)rLr#rMrHr)rrDr9�detach�maxZ
AddressFamily�__members__�valuesZ
SocketKindr�r�rLr#rGrM)rJr�fdZunknown_familyZunknown_typer#rrr�test_unknown_socket_family_repr@s"
���"�z2GeneralModuleTests.test_unknown_socket_family_repr�sendfileztest needs os.sendfile()c	CsGdd�d�}t���u}t�tjtj�}t�|�|�tj��|�||��Wd�n1s1wY|�t	��|�|dd��Wd�n1sOwY|�t
��|�|d��Wd�n1skwYWd�dSWd�dS1s�wYdS)Nc@rB)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dSr5�ri)rJrirrrr[\�
zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cS�|jSr5rlrIrrrrH_szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rQrRrSr[rHrrrr�File[sror�r�)rr�r�curdir�O_RDONLYr!rV�_GiveupOnSendfile�_sendfile_use_sendfiler�r�)rJrorrirrr�test__sendfile_use_sendfileYs 

����"�z.GeneralModuleTests.test__sendfile_use_sendfilecCst|�|j|�|�|j|�|��}tj|d�}|�|j�|��|�|j|�|�|j|�|�|��|�dS�Nr�)r�rLr#rHrrfr!re)rJr#rL�styperi�s2rrr�_test_socket_filenoksz&GeneralModuleTests._test_socket_filenocCsRt�tjtj�}|�|j�|�tjdf�|�|tjtj�t	td�rCt�tjtj
�}|�|j�|�tjdf�|�|tjtj
�tjrgt�tjtj�}|�|j�|�tj
dddf�|�|tjtj�t	td�r�t��}|�tj|�t�tjtj�}|�|j�z|�tj�|d��Wn
ty�YdSw|�|tjtj�dSdS)Nrr&rr)rrDr9rfr!rqrr�rxrr&r
rrr�r��shutilZrmtreerr�rr6r�)rJr#Ztmpdirrrr�test_socket_filenoxs8

�
��z%GeneralModuleTests.test_socket_filenocC�D|�t��tjtjtjdd�Wd�dS1swYdS)Ng@E@r��rVr�rrDr9rIrrr� test_socket_fileno_rejects_float��"�z3GeneralModuleTests.test_socket_fileno_rejects_floatcCr{)N�foor�r|rIrrr�&test_socket_fileno_rejects_other_types�r~z9GeneralModuleTests.test_socket_fileno_rejects_other_typescC�F|�td��tjtjtjdd�Wd�dS1swYdS)N�negative file descriptorr�r��rBr�rrDr9rIrrr�)test_socket_fileno_rejects_invalid_socket�s"�z<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlycCr�)Nr�i���r�r�rIrrr�#test_socket_fileno_rejects_negative�s"�z6GeneralModuleTests.test_socket_fileno_rejects_negativecCs�d}|�t��}tjt��d�Wd�n1swY|�|jjtj|f�|�t��}tjtj	tj
t��d�Wd�n1sFwY|�|jjtj|f�dS)Ni6'r�)rVrrrZmake_bad_fdrGr`r�r�rDr9)rJZWSAENOTSOCKrbrrr�$test_socket_fileno_requires_valid_fd�s���z7GeneralModuleTests.test_socket_fileno_requires_valid_fdc	Cs�t���P}|�t��tj|��d�Wd�n1swY|�t��}tjtjtj|��d�Wd�n1s>wY|�|j	j
t
j�Wd�dS1sWwYdSru)r�ZNamedTemporaryFilerVrrrHrDr9r�r`r�r�)rJZafilerbrrr�%test_socket_fileno_requires_socket_fd�s
���"�z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)ZrQrRrSrDrKr��
skipUnlessrArOrTrZrcrhrkr�r.ror�r�rr
ryr�r�r�rrr�r�r�r�r�r�r�r�cpython_onlyr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrZis_resource_enabledrr&r*r,r/r2r7r8r@rCrHrJrKrMrQrR�skipIfr
rVrXr^r_r`rcrjrtrxrzr}r�r�r�r�r�rrrrr@Ks


*


	�
�
�
�


,�
�
�
>�
�
"

�
N�




	
�

�



r@z!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)�BasicCANTestcCstjtjtjdSr5)r�AF_CANrrrIrrrrh�s
z!BasicCANTest.testCrucialConstants�CAN_BCM�&socket.CAN_BCM required for this test.cC�tjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjtjtjtjtjtjtjtjtjtjdSr5)rr�ZCAN_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_FRAMErIrrr�testBCMConstants�s0
zBasicCANTest.testBCMConstantscC�:t�tjtjtj��	}Wd�dS1swYdSr5�rrrrrJrrr�testCreateSocket��"�zBasicCANTest.testCreateSocketcCr�r5)rrr&r�rJrrr�testCreateBCMSocket��"�z BasicCANTest.testCreateBCMSocketcCsXt�tjtjtj��}d}|�|�|�|��|�Wd�dS1s%wYdS)N)r[)rrrrrqr�r�)rJr#�addressrrr�testBindAny�s

"�zBasicCANTest.testBindAnycCsLt�tjtjtj��}|�td|jd�Wd�dS1swYdS)N�interface name too long)�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rrrrrBrrqrJrrr�testTooLongInterfaceName�s
�"�z%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c	Csnt�tjtjtj��#}dD]}|�tjtj|�|�||�tjtj��q
Wd�dS1s0wYdS)N)rr)	rrrrr��SOL_CAN_RAWr�r�r�)rJr#Zloopbackrrr�testLoopbacks���"�zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c	Cs�d\}}t�d||�}t�tjtjtj��*}|�tjtj|�|�	||�
tjtjd��|�tjtjt|��Wd�dS1sBwYdS)N)�iz=IIrn)r�packrrrrr�r�r�r�r�r�)rJ�can_idZcan_maskZ
can_filterr#rrr�
testFilter
s�"�zBasicCANTest.testFilterN)rQrRrSrhr�r�rrr�r�r�r�r�r�r�rrrrr��s*�
�
�
�r�c@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�cCr�r�)r�r[r�rrrr[r�zCANTest.__init__cCs(	t|�}|�dd�}t�|j|||�S)Nrn�)r�ljustrr�ru)�clsr��data�can_dlcrrr�build_can_frameszCANTest.build_can_framecCs(	t�|j|�\}}}|||d|�fSr5)rrru)r��framer�r�r�rrr�dissect_can_frame#szCANTest.dissect_can_framecCs6|j�|j�\}}|�|j|�|�|d|j�dSr�)r#�recvfromrtr��cfrr�rJr�r�rrr�
testSendFrame)szCANTest.testSendFramecC� |�dd�|_|j�|j�dS)Nrs�r�r�r�r�rIrrr�_testSendFrame.�zCANTest._testSendFramecCs$|j�|j�\}}|�|j|�dSr5)r#r�rtr�r�r�rrr�testSendMaxFrame2rUzCANTest.testSendMaxFramecCr�)Nrsr�rIrrr�_testSendMaxFrame6r�zCANTest._testSendMaxFramecC�D|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr5)r#r�rtr��cf1�cf2r�rrr�testSendMultiFrames:�zCANTest.testSendMultiFramescCs<|�dd�|_|j�|j�|�dd�|_|j�|j�dS)N�sD3"�s�"3)r�r�r�r�r�rIrrr�_testSendMultiFramesAszCANTest._testSendMultiFramesr�r�cCsP|j�|j�\}}|�|j|�|�|�\}}}|�|j|�|�|j|�dSr5)r�r�rtr�r�r�r�r�)rJr�r�r�r�r�rrr�_testBCMHs
zCANTest._testBCMcCs�t�tjtjtj�}|�|j�|�|jf�d|_t	gd��|_
|�|j|j
�|_tj
}d}d}d}}}}d}	d}
t�|j||||||||	|
�
}||j}|�|�}
|�|
t|��dS)N�#)����ri"r)rrr&r�rfr!r�rrr��bytesr�r�r�r�rr�rvr�r�r)rJZbcmZopcoder	r�Z
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr�testBCMQs4�

zCANTest.testBCMNr�)rQrRrSr[�classmethodr�r�r�r�r�r�r�r�r�r�rrr�r�rrrrr�s(


�
�r�z!CAN ISOTP required for this test.csVeZdZ�fdd�Zdd�Zdd�Ze�ee	d�d�d	d
��Z
dd�Zd
d�Z�Z
S)�	ISOTPTestc�t�j|i|��d|_dS�Nrk�rZr[rrr_rbrrr[t�
zISOTPTest.__init__cCstjtjtjtjdSr5)rr�rr'r&rIrrrrhxs
zISOTPTest.testCrucialConstantscCr�r5r�rJrrrr�~r�zISOTPTest.testCreateSocketr'z(socket.CAN_ISOTP required for this test.cCr�r5)rrr&r'rJrrr�testCreateISOTPSocket�r�zISOTPTest.testCreateISOTPSocketc	Cs�t�tjtjtj��,}|�td��
|�d�Wd�n1s!wYWd�dSWd�dS1s9wYdS)Nr�)r�rr�)rrr&r'rBrrqrJrrrr��s��"�z"ISOTPTest.testTooLongInterfaceNamec
Cs�z2t�tjtjtj��}|jddf}|�|�|�|��|�Wd�WdS1s+wYWdStyU}z|j	t	j
krI|�d|j�n�WYd}~dSd}~ww)Nr�iVrp)rrr&r'rrrqr�r�rr��ENODEVrs�rJr#r�r�rrr�testBind�s
&�����zISOTPTest.testBind)rQrRrSr[rhr�r�r�rrr�r�r�rirrrbrr�qs�
r�z!CAN J1939 required for this test.csXeZdZ�fdd�Ze�eed�d�dd��Ze�eed�d�dd��Z	d	d
�Z
�ZS)�	J1939Testcr�r�r�r_rbrrr[�r�zJ1939Test.__init__r)z(socket.CAN_J1939 required for this test.cCr�r5)rr)ZJ1939_MAX_UNICAST_ADDRZJ1939_IDLE_ADDR�
J1939_NO_ADDR�
J1939_NO_NAMEZJ1939_PGN_REQUESTZJ1939_PGN_ADDRESS_CLAIMEDZJ1939_PGN_ADDRESS_COMMANDEDZJ1939_PGN_PDU1_MAXZ
J1939_PGN_MAX�J1939_NO_PGNZSO_J1939_FILTERZSO_J1939_PROMISCZSO_J1939_SEND_PRIOZSO_J1939_ERRQUEUEZSCM_J1939_DEST_ADDRZSCM_J1939_DEST_NAMEZSCM_J1939_PRIOZSCM_J1939_ERRQUEUEZ
J1939_NLA_PADZJ1939_NLA_BYTES_ACKEDZJ1939_EE_INFO_NONEZJ1939_EE_INFO_TX_ABORTZJ1939_FILTER_MAXrIrrr�testJ1939Constants�s0
zJ1939Test.testJ1939ConstantscCr�r5)rrr&r)rJrrr�testCreateJ1939Socket�r�zJ1939Test.testCreateJ1939Socketc
Cs�z6t�tjtjtj��!}|jtjtjtjf}|�|�|�	|�
�|�Wd�WdS1s/wYWdStyY}z|jtj
krM|�d|j�n�WYd}~dSd}~wwro)rrr&r)rrr�r�r�rqr�r�rr�r�rsr�rrrr��s
&�����zJ1939Test.testBind)rQrRrSr[r�r�rrr�r�r�rirrrbrr��s�
!�
r�z#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdSr5)rZAF_RDSr-rIrrrrh�s
z!BasicRDSTest.testCrucialConstantscCs8t�tjtjd��	}Wd�dS1swYdSr�)rr-r.rJrrrr��s"�zBasicRDSTest.testCreateSocketcCs`d}t�tjtjd��}|�tjtj|�|�tjtj|�Wd�dS1s)wYdS)Ni@r)rr-r.r�rfZ	SO_RCVBUFZ	SO_SNDBUF)rJrtr#rrr�testSocketBufferSize�s
"�z!BasicRDSTest.testSocketBufferSizeN)rQrRrSrhr�r�rrrrr��sr�cs�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�cCr�r�)r�r[r�rrrr[�r�zRDSTest.__init__cst���t��|_dSr5)rZrKr\r�ZevtrIrbrrrK�r�z
RDSTest.setUpcCs2|j�|j�\}}|�|j|�|�|j|�dSr5)rEr�rtr�r�r��rJr�r�rrr�testSendAndRecv�szRDSTest.testSendAndRecvcC�"d|_|j�|jdt|jf�dS�Nr�r�r�r�r_r�rGrIrrr�_testSendAndRecv��zRDSTest._testSendAndRecvcCsH|j�|jtj�\}}|�|j|�|j�|j�\}}|�|j|�dSr5)rEr�rtr�MSG_PEEKr�r�r�rrr�testPeek�szRDSTest.testPeekcCr�r�r�rIrrr�	_testPeek	r�zRDSTest._testPeek�recvmsgcCs(|j�|j�\}}}}|�|j|�dSr5)rEr�rtr�r�)rJr��ancdataZ	msg_flagsr�rrr�testSendAndRecvMsg		szRDSTest.testSendAndRecvMsg�sendmsgcCs&d|_|j�|jgddt|jf�dS)Ns<hello hello hello hello hello hello hello hello hello hello rr)r�r�r�r�rGrIrrr�_testSendAndRecvMsg	s zRDSTest._testSendAndRecvMsgcCr�r5)rEr�rtr��data1�data2r�rrr�testSendAndRecvMulti	r�zRDSTest.testSendAndRecvMulticCs@d|_|j�|jdt|jf�d|_|j�|jdt|jf�dS)Nsbaconrsegg)r�r�r_r�rGr�rIrrr�_testSendAndRecvMulti	szRDSTest._testSendAndRecvMulticCsLt�|jgggd�\}}}|�|j|�|j�|j�\}}|�|j|�dS)Ng@)�selectrErGr�rtr�r�)rJrr9rmr�r�rrr�
testSelect!	szRDSTest.testSelectcCr�)Nsselectrr�rIrrr�_testSelect'	r�zRDSTest._testSelectr�)rQrRrSr[rKr�r�r�r�r8rr�r�r�r�r�r�rirrrbrr��s




r�z'QIPCRTR sockets required for this test.c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�BasicQIPCRTRTestcC�
tjdSr5)rr3rIrrrrh/	rmz%BasicQIPCRTRTest.testCrucialConstantscC�6t�tjtj��	}Wd�dS1swYdSr5)rr3r&rJrrrr�2	�"�z!BasicQIPCRTRTest.testCreateSocketcCsJt�tjtj��}|�|��dd�Wd�dS1swYdS�Nrr)rr3r&r�r�rJrrr�testUnbound6	�"�zBasicQIPCRTRTest.testUnboundcCs`t�tjtj��}tj||��dd�|�|��dd�Wd�dS1s)wYdS)Nrrr)rr3r&rrFr��assertNotEqualrJrrr�testBindSock:	s"�zBasicQIPCRTRTest.testBindSockcCsJt�tjtj��}|jttj|dd�Wd�dS1swYdS)Nr�r)rr3r&rVrrrFrJrrr�testInvalidBindSock?	r�z$BasicQIPCRTRTest.testInvalidBindSockcCsTt�tjtj��}|�d�|�|��dd�Wd�dS1s#wYdS)N)�{r�rr)rr3r&r�r�r�rJrrr�testAutoBindSockC	s
"�z!BasicQIPCRTRTest.testAutoBindSockN)	rQrRrSrhr�r�r�r�r�rrrrr�+	sr�c@�,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BasicVSOCKTestcCr�r5)rr�rIrrrrhM	rmz#BasicVSOCKTest.testCrucialConstantscCrnr5)	r�SO_VM_SOCKETS_BUFFER_SIZE�SO_VM_SOCKETS_BUFFER_MIN_SIZE�SO_VM_SOCKETS_BUFFER_MAX_SIZEr�ZVMADDR_PORT_ANYr�ZVM_SOCKETS_INVALID_VERSIONrrIrrr�testVSOCKConstantsP	s
z!BasicVSOCKTest.testVSOCKConstantscCr�r5)rr�r9rJrrrr�Z	r�zBasicVSOCKTest.testCreateSocketcCs�t�tjtj��l}|�tjtj�}|�tjtj�}|�tjtj�}|�tjtj|d�|�tjtj|d�|�tjtj|d�|�|d|�tjtj��|�|d|�tjtj��|�|d|�tjtj��Wd�dS1swwYdS�Nr�)	rr�r9r�rr�rr�r�)rJr#Zorig_maxr�Zorig_minrrrr�^	sF���
�
�
�
��
��
��"�z#BasicVSOCKTest.testSocketBufferSizeN)rQrRrSrhrr�r�rrrrr�H	s

r�z)Bluetooth sockets required for this test.c@sveZdZdd�Zdd�Ze�ejdkd�dd��Z	e�ejdkd	�d
d��Z
e�ejdkp2ej�d�d
�dd��ZdS)�BasicBluetoothTestcCsRtjtjtjtjtjdkr%tjtjtj	tj�
d�s'tjdSdSdS)Nr�r�)rZ
BDADDR_ANYZBDADDR_LOCALr8r:r�r��BTPROTO_HCIZSOL_HCI�
BTPROTO_L2CAPr��BTPROTO_SCOrIrrr�testBluetoothConstants}	s

�z)BasicBluetoothTest.testBluetoothConstantscCr�r5)rr8r9r:rJrrr�testCreateRfcommSocket�	r�z)BasicBluetoothTest.testCreateRfcommSocketr�z&windows does not support L2CAP socketscCr�r5)rr8r.rrJrrr�testCreateL2capSocket�	�"�z(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketscCr�r5)rr8rrrJrrr�testCreateHciSocket�	rz&BasicBluetoothTest.testCreateHciSocketr�z.windows and freebsd do not support SCO socketscCr�r5)rr8r.rrJrrr�testCreateScoSocket�	r�z&BasicBluetoothTest.testCreateScoSocketN)
rQrRrSrr	r�r�r�r�r
rr�r
rrrrry	s

�rc@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�cCr�r��r�r[r�rrrr[�	r�zBasicTCPTest.__init__cC�|j�d�}|�|t�dSr�)r�r�r�r�rYrrr�testRecv�	szBasicTCPTest.testRecvcC�|j�t�dSr5�r�r�r�rIrrr�	_testRecv�	r	zBasicTCPTest._testRecvcCs8|j�tt�d�}|j�d�}||}|�|t�dS�N�r�)r�r�rr�r�)rJ�seg1�seg2r�rrr�testOverFlowRecv�	szBasicTCPTest.testOverFlowRecvcCrr5rrIrrr�_testOverFlowRecv�	r	zBasicTCPTest._testOverFlowRecvcCs |j�d�\}}|�|t�dSr�)r�r�r�r��rJr�r�rrr�testRecvFrom�	�zBasicTCPTest.testRecvFromcCrr5rrIrrr�
_testRecvFrom�	r	zBasicTCPTest._testRecvFromcCs@|j�tt�d�\}}|j�d�\}}||}|�|t�dSr)r�r�rr�r�)rJrr�rr�rrr�testOverFlowRecvFrom�	sz!BasicTCPTest.testOverFlowRecvFromcCrr5rrIrrr�_testOverFlowRecvFrom�	r	z"BasicTCPTest._testOverFlowRecvFromcCs2d}	|j�d�}|sn||7}q|�|d�dS)N�rr��ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r�r�r�)rJr��readrrr�testSendAll�	s�zBasicTCPTest.testSendAllcCsd}|j�|�dS)Nr")r�r!)rJZ	big_chunkrrr�_testSendAll�	szBasicTCPTest._testSendAllcCsP|j��}t�|tjtj�}|�|j�|�|tj�|�	d�}|�
|t�dSr�)r�rHrZfromfdrDr9rfr!rCr�r�r�)rJrirr�rrr�
testFromFd�	s

zBasicTCPTest.testFromFdcCrr5rrIrrr�_testFromFd�	r	zBasicTCPTest._testFromFdcCs0|j��}|�|j�|�d�}|�|t�dSr�)r��duprfr!r�r�r�)rJrr�rrr�testDup�	s

zBasicTCPTest.testDupcCrr5rrIrrr�_testDup�	r	zBasicTCPTest._testDupcCs&|j�d�}|�|t�|j��dSr�)r�r�r�r�r�r�rYrrr�testShutdown�	szBasicTCPTest.testShutdowncCs|j�t�|j�d�dSr)r�r�r��shutdownrIrrr�
_testShutdown�	�zBasicTCPTest._testShutdowncCsXddl}|j�t�|�t|jj|jd�|�t|jjd|jd�|j�d�dS)Nrrr�)	r�r�r�r�rVr�r,r��UINT_MAX�rJr�rrr�_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�rHrer�rB�_closedrVrr�r!rrDr9rfr�)rJrHrrr�rrr�
testDetach
s



zBasicTCPTest.testDetachcCrr5rrIrrr�_testDetach
r	zBasicTCPTest._testDetachNr�)rQrRrSr[rrrrrrrr r$r%r&r'r)r*r+r-rr�ZtestShutdown_overflowr1r3r4rrrrr�	s.

		


rc@�FeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestr�cCr�r�)r�r[r�rrrr[
r�zBasicUDPTest.__init__cC� |j�tt��}|�|t�dSr5�rEr�rr�r�rYrrr�testSendtoAndRecv 
rzBasicUDPTest.testSendtoAndRecvcC�|j�tdt|jf�dSr��r�r_r�r�rGrIrrr�_testSendtoAndRecv%
r�zBasicUDPTest._testSendtoAndRecvcC�$|j�tt��\}}|�|t�dSr5�rEr�rr�r�rrrrr(
�zBasicUDPTest.testRecvFromcCr:r�r;rIrrrr-
r�zBasicUDPTest._testRecvFromcC�|�t|jjd�dS�Nr��rVr�rEr�rIrrr�testRecvFromNegative0
rz!BasicUDPTest.testRecvFromNegativecCr:r�r;rIrrr�_testRecvFromNegative4
r�z"BasicUDPTest._testRecvFromNegativeNr��
rQrRrSr[r9r<rrrCrDrrrrr6
s
r6c@r5)�BasicUDPLITETestr�cCr�r�)r�r[r�rrrr[<
r�zBasicUDPLITETest.__init__cCr7r5r8rYrrrr9?
rz"BasicUDPLITETest.testSendtoAndRecvcCr:r�r;rIrrrr<D
r�z#BasicUDPLITETest._testSendtoAndRecvcCr=r5r>rrrrrG
r?zBasicUDPLITETest.testRecvFromcCr:r�r;rIrrrrL
r�zBasicUDPLITETest._testRecvFromcCr@rArBrIrrrrCO
rz%BasicUDPLITETest.testRecvFromNegativecCr:r�r;rIrrrrDS
r�z&BasicUDPLITETest._testRecvFromNegativeNr�rErrrrrF8
s
rFcs�eZdZejZ�fdd�Zdd�ZdZdd�Z	dd	�Z
d
d�Zdd
�ZdZ
dD]
Ze
eeed�OZ
q'dZdZdZddd�Z�ZS)�SendrecvmsgBasecst��|_t���dSr5)r\r��
misc_eventrZrKrIrbrrrKx
r�zSendrecvmsgBase.setUpcCs|j�|�Sr5)�cli_sockr�rYrrr�sendToServer|
szSendrecvmsgBase.sendToServerrcGs|jj||jt|�d��Sr5)rIr��sendmsg_to_server_defaultsr�rJr`rrr�sendmsgToServer�
s�zSendrecvmsgBase.sendmsgToServercGs |j|g|�R�}|�|�|Sr5)r��registerRecvmsgResult)rJrrtr`�resultrrr�	doRecvmsg�
s
zSendrecvmsgBase.doRecvmsgcCr�r5r�rJrOrrrrN�
sz%SendrecvmsgBase.registerRecvmsgResultcCs|�||�dSr5�r��rJZaddr1Zaddr2rrr�checkRecvmsgAddress�
�z#SendrecvmsgBase.checkRecvmsgAddressr)�
MSG_CTRUNCZMSG_OOBNc
Cs�|j}|j}|r||jO}||jO}n|dur!||jO}||jO}||M}||M}||O}||O}||@|@}|rCtd�|���||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�)
rJr	�eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothr�rrr�
checkFlags�
s&




�zSendrecvmsgBase.checkFlags)Nrrr)rQrRrSr�LOOPBACK_TIMEOUT�fail_timeoutrKrJrKrMrPrNrTrXr.r�rrWrYrZr`rirrrbrrGq
s 
rGc@rV)�RecvmsgIntoMixincGsht|�}|j|gg|�R�}|�|�|�|dd�|�|d|�t|d|d��f|dd�Sr)r��recvmsg_intorN�assertGreaterEqual�assertLessEqualr�)rJrrtr`�bufrOrrrrP�
s
"zRecvmsgIntoMixin.doRecvmsgN)rQrRrSrPrrrrrc�
�rcc� eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasec�t�jtjBSr5)rZrZr�	MSG_TRUNCrIrbrrrZ�
�z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rQrRrS�propertyrZrirrrbrrj�
�rjcri)�SendrecvmsgSCTPFlagsBasecrkr5)rZrYrZMSG_EORrIrbrrrY�
rmz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rQrRrSrnrYrirrrbrrp�
rorpc@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCrnr5)rErIrrr�	serv_sock	�z'SendrecvmsgConnectionlessBase.serv_sockcCrnr5)r�rIrrrrI
rsz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfSr�)r�rIrrrrKrmz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j�||j�Sr5)rIr_r�rYrrrrJr	z*SendrecvmsgConnectionlessBase.sendToServerN)rQrRrSrnrrrIrKrJrrrrrqs


rqc@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCrnr5)r�rIrrrrrrsz"SendrecvmsgConnectedBase.serv_sockcCrnr5)r�rIrrrrI#rsz!SendrecvmsgConnectedBase.cli_sockcCr�r5rrSrrrrT'�z,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rQrRrSrnrrrIrTrrrrrts

rtc�eZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasec�t���|j�|j�dSr5)rZrKrrr�rbrIrbrrrK0�
z"SendrecvmsgServerTimeoutBase.setUpr�rrrbrrw-srwc@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)+�SendmsgTestscC�|�|j�tt��t�dSr5�r�rrr�rr�rIrrr�testSendmsg9�zSendmsgTests.testSendmsgcCs|�|�tg�tt��dSr5�r�rMr�rrIrrr�_testSendmsg=�zSendmsgTests._testSendmsgcCr{r5r|rIrrr�testSendmsgDataGenerator@r~z%SendmsgTests.testSendmsgDataGeneratorcCs&|�|�dd�tfD��tt��dS)Ncsr3r5rr;rrrr4Er5z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rrIrrr�_testSendmsgDataGeneratorDs�z&SendmsgTests._testSendmsgDataGeneratorcCr{r5r|rIrrr�testSendmsgAncillaryGeneratorHr~z*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|�|�tgdd�dD��tt��dS)Ncsr3r5rr;rrrr4Mr5z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>rrrIrrr�_testSendmsgAncillaryGeneratorLs�z+SendmsgTests._testSendmsgAncillaryGeneratorcCr{r5r|rIrrr�testSendmsgArrayPr~zSendmsgTests.testSendmsgArraycCs$|�|�t�dt�g�tt��dS)N�B)r�rM�arrayr�rrIrrr�_testSendmsgArrayTs�zSendmsgTests._testSendmsgArraycCr{r5r|rIrrr�testSendmsgGatherXr~zSendmsgTests.testSendmsgGathercC�.|�|�tdd�tdd�g�tt��dS�NrrrIrrr�_testSendmsgGather\s.zSendmsgTests._testSendmsgGathercC�|�|j�d�d�dS�Nr��done�r�rrr�rIrrr�testSendmsgBadArgs_�zSendmsgTests.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�)rVr�rIr�rM�objectr�rJrIrrr�_testSendmsgBadArgscs.
�
�
�
�
�

�
�z SendmsgTests._testSendmsgBadArgscCr�r�r�rIrrr�testSendmsgBadCmsgur�zSendmsgTests.testSendmsgBadCmsgcCs�|�t|jtgt�g�|�t|jtgt�ddfg�|�t|jtgdt�dfg�|�t|jtgddt�fg�|�t|jtgdg�|�t|jtgdg�|�d�dS)Nr�data)rr)rrr�rWr��rVr�rMr�r�rJrIrrr�_testSendmsgBadCmsgys&

�
�
�
�
�
�z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCr�r�r�rIrrr�testSendmsgBadMultiCmsg�sz$SendmsgTests.testSendmsgBadMultiCmsgcCs@|�t|jtggd��|�t|jtgdt�g�|�d�dS)N�rrr!r�r�rIrrr�_testSendmsgBadMultiCmsg�s

�
�z%SendmsgTests._testSendmsgBadMultiCmsgcCr�r�r�rIrrr�testSendmsgExcessCmsgReject��z(SendmsgTests.testSendmsgExcessCmsgRejectcCsbttd�s*|�t��}|�tgddg�Wd�n1swY|�|jj�|�	d�dS)Nr�r�r�)
rrrVrrMr��assertIsNoner`r�rJ�rJrbrrr�_testSendmsgExcessCmsgReject�s
�z)SendmsgTests._testSendmsgExcessCmsgRejectcCr�r5rrIrrr�testSendmsgAfterClose�sz"SendmsgTests.testSendmsgAfterClosecCs |j��|�t|jtg�dSr5)rIr!rVrrMr�rIrrr�_testSendmsgAfterClose�s
z#SendmsgTests._testSendmsgAfterCloseN)rQrRrSr}r�r�r�r�r�r�r�r�r�r�r�r�r�r8rr�r$r�r�r�r�r�rrrrrz5s.

rzc@sReZdZdd�Zdd�Zdd�Zdd�Zeej	d	vd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCr{r5r|rIrrr�testSendmsgExplicitNoneAddr�r~z.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|�|�tggdd�tt��dSr�rrIrrr�_testSendmsgExplicitNoneAddr�s"z/SendmsgStreamTests._testSendmsgExplicitNoneAddrcC�.|�|j�d�d�|�|jj|jd��dS�Nr��aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�r>�r�rrr�rBrHr�rbrIrrr�testSendmsgTimeout�sz%SendmsgStreamTests.testSendmsgTimeoutc
Cs�z@|j�d�z	|�dg�q	tyYnty0}z
|jtjkr&�WYd}~n
d}~wwW|j�	�dSW|j�	�dS|j�	�w)N���Q��?Tr�)
rIr�rMr#rr��ENOMEMrRrHr}�rJr�rrr�_testSendmsgTimeout�s$�����	�z&SendmsgStreamTests._testSendmsgTimeout>r�z<MSG_DONTWAIT not known to work on this platform when sendingcCr�r�r�rIrrr�testSendmsgDontWait�sz&SendmsgStreamTests.testSendmsgDontWaitcCslz/|�t��}	|�dggtj�q1swY|�|jjtjtj	tj
f�W|j��dS|j��w)NTr�)
rVrrMrZMSG_DONTWAITrGr`r�ZEAGAINZEWOULDBLOCKr�rHr}r�rrr�_testSendmsgDontWait�s��
�z'SendmsgStreamTests._testSendmsgDontWaitN)
rQrRrSr�r�r�r�r+r�r�r�r$r�rrrrr��s
�
r�c@rB)�SendmsgConnectionlessTestscCr�r5rrIrrr�testSendmsgNoDestAddr�ruz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|�t|jjtg�|�t|jjtggdd�dSr�)rVrrIr�r�rIrrr�_testSendmsgNoDestAddr�s�
�z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rQrRrSr�r�rrrrr��sr�c@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\�rPrrrr�r�rTr�r`�rJr�r�r	r�rrr�testRecvmsg�s
zRecvmsgGenericTests.testRecvmsgcC�|�t�dSr5�rJr�rIrrr�_testRecvmsgr+z RecvmsgGenericTests._testRecvmsgcCsV|�|jtt�dd�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTr�r�r�rrr�testRecvmsgExplicitDefaults	�
�z/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCr�r5r�rIrrr�_testRecvmsgExplicitDefaultsr+z0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrWTr�r�r�rrr�testRecvmsgShorterr�z&RecvmsgGenericTests.testRecvmsgShortercCr�r5r�rIrrr�_testRecvmsgShorterr+z'RecvmsgGenericTests._testRecvmsgShortercCs^|�|jtt�d�\}}}}|�|tdd��|�||j�|�|g�|j|dd�dS)Nr���Fr�r�r�rrr�testRecvmsgTrunc!s
�z$RecvmsgGenericTests.testRecvmsgTrunccCr�r5r�rIrrr�_testRecvmsgTrunc*r+z%RecvmsgGenericTests._testRecvmsgTrunccC�T|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTr�r�r�rrr�testRecvmsgShortAncillaryBuf-��z0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCr�r5r�rIrrr�_testRecvmsgShortAncillaryBuf6r+z1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCr�)N�(Tr�r�r�rrr�testRecvmsgLongAncillaryBuf9r�z/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCr�r5r�rIrrr�_testRecvmsgLongAncillaryBufBr+z0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|j��|�t|j|jd�dSr�)rrr!rVrrPrIrrr�testRecvmsgAfterCloseEs
z)RecvmsgGenericTests.testRecvmsgAfterClosecCr�r5rrIrrr�_testRecvmsgAfterCloseJr�z*RecvmsgGenericTests._testRecvmsgAfterClosecCsBz|j�d�|�t|j|jtt��W|j��dS|j��w)Nr�)	rrr�rVr#rPrr�rHr}rIrrr�testRecvmsgTimeoutMs�z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|�|jj|jd��dS�Nr�)rBrHr�rbrIrrr�_testRecvmsgTimeoutVr�z'RecvmsgGenericTests._testRecvmsgTimeoutr�cCs|�|jtt�ddtj�\}}}}|�|tdd��|�||j�|�|g�|j	|dt
tdd�d�|�|jtt�dtj�\}}}}|�|t�|�||j�|�|g�|j	|dd�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dS)	Nrrr�Frl�r\r_Tr�)rPrrrr�rr�r�rTr�r`r�r�rrr�testRecvmsgPeekYs.�
��z#RecvmsgGenericTests.testRecvmsgPeekcCr�r5r�rIrrr�_testRecvmsgPeek|rmz$RecvmsgGenericTests._testRecvmsgPeekr�cCs`|j�|j�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dSr�)
rrr�rbrPrr�r�rTr�r`r�rrr�testRecvmsgFromSendmsg�sz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCr�r�rrIrrr�_testRecvmsgFromSendmsg�s.z+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rQrRrSr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r8rr�r$r�r�r�rrrrr��s2						
"



r�c@r�)
�RecvmsgGenericStreamTestscCsN|�|jd�\}}}}|�|d�|�||j�|�|g�|j|dd�dS)Nr�r!r�)rPrrr�rTr�r`r�rrr�testRecvmsgEOF�s
z(RecvmsgGenericStreamTests.testRecvmsgEOFcC�|j��dSr5)rIr!rIrrr�_testRecvmsgEOF�r+z)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|�|jtt�d�\}}}}|�||j�|�|g�|j|dd�|�|jd�\}}}}|�||j�|�|g�|j|dd�||}|�|t�dS)NrFr�r�T)rPrrrr�rTr�r�r`)rJrr�r	r�rr�rrr�testRecvmsgOverflow�s
�z-RecvmsgGenericStreamTests.testRecvmsgOverflowcCr�r5r�rIrrr�_testRecvmsgOverflow�r+z.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rQrRrSr�r�r�r�rrrrr��s
r�c@rB)�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)Nr�rr�Tr�)
rVr�rrr�r�rr�r�r�r�rTr�r`r�rrr�testRecvmsgBadArgs�s0�
�����zRecvmsgTests.testRecvmsgBadArgscCr�r5r�rIrrr�_testRecvmsgBadArgs�r+z RecvmsgTests._testRecvmsgBadArgsN)rQrRrSr�r�rrrrr��sr�c@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 writabler�Tr�)
r�rr�rVr�rrrdr�r�r�rTr�r`�rJrg�nbytesr�r	r�rrr�testRecvmsgIntoBadArgs�s@
��
����
�
�z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCr�r5r�rIrrr�_testRecvmsgIntoBadArgs�r+z(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|j�dd�|fD��\}}}}|�|tt��|�|tt��|�||j�|�|g�|j|dd�dS)Ncsr3r5rr;rrrr4�r5z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr�)	r�rr�rrrdr�rTr�r`r�rrr�testRecvmsgIntoGenerator�s�z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCr�r5r�rIrrr�_testRecvmsgIntoGenerator�r+z*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxt�ddgtt��}|j�|g�\}}}}|�|tt��|�|��t�|�||j�|�|g�|j	|dd�dS)Nr�rTr�)
r�rr�rrrdr��tobytesrTr�r`r�rrr�testRecvmsgIntoArray
sz%RecvmsgIntoTests.testRecvmsgIntoArraycCr�r5r�rIrrr�_testRecvmsgIntoArray

r+z&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�rrrd�
memoryviewr�rrTr�r`)rJZb1Zb2Zb3r�r�r	r�rrr�testRecvmsgIntoScatter

s�z'RecvmsgIntoTests.testRecvmsgIntoScattercCr')Nr�)rJrIrrr�_testRecvmsgIntoScatter
r+z(RecvmsgIntoTests._testRecvmsgIntoScatterN)rQrRrSr�r�r�r�r�r�r�r�rrrrr��s
r�c@s`eZdZzddlZWneydZYnwedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs�|jt�d�d}ttd��tt|d|��}|�t�d�t�d�jd�|D]}t�|�}|�|t�d�|�|�	||j�q*|�
ttjd�|�
ttj|�|�
ttjtj
�dS)Nrr�rAr�r�)�socklen_t_limitrr��listrDr�r��itemsizer�rfrVr�r��maxsize)rJ�toobigrh�n�retrrr�testCMSG_LEN-
s
zCmsgMacroTests.testCMSG_LENr�cCs�|jt�d�d}ttd��tt|d|��}t�d�}|�|t�d�jd�|D]*}t�|�}|�||�|�|t�	|��|�||t�	d��|�
||j�|}q,|�ttjd�|�ttj|�|�ttjt
j�dS)Nrr�rrAr�r�)r�rr�r�rDr�r�r�rer�rfrVr�r�r�)rJr�rhZlastr�r�rrr�testCMSG_SPACEB
s

zCmsgMacroTests.testCMSG_SPACE)rQrRrSr�r�r��minr�r8rr�r�rrrrr� 
s�
r�c@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/dedQdR�Z0dSdT�Z1dUdV�Z2dWdX�Z3dYdZ�Z4d[d\�Z5d]d^�Z6d_d`�Z7dadb�Z8dcS)f�
SCMRightsTesti����cCs\g}t|�D]%}t��\}}|�tj|�|�tj|�t�|t|��	��|�
|�q|Sr5)rDr�Zmkstemprfr�rr!�writer9�encode�append)rJr��fdsrArirrrr�newFDsc
szSCMRightsTest.newFDscCsBt|�D]\}}t�|dtj�|�t�|d�t|����qdS)Nrr�)�	enumerater��lseek�SEEK_SETr�r#r9r)rJrr�rirrr�checkFDso
s�zSCMRightsTest.checkFDscCs|�|j|�dSr5)rf�closeRecvmsgFDsrQrrrrNv
r�z#SCMRightsTest.registerRecvmsgResultcCsn|dD]0\}}}|tjkr4|tjkr4t�d�}|�|dt|�t|�|j��|D]}t�|�q,qdS)NrrA)	rrf�
SCM_RIGHTSr��	frombytesrr�r�r!)rJZrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datarrirrrry
s


���zSCMRightsTest.closeRecvmsgFDsc
Cs8|�|�tgtjtjt�d|�|��fg�tt��dS)NrA)	r�rMr�rrfr	r�rr)rJr�rrr�createAndSendFDs�
s���zSCMRightsTest.createAndSendFDsrrcCs�|\}}}}|�|t�|�||j�|j|dtj|d�|�|t�|�	t
|�|�t�d�}	|D]0}
|�|
t�|
\}}}
|�|tj
�|�|tj�|�|
t�|�t
|
�td�|	�|
�q2|�t
|	�|�|�|	�dS)NT�r\r^r_rAr)r�r�rTr�r`rrVrCr�rfrr��tuplerfr	r��
SIZEOF_INTr
r)rJZnumfdsrO�maxcmsgs�ignoreflagsr�r�r	r�r�itemrrr
rrr�checkRecvmsgFDs�
s&�

zSCMRightsTest.checkRecvmsgFDscC� |�d|�|jtt�d��dS)Nrr��rrPrrrr�rIrrr�testFDPassSimple�
�
�zSCMRightsTest.testFDPassSimplec
Cs<|�|�tgtjtjt�d|�d����fg�t	t��dS)NrAr)
r�rMr�rrfr	r�rr�rrIrrr�_testFDPassSimple�
s���zSCMRightsTest._testFDPassSimplecCr)Nr^r�rrIrrr�testMultipleFDPass�
rz SCMRightsTest.testMultipleFDPasscCr'�Nr^�rrIrrr�_testMultipleFDPass�
r+z!SCMRightsTest._testMultipleFDPassr�cCs*|�d|�|jtt�t�dt���dSr)rrPrrrr�rr�rrIrrr�testFDPassCMSG_SPACE�
s
��z"SCMRightsTest.testFDPassCMSG_SPACEcCr'rrrIrrr�_testFDPassCMSG_SPACE�
rmz#SCMRightsTest._testFDPassCMSG_SPACEc
Cs0|jd|�|jtt�t�dt��tjd�dS)Nrr^�r)	rrPrrrr�rr�rrVrIrrr�testFDPassCMSG_LEN�
s�
�z SCMRightsTest.testFDPassCMSG_LENcCr'r
rrIrrr�_testFDPassCMSG_LEN�
r+z!SCMRightsTest._testFDPassCMSG_LENrpzskipping, see issue #12958zskipping, see issue #22397cCs$|jd|�|jtt�d�dd�dS)Nr�r�)rrrIrrr�testFDPassSeparate�
s
�z SCMRightsTest.testFDPassSeparatecC�X|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dS�Nr�rA�	rr�rMr�rrfr	r�r�rJZfd0�fd1rrr�_testFDPassSeparate�
�����z!SCMRightsTest._testFDPassSeparatecCs@d}|j||�|jtt�t�t�t�t|��dtj	d�dS)Nr�)rr)
rrPrrrr�rr�rr�rV)rJZnum_fdsrrr�testFDPassSeparateMinSpace�
s��
�z(SCMRightsTest.testFDPassSeparateMinSpacecCr%r&r'r(rrr�_testFDPassSeparateMinSpace�
r+z)SCMRightsTest._testFDPassSeparateMinSpacec
Csfz	|�|g|�}Wnty(}z|�|jt�|�|g�}WYd}~nd}~ww|�|t|��dSr5)rMrrCr�r�r�r)rJr�r�r�r�rrr�sendAncillaryIfPossibles��z%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd|�|jtt�d�tjd�dS)Nrr�r!)rrPrrrr�rrVrIrrr�testFDPassEmptys
�
�zSCMRightsTest.testFDPassEmptycCs|�ttjtjdfg�dS�Nr!)r.r�rrfr	rIrrr�_testFDPassEmptys
�zSCMRightsTest._testFDPassEmptycCs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�|D]\}}}|�|tj�|�|tj�|�
t|�t�q.dS)Nr�Tr�r)rPrrrr�r�rTr�r`rrVrfrfr	�
assertLessr�rJr�r�r	r�rrr
rrr�testFDPassPartialInt#s��z"SCMRightsTest.testFDPassPartialIntc	Cs4|�ttjtjt�d|jg���dd�fg�dS)NrAr�)r.r�rrfr	r��badfdr�rIrrr�_testFDPassPartialInt0s��z#SCMRightsTest._testFDPassPartialIntc	Cs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�t�d�}|D]%\}}}|�|tj�|�|tj
�|�|dt|�t|�|j��q3|�
t|�d�|�|�dS)Nr�Tr�r�rA)rPrrrr�r�rTr�r`rrVrfr�rfr	r
r�r)	rJr�r�r	r�rrrr
rrr�testFDPassPartialIntInMiddle7s �

�z*SCMRightsTest.testFDPassPartialIntInMiddlec
CsZ|�d�\}}|�ttjtjt�d||jg���dd�ftjtjt�d|g�fg�dS)Nr�rAr�)	rr.r�rrfr	r�r5r�r(rrr�_testFDPassPartialIntInMiddleJs����z+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}|�|t�|�||j�|�|g�|j|dtj|d�dS)NT�r\r]r_)r�r�rTr�r`rrV)rJrOrr�r�r	r�rrr�checkTruncatedHeaderVs
�z"SCMRightsTest.checkTruncatedHeadercCs"|j|�|jtt��tjd�dS�Nr!�r:rPrrrr�rrVrIrrr�testCmsgTruncNoBufSize`s
�z$SCMRightsTest.testCmsgTruncNoBufSizecCr'r
rrIrrr�_testCmsgTruncNoBufSizeir+z%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j|�|jtt�d�tjd�dS)Nrr!r<rIrrr�testCmsgTrunc0ls
�zSCMRightsTest.testCmsgTrunc0cCr'r
rrIrrr�_testCmsgTrunc0qr+zSCMRightsTest._testCmsgTrunc0cCs|�|�|jtt�d��dSr
)r:rPrrrr�rIrrr�testCmsgTrunc1wszSCMRightsTest.testCmsgTrunc1cCr'r
rrIrrr�_testCmsgTrunc1zr+zSCMRightsTest._testCmsgTrunc1cCs"|�|�|jtt�td��dSr)r:rPrrrr�rrIrrr�testCmsgTrunc2Int}s
�zSCMRightsTest.testCmsgTrunc2IntcCr'r
rrIrrr�_testCmsgTrunc2Int�r+z SCMRightsTest._testCmsgTrunc2Intc	Cs(|�|�|jtt�t�d�d��dSr)r:rPrrrr�rr�rIrrr�testCmsgTruncLen0Minus1�s
�z%SCMRightsTest.testCmsgTruncLen0Minus1cCr'r
rrIrrr�_testCmsgTruncLen0Minus1�r+z&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]rrrA)rPrrrr�r�rTr�r`rrVrfr	rerfr�r
r�r)rJ�ancbuf�maxdataZmindatar�r�r	r�rrr
rrrr�checkTruncatedArray�s&�
�z!SCMRightsTest.checkTruncatedArraycCs|jt�d�dd�dS)Nr�rHrI�rJrr�rIrrr�testCmsgTruncLen0��zSCMRightsTest.testCmsgTruncLen0cCr'r
rrIrrr�_testCmsgTruncLen0�r+z SCMRightsTest._testCmsgTruncLen0cCs|jt�d�ddd�dS)NrrrKrLrIrrr�testCmsgTruncLen0Plus1�r�z$SCMRightsTest.testCmsgTruncLen0Plus1cCr'rrrIrrr�_testCmsgTruncLen0Plus1�r+z%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jt�t�td�dS)NrK�rJrr�rrIrrr�testCmsgTruncLen1�s
�zSCMRightsTest.testCmsgTruncLen1cCr'rrrIrrr�_testCmsgTruncLen1�r+z SCMRightsTest._testCmsgTruncLen1cCs(|jt�dt�ddtdd�dS)Nr�rrKrRrIrrr�testCmsgTruncLen2Minus1�s

�z%SCMRightsTest.testCmsgTruncLen2Minus1cCr'rrrIrrr�_testCmsgTruncLen2Minus1�r+z&SCMRightsTest._testCmsgTruncLen2Minus1N)rr�r)9rQrRrSr5rrrNrrrrrrrr8rrr$r r"r#r�r�r�r�r
r$r*r,r-r.r/r1r4r6r7r8r:r=r>r?r@rArBrCrDrErFrJrMrOrPrQrSrTrUrVrrrrr�[
s�

	













	
r�c@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��Z		d^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%d_dGdH�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)`�RFC3542AncillaryTestr�r�cCs4i}|D]\}}}|�||f|�||||f<q|Sr5)rI)rJr��drrr
rrr�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)NrTrrrA)rrr�rrjrurHr}rPrr�r�rTr�r`rVrCrrtr�rr�r
rerf)rJ�
ancbufsize�maxhoprr�r�r	r�rrr
r�rrr�
checkHopLimit�s.
�
��

z"RFC3542AncillaryTest.checkHopLimitrurtcC�|jdd�dS�Nr��r[)r]rIrrr�testRecvHopLimit�rUz%RFC3542AncillaryTest.testRecvHopLimitcC�$|�|jj|jd��|�t�dSr��rBrHr�rbrJr�rIrrr�_testRecvHopLimitsz&RFC3542AncillaryTest._testRecvHopLimitr�cCs|jt�t�d�dS)Nr`)r]rr�rrIrrr�testRecvHopLimitCMSG_SPACE�z/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCrbr�rcrIrrr�_testRecvHopLimitCMSG_SPACE
�z0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cC�|jd|jd�dS�Nr�)r[r\)r]�	hop_limitrIrrr�testSetHopLimitsz$RFC3542AncillaryTest.testSetHopLimitcCsL|�|jj|jd��|�|�tgtjtj	t
�
d|jg�fg�tt��dS�Nr�rA)
rBrHr�rbr�rMr�rrjrtr�rkrrIrrr�_testSetHopLimits���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)NrTrr�rArr�)rrr�rrjrurvrHr}rPrr�r�rTr�r`rVrZrsrr�r
rerfrt)rJr[r\rr�r�r	r�ZancmapZtcdatar�Zhldatarrr�checkTrafficClassAndHopLimit's:
�
�
��




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrvrscCr^r_)rorIrrr�testRecvTrafficClassAndHopLimitKsz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCrbr�rcrIrrr� _testRecvTrafficClassAndHopLimitQrhz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jt�t�dd�dS�Nr�r`)rorr�rrIrrr�)testRecvTrafficClassAndHopLimitCMSG_SPACEVs
�z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCrbr�rcrIrrr�*_testRecvTrafficClassAndHopLimitCMSG_SPACE^rhz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCrirj�rorkrIrrr�testSetTrafficClassAndHopLimitcs
�z3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitcCsd|�|jj|jd��|�|�tgtjtj	t
�
d|jg�ftjtjt
�
d|j
g�fg�tt��dSrm)rBrHr�rbr�rMr�rrjrsr��
traffic_classrtrkrrIrrr�_testSetTrafficClassAndHopLimitls�����z4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCrirjrurIrrr�testOddCmsgSizews
�z$RFC3542AncillaryTest.testOddCmsgSizec
Cs�|�|jj|jd��z&|�tgtjtjt	�	d|j
g���dftjtjt	�	d|j
g�fg�}WdStyr}z5|�|jt�|�tgtjtjt	�	d|j
g�ftjtjt	�	d|j
g�fg�}|�|tt��WYd}~dSd}~ww)Nr�rAr�)rBrHr�rbrMr�rrjrsr�rwr�rtrkrrCr�r�r�r)rJr�r�rrr�_testOddCmsgSize�s6���
�������z%RFC3542AncillaryTest._testOddCmsgSizecCs�|j�tjtjd�|j��|durdn|f}|j|jtt	�g|�R�\}}}}|�
|t	�|�||j�|�
|g�|j
|dtj|d�dS)NrrTr9)rrr�rrjrurHr}rPrr�r�rTr�r`rV)rJr[rr`r�r�r	r�rrr�checkHopLimitTruncatedHeader�s 
�
��
�z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N�r[r�r{rrVrIrrrr=�s
�z+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCrbr�rcrIrrrr>�rhz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nrr|r}rIrrr�testSingleCmsgTrunc0�s
�z)RFC3542AncillaryTest.testSingleCmsgTrunc0cCrbr�rcrIrrr�_testSingleCmsgTrunc0�rhz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCr^)Nrr`)r{rIrrr�testSingleCmsgTrunc1��z)RFC3542AncillaryTest.testSingleCmsgTrunc1cCrbr�rcrIrrr�_testSingleCmsgTrunc1�rhz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dSrr)r{rrIrrr�testSingleCmsgTrunc2Int��z,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCrbr�rcrIrrr�_testSingleCmsgTrunc2Int�rhz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jt�d�dd�dS)Nrrr`)r{rr�rIrrr�testSingleCmsgTruncLen0Minus1��z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCrbr�rcrIrrr�_testSingleCmsgTruncLen0Minus1�rhz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|j�tjtjd�|j��|�|jtt	�t�
t�d�\}}}}|�|t	�|�
||j�|j|dtjd�|�t|�d�|ra|d\}}}|�|tj�|�|tj�|�t|�t�dSdS)NrTrGr)rrr�rrjrurHr}rPrr�r�rr�rTr�r`rVrfrtr2r3rrr�testSingleCmsgTruncInData�s"
�
��z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCrbr�rcrIrrr�_testSingleCmsgTruncInData�rhz/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)NrTr9rrAr�)rrr�rrjrurvrHr}rPrr�r�rTr�r`rVrGrsrtrr�r
rerf)rJr[rr�r�r	r�rrr
r�rrr�checkTruncatedSecondHeaders0
�
�
��

z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jt�t�tjd�dSr;)r�rr�rrVrIrrr�testSecondCmsgTrunc0 s
�z)RFC3542AncillaryTest.testSecondCmsgTrunc0cCrbr�rcrIrrr�_testSecondCmsgTrunc0&rhz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|�t�t�d�dSr
�r�rr�rrIrrr�testSecondCmsgTrunc1+r�z)RFC3542AncillaryTest.testSecondCmsgTrunc1cCrbr�rcrIrrr�_testSecondCmsgTrunc10rhz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|�t�t�dt�dSrr�rIrrr�testSecondCmsgTrunc2Int5s
�z,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCrbr�rcrIrrr�_testSecondCmsgTrunc2Int;rhz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|�t�t�t�d�d�dSr)r�rr�rr�rIrrr�testSecondCmsgTruncLen0Minus1@s
�
�z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCrbr�rcrIrrr�_testSecondCmsgTruncLen0Minus1Frhz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
CsR|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�|r�|�d�\}}}|�|tj�|�|�|�t	|�t�|�|g�dS)NrTrGrrAr�)rrr�rrjrurvrHr}rPrr�r�rr�r�rTr�r`rVrsrt�pop�remover�r
rerfr2)
rJr�r�r	r�Z
cmsg_typesrrr
r�rrr�testSecondCmsgTruncInDataKs:
�
�

�



z.RFC3542AncillaryTest.testSecondCmsgTruncInDatacCrbr�rcrIrrr�_testSecondCmsgTruncInDataprhz/RFC3542AncillaryTest._testSecondCmsgTruncInDataN)r�rrW)1rQrRrSrkrwrZr]r8rrar$rdrergrlrnrorprqrsrtrvrxryrzr{r=r>r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrX�s�







	


�$�


�



�



�






















 �


�


�


�


�
#rXc@�eZdZdS)�SendrecvmsgUDPTestBaseN�rQrRrSrrrrr�x�r�r�c@r�)�SendmsgUDPTestNr�rrrrr�}�r�r�c@r�)�RecvmsgUDPTestNr�rrrrr��r�r�rdc@r�)�RecvmsgIntoUDPTestNr�rrrrr��r�r�c@rV)�SendrecvmsgUDP6TestBasecC� |�|dd�|dd��dSrArRrSrrrrT�� z+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN�rQrRrSrTrrrrr���r�rLrr&c@r�)�SendmsgUDP6TestNr�rrrrr���r�c@r�)�RecvmsgUDP6TestNr�rrrrr��r�r�c@r�)�RecvmsgIntoUDP6TestNr�rrrrr��r�r�rjc@r�)�RecvmsgRFC3542AncillaryUDP6TestNr�rrrrr���r�c@r�)�#RecvmsgIntoRFC3542AncillaryUDP6TestNr�rrrrr��sr�c@r�)�SendrecvmsgUDPLITETestBaseNr�rrrrr��sr�c@r�)�SendmsgUDPLITETestNr�rrrrr��r�r�c@r�)�RecvmsgUDPLITETestNr�rrrrr��r�r�c@r�)�RecvmsgIntoUDPLITETestNr�rrrrr��r�r�c@rV)�SendrecvmsgUDPLITE6TestBasecCr�rArRrSrrrrT�r�z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNr�rrrrr��sr�c@r�)�SendmsgUDPLITE6TestNr�rrrrr��r�r�c@r�)�RecvmsgUDPLITE6TestNr�rrrrr��r�r�c@r�)�RecvmsgIntoUDPLITE6TestNr�rrrrr��r�r�c@r�)�#RecvmsgRFC3542AncillaryUDPLITE6TestNr�rrrrr��sr�c@r�)�'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNr�rrrrr��s	r�c@r�)�SendrecvmsgTCPTestBaseNr�rrrrr�
r�r�c@r�)�SendmsgTCPTestNr�rrrrr�r�r�c@r�)�RecvmsgTCPTestNr�rrrrr�r�r�c@r�)�RecvmsgIntoTCPTestNr�rrrrr�r�r�c@r�)�SendrecvmsgSCTPStreamTestBaseNr�rrrrr�r�r�z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXrDr9rc@r�)�SendmsgSCTPStreamTestNr�rrrrr�"r�r�crv)�RecvmsgSCTPStreamTestc
�Tz
tt|���WdSty)}z|jtjkr�|�d�WYd}~dSd}~ww�Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rZr�r�rr��ENOTCONNrs�rJr�rbrrr�.���z$RecvmsgSCTPStreamTest.testRecvmsgEOF�rQrRrSr�rirrrbrr�(�r�crv)�RecvmsgIntoSCTPStreamTestc
r�r�)rZr�r�rr�r�rsr�rbrrr�<r�z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr�rrrbrr�6r�r�c@r�)�SendrecvmsgUnixStreamTestBaseNr�rrrrr�Er�r�rc@r�)�SendmsgUnixStreamTestNr�rrrrr�Ir�r�c@r�)�RecvmsgUnixStreamTestNr�rrrrr�Nr�r�c@r�)�RecvmsgIntoUnixStreamTestNr�rrrrr�Tr�r�rfr	c@r�)�RecvmsgSCMRightsStreamTestNr�rrrrr�Zr�r�c@r�)�RecvmsgIntoSCMRightsStreamTestNr�rrrrr�_r�r�csLeZdZ�fdd�ZejZeed�rdZ	dd�Z
�ZSdZ	dd�Z
�ZS)	�InterruptedTimeoutBasecs2t���t�tjdd��}|�tjtj|�dS)NcSsddSr�r)Zsignumr�rrrrssz.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rZrKrrrf)rJZorig_alrm_handlerrbrrrKps

�zInterruptedTimeoutBase.setUp�	setitimerg�������?cCst�tj|�dSr5)rr��ITIMER_REAL�rJZsecondsrrr�setAlarmr�zInterruptedTimeoutBase.setAlarmr�cCst�|�dSr5)rrr�rrrr��r+)rQrRrSrKrrar>rr�
alarm_timer�rirrrbrr�ks
r��siginterruptrr�z+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)�InterruptedRecvTimeoutTestcrxr5)rZrKrEr�r>rIrbrrrK�ryz InterruptedRecvTimeoutTest.setUpc	Osrz2|�|j�|�t��}||i|��Wd�n1swYW|�d�dSW|�d�dS|�d�wr�)r�r�rVr �rJr�r`rarbrrr�checkInterruptedRecv�s��z/InterruptedRecvTimeoutTest.checkInterruptedRecvcC�|�|jjd�dSr�)r�rEr�rIrrr�testInterruptedRecvTimeout�r�z5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcC�|�|jjtd��dSr�)r�rE�	recv_intor�rIrrr�testInterruptedRecvIntoTimeout�rNz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCr�r�)r�rEr�rIrrr�testInterruptedRecvfromTimeout�r�z9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCr�r�)r�rE�
recvfrom_intor�rIrrr�"testInterruptedRecvfromIntoTimeout�rNz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCr�r�)r�rEr�rIrrr�testInterruptedRecvmsgTimeout�r�z8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrdcCs|�|jjtd�g�dSr�)r�rErdr�rIrrr�!testInterruptedRecvmsgIntoTimeout�r�z<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rQrRrSrKr�r�r�r�r�r8rr�r�rirrrbrr��s



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)rZrKr�r�rfr!r\�Thread�	doConnect�startrEr�r�r6r�r>)rJZ
cli_threadr�rbrrrK�s

z InterruptedSendTimeoutTest.setUpcCs|j�|j�dSr5)r�r�r�rIrrrr��r�z$InterruptedSendTimeoutTest.doConnectc	OsXz%|�t��}	|�|j�||i|��q1swYW|�d�dS|�d�w�NTr)rVr r�r�r�rrr�checkInterruptedSend�s��z/InterruptedSendTimeoutTest.checkInterruptedSendr�r�cCr��Nr�)r�r�r�rIrrr�testInterruptedSendTimeout�r�z5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|�|jjd|j�dSr�)r�r�r_r�rIrrr�testInterruptedSendtoTimeout�s�z7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs|�|jjdg�dSr�)r�r�r�rIrrr�testInterruptedSendmsgTimeout�rfz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rQrRrSrKr�r�rZrequires_mac_verr�r�r8rr�rirrrbrr��s	





r�c@rB)�
TCPCloserTestcCsh|j��\}}|��|j}t�|gggd�\}}}|�||g�|�|�d�d�|��|��dS)N��?rr!)rEr�r!r�r�r�r�)rJr�r�Zsdr#r�r>rrr�	testClose�szTCPCloserTest.testClosecCs |j�t|jf�t�d�dS�Nr�)r�r�r�rGr�r�rIrrr�
_testCloserdzTCPCloserTest._testCloseN)rQrRrSr�r�rrrrr���
r�c@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr�cCr�r�)r�r[r�rrrr[r�zBasicSocketPairTest.__init__cCs\|�|tj�ttd�r|�|jtj�n|�|jtj�|�|jtj�|�|j	d�dS)Nrr)
rCrrr�rLrrDr#r9rMrrrr�_check_defaults
s
z#BasicSocketPairTest._check_defaultscC�|�|j�dSr5)r�r�rIrrr�
_testDefaultsr	z!BasicSocketPairTest._testDefaultscCr�r5)r�rErIrrr�testDefaultsr	z BasicSocketPairTest.testDefaultscCrr��rEr�r�r�rYrrrrr.zBasicSocketPairTest.testRecvcCrr5�r�r�r�rIrrrrr	zBasicSocketPairTest._testRecvcCrr5�rEr�r�rIrrr�testSend r	zBasicSocketPairTest.testSendcCrr��r�r�r�r�rYrrr�	_testSend#r.zBasicSocketPairTest._testSendNr�)rQrRrSr[r�r�r�rrr�r�rrrrr�s
	r�cs�eZdZdd�Z�fdd�Z�fdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Ze�
eed�p9eed�d�e�ejd�dd���Zdd�Zdd�Zdd�Z�ZS)�PurePythonSocketPairTestcCs.zt�tj�WStyt�tj�YSwr5)rr�rrrDrIrrrr�-s
�z#PurePythonSocketPairTest.socketpaircs0ttd�rtj|_tjt_nd|_t���dS)Nr�)rrArr��_orig_spZ_fallback_socketpairrZrKrIrbrrrK6s


zPurePythonSocketPairTest.setUpcs$t���|jdur|jt_dSdSr5)rZrNr�rr�rIrbrrrNAs

�z!PurePythonSocketPairTest.tearDowncCrr�r�rYrrr�	test_recvGr.z"PurePythonSocketPairTest.test_recvcCrr5r�rIrrr�
_test_recvKr	z#PurePythonSocketPairTest._test_recvcCrr5r�rIrrr�	test_sendNr	z"PurePythonSocketPairTest.test_sendcCrr�r�rYrrr�
_test_sendQr.z#PurePythonSocketPairTest._test_sendcC�$t�tj�\}}|��|��dSr5)rr�rDr!�rJr�rIrrr�	test_ipv4Usz"PurePythonSocketPairTest.test_ipv4cCr�r5rrIrrr�
_test_ipv4Zr�z#PurePythonSocketPairTest._test_ipv4rj�IPV6_V6ONLY� IPV6_V6ONLY option not supportedrrcCrr5)rr�rr!rrrr�	test_ipv6]sz"PurePythonSocketPairTest.test_ipv6cCr�r5rrIrrr�
_test_ipv6fr�z#PurePythonSocketPairTest._test_ipv6cs�tjj�d���fdd�}d}}z:|tj_|�t��t��\}}Wd�n1s,wYW�tj_�r<���|rB|��|rJ|��dSdS�tj_�rV���|r\|��|rc|��ww)Nc	sf�|�}�dur1t�tjtj����d�z��|dd��Wnttfy+Ynw��d�|S)NFr�T)rrDr9rbr��BlockingIOError�InterruptedError)rJra�Zinject_sockZorig_getsocknamerr�inject_getsocketnamems
�
z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)rr�rVrr�r!)rJr
�sock1�sock2rrr�$test_injected_authentication_failureis4����
�z=PurePythonSocketPairTest.test_injected_authentication_failurecCr�r5rrIrrr�%_test_injected_authentication_failure�sz>PurePythonSocketPairTest._test_injected_authentication_failure)rQrRrSr�rKrNr�r�rrrrr�r�rrAr�rr
rr	rrrirrrbrr�(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�)r\r��eventr�r[r�rrrr[�ryzNonBlockingTCPTests.__init__cCsl|�|j��|�|dk}|�|��|�tdur4|du}t�|tjtj�}|�t|tj@�|�dSdS)N�)	r�rEr��getblockingr�F_GETFLr��
O_NONBLOCK�bool)rJrr>ZblockingZfd_blocking�flagrrr�assert_sock_timeout�s�z'NonBlockingTCPTests.assert_sock_timeoutcCs�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�dS)NTFrrr�)rErbrr�rIrrr�testSetBlocking�sz#NonBlockingTCPTests.testSetBlockingcCr�r5rrIrrr�_testSetBlocking�r�z$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|�d�|j�d�|�|j��d�|j�|jd�|�|j���dS)Nrzneeds UINT_MAX < ULONG_MAXFrr)	r�r/Z	ULONG_MAXrsrErbr�r�r�r0rrr�testSetBlocking_overflow�s
z,NonBlockingTCPTests.testSetBlocking_overflowraztest needs socket.SOCK_NONBLOCKr���cCs4|j��t�tjtjtjB�|_|�|jd�dSr�)rEr!rrDr9rarrIrrr�testInitNonBlocking�s


�z'NonBlockingTCPTests.testInitNonBlockingcCr�r5rrIrrr�_testInitNonBlocking�r�z(NonBlockingTCPTests._testInitNonBlockingcCsbtd��#|j�d�|j��\}}|�|j�|�|���Wd�dS1s*wYdS)Nr�)r?rEr�r�rfr!r�r�r�rrr�testInheritFlagsBlocking�s
"�z,NonBlockingTCPTests.testInheritFlagsBlockingcC�|j�t|jf�dSr5�r�r�r�rGrIrrr�_testInheritFlagsBlocking�r�z-NonBlockingTCPTests._testInheritFlagsBlockingcCshd}t|��$|j�d�|j��\}}|�|j�|�|��|�Wd�dS1s-wYdS)Ng4@r�)r?rEr�r�rfr!r�r�)rJZdefault_timeoutr�r�rrr�testInheritFlagsTimeout�s
"�z+NonBlockingTCPTests.testInheritFlagsTimeoutcCr#r5r$rIrrr�_testInheritFlagsTimeout�r�z,NonBlockingTCPTests._testInheritFlagsTimeoutcCs�|j�d�t��}|�t��|j��\}}Wd�n1s!wYt��|}|�|d�|j�	�t
�
|jgggtj�\}}}|j|vrO|�
d�|j��\}}|�|j�|�|���dS)NFr�z'Error trying to do accept after select.)rErbr��	monotonicrVr
r�r2rr}r�r�LONG_TIMEOUTrRrfr!r�r�)rJZ
start_timer�r�Zdtr#r�r>rrr�
testAccept�s�


zNonBlockingTCPTests.testAcceptcCs |j��|j�t|jf�dSr5)rr�r�r�r�rGrIrrr�_testAccepts
zNonBlockingTCPTests._testAcceptcCs�|j��\}}|�|j�|�d�|�t��|�tt	��}Wd�n1s)wY|j
��t�|gggt
j�\}}}||vrI|�d�|�tt	��}|�|t	�dS)NFz0Error during select call to non-blocking socket.)rEr�rfr!rbrVr
r�rr�rr}r�rr)rRr�)rJr�r�r�r#r�r>rrrrs
�

zNonBlockingTCPTests.testRecvcCs,|j�t|jf�|j��|j�t�dSr5)r�r�r�rGrr�r!r�rIrrrr's
zNonBlockingTCPTests._testRecvNr�)rQrRrSr[rrrrr�rZ_testSetBlocking_overflowr�r�rr�requires_linux_versionr r!r"r%r&r'r*r+rrrrrrr�s,


�	rc@s�eZdZ	dZdZdZdZdZeZ	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);�FileObjectClassTestCaser�r�strictNrr:r�cCr�r�rr�rrrr[Hr�z FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_t�|�|jj|j	|j
|j|j|j
d�|_dS)NcS�g|]}t���qSr)r\r��r-rArrrr/Ls�z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r^�r>�errors�newline)rD�evt1�evt2�
serv_finished�cli_finishedr�rKr�r.�	read_modertr>r2r3�	read_filerIrrrrKKs�
�zFileObjectClassTestCase.setUpcC�6|j��|j��|�|jj�d|_t�|�dSr5)r6r}r9r!rB�closedr�rNrIrrrrNU�


z FileObjectClassTestCase.tearDowncCs0t�|�|jj|j|j|j|j|jd�|_	dS)Nr1)
r�r�r�r.�
write_modertr>r2r3�
write_filerIrrrr�\s
�z#FileObjectClassTestCase.clientSetUpcCr:r5)r7r}r>r!rBr;r�r�rIrrrr�dr<z&FileObjectClassTestCase.clientTearDowncCsv|j�d�|j�d�|�t|jjd�|�t��}|j�d�Wd�n1s+wY|�dt|j	��dS)Nrrz!cannot read from timed out object)
r�r�r9r#rVr#rrGr9r`)rJ�ctxrrr�testReadAfterTimeoutks�z,FileObjectClassTestCase.testReadAfterTimeoutcCs.|j�|jdd��|j��|j��dS)Nrr)r>r��	write_msg�flushr6r�rIrrr�_testReadAfterTimeoutws
z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|j�t|j�d�}|j�d�}||}|�||j�dSr�)r9r#r�read_msgr�)rJ�	first_segZ
second_segr�rrr�
testSmallRead|sz%FileObjectClassTestCase.testSmallReadcC�|j�|j�|j��dSr5�r>r�rArBrIrrr�_testSmallRead�r�z&FileObjectClassTestCase._testSmallReadcC�|j��}|�||j�dSr5)r9r#r�rDrYrrr�testFullRead��
z$FileObjectClassTestCase.testFullReadcCrGr5)r>r�rAr!rIrrr�
_testFullRead�r�z%FileObjectClassTestCase._testFullReadcCs<t|j��}	|j�d�}|sn||7}q|�||j�dSr
)r#rDr9r#r�)rJrg�charrrr�testUnbufferedRead�s�z*FileObjectClassTestCase.testUnbufferedReadcCrGr5rHrIrrr�_testUnbufferedRead�r�z+FileObjectClassTestCase._testUnbufferedReadcCrJr5)r9�readliner�rD�rJ�linerrr�testReadline�rLz$FileObjectClassTestCase.testReadlinecCrGr5rHrIrrr�
_testReadline�r�z%FileObjectClassTestCase._testReadlinecCs&|j��|j��}|�||j�dSr5)r�r!r9r#r�rDrYrrr�testCloseAfterMakefile�s

z.FileObjectClassTestCase.testCloseAfterMakefilecCrGr5rHrIrrr�_testCloseAfterMakefile�r�z/FileObjectClassTestCase._testCloseAfterMakefilecCs@|j��|j�tt��}t|jt�r|�	�}|�
||j�dSr5)r9r!r�r�rr�r"rDr9�decoder�rYrrr�testMakefileAfterMakefileClose�s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCrGr5rHrIrrr�_testMakefileAfterMakefileClose�r�z7FileObjectClassTestCase._testMakefileAfterMakefileClosecC�|�|jj�dSr5)rBr9r;rIrrr�testClosedAttr�r�z&FileObjectClassTestCase.testClosedAttrcCr[r5)rBr>r;rIrrr�_testClosedAttr�r�z'FileObjectClassTestCase._testClosedAttrcC�,|�|jj|j�|�|jj|j���dSr5)r�r9r<r8r.r�rHrIrrr�testAttributes��z&FileObjectClassTestCase.testAttributescCr^r5)r�r>r<r=r.r�rHrIrrr�_testAttributes�r`z'FileObjectClassTestCase._testAttributescCs8|j��|�t|jj�|j��|�t|jj�dSr5)r9r!rVr�rHr�rr�rIrrr�
testRealClose�s

z%FileObjectClassTestCase.testRealClosecCr�r5rrIrrr�_testRealClose�r�z&FileObjectClassTestCase._testRealCloser�)%rQrRrSrtr>r2r3r8r�rDr=rAr[rKrNr�r�r@rCrFrIrKrMrOrPrTrUrVrWrYrZr\r]r_rarbrcrrrrr-2sF


r-c@sbeZdZ	dZdd�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. rr�B. )r9rQr�rAr�r.rRrrr�testUnbufferedReadline�s


z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|j�d|j�|j�d|j�|j��dS)NrerfrHrIrrr�_testUnbufferedReadline�sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|j��|j�d�}|�||j�|j��|�t|jjd�dSr�)r�r!r�r�rDr9rVrrYrrr�testMakefileClose�s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCrGr5rHrIrrr�_testMakefileClose�r�z4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t�|j�}|j��t�|j�}|�|d|�dSr
)r�r�r�r9r!r�)rJZrefcount_beforeZrefcount_afterrrr�testMakefileCloseSocketDestroy�s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCr�r5rrIrrr�_testMakefileCloseSocketDestroyr�zAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|j�d�|�|j�td��d�|�|j�t|j�d�d�|j	�
�|j�d�|j�t|j�d�}|durKt
�d�|j�t|j�d�}td�}|j�|�}|�|d�||d|�}|�||j�|�|j�td��d�|�|j�d�d�dS)NFr�rr�g�?r�r)r�rbr�r9�readintor�r#rrDr4r}r5r�r�r�)rJrErgr�r�rrr�testSmallReadNonBlockings 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|j�d�|j�|j�|j��|j��|j�d�dS)Nr��@)	r4r�r>r�rArBr5r}r6rIrrr�_testSmallReadNonBlockings


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs&|j�d�|jr|�|j�dSdS)Nro)r7r��serv_skippedrsrIrrr�testWriteNonBlocking$s�z6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCsvd|_|j�d�dtj}d}|j�|�}|�|d�t|�D]}|j�|�}|dur/dS|�|d�q d|_dS)NFrr�rz$failed to saturate the socket buffer)	rqr�rbrr"r>r�r�rD)rJZBIGZLIMITr�rArrr�_testWriteNonBlocking+s

z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rQrRrSrtrgrhrirjrkrlrnrprrrsrrrrrd�s		rdc@�eZdZdZdS)�#LineBufferedFileObjectClassTestCaserN�rQrRrSrtrrrrruA�ruc@rt)�$SmallBufferedFileObjectClassTestCaser�NrvrrrrrxFrwrxc@s(eZdZ	dZe�d�ZdZeZdZ	dS)�"UnicodeReadFileObjectClassTestCaserrr:r[N�
rQrRrSr8r�rXrDr=rAr3rrrrryKs
ryc@s(eZdZ	dZeZdZe�d�ZdZ	dS)�#UnicodeWriteFileObjectClassTestCaserr9rr[N)
rQrRrSr8r�rDr=rXrAr3rrrrr{Us
r{c@s.eZdZ	dZe�d�ZdZe�d�ZdZ	dS)�'UnicodeReadWriteFileObjectClassTestCaserrr9r[Nrzrrrrr|_s

r|c@r)�NetworkConnectionTestcCst�t|jf�|_|j|_dSr5)r�create_connectionr�rGr�r�rIrrrr�lsz!NetworkConnectionTest.clientSetUpN)rQrRrSr�rrrrr}irr}c@r�)�
BasicTCPTest2Nr�rrrrrr�rc@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@rV)z$NetworkConnectionNoServer.MockSocketcGr�)Nz	timed out)r#rLrrrr�yr�z,NetworkConnectionNoServer.MockSocket.connectN)rQrRrSr�rrrr�
MockSocketxsr�ccs.�	tj}|jt_z	dVW|t_dS|t_wr5)rr�)rJZ
old_socketrrr�mocked_socket_module|s�z.NetworkConnectionNoServer.mocked_socket_modulecCsrt��}t�tjtj�}|�|j�|�t��}|�	t
|f�Wd�n1s)wY|�|jj
t
j�dSr5)rr�rrDr9rfr!rVrr�r�r�r`r�ZECONNREFUSED)rJrGr�rbrrr�test_connect�s�z&NetworkConnectionNoServer.test_connectcCs\t��}|�t��}t�t|f�Wd�n1swYt��}|�|j	j
|�dSr5)rr�rVrrr~r�Zget_socket_conn_refused_errsrGr`r�)rJrGrbZexpected_errnosrrr�test_create_connection�s�z0NetworkConnectionNoServer.test_create_connectioncCs�|���Lz	t�tdf�Wn$tyYn)ty2}ztjs'|jtj	kr(�WYd}~nd}~ww|�
d�Wd�dSWd�dSWd�dS1sSwYdS)Nr	zTimeoutError not raised)r�rr~r�r#rrr
r�ZEAFNOSUPPORTrRr�rrr�test_create_connection_timeout�s"
�����"�z8NetworkConnectionNoServer.test_create_connection_timeoutN)rQrRrSrr��
contextlib�contextmanagerr�r�r�r�rrrrr�vs
	r�c@sveZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestr�cCr�r�r�r�rrrr[�r�z(NetworkConnectionAttributesTest.__init__cCst��|_dSr5)rr��source_portrIrrrr��r+z+NetworkConnectionAttributesTest.clientSetUpcCr�r5r�rIrrrr��r�z.NetworkConnectionAttributesTest.clientTearDowncCs|j��\}}|��dSr5)rEr�r!r�rrr�_justAccept�sz+NetworkConnectionAttributesTest._justAcceptcCs:tjt|jftjd�|_|�|jj�|�	|jj
d�dS)Nr�r�)rr~r�rGrrar�rfr!r�rLrIrrr�_testFamily�s
�z+NetworkConnectionAttributesTest._testFamilycCsJtjt|jftjd|jfd�|_|�|jj	�|�
|j��d|j�dS)Nr[)r>Zsource_addressr)rr~r�rGrrar�r�rfr!r�r�rIrrr�_testSourceAddress�s�z2NetworkConnectionAttributesTest._testSourceAddressc	Csn|�t��du�t�d�zt�t|jf�|_|�|jj	�Wt�d�nt�d�w|�
|j��d�dS)NrW�rBrr<r=r~r�rGr�rfr!r�r�rIrrr�_testTimeoutDefault�s
z3NetworkConnectionAttributesTest._testTimeoutDefaultc	Csr|�t��du�t�d�ztjt|jfdd�|_|�|jj	�Wt�d�nt�d�w|�
|j��d�dS�N�r�r�rIrrr�_testTimeoutNone�s
z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd�|_|�|j��d�dSr�)rr~r�rGr�r�r�rIrrr�_testTimeoutValueNamed�sz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8t�t|jfd�|_|�|jj�|�|j��d�dS)Nr�)	rr~r�rGr�rfr!r�r�rIrrr�_testTimeoutValueNonamed�sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedNr�)rQrRrSr[r�r�r�Z
testFamilyr�ZtestSourceAddressr�ZtestTimeoutDefaultr�ZtestTimeoutNoner�ZtestTimeoutValueNamedr�ZtestTimeoutValueNonamedr�rrrrr��s"
	r�c@sBeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestr�cCr�r�r�r�rrrr[�r�z'NetworkConnectionBehaviourTest.__init__cCr�r5rrIrrrr�r�z*NetworkConnectionBehaviourTest.clientSetUpcCr�r5r�rIrrrr�r�z-NetworkConnectionBehaviourTest.clientTearDowncCs2|j��\}}|�|j�t�d�|�d�dS)Nr�done!)rEr�rfr!r�r�r�r�rrr�testInsideTimeout
�
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0t�t|jf�|_}|�d�}|�|d�dS)Nr�r�)rr~r�rGr�r�r�)rJrr�rrr�_testInsideTimeouts
z1NetworkConnectionBehaviourTest._testInsideTimeoutcs2tjt|jfdd�|_�|�t�fdd��dS)Nrr�cs
��d�S)Nr�)r�r�rrrrr�zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)rr~r�rGr�rVr#rIrr�r�_testOutsideTimeoutsz2NetworkConnectionBehaviourTest._testOutsideTimeoutNr�)
rQrRrSr[r�r�r�ZtestOutsideTimeoutr�r�rrrrr��s
r�c@s6eZdZdd�Zdd�Ze�eed�d�dd��Z	d	S)
�TCPTimeoutTestc��fdd�}��t|d�dS)Ncs�j�d��j��dSr�)rEr�r�rrIrr�
raise_timeoutr�z4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)�rVr#�rJr�rrIr�testTCPTimeout��zTCPTimeoutTest.testTCPTimeoutcCsvd}z
|j�d�|j��}Wn ty|�d�Ynty'd}Yn	|�d�Y|s9|�d�dSdS)NFrz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rEr�r�r#rRr�rJ�okrrrr�testTimeoutZero$s�zTCPTimeoutTest.testTimeoutZerorztest needs signal.alarm()c
s*|j�d�Gdd�dt���fdd�}t�tj|�}zqzNzEzt�d�|j��}Wn,ty8|�d�Yn$�y@Yn|�dt	�
�dd�t��f�Yn|�d	�Wt�d
�nt�d
�wWn�yx|�d�YnwWt�tj|�dSWt�tj|�dSt�tj|�w)Nroc@r�)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr�rrrr�Alarm9r�r�cs��r5r)rr��r�rr�
alarm_handler;r�z<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtrzgot Alarm in wrong place)
rEr�r[rrrr�r#rRr��exc_info�	traceback�
format_exc)rJr�r%rrr�r�testInterruptedTimeout2s4

�
����"z%TCPTimeoutTest.testInterruptedTimeoutN)
rQrRrSr�r�r�r�rrr�rrrrr�s�r�c@rB)�UDPTimeoutTestcr�)Nc��j�d��j�d�dS�Nr�r��rEr�r�rrIrrr�Wr.z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)r�r�rrIr�testUDPTimeoutVr�zUDPTimeoutTest.testUDPTimeoutcC�xd}z|j�d�|j�d�}Wn ty|�d�Ynty(d}Yn	|�d�Y|s:|�d�dSdS)NFrr�z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)�1recv() returned success when we did not expect it�rEr�r�r#rRrr�rrrr�]��zUDPTimeoutTest.testTimeoutZeroN)rQrRrSr�r�rrrrr�Tsr�c@rB)�UDPLITETimeoutTestcr�)Ncr�r�r�rrIrrr�pr.z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)r�r�rrIr�testUDPLITETimeoutor�z%UDPLITETimeoutTest.testUDPLITETimeoutcCr�)NFrr�z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)r�r�r�rrrr�vr�z"UDPLITETimeoutTest.testTimeoutZeroN)rQrRrSr�r�rrrrr�ksr�c@rB)�TestExceptionscCsf|�ttt��|�ttjt��|�ttjt��|�ttjt��|�tj	t�|�tjt
�dSr5)rB�
issubclassrr[rrWrXr>ZassertIs�errorr#rIrrr�testExceptionTree�sz TestExceptions.testExceptionTreecCsxt�tjtjd�}t�tjtjd|���}|��|�|j�|�t��|�	d�Wd�dS1s5wYdS)NrF)
rrDr9rHr!rfrerVrrb)rJZsock0rrrr�test_setblocking_invalidfd�s�"�z)TestExceptions.test_setblocking_invalidfdN)rQrRrSr�r�rrrrr��sr�r��Linux specific testc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�TestLinuxAbstractNamespace�lc
Cs�d}t�tjtj��_}|�|�|��t�tjtj��5}|�|���|��d�}|�|��|�|�|�	�|�Wd�n1sEwYWd�n1sTwYWd�dSWd�dS1slwYdS)Nspython-test-hello�r)
rrr9rqrHr�r�r�r�Zgetpeername)rJr��s1rwZs3rrr�testLinuxAbstractNamespace�s
����"�z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacecCsbdd|jd}t�tjtj��}|�|�|�|��|�Wd�dS1s*wYdS)Nr��hr)�
UNIX_PATH_MAXrrr9rqr�r��rJr�r#rrr�testMaxName�s

"�z&TestLinuxAbstractNamespace.testMaxNamecCsTdd|j}t�tjtj��}|�t|j|�Wd�dS1s#wYdS)N��h)r�rrr9rVrrqr�rrr�testNameOverflow�s"�z+TestLinuxAbstractNamespace.testNameOverflowcCsDt�tjtj�}z|�d�|�|��d�W|��dS|��w)Nz
pythontest�
pythontest)rrr9rqr�r�r!rJrrr�testStrName�s

z&TestLinuxAbstractNamespace.testStrNamecCsTt�tjtj��}|�td��|�|��d�Wd�dS1s#wYdS)Nr�)rrr9rqr�r�r�rJrrr�testBytearrayName�s"�z,TestLinuxAbstractNamespace.testBytearrayNamec	Cs�d}t�tjtj��M}|�d�|�|��|�t�tjtj��}|�d�|�|��|�|�|��|���Wd�n1sBwYWd�dSWd�dS1sZwYdS)Ns
^[0-9a-f]{5}r[)rrr9rqZassertRegexr�r�)rJZabstract_addressr�rwrrr�testAutobind�s

��"�z'TestLinuxAbstractNamespace.testAutobindN)
rQrRrSr�r�r�r�r�r�r�rrrrr��s	r�ztest needs socket.AF_UNIXc@sneZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Ze�
ejdkd�dd��ZdS)�TestUnixDomaincCr�r5)rrr9rrIrrrrK�r�zTestUnixDomain.setUpcCr�r5)rr!rIrrrrN�r+zTestUnixDomain.tearDownc
Cs8zt�|�WSty|�d�|t����YdSw)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoderrsr=r��getfilesystemencoding�rJrrrr�encoded�s�
��zTestUnixDomain.encodedc
CsZz	t�||�WdSty,}zt|�dkr |�d�|��n�WYd}~dSd}~ww)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rrrr9rsr=)rJrrr�rrrrq�s����zTestUnixDomain.bindcCs|�|j��d�dS)N)r[N)rGrr�rIrrrr��rzTestUnixDomain.testUnboundcCs@tj�tj�}|�|j|�|�tj|�|�	|j�
�|�dSr5)r�r�abspathr�TESTFNrqrrfrr�r�r�rrr�testStrAddr�szTestUnixDomain.testStrAddrcCsFtj�tj�}|�|j|�|��|�tj	|�|�
|j��|�dSr5)r�rr�rr�rqrr�rfrr�r�r�rrr�
testBytesAddr�szTestUnixDomain.testBytesAddrcCsRtj�tj�}|�|�}|�|j|�dd��|�	tj
|�|�|j��|�dS)N�ascii�surrogateescape)
r�rr�rZTESTFN_UNICODEr�rqrrXrfrr�r�)rJrrrrr�testSurrogateescapeBinds

z&TestUnixDomain.testSurrogateescapeBindcCsTtjdur
|�d�tj�tj�}|�|j|�|�tj	|�|�
|j��|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLErsr�rr�rqrrfrr�r�r�rrr�testUnencodableAddrs

z"TestUnixDomain.testUnencodableAddrr�r�cCr@)Nr[)rVrrrqrIrrr�testEmptyAddressrfzTestUnixDomain.testEmptyAddressN)rQrRrSrKrNr�rqr�r�r�r�r�r�r�r�r�r�rrrrr��s	
r�c@s�eZdZ	ddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
dd�Zdd�ZeZ
dd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestr�cCr�r�rr�rrrr["r�zBufferIOTest.__init__cCsZt�ddgtt��}|j�|�}|�|tt��|��}|dtt��}|�|t�dS�Nr�r)r�rr�r�r�r�r��rJrgr�r�rrr�testRecvIntoArray%szBufferIOTest.testRecvIntoArraycC�tt�}|j�|�dSr5�r�r�r�r��rJrgrrr�_testRecvIntoArray-�zBufferIOTest._testRecvIntoArraycCsDtd�}|j�|�}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�rr�r�rrr�testRecvIntoBytearray1s
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|j�t|��}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�r�rr�r�rrr�testRecvIntoMemoryview:�
z#BufferIOTest.testRecvIntoMemoryviewcCs^t�ddgtt��}|j�|�\}}|�|tt��|��}|dtt��}|�|t�dSr�)r�rr�r�r�r�r��rJrgr�r�r�rrr�testRecvFromIntoArrayCsz"BufferIOTest.testRecvFromIntoArraycCr�r5r�r�rrr�_testRecvFromIntoArrayKr�z#BufferIOTest._testRecvFromIntoArraycCsHtd�}|j�|�\}}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�rr�r�rrr�testRecvFromIntoBytearrayOr�z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|j�t|��\}}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�r�rr�r�rrr�testRecvFromIntoMemoryviewXs
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|�t|jj|d�dS)Nrnr�)r�rVr�r�r�r�rrr�testRecvFromIntoSmallBufferasz(BufferIOTest.testRecvFromIntoSmallBuffercCrr5rrIrrr�_testRecvFromIntoSmallBufferfr	z)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|j�|�|j�|d�dSr�)r�r�r�r�rrr�testRecvFromIntoEmptyBufferisz(BufferIOTest.testRecvFromIntoEmptyBufferNr�)rQrRrSr[r�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�r�Z_testRecvFromIntoBytearrayr�Z_testRecvFromIntoMemoryviewr�r�r�Z_testRecvFromIntoEmptyBufferrrrrr�s&
r�i�����c
Cs�	ttd�sdSztddd�}Wn
tttfyYdSw|�|D]}|�d�r3Wd�dSq#Wd�dS1s?wYdS)N�AF_TIPCFz
/proc/modulesrr=ztipc T)rrr�FileNotFoundError�IsADirectoryErrorr�r�)rrSrrr�isTipcAvailableus&
�
��
��r�z6TIPC module is not loaded, please 'sudo modprobe tipc'c@rV)�TIPCTestcCs�t�tjtj�}t�tjtj�}|�|j�|�|j�|�tjtjd�tjt	t
tf}|�|�tj
t	t
ttt
d�df}|�t|�|�d�\}}|�|��|�|�|t�dS)Nrr�rr�)rr�rerfr!r�rfrg�TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERrq�TIPC_ADDR_NAMEr�r_r�r�r�r�)rJrIr��srvaddrZsendaddrr�Zrecvaddrrrr�testRDM�s �
�zTIPCTest.testRDMN)rQrRrSr�rrrrr��rhr�c@r�)�TIPCThreadableTestr�cCr�r�r�r�rrrr[�r�zTIPCThreadableTest.__init__cCs�t�tjtj�|_|�|jj�|j�tjtjd�tj	t
ttf}|j�
|�|j��|��|j��\|_|_|�|jj�dSr
)rr�r9rIrfr!r�rfrgr�r�r�r�rqrHr~r�r�r�)rJr�rrrrK�s�
zTIPCThreadableTest.setUpcCsdt�d�t�tjtj�|_|�|jj�tjt	t
ttt
d�df}|j�
|�|j��|_dS)Nr�r�r)r�r�rr�r9r�rfr!r�r�r�r�r�r�r��cliaddr)rJr�rrrr��s
�zTIPCThreadableTest.clientSetUpcCs,|j�d�}|�|t�|�|j|j�dSr�)r�r�r�r�r�r�rYrrrr��szTIPCThreadableTest.testStreamcCr�r5r�rIrrrr��r�zTIPCThreadableTest._testStreamNr�r�rrrrr��s
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestcCs�t���}|�|j�Wd�n1swY|�|j�t���}|��Wd�n1s3wY|�|j�t���}|�t|jd�Wd�n1sUwY|�|j�dS�Nr\)rr�r2rBr!rVrr!rrrr�_testSocketClass�s
�

�
�z$ContextManagersTest._testSocketClasscC�2|j��\}}|�|j�|�d�}|�|�dSr��rEr�rfr!r�r!�rJr�r�r�rrr�testCreateConnectionBase�r�z,ContextManagersTest.testCreateConnectionBasecCsl|j��}t�|��}|�|j�|�d�|�|�d�d�Wd�n1s)wY|�	|j�dS)Nr\r�)
rEr�rr~r�r2r!r�r�rB�rJr�rrrr�_testCreateConnectionBase�s

�z-ContextManagersTest._testCreateConnectionBasecCrr�rrrrr�testCreateConnectionClose�r�z-ContextManagersTest.testCreateConnectionClosecCs\|j��}t�|��}|��Wd�n1swY|�|j�|�t|j	d�dSr)
rEr�rr~r!rBr2rVrr!rrrr�_testCreateConnectionClose�s

�z.ContextManagersTest._testCreateConnectionCloseN)rQrRrSrrrrr	rrrrr��sr�c@s�eZdZe�eed�d�e�ddd�dd���Z	dd	�Z
d
d�Zdd
�Ze�
edud�dd��Ze�
edud�dd��Zdd�ZdS)�InheritanceTestr�zSOCK_CLOEXEC not definedr�rrcCsZt�tjtjtjB��}|�|jtj�|�|���Wd�dS1s&wYdSr5)rrDr9r�r�r#r��get_inheritablerJrrr�test_SOCK_CLOEXEC�s
�"�z!InheritanceTest.test_SOCK_CLOEXECcCsBt��}|�|�|��d�Wd�dS1swYdSr()rr�rrrrr�test_default_inheritables"�z(InheritanceTest.test_default_inheritablec	Cs�t��}|�3|��}|��|�|�|��d�Wd�n1s$wYWd�dSWd�dS1s<wYdSr()rr(r!r�r)rJrZnewsockrrr�test_dups��"�zInheritanceTest.test_dupcCsft��}|�#|�d�|�|��d�|�d�|�|��d�Wd�dS1s,wYdS)NTF)r�set_inheritabler�rrrrr�test_set_inheritable
s

"�z$InheritanceTest.test_set_inheritableNr�cCs�t��}|�2|��}|�|��d�t�|tj�}|tjM}t�|tj|�|�|��d�Wd�dS1s;wYdSr)rrHr�rr�F_GETFD�
FD_CLOEXECZF_SETFD)rJrrir	rrr�test_get_inheritable_cloexecs"�z,InheritanceTest.test_get_inheritable_cloexeccCs~t��}|�/|��}|�t�|tj�tj@tj�|�d�|�t�|tj�tj@d�Wd�dS1s8wYdSr�)rrHr�rrrr)rJrrirrr�test_set_inheritable_cloexec$s�
�"�z,InheritanceTest.test_set_inheritable_cloexeccCsHt��\}}|�|j�|�|j�|�|��d�|�|��d�dSr()rr�rfr!r�r)rJr�rwrrr�test_socketpair1s
zInheritanceTest.test_socketpair)rQrRrSr�r�rrrr,rr
rrr�rrrrrrrrr
�s�	

r
razSOCK_NONBLOCK not definedc@s,eZdZddd�Ze�ddd�dd	��Zd
S)�NonblockConstantTestTrcCs�|r7|�|jtj�|�|��|�|�t�|tjtj	�tj	@�|dkr.|�
|���dS|�|���dS|�|jtj�|�|��d�|�
t�|tjtj	�tj	@�|�|���dSr�)r�r#rr9r�rBrrr�rr�r)rJr#�nonblockr>rrr�
checkNonblock<s�	�z"NonblockConstantTest.checkNonblockr�rrcCs�t�tjtjtjB��G}|�|�|�d�|j|dd�|�d�|�|�|�d�|j|dd�|�d�|j|dd�|�d�|j|dd�Wd�n1sUwYt��}t�d�t���
}|�|�Wd�n1swwYt�d�t���}|�|d�Wd�n1s�wYt�d�t���}|j|dd�Wd�n1s�wYt�d�t���}|�|d�Wd�n1s�wYt�|�dS)NTF)rg@r�r)	rrDr9rarrbr�r<r=)rJr#�trrr�test_SOCK_NONBLOCKUsD
�






�

�

�

�

�z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr)rQrRrSrrr,rrrrrr9s
rrlrmzneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|��}|��}t�|�}|��\}}|�|�|��|��dSr5)r�r�	fromsharer�r!r!)r��qZsdata�messager#rwr$rrr�remoteProcessServer|s

z%TestSocketSharing.remoteProcessServerc	Cs�t��}tj|j|fd�}|��|j�|j�}|j��}|j�	�|�
|�d}|�
|�t�|�}g}	|�
d�}|s>n|�|�q6|�	�d�|�}|�||�|��dS)N�r�r`s
slapmahfroTr�r!)�multiprocessingr�ZProcessrr�rE�share�pidr�r!r�rr~r�rr6r�)	rJrrSr�r�rr#�m�receivedrrr�	testShare�s*






�
zTestSocketSharing.testSharecCs@|j�t���}|�ttj|dd��|�ttj|d�dS)Nr�r\)rEr"r��getpidrVr�rr)rJr�rrr�testShareLength�sz!TestSocketSharing.testShareLengthcCsf|�|��d�|�|��|���|�|j|j�|�|j|j�|jdkr1|�|j|j�dSdSr�)r�r�rLr#rM)rJZorg�otherrrr�compareSockets�s
�z TestSocketSharing.compareSocketscCsB|j�t���}t�|�}z|�|j|�W|��dS|��wr5)rEr"r�r'rrr*r!)rJr�r#rrr�testShareLocal�s

z TestSocketSharing.testShareLocalc
Cs�tjtjg}tjtjg}|D]B}|D]=}zt�||�}Wn	ty%Yqwz$|�t���}t�	|�}z|�
||�W|��n|��wW|��q|��wqdSr5)rrDrr9r&rr"r�r'rr*r!)rJZfamilies�typesrr�sourcer�Zsharedrrr�	testTypes�s$�
��zTestSocketSharing.testTypesN)
rQrRrSr�rr&r(r*r+r.rrrrrws

#rc@seZdZ	dZdZdZejZe	dd��Z
e	dd��Zdd	�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$d:S);�SendfileUsingSendTesti�rxr!cCs�dd�}d�dd�t|j�D��}ttjd��}||j|j�D]}|�|�qWd�n1s1wYttjd��}|��|_	Wd�dS1sMwYdS)Ncss2�||kr|V||8}||ks|r|VdSdSr5r)�total�steprrr�chunks�s��
�z0SendfileUsingSendTest.setUpClass.<locals>.chunksr!cSsg|]
}t�tj����qSr)�randomZchoice�stringZ
ascii_lettersrr0rrrr/�s�z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r:r)
r6rD�BUFSIZErrr��FILESIZEr�r#�FILEDATA)r�r2�chunkrZcsizerrr�
setUpClass�s
���"�z SendfileUsingSendTest.setUpClasscCst�tj�dSr5)rrr�)r�rrr�
tearDownClass�r�z#SendfileUsingSendTest.tearDownClasscCs8|j�tj�|j��\}}|�|j�|�|j�|Sr5)rEr�rr)r��TIMEOUTrfr!r�rrr�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs.g}	|�|j�}|sn|�|�qd�|�S)NTr!)r�r5rr6)rJr�r%r8rrr�	recv_datas
�
zSendfileUsingSendTest.recv_datacC�
t|d�S)NZ_sendfile_use_send�r�rrrr�meth_from_socks
z$SendfileUsingSendTest.meth_from_sockc	Cs�|j��}ttjd�}t�|��<}|�!}|�|�}||�}|�||j	�|�|�
�|j	�Wd�n1s7wYWd�dSWd�dS1sOwYdS)Nr�rEr�rrr�rr~r@r�r6�tell�rJr��filer�meth�sentrrr�_testRegularFiles

P�z&SendfileUsingSendTest._testRegularFilecC�6|��}|�|�}|�t|�|j�|�||j�dSr5�r<r=r�rr6r7�rJr�r�rrr�testRegularFile�
z%SendfileUsingSendTest.testRegularFilec	Cs�|j��}t�|j�}t�|��A}|�&}|�|�}|�||j	�|�|�
�|j	�|�tj|j
|�Wd�n1s<wYWd�dSWd�dS1sTwYdSr5)rEr��io�BytesIOr7rr~rkr�r6rBrVrrrs)rJr�rDrrFrrr�_testNonRegularFile's

�P�z)SendfileUsingSendTest._testNonRegularFilecCrHr5rIrJrrr�testNonRegularFile1rLz(SendfileUsingSendTest.testNonRegularFilec	Cs�|j��}tjd}t|d��|�tj|�Wd�n1s!wYt|d�}t�|��:}|�}|�	|�}||�}|�
|d�|�
|��d�Wd�n1sUwYWd�dSWd�dS1smwYdS)N�2r:rr)rEr�rr�rrfrrr~r@r�rB)rJr��filenamerDrrErFrrr�_testEmptyFileSend9s

�

P�z(SendfileUsingSendTest._testEmptyFileSendcCs"|��}|�|�}|�|d�dSr0)r<r=r�rJrrr�testEmptyFileSendEs
z'SendfileUsingSendTest.testEmptyFileSendc	Cs�|j��}ttjd�}t�|��@}|�%}|�|�}||dd�}|�||j	d�|�|�
�|j	�Wd�n1s;wYWd�dSWd�dS1sSwYdS)Nr�)�offsetrArCrrr�_testOffsetLs

P�z!SendfileUsingSendTest._testOffsetcCsB|��}|�|�}|�t|�|jd�|�||jdd��dS)NrUrIrJrrr�
testOffsetUs
z SendfileUsingSendTest.testOffsetc	C�|j��}ttjd�}tj|tjd�}|�>|�#d}|�	|�}|||d�}|�
||�|�
|��|�Wd�n1s>wYWd�dSWd�dS1sVwYdS)Nrr��GKL�r��rEr�rrr�rr~rrar@r�rB�rJr�rDrr�rErFrrr�
_testCount]�
�
P�z SendfileUsingSendTest._testCountcC�@d}|��}|�|�}|�t|�|�|�||jd|��dS)NrZ�r<r=r�rr7�rJr�r�r�rrr�	testCounti�

zSendfileUsingSendTest.testCountc	CrY)Nrr�rr[r\r]rrr�_testCountSmallrr_z%SendfileUsingSendTest._testCountSmallcCr`r
rarbrrr�testCountSmall~rdz$SendfileUsingSendTest.testCountSmallc	Cs�|j��}ttjd�}tj|dd��A}|�&}d}|�|�}||d|d�}|�||�|�|�	�|d�Wd�n1s>wYWd�dSWd�dS1sVwYdS)Nrr�r�駆��)rVr�)
rEr�rrr�rr~r@r�rBr]rrr�_testCountWithOffset�s

P�z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|��}|�|�}|�t|�|�|�||jd|d��dS)Nrgrhrarbrrr�testCountWithOffset�s

z)SendfileUsingSendTest.testCountWithOffsetc	Cs�|j��}ttjd�}t�|��<}|�!}|�d�|�|�}|�	t
||�|�	t
|j|�Wd�n1s7wYWd�dSWd�dS1sOwYdS)NrF)rEr�rrr�rr~rbr@rVr�rk�rJr�rDrrErrr�_testNonBlocking�s


P�z&SendfileUsingSendTest._testNonBlockingcCs$|��}|�d�r|�d�dSdS)Nrxz$was not supposed to receive any data)r<r�rR�rJr�rrr�testNonBlocking�s
�z%SendfileUsingSendTest.testNonBlockingc	Cs�|j��}ttjd�}tj|tjd�}|�3|�|�	|�}||�}|�
||j�Wd�n1s3wYWd�dSWd�dS1sKwYdS)Nrr�)rEr�rrr�rr~rrar@r�r6rCrrr�_testWithTimeout�s
�
P�z&SendfileUsingSendTest._testWithTimeoutcCrHr5rIrJrrr�testWithTimeout�rLz%SendfileUsingSendTest.testWithTimeoutc	Cs�|j��}ttjd��7}t�|��}|�d�|�|�}|�	t
||�Wd�n1s-wYWd�dSWd�dS1sEwYdS)Nrg{�G�z�?)rEr�rrr�rr~r�r@rVr#rkrrr�_testWithTimeoutTriggeredSend�s


��"�z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs |��}|�d�t�d�dS)Ni�Xr)r<r�r�r�rmrrr�testWithTimeoutTriggeredSend�s
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCr�r5rrIrrr�_test_errors�r�z"SendfileUsingSendTest._test_errorsc	Cs�ttjd��,}tjtjd��}|�|�}|�td||�Wd�n1s&wYWd�n1s5wYttjdd��)}t���}|�|�}|�td||�Wd�n1s^wYWd�n1smwYttjd��R}t���5}|�|�}|jtd||dd	�|jtd||d
d	�|jtd||dd	�|jtd||dd	�Wd�n1s�wYWd�dSWd�dS1s�wYdS)
Nrrr9rr=zbinary modezpositive integerrQr[r�rr�)	rrr�rr&r@rBr�r�)rJrDr#rErrr�test_errors�sJ
����

����

������"�z!SendfileUsingSendTest.test_errorsN)%rQrRrSr6r5r7rrar;r�r9r:r<r=r@rGrKrOrPrSrTrWrXr^rcrerfrirjrlrnrorprqrrrsrtrrrrr/�sF

		
			
		
r/rkz%os.sendfile() required for this test.c@r)�SendfileUsingSendfileTestcCr>)Nrsr?rrrrr@�rmz(SendfileUsingSendfileTest.meth_from_sockN)rQrRrSr@rrrrru�sruzAF_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
CsZt�tjtjd�}z
|�||f�W|Sty,}z
|��t�t|�||��d}~wwr�)	rr1r.rqr�r!r�ZSkipTestr9)rJ�typr.rr�rrr�
create_alg�s���zLinuxKernelCryptoAPI.create_algr^r�c	Cst�d�}|�dd��r}|��\}}|�|�d�|�|�d�|�Wd�n1s-wY|��\}}|�+|�dtj	�|�dtj	�|�dtj	�|�d	�|�|�d�|�Wd�n1shwYWd�dSWd�dS1s�wYdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabcr��a�b�cr!)
r��fromhexrxr�r!r�r�r�r�MSG_MORE)rJrN�algo�opr�rrr�test_sha256s$

�
��"�z LinuxKernelCryptoAPI.test_sha256c	Cs�d}d}t�d�}|�dd��@}|�tjtj|�|��\}}|�|�|�|�	|�
d�|�Wd�n1s:wYWd�dSWd�dS1sRwYdS)NsPython loves AF_ALGswhat do ya want for nothing?Z(193dbb43c6297b47ea6277ec0ce67119a3f3aa66ryz
hmac(sha1)r�)r�r}rxr�r�SOL_ALG�ALG_SET_KEYr�r!r�r�)rJ�keyr�rNrr�r�rrr�test_hmac_sha1s

��"�z#LinuxKernelCryptoAPI.test_hmac_sha1rc
	Cs"t�d�}t�d�}d}t�d�}t|�}|�dd���}|�tjtj|�|��\}}|� |j	tj
|tjd�|�|�|�
|�|�|�Wd�n1sPwY|��\}}|�|j	|gtj|d�|�
|�|�|�Wd�n1s{wYd	}	|g|	}
|��\}}|�|j	|
tj
|d�|�||	�}Wd�n1s�wY|�
t|�||	�|�
|d|�|�|��\}}|�|j	|gtj|d�|�||	�}Wd�n1s�wY|�
t|�||	�|�
|||	�Wd�dS1�s
wYdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))r��ivr	)r�r�r�)r�r}rrxr�rr�r�r��
sendmsg_afalg�ALG_OP_ENCRYPTr~r!r�r��ALG_OP_DECRYPT)
rJr�r�r�Z
ciphertextZmsglenrr�r�Z
multiplierZlongmsg�encZdecrrr�test_aes_cbc!sV



�
���
����$�z!LinuxKernelCryptoAPI.test_aes_cbcr�cCsZt�d�}|dur|dkr|dkr|�d�t�d�}t�d�}t�d�}t�d�}t�d	�}t�d
�}t|�}t|�}	|�dd���_}
|
�tj	tj
|�|
�tj	tjd|�|
��\}}|�@|j
tj||	tjd
�|�|tj�|�|�|�|	t|�|�}
|�||
|	|��|�||
|d��Wd�n1s�wY|
��\}}|�8||}|j
|gtj||	d�|�|	t|�|�}
|�||
|	|��|�||
|d��Wd�n1s�wYt�d�j}|
��\}}|�O||}|�|gtj	tj|tj�gtj	tj|t|��|gtj	tj||	�gf�|�t|�|�}
|�||
|	|��|�||
|d��Wd�n	1�sPwY|
��\}}|�,|||}|j
|gtj||	d�|�t|�|�}
|�||
|	d��Wd�n1�s�wYWd�dSWd�dS1�s�wYdS)NZLinux)rr�)rr�zupstream Linux kernel issueZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r�r��assoclenr	)r�r�r�r
)rZ_get_kernel_versionrsr�r}rrxr�rr�r�ZALG_SET_AEAD_AUTHSIZEr�r�r�r~r!r�r�rZStructr�r�Z
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENr�)rJZkernel_versionr�r�ZplainZassocZexpected_ctZexpected_tagZtaglenr�rr�r��resr�Zpack_uint32rrr�test_aead_aes_gcmJs�







�
�
�
��	���� ��,$�z&LinuxKernelCryptoAPI.test_aead_aes_gcmc	Cs�|�dd��D}t�d�}|�tjtj|�|��\}}|�|�d�}|�	t
|�d�Wd�n1s5wYWd�dSWd�dS1sMwYdS)N�rngZdrbg_pr_sha256r�)rxr��urandomr�rr�r�r�r�r�r)rJrZ
extra_seedr�r�Zrnrrr�test_drbg_pr_sha256�s

��"�z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c	Cs\t�tjtjd�}|��|�t��|��Wd�n1s wY|�t��|jdd�Wd�n1s;wY|�t��
|�d�Wd�n1sUwY|�t��|jtjdd�Wd�n1srwY|�t��|jtjdd�Wd�n1s�wYWd�dSWd�dS1s�wYdS)Nr)r�r)r�r�r�)rr1r.rVr�r�r�rrrr�test_sendmsg_afalg_args�s(
������
"�z,LinuxKernelCryptoAPI.test_sendmsg_afalg_argscCs�t�tjtjd�}|�|j�|�t��
|�d�Wd�n1s$wY|�t	d��
|�d�Wd�n1s?wY|�t��
|�d�Wd�n1sYwY|�t	d��|�d�Wd�dS1suwYdS)Nr)Z
tttttttttttttr.z
type too long)Zttttttttttttttr.)r#Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz
name too long)r#Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
rr1r.rfr!rVr�rqrBr�rrrr�test_length_restriction�s���"�z,LinuxKernelCryptoAPI.test_length_restrictionN)
rQrRrSrxrr,r�r�r�r�r�r�r�rrrrrv�s




(

D

rvrprqc@rV)�TestMacOSTCPFlagscCs|�tj�dSr5)rBrZ
TCP_KEEPALIVErIrrr�test_tcp_keepalive�r	z$TestMacOSTCPFlags.test_tcp_keepaliveN)rQrRrSr�rrrrr��rXr��winzrequires Windowsc@seZdZhd�Zdd�ZdS)�TestMSWindowsTCPFlags>ZTCP_NODELAYZTCP_KEEPCNTZTCP_FASTOPENZ
TCP_MAXSEGZ
TCP_KEEPINTVLZTCP_KEEPIDLEcs6dd�tt�D�}�fdd�|D�}��g|d�dS)NcSsg|]	}|�d�r|�qS)ZTCP)r��r-r#rrrr/�r0z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]	}|�jvr|�qSr)�
knownTCPFlagsr�rIrrr/�r0zANew TCP flags were discovered. See bpo-32394 for more information)rrr�)rJZprovided�unknownrrIr�test_new_tcp_flags�s
�z(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rQrRrSr�r�rrrrr��r�r�c@s�eZdZdd�Zdd�Zdd�Ze�ee	d�pee	d�d	�e�
ejd
�dd���Z
e�e��d
�e�
ejd
�dd���ZdS)�CreateServerTestcCs�t��}t�d|f��}|�|��dd�|�|��d|�Wd�n1s*wYtjrctjd|ftjd��}|�|��dd�|�|��d|�Wd�dS1s\wYdSdS)NrFrrr�r)rr�r�
create_serverr�r�r
r�rJrGrrrr�test_address�s�
�"��zCreateServerTest.test_addresscCs�t�d��}|�|jtj�|�|jtj�Wd�n1s wYtjrStjdtj	d��}|�|jtj	�|�|jtj�Wd�dS1sLwYdSdS)NrE�r�rr)
rr�r�rLrDr#r9rr
r)rJrr#rrr�test_family_and_type�s�"��z%CreateServerTest.test_family_and_typecCs�ttd�s$|�t��tjddd�Wd�dS1swYdSt�d��}|�tjtj�}|�|d�Wd�n1sBwYtjddd��}|�tjtj�}|�	|d�Wd�dS1shwYdS)N�SO_REUSEPORT)rrT)Z
reuse_portr)
rrrVr�r�r�rfr�r�r�)rJrrxrrr�test_reuse_port�s
"��"�z CreateServerTest.test_reuse_portrjrrrrcCs6tjdtjd��	}Wd�dS1swYdS)Nr�r)rr�rrrrr�test_ipv6_only_default�s6z'CreateServerTest.test_ipv6_only_default�dualstack_ipv6 not supportedcCsHtjdtjdd��}|�|jtj�Wd�dS1swYdS)Nr�T�rLZdualstack_ipv6)rr�rr�rLrrrr�test_dualstack_ipv6_familys
�"�z+CreateServerTest.test_dualstack_ipv6_familyN)rQrRrSr�r�r�r�r�rrAr�rr
r�r�has_dualstack_ipv6r�rrrrr��s	
��r�c@s�eZdZejZdd�Zdd�Zdd�Ze	�
ejd�dd	��Z
e	�e��d
�e	�
ejd�dd���Ze	�e��d
�e	�
ejd�d
d���ZdS)�CreateServerFunctionalTestcsV��fdd�}t���|��j�tj||fd�}|����|j�j����dS)Nc	s�|�J|��\}}|�)���j�|�d�}|s(	Wd�Wd�dS|�|�Wd�n1s7wYWd�dSWd�dS1sOwYdSr�)r�r�r>r�r!)rr�r�r��rrJrr�runs
����"�z3CreateServerFunctionalTest.echo_server.<locals>.runr )	r\r�r�r>r�r�rfr6r})rJrr�r�rr�r�echo_servers
z&CreateServerFunctionalTest.echo_servercCsdtj|d��"}|�|j�|�|�|�d�|�|�d�d�Wd�dS1s+wYdS)Nrr\r�)rr�r>r�r!r�r�)rJr�rLrrrr�echo_client#s

"�z&CreateServerFunctionalTest.echo_clientcCsXt��}t�d|f��}|�|�|�d|ftj�Wd�dS1s%wYdS)Nr[rF)rr�rr�r�r�rDr�rrr�	test_tcp4*s

"�z$CreateServerFunctionalTest.test_tcp4rrcCs^t��}tjd|ftjd��}|�|�|�d|ftj�Wd�dS1s(wYdS)Nr[rr��rr�rr�rr�r�r�rrr�	test_tcp60s
�
"�z$CreateServerFunctionalTest.test_tcp6r�cCs`t��}tjd|ftjdd��}|�|�|�d|ftj�Wd�dS1s)wYdS)Nr[Tr�rF)rr�rr�rr�r�rDr�rrr�test_dual_stack_client_v4:��
"�z4CreateServerFunctionalTest.test_dual_stack_client_v4cCs`t��}tjd|ftjdd��}|�|�|�d|ftj�Wd�dS1s)wYdS)Nr[Tr�r�r�r�rrr�test_dual_stack_client_v6Dr�z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rQrRrSrrar>r�r�r�r�r�rr
r�r�rr�r�r�rrrrr�s"
	��r��send_fds�recv_fdsc@rV)�SendRecvFdsTestsc	Csjdd�}dd�}dd�td�D�}|�||�dd�|D�}t�tjtj�\}}|�;|�)t�|tg|�t�|t	t�d	t	|�d	�\}}}	}
|�||�Wd�n1sYwYWd�n1shwY|�
|t�|�
t	|�t	|��|�
|	d
�t|�D]\}}|\}}
t�
|
t|����q�t|�D]\}}t�|d�}|�
|t|����q�dS)NcSs&|D]\}}t�|�t�|�qdSr5�r�r!)�pipesr)Zfd2rrr�close_pipesSs
�z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipescSs|D]}t�|�qdSr5r�)rrirrr�	close_fdsXs�z6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdscSr/r)r��pipe)r-r�rrrr/]�z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r�cSsg|]\}}|�qSrr)r-�rfd�wfdrrrr/_r�r�rr�)rDrfrr�rr9r�r�r�rr�rr�r�r9rr#)rJr�r�r�rrrr�Zfds2r	r�r�r�r�r�rrr�testSendAndRecvFdsRs.&���z#SendRecvFdsTests.testSendAndRecvFdsN)rQrRrSr�rrrrr�Nr�r�cCs t��}tjtjg|�R�dSr5)rZthreading_setupr�ZaddModuleCleanupZthreading_cleanup)�thread_inforrr�setUpModulexsr��__main__)�r��testrZtest.supportrrrr�rMr�rr�r�r�r�rr�r�r�r�r��weakrefrrrrErr3ryr4�_threadr�r\r!r�rr�rr�r�r��systemr
rArr$r(r*r/r2r4r7r;r�r?ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_CAN_J1939ZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKrZHAVE_SOCKET_UDPLITEZHAVE_SOCKET_BLUETOOTHr�rr�rCrTrWrYrjrwryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrr+r8r?r@r�r�r�r�r�r�r�r�rrr6rFrGrcrjrprqrtrwrzr�r�r�r�r�r�r�r�rXr�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�rr-rdrurxryr{r|r�r}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
rr.rr/rurvr�r�r�r�r�r�r�rQ�mainrrrr�<module>sj��
�







	

3q���$!$��$	


S
Z
*
=
>��.�%{�7ww=#P;k7�


�
	


�
����
�
�
��
	�
�
�
��
���

�
��






�



��

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


	?G9�7JS��',C�<e
�N3
@
'�