HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/thread-self/root/usr/local/lib/python3.7/test/__pycache__/test_socket.cpython-37.opt-2.pyc
B

��g�}�
@s(
ddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZddlZddlZddlZddlZddlZddlZddlZddlZddlZyddlZWnek
r�dZYnXyddlZWnek
�rdZYnXejZd� d�Z!dZ"dZ#yddl$Z$Wnek
�r\dZ$YnXd	d
�Z%dd�Z&d
d�Z'dd�Z(dd�Z)dd�Z*dd�Z+e&�Z,e'�Z-e(�Z.e)�Z/e*�Z0e�d�j1Z2Gdd�dej3�Z4Gdd�dej3�Z5Gdd�dej3�Z6Gdd�dej3�Z7Gd d!�d!ej3�Z8Gd"d#�d#�Z9Gd$d%�d%e4e9�Z:Gd&d'�d'e5e9�Z;Gd(d)�d)e7e9�Z<Gd*d+�d+e8e9�Z=e�>edkd,�e�?e0d-�e�?e%�d.kd/�Gd0d1�d1ej3e9����Z@Gd2d3�d3e:�ZAGd4d5�d5ej3e9�ZBGd6d7�d7ej3�ZCGd8d9�d9eC�ZDGd:d;�d;e6eCe9�ZEGd<d=�d=eDeE�ZFGd>d?�d?eC�ZGGd@dA�dAeG�ZHGdBdC�dCeC�ZIGdDdE�dEeI�ZJGdFdG�dGeI�ZKGdHdI�dIeI�ZLGdJdK�dKeI�ZMGdLdM�dMeM�ZNdNdO�ZOdPdQ�ZPdRdS�ZQGdTdU�dUej3�ZRe�?e,dV�GdWdX�dXej3��ZSe�?e,dV�GdYdZ�dZe<��ZTe�?e-d[�Gd\d]�d]ej3��ZUe�?e.d^�Gd_d`�d`ej3��ZVe�?e.d^�Gdadb�dbe=��ZWe�>edkd,�e�?e0d-�Gdcdd�ddej3���ZXGdedf�dfeA�ZYGdgdh�dhe;�ZZGdidj�dje6�Z[Gdkdl�dle[�Z\Gdmdn�dne[�Z]Gdodp�dpe[�Z^Gdqdr�dre[�Z_Gdsdt�dte[�Z`Gdudv�dve[�ZaGdwdx�dxea�ZbGdydz�dzeb�ZcGd{d|�d|eb�ZdGd}d~�d~e[�ZeGdd��d�ee�ZfGd�d��d�ee�ZgGd�d��d�e\ee�ZhGd�d��d�ej3�ZiGd�d��d�ea�ZjGd�d��d�ea�ZkGd�d��d�e]e_eEeK�ZlePejd��Gd�d��d�edel��ZmePejd��Gd�d��d�egel��ZnePejd��Gd�d��d�ehel��ZoGd�d��d�e]e_eEeN�ZpePejd��e�?ejqd��eQd�d��Gd�d��d�edep����ZrePejd��e�?ejqd��eQd�d��Gd�d��d�egep����ZsePejd��e�?ejqd��eQd�d��Gd�d��d�ehep����ZtePejd��e�?ejqd��ePed��eQd�d��Gd�d��d�ekep�����ZuePejd��e�?ejqd��ePed��eQd�d��Gd�d��d�e\ekep�����ZvGd�d��d�e`eFeJ�ZwePejd��Gd�d��d�ecew��ZxePejd��Gd�d��d�egefew��ZyePejd��Gd�d��d�ehefew��ZzGd�d��d�e^e`eFeL�Z{ePejd��eQd�d�d��Gd�d��d�ece{���Z|ePejd��eQd�d�d��Gd�d��d�egefe{���Z}ePejd��eQd�d�d��Gd�d��d�ehefe{���Z~Gd�d��d�e`eFeH�ZePejd��ePed��Gd�d��d�ece���Z�ePejd��ePed��Gd�d��d�egefe���Z�ePejd��ePed��Gd�d��d�ehefe���Z�ePejd�d��ePed�d�dÃGd�dńd�eje���Z�ePejd�d��ePed�d�dÃGd�dDŽd�e\eje���Z�Gd�dɄd�ej3�Z�ePedʃe�?e�ed˃�	p�e�ed̃d͡Gd�dτd�e�eK���Z�ePedʃe�?e�ed˃�	p�e�ed̃d͡Gd�dфd�e�e6eDeJ���Z�Gd�dӄd�e:�Z�Gd�dՄd�eB�Z�Gd�dׄd�e:�Z�Gd�dلd�eA�Z�Gd�dۄd�e��Z�Gd�d݄d�e��Z�Gd�d߄d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e�eY�Z�Gd�d�d�ej3�Z�Gd�d�d�e4e9�Z�Gd�d�d�e4e9�Z�Gd�d�d�e4�Z�Gd�d�d�e5�Z�Gd�d��d�ej3�Z�e�?ej�d�kd��Gd�d��d�ej3��Z�e�?e�ed��d��Gd�d��d�ej3��Z�Gd�d��d�eA�Z�d�Z��dZ��dZ��d�d�Z�e�?e���d�G�d�d��dej3��Z�e�?e���d�G�d�d��dej3e9��Z�G�d	�d
��d
e:�Z�G�d�d��dej3�Z�e�?e�e�d
��d�G�d�d��dej3��Z�e�?e
j��dk�d�e�?e�d�G�d�d��de4���Z�G�d�d��de:�Z�e�?e�e
�d��d�G�d�d��de���Z�e�?e/�d�G�d�d��dej3��Z�e�?ej����d��d �G�d!�d"��d"ej3��Z��d#�d$�Z�e��d%k�
r$e��dS(&�N)�support)�proxyFuMichael Gilfix was hereሴ
zutf-8gN@i�c	CsntdkrdSttd�sdSy*tdd��}t�|tjd�}WdQRXWntk
rXdSXt�d|�dSdS)N�IOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsock�rbz    �Ir)	�fcntl�hasattr�socket�open�ioctlr�OSError�struct�unpack)�f�r�r�,/usr/local/lib/python3.7/test/test_socket.py�get_cid/s
rc	Cs>yt�tjtjtj�}Wnttfk
r0dSX|��dS)NFT)r	�PF_CAN�SOCK_RAW�CAN_RAW�AttributeErrorr�close)�srrr�_have_socket_can<src	Cs>yt�tjtjtj�}Wnttfk
r0dSX|��dS)NFT)r	r�
SOCK_DGRAM�	CAN_ISOTPrrr)rrrr�_have_socket_can_isotpFsrc	Cs<yt�tjtjd�}Wnttfk
r.dSX|��dS)NrFT)r	�PF_RDS�SOCK_SEQPACKETrrr)rrrr�_have_socket_rdsPsr c	Cs<yt�tjtjd�}Wnttfk
r.dSX|��dS)NrFT)r	�AF_ALGrrrr)rrrr�_have_socket_algZsr"cCst�dk	}|S)N)r)�retrrr�_have_socket_vsockds
r$cCstt�|tjtj�tj@�S)N)�boolr�F_GETFL�os�
O_NONBLOCK)�sockrrr�_is_fd_in_blocking_modejsr*�ic@seZdZdd�Zdd�ZdS)�
SocketTCPTestcCs.t�tjtj�|_t�|j�|_|j��dS)N)r	�AF_INET�SOCK_STREAM�servr�	bind_port�port�listen)�selfrrr�setUp~szSocketTCPTest.setUpcCs|j��d|_dS)N)r/r)r3rrr�tearDown�s
zSocketTCPTest.tearDownN)�__name__�
__module__�__qualname__r4r5rrrrr,|sr,c@seZdZdd�Zdd�ZdS)�
SocketUDPTestcCs$t�tjtj�|_t�|j�|_dS)N)r	r-rr/rr0r1)r3rrrr4�szSocketUDPTest.setUpcCs|j��d|_dS)N)r/r)r3rrrr5�s
zSocketUDPTest.tearDownN)r6r7r8r4r5rrrrr9�sr9cs4eZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)�ThreadSafeCleanupTestCasecst�j||�t��|_dS)N)�super�__init__�	threading�RLock�
_cleanup_lock)r3�args�kwargs)�	__class__rrr<�sz"ThreadSafeCleanupTestCase.__init__c	s |j�t�j||�SQRXdS)N)r?r;�
addCleanup)r3r@rA)rBrrrC�sz$ThreadSafeCleanupTestCase.addCleanupc	s |j�t�j||�SQRXdS)N)r?r;�
doCleanups)r3r@rA)rBrrrD�sz$ThreadSafeCleanupTestCase.doCleanups)r6r7r8r<rCrD�
__classcell__rr)rBrr:�sr:c@sDeZdZdZdZdZe�e�ZdZ	e	de�e	�d7Z	dd�Z
d	S)
�
SocketCANTest�vcan0�z=IB3x8sz@3I4l2I�x�cCsbt�tjtjtj�|_|�|jj�y|j�|jf�Wn$t	k
r\|�
d|j�YnXdS)Nz%network interface `%s` does not exist)r	rrrrrCr�bind�	interfacer�skipTest)r3rrrr4�szSocketCANTest.setUpN)r6r7r8rL�bufsize�
can_frame_fmtr
�calcsizeZcan_frame_size�bcm_cmd_msg_fmtr4rrrrrF�s

rFc@seZdZdZdd�ZdS)�
SocketRDSTesti cCsXt�tjtjd�|_|�|jj�yt�|j�|_Wnt	k
rR|�
d�YnXdS)Nrzunable to bind RDS socket)r	rrr/rCrrr0r1rrM)r3rrrr4�szSocketRDSTest.setUpN)r6r7r8rNr4rrrrrR�srRc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ThreadableTestcCs$|j|_|j|_|j|_|j|_dS)N)r4�_ThreadableTest__setUpr5�_ThreadableTest__tearDown�_setUp�	_tearDown)r3rrrr<
szThreadableTest.__init__cCs|j��dS)N)�server_ready�set)r3rrr�serverExplicitReadysz"ThreadableTest.serverExplicitReadycCs�t��|_|j��t��|_t��|_t��|_t	�
d�|_	d|_|��}|�
d�}||dd�}t|d|�}t�|j|f�|_z&y|��Wnd|_�YnXWd|j��X|j��dS)N�F�.�_T)rZwait_threads_exit�wait_threads�	__enter__r=�EventrX�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadrTrY�wait)r3Z
methodnamer+Ztest_methodrrrrVs(





zThreadableTest._setUpcCs>|��|j��|j�ddd�|j��r:|j��}|�dS)N)rUrbrlr^�__exit__rcZqsize�get)r3�excrrrrW6s


zThreadableTest._tearDownc
Cs�|j��zHy|��Wn6tk
rN}z|j�|�|��dSd}~XYnXWd|j��X|j	rr|��dSt
|d�s�td��z>y
|�Wn.tk
r�}z|j�|�Wdd}~XYnXWd|��XdS)N�__call__z%test_func must be a callable function)rXrl�clientSetUp�
BaseExceptionrc�put�clientTearDownrarYrer�	TypeError)r3Z	test_func�errrrk?s$


"zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedError)r3rrrrqUszThreadableTest.clientSetUpcCs|j��t��dS)N)rbrYri�exit)r3rrrrtXs
zThreadableTest.clientTearDownN)
r6r7r8r<rZrVrWrkrqrtrrrrrS�s&	rSc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcCstj||d�t�|�dS)N)�
methodName)r,r<rS)r3r{rrrr<^szThreadedTCPSocketTest.__init__cCst�tjtj�|_dS)N)r	r-r.�cli)r3rrrrqbsz!ThreadedTCPSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrtes
z$ThreadedTCPSocketTest.clientTearDownN)rz)r6r7r8r<rqrtrrrrry\s
ryc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPSocketTestrzcCstj||d�t�|�dS)N)r{)r9r<rS)r3r{rrrr<lszThreadedUDPSocketTest.__init__cCst�tjtj�|_dS)N)r	r-rr|)r3rrrrqpsz!ThreadedUDPSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrtss
z$ThreadedUDPSocketTest.clientTearDownN)rz)r6r7r8r<rqrtrrrrr}js
r}c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedCANSocketTestrzcCstj||d�t�|�dS)N)r{)rFr<rS)r3r{rrrr<zszThreadedCANSocketTest.__init__cCsDt�tjtjtj�|_y|j�|jf�Wntk
r>YnXdS)N)r	rrrr|rKrLr)r3rrrrq~s
z!ThreadedCANSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrt�s
z$ThreadedCANSocketTest.clientTearDownN)rz)r6r7r8r<rqrtrrrrr~xs
	r~c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedRDSSocketTestrzcCstj||d�t�|�dS)N)r{)rRr<rS)r3r{rrrr<�szThreadedRDSSocketTest.__init__cCsNt�tjtjd�|_y |j�tdf�|j��|_Wntk
rHYnXdS)Nr)	r	rrr|rK�HOST�getsockname�cli_addrr)r3rrrrq�sz!ThreadedRDSSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrt�s
z$ThreadedRDSSocketTest.clientTearDownN)rz)r6r7r8r<rqrtrrrrr�s
rz
need fcntlz%VSOCK sockets required for this test.�z-This test can only be run on a virtual guest.c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�ThreadedVSOCKSocketStreamTestrzcCstjj||d�t�|�dS)N)r{)�unittest�TestCaser<rS)r3r{rrrr<�sz&ThreadedVSOCKSocketStreamTest.__init__cCsht�tjtj�|_|�|jj�|j�tjtf�|j�	�|�
�|j��\|_|_
|�|jj�dS)N)r	�AF_VSOCKr.r/rCrrK�VMADDR_CID_ANY�	VSOCKPORTr2rZ�accept�conn�connaddr)r3rrrr4�s
z#ThreadedVSOCKSocketStreamTest.setUpcCsDt�d�t�tjtj�|_|�|jj�t�}|j�	|t
f�dS)Ng�������?)�time�sleepr	r�r.r|rCrr�connectr�)r3Zcidrrrrq�s

z)ThreadedVSOCKSocketStreamTest.clientSetUpcCs|j�d�}|�|t�dS)Ni)r��recv�assertEqual�MSG)r3�msgrrr�
testStream�sz(ThreadedVSOCKSocketStreamTest.testStreamcCs|j�t�|j��dS)N)r|�sendr�r)r3rrr�_testStream�sz)ThreadedVSOCKSocketStreamTest._testStreamN)rz)r6r7r8r<r4rqr�r�rrrrr��s

	r�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketConnectedTestrzcCstj||d�dS)N)r{)ryr<)r3r{rrrr<�szSocketConnectedTest.__init__cCs*t�|�|��|j��\}}||_dS)N)ryr4rZr/r��cli_conn)r3r��addrrrrr4�s
zSocketConnectedTest.setUpcCs|j��d|_t�|�dS)N)r�rryr5)r3rrrr5�s
zSocketConnectedTest.tearDowncCs(t�|�|j�t|jf�|j|_dS)N)ryrqr|r�r�r1�	serv_conn)r3rrrrq�s
zSocketConnectedTest.clientSetUpcCs|j��d|_t�|�dS)N)r�rryrt)r3rrrrt�s
z"SocketConnectedTest.clientTearDownN)rz)r6r7r8r<r4r5rqrtrrrrr��s

r�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketPairTestrzcCstjj||d�t�|�dS)N)r{)r�r�r<rS)r3r{rrrr<�szSocketPairTest.__init__cCst��\|_|_dS)N)r	�
socketpairr/r|)r3rrrr4�szSocketPairTest.setUpcCs|j��d|_dS)N)r/r)r3rrrr5�s
zSocketPairTest.tearDowncCsdS)Nr)r3rrrrq�szSocketPairTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrt�s
zSocketPairTest.clientTearDownN)rz)r6r7r8r<r4r5rqrtrrrrr��s

r�c@s$eZdZdd�Zdd�Zdd�ZdS)�SocketTestBasecCs|��|_|��dS)N)�	newSocketr/�
bindServer)r3rrrr4s
zSocketTestBase.setUpcCs|�|j�|j��|_dS)N)�bindSockr/r��	serv_addr)r3rrrr�szSocketTestBase.bindServercCs|j��d|_dS)N)r/r)r3rrrr5s
zSocketTestBase.tearDownN)r6r7r8r4r�r5rrrrr�s	r�cseZdZ�fdd�Z�ZS)�SocketListeningTestMixincst���|j��dS)N)r;r4r/r2)r3)rBrrr4s
zSocketListeningTestMixin.setUp)r6r7r8r4rErr)rBrr�sr�cs<eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�ZS)�ThreadedSocketTestMixincst�j||�t�|�dS)N)r;r<rS)r3r@rA)rBrrr<)sz ThreadedSocketTestMixin.__init__cCs|��|_|��dS)N)�newClientSocketr|�
bindClient)r3rrrrq-s
z#ThreadedSocketTestMixin.clientSetUpcCs|��S)N)r�)r3rrrr�1sz'ThreadedSocketTestMixin.newClientSocketcCs|�|j�|j��|_dS)N)r�r|r�r�)r3rrrr�5sz"ThreadedSocketTestMixin.bindClientcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrt:s
z&ThreadedSocketTestMixin.clientTearDown)	r6r7r8r<rqr�r�rtrErr)rBrr�!s
r�cs@eZdZ�fdd�Z�fdd�Z�fdd�Z�fdd�Z�ZS)	�ConnectedStreamTestMixincs*t���|��|j��\}}||_dS)N)r;r4rZr/r�r�)r3r�r�)rBrrr4Is
zConnectedStreamTestMixin.setUpcs|j��d|_t���dS)N)r�rr;r5)r3)rBrrr5Qs
z!ConnectedStreamTestMixin.tearDowncs$t���|j�|j�|j|_dS)N)r;rqr|r�r�r�)r3)rBrrrqVs
z$ConnectedStreamTestMixin.clientSetUpcs8y|j��d|_Wntk
r(YnXt���dS)N)r�rrr;rt)r3)rBrrrt[s

z'ConnectedStreamTestMixin.clientTearDown)r6r7r8r4r5rqrtrErr)rBrr�@s	r�cs$eZdZ�fdd�Zdd�Z�ZS)�UnixSocketTestBasecs(t��|_|�tj|j�t���dS)N)�tempfile�mkdtemp�dir_pathrCr'�rmdirr;r4)r3)rBrrr4ls
zUnixSocketTestBase.setUpcCs,tj|jd�}t�||�|�tj|�dS)N)�dir)r�Zmktempr�r�bind_unix_socketrC�unlink)r3r)�pathrrrr�qszUnixSocketTestBase.bindSock)r6r7r8r4r�rErr)rBrr�dsr�c@seZdZdd�ZdS)�UnixStreamBasecCst�tjtj�S)N)r	�AF_UNIXr.)r3rrrr�yszUnixStreamBase.newSocketN)r6r7r8r�rrrrr�vsr�cs(eZdZeZ�fdd�Zdd�Z�ZS)�InetTestBasecst���|jd|_dS)Nr[)r;r4r�r1)r3)rBrrr4�s
zInetTestBase.setUpcCstj||jd�dS)N)�host)rr0r�)r3r)rrrr��szInetTestBase.bindSock)r6r7r8r�r�r4r�rErr)rBrr�}sr�c@seZdZdd�ZdS)�TCPTestBasecCst�tjtj�S)N)r	r-r.)r3rrrr��szTCPTestBase.newSocketN)r6r7r8r�rrrrr��sr�c@seZdZdd�ZdS)�UDPTestBasecCst�tjtj�S)N)r	r-r)r3rrrr��szUDPTestBase.newSocketN)r6r7r8r�rrrrr��sr�c@seZdZdd�ZdS)�SCTPStreamBasecCst�tjtjtj�S)N)r	r-r.�IPPROTO_SCTP)r3rrrr��szSCTPStreamBase.newSocketN)r6r7r8r�rrrrr��sr�c@seZdZejZdS)�
Inet6TestBaseN)r6r7r8r�HOSTv6r�rrrrr��sr�c@seZdZdd�ZdS)�UDP6TestBasecCst�tjtj�S)N)r	�AF_INET6r)r3rrrr��szUDP6TestBase.newSocketN)r6r7r8r�rrrrr��sr�cs*dd����fdd�}dd�}|r&|S|S)Nc_sdS)Nr)r@rArrr�client_pass�sz%skipWithClientIf.<locals>.client_passcs*t���|�}t|t�s&�fdd�|_|S)Ncs�S)Nr)r)r�rr�<lambda>��z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)r��skip�
isinstance�type�client_skip)�objZretval)r��reasonrr�skipdec�s
z!skipWithClientIf.<locals>.skipdeccSs"t|t�st|d�sdd�|_|S)Nr�cSs|S)Nr)rrrrr��r�z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�rr�)r�rrr�	noskipdec�s
z#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�r)r�r�r�skipWithClientIf�s	r�cs0�fdd�|D�}t|dd�dd�|D���S)Ncsg|]}t�|�s|�qSr)r)�.0�name)r�rr�
<listcomp>�sz requireAttrs.<locals>.<listcomp>zdon't have z, css|]
}|VqdS)Nr)r�r�rrr�	<genexpr>�szrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingr)r�r�requireAttrs�sr�c
Gs�d}dd�|D�}|r0dd�dd�|D��}nPdd�|D�}ytj|�}Wn*tk
rv}zt|�}Wdd}~XYn
X|��t|dk	d�d�d	d�|D��|��S)
NcSs$g|]}t|t�rtt|�s|�qSr)r��strrr	)r�r�rrrr��sz!requireSocket.<locals>.<listcomp>zdon't have z, css|]
}|VqdS)Nr)r�r�rrrr��sz requireSocket.<locals>.<genexpr>cSs$g|]}t|t�rtt|�n|�qSr)r�r�rhr	)r�r�rrrr��szcan't create socket({0}): {1}css|]}t|�VqdS)N)r�)r��orrrr��s)r�r	rr�rr��format)r@�errr�Zcallargsrrvrrr�
requireSocket�sr�c@s�eZdZdd�Zdd�Ze�edk	d�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Ze�eed�d�e�eed�d�dd���Ze�eed�d�dd ��Ze�eed�d�d!d"��Ze�eed#�d$�d%d&��Zd'd(�Zd)d*�Zejd+d,��Zd-d.�Zd/d0�Ze�eed1�d2�d3d4��Ze�eed5�d6�d7d8��Ze�eed5�d6�d9d:��Z e�eed;�d<�d=d>��Z!e�eed;�d<�d?d@��Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)e�e*j+dOkdP�dQdR��Z,e�e*j+dOkdP�e�eedS�dT�dUdV���Z-dWdX�Z.dYdZ�Z/e�e�0d[�d\�d]d^��Z1d_d`�Z2dadb�Z3dcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkdl�Z8dmdn�Z9dodp�Z:dqdr�Z;dsdt�Z<ejdudv��Z=e�ej>dw�dxdy��Z?e�ej>dw�dzd{��Z@e�ej>dw�e�eed�d|�d}d~���ZAe�ej>dw�e�ejBdkd��d�d����ZCe�ej>dw�e�eed�d|�d�d����ZDe�ej>dw�e�ejBdkd��d�d����ZEd�d��ZFd�d��ZGe�He*j+dOkd��d�d���ZIe�ee*d��d��d�d���ZJd�d��ZKd�d��ZLdS)��GeneralModuleTestscCs<ddl}|�tj|jk�t��}|�|tj�|��dS)Nr)�_socket�
assertTruer	Z
SocketType�assertIsInstancer)r3r�rrrr�test_SocketType_is_socketobject�s
z2GeneralModuleTests.test_SocketType_is_socketobjectc	Cs�t�tjtj�}|��|�d|��t|��|�dtjt|��|�dtjt|��|�dt|��|�dt|��|�d�|�dt|��|�t|�	��t|��WdQRX|�dt|��|�dt|��dS)	Nzfd=%iz	family=%sztype=%szproto=0Zraddr)z	127.0.0.1rZladdrz[closed])
r	r-r.�assertIn�fileno�repr�assertNotInrKr�r�)r3rrrr�	test_repr�s
"zGeneralModuleTests.test_reprNzneed _socket modulecCsrt�tjtj�}z.d|��|j|j|jf}|�t	|�|�Wd|�
�Xd|j|j|jf}|�t	|�|�dS)Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)r�r	r-r.r��familyr��protor�r�r)r3r�expectedrrr�test_csocket_reprs
z$GeneralModuleTests.test_csocket_reprcCsht�tjtj�}t|�}|�|��|���|��d}y|��Wntk
rXYnX|�d�dS)NzSocket proxy still exists)	r	r-r.rr�r�r�ReferenceError�fail)r3r�prrr�test_weakrefszGeneralModuleTests.test_weakrefc	Csrd}|jt|dd��
t�WdQRX|jt|dd��tj�WdQRX|jt|dd��tj�WdQRXdS)Nz$Error raising socket exception (%s).r)r�z
socket.herrorzsocket.gaierror)�assertRaisesrr	�herror�gaierror)r3r�rrr�testSocketErrorsz"GeneralModuleTests.testSocketErrorc	CsFt�tjtj�}|�|j�|�d�|��}|�t��}|�	d|�WdQRX|�
t|j�d�|�t��}|�	d|�WdQRX|�
t|j�d�|�t��}|�	dd�WdQRX|�
dt|j��|�t��}|�	dd|�WdQRX|�
t|j�d�|�t��}|�	dd|�WdQRX|�
t|j�d�|�t��}|�	ddd�WdQRX|�
dt|j��|�t��}|�	dd	|�WdQRX|�
d
t|j��|�t��}|�	ddd�WdQRX|�
d
t|j��|�t��}|�	d�WdQRX|�
dt|j��|�t��}|�	dd|d�WdQRX|�
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'sfooznot NoneTyper�barzan integer is requiredz	(1 given)�z	(4 given))r	r-rrCrrKr�r�ru�sendtor�r��	exceptionr�)r3rZsockname�cmrrr�testSendtoErrors&sL
z#GeneralModuleTests.testSendtoErrorscCs4tjtjtjtjtjtjtjtjdS)N)	r	r-r.rr�SOCK_RDMr�
SOL_SOCKET�SO_REUSEADDR)r3rrr�testCrucialConstantsRsz'GeneralModuleTests.testCrucialConstantscCs�t��}yt�|�}Wntk
r4|�d�YnX|�|�d�dkd�yt�|�\}}}Wntk
r~|�d�YnX||g|}t�|�}||kr�|�	d|t
|�f�dS)Nzname lookup failurer\rzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r	�gethostname�
gethostbynamerrMr��find�
gethostbyaddrZgetfqdnr�r�)r3ZhostnameZipZhname�aliasesZipaddrsZall_host_namesZfqhnrrr�testHostnameRes]s
z"GeneralModuleTests.testHostnameRescCsTx&tjddgD]}|�t�|�|�qWx&tjgD]}|�|t�|�d�q2WdS)Nz10.0.0.1z255.255.255.255r�)rZHOSTv4r�r	r�r�r�)r3r�r�rrr�test_host_resolutionpsz'GeneralModuleTests.test_host_resolutionc
Cs^d}xTdD]L}|jt|d��t�|�WdQRX|jt|d��t�|�WdQRXq
WdS)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:1)r�)r�rr	r�r�)r3Zexplanationr�rrr� test_host_resolution_bad_addressys
z3GeneralModuleTests.test_host_resolution_bad_address�sethostnameztest needs socket.sethostname()r�ztest needs socket.gethostname()c
Cs�t��}yt�d�Wn<tk
rR}z|jtjkr@|�d�n�Wdd}~XYnXz.|�t��d�t�d�|�t��d�Wdt�|�XdS)N�newztest should be run as rootsbarr�)r	r�r�r�errnoZEPERMrMr�)r3Zoldhnrvrrr�test_sethostname�s
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�t��}xx|D]p\}}|�|t�|�|t�|�|d�t�|�}|�|t�|�||�t�|�}|�|t�|�||�qWdS)Nr)	r	rr��intr��
assertGreater�if_nametoindexr��if_indextoname)r3Z
interfaces�indexr�Z_index�_namerrr�testInterfaceNameIndex�s

z)GeneralModuleTests.testInterfaceNameIndexcCsD|�ttjd�|�ttjd�|�ttjd�|�ttjd�dS)NrZ	_DEADBEEF)r�rr	rrru)r3rrr�testInvalidInterfaceNameIndex�sz0GeneralModuleTests.testInvalidInterfaceNameIndex�getrefcountztest needs sys.getrefcount()cCsLyt�t�}t�td�Wn,tk
rFt�t�|krB|�d�YnXdS)Nrz$socket.getnameinfo loses a reference)�sysr
r6r	�getnameinforur�)r3�origrrr�testRefCountGetNameInfo�s
z*GeneralModuleTests.testRefCountGetNameInfocCs*yt�dd�Wntk
r$YnXdS)N)rIrrrr)r	rr)r3rrr�testInterpreterCrash�sz'GeneralModuleTests.testInterpreterCrashc	Cs�tjdtjdtjdtjdi}xt|��D]h\}}d|>d}x,dD]$}|�||@||||@��|@�q@W||�}|�||@|�|�t|d�q&WdS)N� �r[)rr[i��i��r�igE#i2Tvl)	r	�htonl�ntohl�htons�ntohs�itemsr�r��
OverflowError)r3Zsizes�func�size�maskr+Zswappedrrr�testNtoH�s
$zGeneralModuleTests.testNtoHcCs"ddl}ddddg}|dg}ddddd	>g}||jd|jdg}d
|jg}x |D]}t�|�t�|�qVWx |D]}t�|�t�|�qxWx,|D]$}|�t	tj|�|�t	tj|�q�Wx,|D]$}|�t	tj|�|�t	tj|�q�Wx,|D]$}|�
ttj|�|�
ttj|�q�WdS)Nrr[r�i��l��������li�i)�	_testcapiZINT_MIN�INT_MAXr	rrrrr�r�assertWarns�DeprecationWarning)r3rZ
s_good_valuesZ
l_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_values�krrr�testNtoHErrors�s,









z!GeneralModuleTests.testNtoHErrorsc	Cs&|j}tj�d�stjdkr"d}nd}x8|D],}yt�|d�}PWq,tk
rVYq,Xq,Wt�ttd�rvt��dkr�t�|�}|||�yt�|d�}Wntk
r�d}YnX|||�t	j
s�|t�|�|�|t�|d�|�|dk	�r|t�|d�|�|�t
tjd	�|�t
tjd
�dS)N)ZfreebsdZnetbsdZgnukfreebsd)�linux�darwin)�daytimeZqotd�domain)Zechor&r'Ztcp�getandroidapilevel�Zudpri)r�r�platform�
startswithr	Z
getservbynamerrr(rZ
is_androidZ
getservbyportr�r)r3�eqZservicesZservicer1Zport2Zudpportrrr�
testGetServBy�s8








z GeneralModuleTests.testGetServBycCs�|�t��d�t��}|�|��d�|��t�d�|�t��d�t��}|�|��d�|��t�d�|�t��d�t��}|�|��d�|��|�ttjd�|�ttjd�dS)N�
rZspam)	r�r	�getdefaulttimeout�
gettimeoutr�setdefaulttimeoutr��
ValueErrorru)r3rrrr�testDefaultTimeouts 

z%GeneralModuleTests.testDefaultTimeout�	inet_atonztest needs socket.inet_aton()cCs(|�dt�d��|�dt�d��dS)Nsz0.0.0.0s����z255.255.255.255)r�r	r4)r3rrr�testIPv4_inet_aton_fourbytes9sz/GeneralModuleTests.testIPv4_inet_aton_fourbytes�	inet_ptonztest needs socket.inet_pton()cs2ddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
����d|d��tj�d�s�||d�||d�||d�||d�||d���d|d����d|d	����d
|d����d|d��||d�||d�||d�||d�||d�dS)Nr)r4r6r-cs
��|�S)Nr)�a)r-r6rrr�Er�z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>cs��ttf||�S)N)r�rr2)rr7)r3rrr�Gssz0.0.0.0s��z255.0.255.0s����z170.170.170.170sz1.2.3.4s����z255.255.255.255�aixz0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5z::1)r	r4r6r-r�rr*r+)r3r�g�
assertInvalidr)r-r6r3r�testIPv4toStringAs.








z#GeneralModuleTests.testIPv4toStringc
s�y&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�y��d�Wn6tk
r�}z|j	dkr���d�Wdd}~XYnX��fd	d
����fdd
�}��
d�d����
d�d
����
d�d����
d�d����
d�d����
d�d��|d�|d�|d�|d�|d�|d�|d�tj�d��sh|d�|d���
d �d!����
d"�d#����
d$�d%��|d&�|d'�|d(�|d)�|d*�|d+�dS),Nr)r6r��has_ipv6zIPv6 not availablez+could not import needed symbols from socket�win32z::i&'zIPv6 might not be supportedcs
��|�S)Nr)r7)r�r6rrr�sr�z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>cs��ttf�|�S)N)r�rr2)r7)rr3rrr�tssz0::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:6z1:2:3:4:5:6:7:8:0r8z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:s�*@z::254.42.23.64sB���*@z42::a29b:254.42.23.64sB�������*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)r	r6r�r<rM�ImportErrorrr*r�winerrorr�r+)r3r<rvr:r)r�rr6r3r�testIPv6toStringbs`






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_ntoarAr-cs
��|�S)Nr)r7)r-rArrr��r�z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs��ttf||�S)N)r�rr2)rr7)r3rrr��sz1.0.1.0sz
170.85.170.85s�U�Uz255.255.255.255s����z1.2.3.4ssss)r	rBrAr-r��	bytearray)r3rr9r:r)r-rAr3r�testStringToIPv4�s$





z#GeneralModuleTests.testStringToIPv4c
sy&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�y��d�Wn6tk
r�}z|j	dkr���d�Wdd}~XYnX��fd	d
����fdd
�}��
d�d����
d
�d����
d�d����
d
�td���|d�|d�|d�dS)Nr)rAr�r<zIPv6 not availablez+could not import needed symbols from socketr=si&'zIPv6 might not be supportedcs
��|�S)Nr)r7)r�rArrr��r�z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs��ttf�|�S)N)r�rr2)r7)rr3rrr��sz::z::1sz!aef:b01:506:1001:ffff:9997:55:170s
�����Upsss)r	rAr�r<rMr>rr*rr?r�rC)r3r<rvr:r)r�rrAr3r�testStringToIPv6�s.


z#GeneralModuleTests.testStringToIPv6cCs�t��}t�tjtj�}|�|j�|�d|f�|��}yt�	t�
��}Wntk
rj|�d�YnX|�
|dd|fd|d�|�|d|�dS)Nz0.0.0.0zname lookup failurerz
%s invalidr[)r�find_unused_portr	r-r.rCrrKr�r�r�rrMr�r�)r3r1r)r�Z
my_ip_addrrrr�testSockName�szGeneralModuleTests.testSockNamecCs@t�tjtj�}|�|j�|�tjtj�}|�|dkd�dS)Nrzinitial mode is reuse)	r	r-r.rCr�
getsockoptr�r��assertFalse)r3r)�reuserrr�testGetSockOpt�sz!GeneralModuleTests.testGetSockOptcCsRt�tjtj�}|�|j�|�tjtjd�|�tjtj�}|�	|dkd�dS)Nr[rzfailed to set reuse mode)
r	r-r.rCr�
setsockoptr�r�rHrI)r3r)rJrrr�testSetSockOpt�s
z!GeneralModuleTests.testSetSockOptcCs6t�tjtj�}|�d�|��|�t|jd�dS)Nr[sspam)r	r-r.�
settimeoutrr�rr�)r3r)rrr�testSendAfterCloses
z%GeneralModuleTests.testSendAfterClosec
Cs�t��}|�tjdf�tj|��d���y|��Wn8tk
rp}z|�|jtjtj	f�Wdd}~XYnX|�
d�dS)Nr)r�z#close() should raise EBADF/ENOTSOCK)r	rKZ
_LOCALHOSTr�rrr�r�ZEBADFZENOTSOCKr�)r3r)r�rrr�testCloseException	s(z%GeneralModuleTests.testCloseExceptioncCsrt�tjtj�}|�|jtj�ttd�rH|�|jtjtjBtjf�n|�|jtj�|�|j	d�|�
�dS)N�SOCK_CLOEXECr)r	r-r.r�r�rr�r�rQr�r)r3r)rrr�testNewAttributess

z$GeneralModuleTests.testNewAttributescCs�t��}|�|j�t��}|d}|d}|�t|jt|f�|�t|jt|f�xft	�
�D]Z}t��}y|�t|f�Wn8tk
r�}z|jtj
ks�|dkr��Wdd}~XYq^XPq^WdS)Ni�)r	rCrrrFr�rrKr��	itertools�countrr�Z
EADDRINUSE)r3r)r1Zbig_portZneg_portr+rvrrr�test_getsockaddrarg#sz&GeneralModuleTests.test_getsockaddrarg�ntzWindows specificcCs�|�ttjd��|�ttd��|�ttd��|�ttd��|�ttd��t��}|�|j�|�t|jdd�|�tjd�dS)NrZ
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFF�SIO_KEEPALIVE_VALSr)r[�drY)	r�rr	rCrr�r2rrX)r3rrrr�test_sock_ioctl7sz"GeneralModuleTests.test_sock_ioctl�SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc
Cs|t��}|�|j�y|�tjd�Wn<tk
rb}zd}|j|krP|�d��Wdd}~XYnX|�t	|jtjd�dS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
r	rCrrr[rr?rMr�ru)r3rroZ
WSAEOPNOTSUPPrrr�test_sio_loopback_fast_pathCs

z.GeneralModuleTests.test_sio_loopback_fast_pathc

CsLyt�dd�Wn<tjk
rL}z|jtjkr:|�d��Wdd}~XYnXx$t�td�D]}|�t|�d�q\Wt�dd�t�dd�t�dd�t	j
r�t�dd�ttd�r�t�
�dkr�t�td	�t�td�t�td�t�tdtjtj�}xR|D]J\}}}}}|�|tj�|�t|�d
�|�|tj�|�t|�d�q�Wt�tddtj�}x&|D]\}}}}}|�|tj��qdWt�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��rHyt�dddddtj�Wntjk
�rFYnXdS)NZ	localhost�Pzbuggy libc versionrSz	127.0.0.1z::1r(r)ZhttpzAddressFamily.AF_INETzSocketKind.SOCK_STREAMr)r�r1)r�)r�)r�)�flags)r�r1r�r�r�r^u��AI_NUMERICSERV)r	�getaddrinfor�r�ZEAI_SERVICErMr�r��lenr�IPV6_ENABLEDrrr(r-r.r�ZSOL_TCPZ
AI_PASSIVE�	AF_UNSPECr��UnicodeEncodeErrorr_)
r3r��infoZinfosr�r�r]Zsocktyper7�brrr�testGetaddrinfoSsv


z"GeneralModuleTests.testGetaddrinfocCs|�ttjdd�dS)N)zmail.python.orgrr)r�rr	r)r3rrr�test_getnameinfo�sz#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledc	CsPt�d��t�d�WdQRXd}t�|�t�|�t�|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetr	r�Zgethostbyname_exr`rcr.)r3r'rrr�	test_idna�s

zGeneralModuleTests.test_idnac
s�ttd�rttd�s��d��fdd�}�fdd�}t��\}}t�tj|�}zv|r`|�d���t�� t�	d	�|�
d
tj�WdQRX|r�t�tj|�t�	d	���tj
|j
d
tj�Wdt�	d�t�tj|�|��|��XdS)N�alarmr�z9signal.alarm and socket.socketpair required for this testcs��ttjd�dS)Nr)r�r2�math�acosh)r@)r3rr�
ok_handler�sz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs��ttjd�dddS)Nrr[)r�r2rkrl)r@)r3rr�raising_handler�szEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg�?r[�xr)r�signalr	rMr��SIGALRMrNr��ZeroDivisionErrorrj�sendallr�
SOCK_MAX_SIZE�timeoutr)r3Zwith_timeoutrmrn�cr�	old_alarmr)r3r�check_sendall_interrupted�s*




z,GeneralModuleTests.check_sendall_interruptedcCs|�d�dS)NF)rx)r3rrr�test_sendall_interrupted�sz+GeneralModuleTests.test_sendall_interruptedcCs|�d�dS)NT)rx)r3rrr�%test_sendall_interrupted_with_timeout�sz8GeneralModuleTests.test_sendall_interrupted_with_timeoutc	Cs�t�tjtj�}t|�}|�t��}d}t��WdQRX|�|t	|j
jd��t�tjtj�}|�d�}t|�}d}t��|�t��d}t��WdQRXdS)Nrr)
r	r-r.r�r �ResourceWarningrZ
gc_collectr�r�Zwarningr@�makefile)r3r)rr�rrrr�test_dealloc_warn�s
z$GeneralModuleTests.test_dealloc_warnc	CsBt�tjtj��(}|�d�}|��|�t|�d�WdQRXdS)Nrz<_io.BufferedReader name=-1>)r	r-r.r|rr�r�)r3r)�fprrr�test_name_closed_socketio�s
z,GeneralModuleTests.test_name_closed_socketioc	Cs�t���p}|jddd�}|�|���|�|���|�|���|��|�t	|j�|�t	|j�|�t	|j�WdQRXdS)Nrr)�	buffering)
r	r|r��readablerI�writable�seekablerr�r2)r3r)r~rrr�test_unusable_closed_socketio�s
z0GeneralModuleTests.test_unusable_closed_socketiocCs�t��}z@|�tdf�t�|���|�t��|�d�WdQRXWd|�t��|��WdQRXX|�t��t�d�WdQRX|�t��t�d�WdQRXdS)Nrr[r)	r	rKr�rr�r�rr2ru)r3r)rrr�test_socket_close�sz$GeneralModuleTests.test_socket_closecCsbx\dD]T}|j|d��>t���*}|�|��}|�|j|�WdQRXWdQRXWdQRXqWdS)N)rr�rw�w�wb)�mode)�subTestr	r|r�r�)r3r�r)r~rrr�test_makefile_mode
s


z%GeneralModuleTests.test_makefile_modecCs`xZdD]R}|j|d��<t���(}|�td��|�|�WdQRXWdQRXWdQRXqWdS)N)�rtrI�+r7)r�zinvalid mode)r�r	�assertRaisesRegexr2r|)r3r�r)rrr�test_makefile_invalid_modes


z-GeneralModuleTests.test_makefile_invalid_modec	Cs�t��}|�0x(ttjd�D]}|�ttj||�qWWdQRXxZttjd�D]H}t�t�tj|��}|�	|tj�t�t�tj
|��}|�	|tj
�qRWdS)Nr[)r	�range�pickleZHIGHEST_PROTOCOLr�ru�dumps�loadsr-r�r.)r3r)Zprotocolr�r�rrr�test_pickles zGeneralModuleTests.test_picklec
Csxx@dD]8}t�tjtj��}|�tdf�|�|�WdQRXqWt�tjtj��}|�tdf�|��WdQRXdS)N)rrr)r	r-r.rKr�r2)r3Zbacklog�srvrrr�test_listen_backlog&s
z&GeneralModuleTests.test_listen_backlogcCsHddl}t�tjtj�}|�tdf�|�t|j|j	d�|�
�dS)Nrr[)rr	r-r.rKr�r�rr2rr)r3rr�rrr�test_listen_backlog_overflow0s
z/GeneralModuleTests.test_listen_backlog_overflowzIPv6 required for this test.c	CsR|�ttjtjddfd�t�tjtj��}|�t|jtjddf�WdQRXdS)Nrl��i����)	r�rr	rrr�r�r.rK)r3rrrr�
test_flowinfo9s
z GeneralModuleTests.test_flowinfocCs0t�ddtjtjtj�\�^}}|�|d�dS)Nzff02::1de:c0:face:8Di�)zff02::1de:c0:face:8di�rr)r	r`r�r�IPPROTO_UDPr�)r3r]�sockaddrrrr�test_getaddrinfo_ipv6_basic@sz.GeneralModuleTests.test_getaddrinfo_ipv6_basiczif_nameindex is not supportedcCsLt��d\}}t�d|dtjtjtj�\�^}}|�|ddd|f�dS)Nrzff02::1de:c0:face:8D%i�zff02::1de:c0:face:8d)r	rr`r�rr�r�)r3�ifindex�test_interfacer]r�rrr�&test_getaddrinfo_ipv6_scopeid_symbolicJsz9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicr=z.Numeric scope id does not work or undocumentedcCsDd}t�dt|�dtjtjtj�\�^}}|�|ddd|f�dS)N�*zff02::1de:c0:face:8D%i�zff02::1de:c0:face:8dr)r	r`r�r�rr�r�)r3r�r]r�rrr�%test_getaddrinfo_ipv6_scopeid_numericZs
z8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericcCsHt��d\}}ddd|f}t�|tjtjB�}|�|d|df�dS)Nrzff02::1de:c0:face:8Di�zff02::1de:c0:face:8d%�1234)r	rr�NI_NUMERICHOST�NI_NUMERICSERVr�)r3r�r�r��nameinforrr�&test_getnameinfo_ipv6_scopeid_symbolicksz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symboliccCs@d}ddd|f}t�|tjtjB�}|�|dt|�df�dS)Nr�zff02::1de:c0:face:8Di�rzff02::1de:c0:face:8d%r�)r	rr�r�r�r�)r3r�r�r�rrr�%test_getnameinfo_ipv6_scopeid_numericvsz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericc	CsDt�tjtj��*}|�t|j�d�|�t|j�d�WdQRXdS)NzAddressFamily.AF_INETzSocketKind.SOCK_STREAM)r	r-r.r�r�r�r�)r3rrrr�test_str_for_enums�sz%GeneralModuleTests.test_str_for_enumsc	Cs�ttdd�}ttdd�}tj|B|B}t�tj|��~}|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�WdQRXdS)N�
SOCK_NONBLOCKrrQr[TF)rhr	r.r-r�r�rN�setblocking)r3r�rQZ	sock_typerrrr� test_socket_consistent_sock_type�s



z3GeneralModuleTests.test_socket_consistent_sock_typezWill not work on Windowsc	Cs�t��\}}|�tj|�ttjj�	��d}tdd�tj
j��D��d}tj||d|d��4}|�|j
|�|�|j|�|�|jddh�WdQRXdS)Nr[css|]\}}|dkr|VqdS)>rQr�Nr)r�r��kindrrrr��szEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>r))r�r�r�r�r)r��mkstemprCr'r��maxr	Z
AddressFamily�__members__�valuesZ
SocketKindrr�r�r�r�r�)r3�fdr�Zunknown_familyZunknown_typerrrr�test_unknown_socket_family_repr�s

z2GeneralModuleTests.test_unknown_socket_family_repr�sendfileztest needs os.sendfile()c
Cs�Gdd�d�}t����}t�tjtj�}t�|�|�tj��|�||��WdQRX|�t	��|�|dd��WdQRX|�t
��|�|d��WdQRXWdQRXdS)Nc@seZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dS)N)r�)r3r�rrrr<�szEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jS)N)r�)r3rrrr��szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)r6r7r8r<r�rrrr�File�sr�r�i�)r	r'r
�curdir�O_RDONLYrr��_GiveupOnSendfile�_sendfile_use_sendfilerru)r3r�r)r�rrr�test__sendfile_use_sendfile�s

z.GeneralModuleTests.test__sendfile_use_sendfilecCst|�|j|�|�|j|�|��}tj|d�}|�|j�|��|�|j|�|�|j|�|�|��|�dS)N)r�)r�r�r�r�r	rCr�detach)r3rr��styper��s2rrr�_test_socket_fileno�sz&GeneralModuleTests._test_socket_filenocCs6t�tjtj�}|�|j�|�tjdf�|�|tjtj�t	td�r�t�tjtj
�}|�|j�|�tjdf�|�|tjtj
�tjr�t�tjtj�}|�|j�|�tj
dddf�|�|tjtj�t	td��r2t��}|�tj|�t�tjtj�}|�|j�|�tj�|d��|�|tjtj�dS)Nrrr�r	)r	r-r.rCrrKrr�r�rrrbr�r�r�r��shutilZrmtreer�r'r�r�)r3rZtmpdirrrr�test_socket_fileno�s*
z%GeneralModuleTests.test_socket_fileno)Mr6r7r8r�r�r��
skipUnlessr�r�r�r�r�r�r�r�r�rr	rrr	rrrrr�cpython_onlyr#r-r3r5r;r@rDrErGrKrMrOrPrRrVr'r�rZr\rgrhZis_resource_enabledrirxryrzr}rr�r�r�r�r�r�r�rbr�r�r�r*r�r�r�r�r��skipIfr�r�r�r�rrrrr��s�


,		, ?#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)�BasicCANTestcCstjtjtjdS)N)r	�AF_CANrr)r3rrrr��sz!BasicCANTest.testCrucialConstants�CAN_BCMz&socket.CAN_BCM required for this test.cCsRtjtjtjtjtjtjtjtjtj	tj
tjtjtj
dS)N)r	r�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_CHANGED)r3rrr�testBCMConstants�szBasicCANTest.testBCMConstantsc	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr)r3rrrr�testCreateSocket
szBasicCANTest.testCreateSocketc	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr�)r3rrrr�testCreateBCMSocketsz BasicCANTest.testCreateBCMSocketc	Cs.t�tjtjtj��}|�d�WdQRXdS)N)r�)r	rrrrK)r3rrrr�testBindAnyszBasicCANTest.testBindAnyc	Cs6t�tjtjtj��}|�td|jd�WdQRXdS)Nzinterface name too long)�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r	rrrr�rrK)r3rrrr�testTooLongInterfaceNamesz%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c	Cs\t�tjtjtj��>}x6dD].}|�tjtj|�|�||�tjtj��qWWdQRXdS)N)rr[)	r	rrrrL�SOL_CAN_RAWr�r�rH)r3rZloopbackrrr�testLoopbacks
zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c	Cs|d\}}t�d||�}t�tjtjtj��H}|�tjtj|�|�	||�
tjtjd��|�tjtjt|��WdQRXdS)N)iiz=IIrJ)r
�packr	rrrrLr�r�r�rHrC)r3�can_idZcan_maskZ
can_filterrrrr�
testFilter(szBasicCANTest.testFilterN)r6r7r8r�r�r�rr	r�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)�CANTestrzcCstj||d�dS)N)r{)r~r<)r3r{rrrr<7szCANTest.__init__cCs&t|�}|�dd�}t�|j|||�S)NrJ�)ra�ljustr
r�rO)�clsr��data�can_dlcrrr�build_can_frame:szCANTest.build_can_framecCs&t�|j|�\}}}|||d|�fS)N)r
rrO)r��framer�r�r�rrr�dissect_can_frameAszCANTest.dissect_can_framecCs2|j�|j�\}}|�|j|�|�||j�dS)N)r�recvfromrNr��cfrL)r3r�r�rrr�
testSendFrameGszCANTest.testSendFramecCs |�dd�|_|j�|j�dS)Nrs)r�r�r|r�)r3rrr�_testSendFrameOszCANTest._testSendFramecCs$|j�|j�\}}|�|j|�dS)N)rr�rNr�r�)r3r�r�rrr�testSendMaxFrameSszCANTest.testSendMaxFramecCs |�dd�|_|j�|j�dS)Nrs)r�r�r|r�)r3rrr�_testSendMaxFrameWszCANTest._testSendMaxFramecCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dS)N)rr�rNr��cf1�cf2)r3r�r�rrr�testSendMultiFrames[szCANTest.testSendMultiFramescCs<|�dd�|_|j�|j�|�dd�|_|j�|j�dS)N�sD3"�s�"3)r�r�r|r�r�)r3rrr�_testSendMultiFramesbszCANTest._testSendMultiFramesr�z&socket.CAN_BCM required for this test.cCsP|j�|j�\}}|�|j|�|�|�\}}}|�|j|�|�|j|�dS)N)r|r�rNr�r�r�r�r�)r3r�r�r�r�r�rrr�_testBCMis
zCANTest._testBCMcCs�t�tjtjtj�}|�|j�|�|jf�d|_t	dddg�|_
|�|j|j
�|_tj
}d}d}d}}}}d}	d}
t�|j||||||||	|
�
}||j}|�|�}
|�|
t|��dS)Ni#����ri"r[)r	rrr�rCrr�rLr��bytesr�r�r�r�r
r�rQr�r�ra)r3ZbcmZopcoder^rUZ
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr�testBCMrs2

zCANTest.testBCMN)rz)r6r7r8r<�classmethodr�r�r�r�r�r�r�r�r�r�rr	r�r�rrrrr�4s
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)�	ISOTPTestcst�j||�d|_dS)NrG)r;r<rL)r3r@rA)rBrrr<�szISOTPTest.__init__cCstjtjtjtjdS)N)r	r�rrr)r3rrrr��szISOTPTest.testCrucialConstantsc	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr)r3rrrrr��szISOTPTest.testCreateSocketrz(socket.CAN_ISOTP required for this test.c	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr)r3rrrr�testCreateISOTPSocket�szISOTPTest.testCreateISOTPSocketc
CsFt�tjtjtj��(}|�td��|�d�WdQRXWdQRXdS)Nzinterface name too long)r�r[r�)r	rrrr�rrK)r3rrrrr��sz"ISOTPTest.testTooLongInterfaceNamec
Cs�yJt�tjtjtj��,}|jddf}|�|�|�|��|�WdQRXWnBtk
r�}z$|j	t	j
krz|�d|j�n�Wdd}~XYnXdS)Ni#iVz%network interface `%s` does not exist)r	rrrrLrKr�r�rr�ZENODEVrM)r3rr�rvrrr�testBind�s
zISOTPTest.testBind)r6r7r8r<r�r�r�r�rr	r�r�r�rErr)rBrr��sr�z#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdS)N)r	ZAF_RDSr)r3rrrr��sz!BasicRDSTest.testCrucialConstantsc	Cs"t�tjtjd��}WdQRXdS)Nr)r	rr)r3rrrrr��szBasicRDSTest.testCreateSocketc	CsJd}t�tjtjd��*}|�tjtj|�|�tjtj|�WdQRXdS)Ni@r)r	rrrLr�Z	SO_RCVBUFZ	SO_SNDBUF)r3rNrrrr�testSocketBufferSize�sz!BasicRDSTest.testSocketBufferSizeN)r6r7r8r�r�r�rrrrr��sr�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)�RDSTestrzcCstj||d�dS)N)r{)rr<)r3r{rrrr<�szRDSTest.__init__cst���t��|_dS)N)r;r4r=r`Zevt)r3)rBrrr4�s
z
RDSTest.setUpcCs2|j�|j�\}}|�|j|�|�|j|�dS)N)r/r�rNr�r�r�)r3r�r�rrr�testSendAndRecv�szRDSTest.testSendAndRecvcCs"d|_|j�|jdt|jf�dS)Nsspamr)r�r|r�r�r1)r3rrr�_testSendAndRecv�szRDSTest._testSendAndRecvcCsH|j�|jtj�\}}|�|j|�|j�|j�\}}|�|j|�dS)N)r/r�rNr	�MSG_PEEKr�r�)r3r�r�rrr�testPeek�szRDSTest.testPeekcCs"d|_|j�|jdt|jf�dS)Nsspamr)r�r|r�r�r1)r3rrr�	_testPeek�szRDSTest._testPeek�recvmsgcCs(|j�|j�\}}}}|�|j|�dS)N)r/r�rNr�r�)r3r��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�r1)r3rrr�_testSendAndRecvMsg�szRDSTest._testSendAndRecvMsgcCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dS)N)r/r�rNr��data1�data2)r3r�r�rrr�testSendAndRecvMulti�szRDSTest.testSendAndRecvMulticCs@d|_|j�|jdt|jf�d|_|j�|jdt|jf�dS)Nsbaconrsegg)rr|r�r�r1r)r3rrr�_testSendAndRecvMulti�szRDSTest._testSendAndRecvMulticCsLt�|jgggd�\}}}|�|j|�|j�|j�\}}|�|j|�dS)Ng@)�selectr/r�r�rNr�r�)r3rr�rIr�r�rrr�
testSelectszRDSTest.testSelectcCs"d|_|j�|jdt|jf�dS)Nsselectr)r�r|r�r�r1)r3rrr�_testSelect
szRDSTest._testSelect)rz)r6r7r8r<r4r�r�r�r�r�r	r�r�rrrrrErr)rBrr��s
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BasicVSOCKTestcCs
tjdS)N)r	r�)r3rrrr�sz#BasicVSOCKTest.testCrucialConstantscCs4tjtjtjtjtjtjtjtjdS)N)	r	�SO_VM_SOCKETS_BUFFER_SIZE�SO_VM_SOCKETS_BUFFER_MIN_SIZE�SO_VM_SOCKETS_BUFFER_MAX_SIZEr�ZVMADDR_PORT_ANYZVMADDR_CID_HOSTZVM_SOCKETS_INVALID_VERSIONr)r3rrr�testVSOCKConstantssz!BasicVSOCKTest.testVSOCKConstantsc	Cs t�tjtj��}WdQRXdS)N)r	r�r.)r3rrrrr�!szBasicVSOCKTest.testCreateSocketc	Cs�t�tjtj���}|�tjtj�}|�tjtj�}|�tjtj�}|�tjtj|d�|�tjtj|d�|�tjtj|d�|�|d|�tjtj��|�|d|�tjtj��|�|d|�tjtj��WdQRXdS)Nr�)	r	r�r.rHr
rr	rLr�)r3rZorig_maxr
Zorig_minrrrr�%s,




z#BasicVSOCKTest.testSocketBufferSizeN)r6r7r8r�rr�r�rrrrrs
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),�BasicTCPTestrzcCstj||d�dS)N)r{)r�r<)r3r{rrrr<BszBasicTCPTest.__init__cCs|j�d�}|�|t�dS)Ni)r�r�r�r�)r3r�rrr�testRecvEszBasicTCPTest.testRecvcCs|j�t�dS)N)r�r�r�)r3rrr�	_testRecvJszBasicTCPTest._testRecvcCs8|j�tt�d�}|j�d�}||}|�|t�dS)N�i)r�r�rar�r�)r3�seg1�seg2r�rrr�testOverFlowRecvMszBasicTCPTest.testOverFlowRecvcCs|j�t�dS)N)r�r�r�)r3rrr�_testOverFlowRecvTszBasicTCPTest._testOverFlowRecvcCs |j�d�\}}|�|t�dS)Ni)r�r�r�r�)r3r�r�rrr�testRecvFromWszBasicTCPTest.testRecvFromcCs|j�t�dS)N)r�r�r�)r3rrr�
_testRecvFrom\szBasicTCPTest._testRecvFromcCs@|j�tt�d�\}}|j�d�\}}||}|�|t�dS)Nri)r�r�rar�r�)r3rr�rr�rrr�testOverFlowRecvFrom_sz!BasicTCPTest.testOverFlowRecvFromcCs|j�t�dS)N)r�r�r�)r3rrr�_testOverFlowRecvFromfsz"BasicTCPTest._testOverFlowRecvFromcCs4d}x|j�d�}|sP||7}qW|�|d�dS)Nr�isffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r�r�r�)r3r��readrrr�testSendAlliszBasicTCPTest.testSendAllcCsd}|j�|�dS)Nsffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r�rs)r3Z	big_chunkrrr�_testSendAllsszBasicTCPTest._testSendAllcCsP|j��}t�|tjtj�}|�|j�|�|tj�|�	d�}|�
|t�dS)Ni)r�r�r	Zfromfdr-r.rCrr�r�r�r�)r3r�r)r�rrr�
testFromFdws

zBasicTCPTest.testFromFdcCs|j�t�dS)N)r�r�r�)r3rrr�_testFromFd�szBasicTCPTest._testFromFdcCs0|j��}|�|j�|�d�}|�|t�dS)Ni)r��duprCrr�r�r�)r3r)r�rrr�testDup�s

zBasicTCPTest.testDupcCs|j�t�dS)N)r�r�r�)r3rrr�_testDup�szBasicTCPTest._testDupcCs&|j�d�}|�|t�|j��dS)Ni)r�r�r�r�rbrl)r3r�rrr�testShutdown�szBasicTCPTest.testShutdowncCs|j�t�|j�d�dS)Nr�)r�r�r��shutdown)r3rrr�
_testShutdown�szBasicTCPTest._testShutdowncCsXddl}|j�t�|�t|jj|jd�|�t|jjd|jd�|j�d�dS)Nrr[r�)	rr�r�r�r�rr!r�UINT_MAX)r3rrrr�_testShutdown_overflow�sz#BasicTCPTest._testShutdown_overflowcCs�|j��}|j��}|�||�|�|jj�|�t|jjd�|j�	�t
j
t
jt
j|d�}|�
|j	�|�d�}|�|t�dS)Ni)r�)r�r�r�r�r��_closedr�rr�rr	r-r.rCr�)r3r�rr)r�rrr�
testDetach�s



zBasicTCPTest.testDetachcCs|j�t�dS)N)r�r�r�)r3rrr�_testDetach�szBasicTCPTest._testDetachN)rz)r6r7r8r<r
rrrrrrrrrrrrrr r"rr�ZtestShutdown_overflowr$r&r'rrrrr@s*

		
rc@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestrzcCstj||d�dS)N)r{)r}r<)r3r{rrrr<�szBasicUDPTest.__init__cCs |j�tt��}|�|t�dS)N)r/r�rar�r�)r3r�rrr�testSendtoAndRecv�szBasicUDPTest.testSendtoAndRecvcCs|j�tdt|jf�dS)Nr)r|r�r�r�r1)r3rrr�_testSendtoAndRecv�szBasicUDPTest._testSendtoAndRecvcCs$|j�tt��\}}|�|t�dS)N)r/r�rar�r�)r3r�r�rrrr�szBasicUDPTest.testRecvFromcCs|j�tdt|jf�dS)Nr)r|r�r�r�r1)r3rrrr�szBasicUDPTest._testRecvFromcCs|�t|jjd�dS)Nr)r�r2r/r�)r3rrr�testRecvFromNegative�sz!BasicUDPTest.testRecvFromNegativecCs|j�tdt|jf�dS)Nr)r|r�r�r�r1)r3rrr�_testRecvFromNegative�sz"BasicUDPTest._testRecvFromNegativeN)rz)
r6r7r8r<r)r*rrr+r,rrrrr(�s
r(cs�eZdZdZ�fdd�Zdd�ZdZdd�Zd	d
�Zdd�Z	d
d�Z
dZxdD]Zee
eed�OZqNWdZdZdZddd�Z�ZS)�SendrecvmsgBaseg@cst��|_t���dS)N)r=r`�
misc_eventr;r4)r3)rBrrr4�s
zSendrecvmsgBase.setUpcCs|j�|�S)N)�cli_sockr�)r3r�rrr�sendToServer�szSendrecvmsgBase.sendToServerrcGs|jj||jt|�d��S)N)r/r��sendmsg_to_server_defaultsra)r3r@rrr�sendmsgToServer	szSendrecvmsgBase.sendmsgToServercGs|j|f|��}|�|�|S)N)r��registerRecvmsgResult)r3r)rNr@�resultrrr�	doRecvmsg
	s
zSendrecvmsgBase.doRecvmsgcCsdS)Nr)r3r4rrrr3	sz%SendrecvmsgBase.registerRecvmsgResultcCs|�||�dS)N)r�)r3�addr1�addr2rrr�checkRecvmsgAddress	sz#SendrecvmsgBase.checkRecvmsgAddressr)�
MSG_CTRUNCZMSG_OOBNc
Cs�|j}|j}|r&||jO}||jO}n|dk	rB||jO}||jO}||M}||M}||O}||O}||@|@}|r�td�|���||B|@}	|�||	@||	@�dS)Nz6contradictory set, unset requirements for flags {0:#x})�msg_flags_common_set�msg_flags_common_unset�msg_flags_eor_indicator�msg_flags_non_eor_indicator�	Exceptionr�r�)
r3r^�eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothrrrr�
checkFlags2	s$




zSendrecvmsgBase.checkFlags)Nrrr)r6r7r8�fail_timeoutr4r0r1r2r5r3r8r;r�rhr	r:r<r=rCrErr)rBrr-�s

r-c@seZdZdd�ZdS)�RecvmsgIntoMixincGsft|�}|j|gf|��}|�|�|�|dd�|�|d|�t|d|d��f|dd�S)Nrr[)rC�recvmsg_intor3�assertGreaterEqual�assertLessEqualr�)r3r)rNr@�bufr4rrrr5l	s
zRecvmsgIntoMixin.doRecvmsgN)r6r7r8r5rrrrrEi	srEcs eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasecst�jtjBS)N)r;r=r	�	MSG_TRUNC)r3)rBrrr=x	sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)r6r7r8�propertyr=rErr)rBrrJu	srJcs eZdZe�fdd��Z�ZS)�SendrecvmsgSCTPFlagsBasecst�jtjBS)N)r;r<r	ZMSG_EOR)r3)rBrrr<�	sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)r6r7r8rLr<rErr)rBrrM}	srMc@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jS)N)r/)r3rrr�	serv_sock�	sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jS)N)r|)r3rrrr/�	sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfS)Nr)r�)r3rrrr1�	sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j�||j�S)N)r/r�r�)r3r�rrrr0�	sz*SendrecvmsgConnectionlessBase.sendToServerN)r6r7r8rLrOr/r1r0rrrrrN�	srNc@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jS)N)r�)r3rrrrO�	sz"SendrecvmsgConnectedBase.serv_sockcCs|jS)N)r�)r3rrrr/�	sz!SendrecvmsgConnectedBase.cli_sockcCsdS)Nr)r3r6r7rrrr8�	sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)r6r7r8rLrOr/r8rrrrrP�	srPcseZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasecst���|j�|j�dS)N)r;r4rOrNrD)r3)rBrrr4�	s
z"SendrecvmsgServerTimeoutBase.setUp)r6r7r8r4rErr)rBrrQ�	srQc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeed�dd��Zejd d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SendmsgTestscCs|�|j�tt��t�dS)N)r�rOr�rar�)r3rrr�testSendmsg�	szSendmsgTests.testSendmsgcCs|�|�tg�tt��dS)N)r�r2r�ra)r3rrr�_testSendmsg�	szSendmsgTests._testSendmsgcCs|�|j�tt��t�dS)N)r�rOr�rar�)r3rrr�testSendmsgDataGenerator�	sz%SendmsgTests.testSendmsgDataGeneratorcCs&|�|�dd�tgD��tt��dS)Ncss|]
}|VqdS)Nr)r�r�rrrr��	sz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>)r�r2r�ra)r3rrr�_testSendmsgDataGenerator�	sz&SendmsgTests._testSendmsgDataGeneratorcCs|�|j�tt��t�dS)N)r�rOr�rar�)r3rrr�testSendmsgAncillaryGenerator�	sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|�|�tgdd�dD��tt��dS)Ncss|]
}|VqdS)Nr)r�r�rrrr��	sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r)r�r2r�ra)r3rrr�_testSendmsgAncillaryGenerator�	sz+SendmsgTests._testSendmsgAncillaryGeneratorcCs|�|j�tt��t�dS)N)r�rOr�rar�)r3rrr�testSendmsgArray�	szSendmsgTests.testSendmsgArraycCs$|�|�t�dt�g�tt��dS)N�B)r�r2�arrayr�ra)r3rrr�_testSendmsgArray�	szSendmsgTests._testSendmsgArraycCs|�|j�tt��t�dS)N)r�rOr�rar�)r3rrr�testSendmsgGather�	szSendmsgTests.testSendmsgGathercCs.|�|�tdd�tdd�g�tt��dS)Nr)r�r2r�ra)r3rrr�_testSendmsgGather�	szSendmsgTests._testSendmsgGathercCs|�|j�d�d�dS)Ni�sdone)r�rOr�)r3rrr�testSendmsgBadArgs�	szSendmsgTests.testSendmsgBadArgscCs�|�t|jj�|�t|jd�|�t|jt��|�t|jt�g�|�t|jtt�g�|�t|jtgt��|�t|jtggt��|�t|jtggdt��|�d�dS)Nsnot in an iterablersdone)r�rur/r�r2�objectr�r0)r3rrr�_testSendmsgBadArgs�	s 







z SendmsgTests._testSendmsgBadArgscCs|�|j�d�d�dS)Ni�sdone)r�rOr�)r3rrr�testSendmsgBadCmsg�	szSendmsgTests.testSendmsgBadCmsgcCs�|�t|jtgt�g�|�t|jtgt�ddfg�|�t|jtgdt�dfg�|�t|jtgddt�fg�|�t|jtgdg�|�t|jtgdg�|�d�dS)Nrsdata)rr)rrsdatar�sdone)r�rur2r�r`r0)r3rrr�_testSendmsgBadCmsg�	s





z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs|�|j�d�d�dS)Ni�sdone)r�rOr�)r3rrr�testSendmsgBadMultiCmsg	
sz$SendmsgTests.testSendmsgBadMultiCmsgcCsB|�t|jtgdddg�|�t|jtgdt�g�|�d�dS)Nrr�)rrr�sdone)r�rur2r�r`r0)r3rrr�_testSendmsgBadMultiCmsg
s


z%SendmsgTests._testSendmsgBadMultiCmsgcCs|�|j�d�d�dS)Ni�sdone)r�rOr�)r3rrr�testSendmsgExcessCmsgReject
sz(SendmsgTests.testSendmsgExcessCmsgRejectc	CsNttd�s@|�t��}|�tgddg�WdQRX|�|jj�|�	d�dS)Nrd)rrr�sdone)
rr	r�rr2r��assertIsNoner�r�r0)r3r�rrr�_testSendmsgExcessCmsgReject
s

z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdS)Nr)r3rrr�testSendmsgAfterClose$
sz"SendmsgTests.testSendmsgAfterClosecCs |j��|�t|jtg�dS)N)r/rr�rr2r�)r3rrr�_testSendmsgAfterClose(
s
z#SendmsgTests._testSendmsgAfterCloseN)r6r7r8rSrTrUrVrWrXrYr\r]r^r_rarbrcr�r	rer�rfrgrirjrkrrrrrR�	s(rRc@sReZdZdd�Zdd�Zdd�Zdd�Zeej	d	kd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs|�|j�tt��t�dS)N)r�rOr�rar�)r3rrr�testSendmsgExplicitNoneAddr1
sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|�|�tggdd�tt��dS)Nr)r�r2r�ra)r3rrr�_testSendmsgExplicitNoneAddr5
sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs.|�|j�d�d�|�|jj|jd��dS)Nisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)ru)r�rOr�r�r.rlrD)r3rrr�testSendmsgTimeout8
sz%SendmsgStreamTests.testSendmsgTimeoutc
Cs�zv|j�d�yx|�dg�qWWnDtjk
r:Yn:tk
rh}z|jtjkrX�Wdd}~XYnX|�d�Wd|j	�
�XdS)Ng���Q��?saaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazsocket.timeout not raised)r/rNr2r	rurr��ENOMEMr�r.rY)r3rorrr�_testSendmsgTimeout=
sz&SendmsgStreamTests._testSendmsgTimeout>r$z<MSG_DONTWAIT not known to work on this platform when sendingcCs.|�|j�d�d�|�|jj|jd��dS)Nisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)ru)r�rOr�r�r.rlrD)r3rrr�testSendmsgDontWaitT
sz&SendmsgStreamTests.testSendmsgDontWaitc	Cs`zN|�t��}x|�dggtj�qWWdQRX|�|jjtjtj	tj
f�Wd|j��XdS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
r�rr2r	ZMSG_DONTWAITr�r�r�ZEAGAINZEWOULDBLOCKrpr.rY)r3r�rrr�_testSendmsgDontWait\
s 
z'SendmsgStreamTests._testSendmsgDontWaitN)
r6r7r8rmrnrorqr�rr*rrr�rsrrrrrl-
s
rlc@seZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdS)Nr)r3rrr�testSendmsgNoDestAddro
sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|�t|jjtg�|�t|jjtggdd�dS)Nr)r�rr/r�r�)r3rrr�_testSendmsgNoDestAddrt
sz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)r6r7r8rurvrrrrrtj
srtc@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?)r5rOrar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsg
s
zRecvmsgGenericTests.testRecvmsgcCs|�t�dS)N)r0r�)r3rrr�_testRecvmsg�
sz RecvmsgGenericTests._testRecvmsgcCsV|�|jtt�dd�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrT)r?)r5rOrar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgExplicitDefaults�
sz/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgExplicitDefaults�
sz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Nr�T)r?)r5rOrar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgShorter�
sz&RecvmsgGenericTests.testRecvmsgShortercCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgShorter�
sz'RecvmsgGenericTests._testRecvmsgShortercCs^|�|jtt�d�\}}}}|�|tdd��|�||j�|�|g�|j|dd�dS)Nr���F)r?)r5rOrar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgTrunc�
sz$RecvmsgGenericTests.testRecvmsgTrunccCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgTrunc�
sz%RecvmsgGenericTests._testRecvmsgTrunccCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Nr[T)r?)r5rOrar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgShortAncillaryBuf�
sz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgShortAncillaryBuf�
sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Ni(T)r?)r5rOrar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgLongAncillaryBuf�
sz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgLongAncillaryBuf�
sz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|j��|�t|j|jd�dS)Ni)rOrr�rr5)r3rrr�testRecvmsgAfterClose�
s
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdS)Nr)r3rrr�_testRecvmsgAfterClose�
sz*RecvmsgGenericTests._testRecvmsgAfterClosecCs<z*|j�d�|�tj|j|jtt��Wd|j�	�XdS)Ng���Q��?)
rOrNr�r	rur5rar�r.rY)r3rrr�testRecvmsgTimeout�
s
z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|�|jj|jd��dS)N)ru)r�r.rlrD)r3rrr�_testRecvmsgTimeout�
sz'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~FrK)r?rBT)r?)r5rOrar�r	r�r�r8r�rCrh)r3r�r�r^r�rrr�testRecvmsgPeek�
s(z#RecvmsgGenericTests.testRecvmsgPeekcCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgPeek�
sz$RecvmsgGenericTests._testRecvmsgPeekr�cCs`|j�|j�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dS)NT)r?)
rOrNrDr5rar�r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgFromSendmsgsz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs.|�|�tdd�tdd�g�tt��dS)Nr)r�r2r�ra)r3rrr�_testRecvmsgFromSendmsgsz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)r6r7r8rxryrzr{r|r}rr�r�r�r�r�r�r�r�r�r�r	r�r�r�r�r�rrrrrw{
s(						#rwc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RecvmsgGenericStreamTestscCsN|�|jd�\}}}}|�|d�|�||j�|�|g�|j|dd�dS)Nir�)r?)r5rOr�r8r�rC)r3r�r�r^r�rrr�testRecvmsgEOFs
z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|j��dS)N)r/r)r3rrr�_testRecvmsgEOFsz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|�|jtt�d�\}}}}|�||j�|�|g�|j|dd�|�|jd�\}}}}|�||j�|�|g�|j|dd�||}|�|t�dS)NrF)r?iT)r5rOrar�r8r�r�rC)r3rr�r^r�rr�rrr�testRecvmsgOverflow sz-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgOverflow0sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)r6r7r8r�r�r�r�rrrrr�sr�c@seZdZdd�Zdd�ZdS)�RecvmsgTestscCs|�t|jj�|�t|jjddd�|�t|jjtt�dd�|�t|jjtd�gdd�|�t|jjt�dd�|�t|jjtt�t�d�|�t|jjtt�dt��|j�tt�dd�\}}}}|�	|t�|�
||j�|�	|g�|j|dd�dS)Nrrr.T)r?)
r�rurOr�r2rar�rCr`r�r8r�rC)r3r�r�r^r�rrr�testRecvmsgBadArgs7s$
zRecvmsgTests.testRecvmsgBadArgscCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgBadArgsMsz RecvmsgTests._testRecvmsgBadArgsN)r6r7r8r�r�rrrrr�4sr�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 writablerT)r?)
rCrar�r�rurOrFr`r2r�r8r�rC)r3rI�nbytesr�r^r�rrr�testRecvmsgIntoBadArgsTs0
z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgIntoBadArgspsz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|j�dd�|gD��\}}}}|�|tt��|�|tt��|�||j�|�|g�|j|dd�dS)Ncss|]
}|VqdS)Nr)r�r�rrrr�wsz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>T)r?)	rCrar�rOrFr�r8r�rC)r3rIr�r�r^r�rrr�testRecvmsgIntoGeneratorssz)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgIntoGenerator~sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxt�ddgtt��}|j�|g�\}}}}|�|tt��|�|��t�|�||j�|�|g�|j	|dd�dS)NrZrT)r?)
r[rar�rOrFr��tobytesr8r�rC)r3rIr�r�r^r�rrr�testRecvmsgIntoArray�sz%RecvmsgIntoTests.testRecvmsgIntoArraycCs|�t�dS)N)r0r�)r3rrr�_testRecvmsgIntoArray�sz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|j�|t|�dd�|g�\}}}}|�|td��|�|td��|�|td��|�|td	��|�||j�|�|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	sMary had a little lambsMarys
01 had a 9slittle lamb---T)r?)	rCrOrF�
memoryviewr�rar8r�rC)r3Zb1Zb2Zb3r�r�r^r�rrr�testRecvmsgIntoScatter�s z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|�d�dS)NsMary had a little lamb)r0)r3rrr�_testRecvmsgIntoScatter�sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)r6r7r8r�r�r�r�r�r�r�r�rrrrr�Qs
r�c@sbeZdZyddlZWnek
r,dZYnXedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs�|jt�d�d}ttd��tt|d|��}|�t�d�t�d�jd�x:|D]2}t�|�}|�|t�d�|�|�	||j�qVW|�
ttjd�|�
ttj|�|�
ttjtj
�dS)Nrr[ir+r�r)�socklen_t_limitr	r��listr�rr[�itemsizer�rHr�rr�maxsize)r3�toobigr��nr#rrr�testCMSG_LEN�s

zCmsgMacroTests.testCMSG_LENrdcCs�|jt�d�d}ttd��tt|d|��}t�d�}|�|t�d�jd�x\|D]T}t�|�}|�||�|�|t�	|��|�||t�	d��|�
||j�|}qZW|�ttjd�|�ttj|�|�ttjt
j�dS)Nr[irr+r�r)r�r	rdr�r�rr[r�rGr�rHr�rrr�)r3r�r�Zlastr�r#rrr�testCMSG_SPACE�s


zCmsgMacroTests.testCMSG_SPACE)r6r7r8rr>r��minrr�r	r�r�rrrrr��s
r�c@sheZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdedd�Z	dd�Z
dd�Zdd�Zdd�Z
eed�dd��Zejdd��Zdd�Zdd �Ze�ejd!kd"�e�ej�d#�d$�eed�d%d&����Zeje�ejd!kd"�e�ej�d#�d$�d'd(����Ze�ejd!kd"�e�ej�d#�d$�eed�d)d*����Zeje�ejd!kd"�e�ej�d#�d$�d+d,����Zd-d.�Ze�ejd!kd/�d0d1��Zd2d3�Z d4d5�Z!d6d7�Z"eed�d8d9��Z#e#jd:d;��Z$dfd<d=�Z%d>d?�Z&d@dA�Z'dBdC�Z(dDdE�Z)dFdG�Z*dHdI�Z+dJdK�Z,dLdM�Z-dNdO�Z.dPdQ�Z/dgdRdS�Z0dTdU�Z1dVdW�Z2dXdY�Z3dZd[�Z4d\d]�Z5d^d_�Z6d`da�Z7dbdc�Z8ddS)h�
SCMRightsTesti����cCs`g}xVt|�D]J}t��\}}|�tj|�|�tj|�t�|t|��	��|�
|�qW|S)N)r�r�r�rCr'r�r�writer��encode�append)r3r��fdsr+r�r�rrr�newFDs�szSCMRightsTest.newFDscCsFx@t|�D]4\}}t�|dtj�|�t�|d�t|����q
WdS)Nri)�	enumerater'�lseek�SEEK_SETr�rr�r�)r3r�r�r�rrr�checkFDs�szSCMRightsTest.checkFDscCs|�|j|�dS)N)rC�closeRecvmsgFDs)r3r4rrrr3�sz#SCMRightsTest.registerRecvmsgResultcCsvxp|dD]d\}}}|tjkr
|tjkr
t�d�}|�|dt|�t|�|j��x|D]}t�|�q\Wq
WdS)Nr[r+)	r	r��
SCM_RIGHTSr[�	frombytesrar�r'r)r3Zrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datar�r�rrrr��s



zSCMRightsTest.closeRecvmsgFDsc
Cs8|�|�tgtjtjt�d|�|��fg�tt��dS)Nr+)	r�r2r�r	r�r�r[r�ra)r3r�rrr�createAndSendFDsszSCMRightsTest.createAndSendFDsr[rcCs�|\}}}}|�|t�|�||j�|j|dtj|d�|�|t�|�	t
|�|�t�d�}	xh|D]`}
|�|
t�|
\}}}
|�|tj
�|�|tj�|�|
t�|�t
|
�td�|	�|
�qfW|�t
|	�|�|�|	�dS)NT)r?rArBr+r)r�r�r8r�rCr	r9r�r�rHrar[�tupler�r�r��
SIZEOF_INTr�r�)r3Znumfdsr4�maxcmsgs�ignoreflagsr�r�r^r�r��itemr�r�r�rrr�checkRecvmsgFDss$


zSCMRightsTest.checkRecvmsgFDscCs |�d|�|jtt�d��dS)Nr[i()r�r5rOrar�)r3rrr�testFDPassSimple+szSCMRightsTest.testFDPassSimplec
Cs<|�|�tgtjtjt�d|�d����fg�t	t��dS)Nr+r[)
r�r2r�r	r�r�r[r�r�ra)r3rrr�_testFDPassSimple0szSCMRightsTest._testFDPassSimplecCs |�d|�|jtt�d��dS)Nr�i()r�r5rOrar�)r3rrr�testMultipleFDPass9sz SCMRightsTest.testMultipleFDPasscCs|�d�dS)Nr�)r�)r3rrr�_testMultipleFDPass>sz!SCMRightsTest._testMultipleFDPassrdcCs*|�d|�|jtt�t�dt���dS)Nr�)r�r5rOrar�r	rdr�)r3rrr�testFDPassCMSG_SPACEAsz"SCMRightsTest.testFDPassCMSG_SPACEcCs|�d�dS)Nr�)r�)r3rrr�_testFDPassCMSG_SPACEHsz#SCMRightsTest._testFDPassCMSG_SPACEc
Cs0|jd|�|jtt�t�dt��tjd�dS)Nr[r�)r�)	r�r5rOrar�r	r�r�r9)r3rrr�testFDPassCMSG_LENLsz SCMRightsTest.testFDPassCMSG_LENcCs|�d�dS)Nr[)r�)r3rrr�_testFDPassCMSG_LENVsz!SCMRightsTest._testFDPassCMSG_LENr%zskipping, see issue #12958r8zskipping, see issue #22397cCs$|jd|�|jtt�d�dd�dS)Nr�i()r�)r�r5rOrar�)r3rrr�testFDPassSeparateYsz SCMRightsTest.testFDPassSeparatecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dS)Nr�r+)	r�r�r2r�r	r�r�r[ra)r3�fd0�fd1rrr�_testFDPassSeparatecsz!SCMRightsTest._testFDPassSeparatecCs@d}|j||�|jtt�t�t�t�t|��dtj	d�dS)Nr�)r�r�)
r�r5rOrar�r	rdr�r�r9)r3Znum_fdsrrr�testFDPassSeparateMinSpaceqsz(SCMRightsTest.testFDPassSeparateMinSpacecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dS)Nr�r+)	r�r�r2r�r	r�r�r[ra)r3r�r�rrr�_testFDPassSeparateMinSpace~sz)SCMRightsTest._testFDPassSeparateMinSpacec
Csdy|�|g|�}Wn<tk
rN}z|�|jt�|�|g�}Wdd}~XYnX|�|t|��dS)N)r2rr�r�rr�ra)r3r�r�r�rvrrr�sendAncillaryIfPossible�sz%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd|�|jtt�d�tjd�dS)Nri()r�)r�r5rOrar�r	r9)r3rrr�testFDPassEmpty�s
zSCMRightsTest.testFDPassEmptycCs|�ttjtjdfg�dS)Nr�)r�r�r	r�r�)r3rrr�_testFDPassEmpty�s
zSCMRightsTest._testFDPassEmptycCs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�x>|D]6\}}}|�|tj�|�|tj�|�
t|�t�q^WdS)Ni(T)r?rBr[)r5rOrar�r�r8r�rCr	r9rHr�r��
assertLessr�)r3r�r�r^r�r�r�r�rrr�testFDPassPartialInt�sz"SCMRightsTest.testFDPassPartialIntc	Cs4|�ttjtjt�d|jg���dd�fg�dS)Nr+r)r�r�r	r�r�r[�badfdr�)r3rrr�_testFDPassPartialInt�s
z#SCMRightsTest._testFDPassPartialIntc	Cs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�t�d�}xR|D]J\}}}|�|tj�|�|tj
�|�|dt|�t|�|j��qhW|�
t|�d�|�|�dS)Ni(T)r?rBr�r+)r5rOrar�r�r8r�rCr	r9rHr[r�r�r�r�r�)	r3r�r�r^r�r�r�r�r�rrr�testFDPassPartialIntInMiddle�s
 z*SCMRightsTest.testFDPassPartialIntInMiddlec
CsZ|�d�\}}|�ttjtjt�d||jg���dd�ftjtjt�d|g�fg�dS)Nr�r+r)	r�r�r�r	r�r�r[r�r�)r3r�r�rrr�_testFDPassPartialIntInMiddle�sz+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}|�|t�|�||j�|�|g�|j|dtj|d�dS)NT)r?r@rB)r�r�r8r�rCr	r9)r3r4r�r�r�r^r�rrr�checkTruncatedHeader�sz"SCMRightsTest.checkTruncatedHeadercCs"|j|�|jtt��tjd�dS)N)r�)r�r5rOrar�r	r9)r3rrr�testCmsgTruncNoBufSize�sz$SCMRightsTest.testCmsgTruncNoBufSizecCs|�d�dS)Nr[)r�)r3rrr�_testCmsgTruncNoBufSize�sz%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j|�|jtt�d�tjd�dS)Nr)r�)r�r5rOrar�r	r9)r3rrr�testCmsgTrunc0�szSCMRightsTest.testCmsgTrunc0cCs|�d�dS)Nr[)r�)r3rrr�_testCmsgTrunc0�szSCMRightsTest._testCmsgTrunc0cCs|�|�|jtt�d��dS)Nr[)r�r5rOrar�)r3rrr�testCmsgTrunc1�szSCMRightsTest.testCmsgTrunc1cCs|�d�dS)Nr[)r�)r3rrr�_testCmsgTrunc1�szSCMRightsTest._testCmsgTrunc1cCs"|�|�|jtt�td��dS)Nr�)r�r5rOrar�r�)r3rrr�testCmsgTrunc2Int�szSCMRightsTest.testCmsgTrunc2IntcCs|�d�dS)Nr[)r�)r3rrr�_testCmsgTrunc2Int
sz SCMRightsTest._testCmsgTrunc2Intc	Cs(|�|�|jtt�t�d�d��dS)Nrr[)r�r5rOrar�r	r�)r3rrr�testCmsgTruncLen0Minus1
sz%SCMRightsTest.testCmsgTruncLen0Minus1cCs|�d�dS)Nr[)r�)r3rrr�_testCmsgTruncLen0Minus1
sz&SCMRightsTest._testCmsgTruncLen0Minus1cCs�|�|jtt�|�\}}}}|�|t�|�||j�|j|dtj	d�|dkr\|gkr\dS|�t|�d�|d\}}	}
|�|tj
�|�|	tj�|�t|
�|�|�
t|
�|�t�d�}|�|
dt|
�t|
�|j��|�|�dS)NT)r?r@rr[r+)r5rOrar�r�r8r�rCr	r9r�r�rGrHr[r�r�r�)r3�ancbuf�maxdataZmindatar�r�r^r�r�r�r�r�rrr�checkTruncatedArray
s"
z!SCMRightsTest.checkTruncatedArraycCs|jt�d�dd�dS)Nr)r�r�)r�r	r�)r3rrr�testCmsgTruncLen0*
szSCMRightsTest.testCmsgTruncLen0cCs|�d�dS)Nr[)r�)r3rrr�_testCmsgTruncLen0-
sz SCMRightsTest._testCmsgTruncLen0cCs|jt�d�ddd�dS)Nrr[)r�r�)r�r	r�)r3rrr�testCmsgTruncLen0Plus10
sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|�d�dS)Nr�)r�)r3rrr�_testCmsgTruncLen0Plus13
sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jt�t�td�dS)N)r�r�)r�r	r�r�)r3rrr�testCmsgTruncLen16
szSCMRightsTest.testCmsgTruncLen1cCs|�d�dS)Nr�)r�)r3rrr�_testCmsgTruncLen1:
sz SCMRightsTest._testCmsgTruncLen1cCs(|jt�dt�ddtdd�dS)Nr�r[)r�r�)r�r	r�r�)r3rrr�testCmsgTruncLen2Minus1=
sz%SCMRightsTest.testCmsgTruncLen2Minus1cCs|�d�dS)Nr�)r�)r3rrr�_testCmsgTruncLen2Minus1A
sz&SCMRightsTest._testCmsgTruncLen2Minus1N)r[r)r)r)9r6r7r8r�r�r�r3r�r�r�r�r�r�r�r�r	r�r�r�r�r�r�r�rr*r+r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��sl

	
  


	
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��Zd_dd�Zeed	d
dd�dd��Zej
dd ��Zeedd	d
dd�d!d"��Zej
d#d$��Zeejd�eedd	d
dd�d%d&���Zej
d'd(��Zeejd�eedd	d
dd�d)d*���Zej
d+d,��Zd`d-d.�Zeed	d
�d/d0��Zej
d1d2��Zeed	d
�d3d4��Zej
d5d6��Zeed	d
�d7d8��Zej
d9d:��Zeed	d
�d;d<��Z e j
d=d>��Z!eed	d
�d?d@��Z"e"j
dAdB��Z#eed	d
�dCdD��Z$e$j
dEdF��Z%dadGdH�Z&eedd	d
dd�dIdJ��Z'e'j
dKdL��Z(eedd	d
dd�dMdN��Z)e)j
dOdP��Z*eedd	d
dd�dQdR��Z+e+j
dSdT��Z,eedd	d
dd�dUdV��Z-e-j
dWdX��Z.eedd	d
dd�dYdZ��Z/e/j
d[d\��Z0d]S)b�RFC3542AncillaryTestr�rcCs8i}x.|D]&\}}}|�||f|�||||f<q
W|S)N)r�)r3r��dr�r�r�rrr�ancillaryMappingV
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)Nr[T)r?rArBrr+)rOrLr	�IPPROTO_IPV6�IPV6_RECVHOPLIMITr.rYr5rar�r�r8r�rCr9r�r��
IPV6_HOPLIMITr�r�r[r�rGrH)r3�
ancbufsize�maxhopr�r�r�r^r�r�r�r�r7rrr�
checkHopLimit`
s(




z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS)Ni()r�)r�)r3rrr�testRecvHopLimit|
sz%RFC3542AncillaryTest.testRecvHopLimitcCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testRecvHopLimit�
sz&RFC3542AncillaryTest._testRecvHopLimitrdcCs|jt�t�d�dS)N)r�)r�r	rdr�)r3rrr�testRecvHopLimitCMSG_SPACE�
sz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testRecvHopLimitCMSG_SPACE�
sz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cCs|jd|jd�dS)Ni()r�r�)r��	hop_limit)r3rrr�testSetHopLimit�
sz$RFC3542AncillaryTest.testSetHopLimitcCsL|�|jj|jd��|�|�tgtjtj	t
�
d|jg�fg�tt��dS)N)rur+)
r�r.rlrDr�r2r�r	r�r�r[r�ra)r3rrr�_testSetHopLimit�
sz%RFC3542AncillaryTest._testSetHopLimitcCsB|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|�|�}|tjtjf}	|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�|tjtjf}|�t	|�t�t�d�}
|
�|�|�|
dd�|�|
d|�dS)Nr[T)r?rArBr�r+rr�)rOrLr	r�r��IPV6_RECVTCLASSr.rYr5rar�r�r8r�rCr9r��IPV6_TCLASSr�r[r�rGrHr�)r3r�r�r�r�r�r^r�ZancmapZtcdatar7Zhldatarrr�checkTrafficClassAndHopLimit�
s2









z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrrcCs|jdd�dS)Ni()r�)r)r3rrr�testRecvTrafficClassAndHopLimit�
sz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr� _testRecvTrafficClassAndHopLimit�
sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jt�t�dd�dS)Nr�)r�)rr	rdr�)r3rrr�)testRecvTrafficClassAndHopLimitCMSG_SPACE�
sz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�*_testRecvTrafficClassAndHopLimitCMSG_SPACE�
sz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jd�dS)Ni()r�r�)rr�)r3rrr�testSetTrafficClassAndHopLimit�
sz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitcCsd|�|jj|jd��|�|�tgtjtj	t
�
d|jg�ftjtjt
�
d|j
g�fg�tt��dS)N)rur+)r�r.rlrDr�r2r�r	r�rr[�
traffic_classr�r�ra)r3rrr�_testSetTrafficClassAndHopLimit�
sz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jd�dS)Ni()r�r�)rr�)r3rrr�testOddCmsgSize�
sz$RFC3542AncillaryTest.testOddCmsgSizec
Cs�|�|jj|jd��yJ|�tgtjtjt	�	d|j
g���dftjtjt	�	d|j
g�fg�}Wn~tk
r�}z`|�|jt�|�tgtjtjt	�	d|j
g�ftjtjt	�	d|j
g�fg�}|�|tt��Wdd}~XYnXdS)N)rur+r�)r�r.rlrDr2r�r	r�rr[r	r�r�r�rr�r�rr�ra)r3r�rvrrr�_testOddCmsgSizes"z%RFC3542AncillaryTest._testOddCmsgSizecCs�|j�tjtjd�|j��|dkr*dn|f}|j|jtt	�f|��\}}}}|�
|t	�|�||j�|�
|g�|j
|dtj|d�dS)Nr[rT)r?r@rB)rOrLr	r�r�r.rYr5rar�r�r8r�rCr9)r3r�r�r@r�r�r^r�rrr�checkHopLimitTruncatedHeaders


z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N)r�r�)r
r	r9)r3rrrr�,sz+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrrr�7sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nr)r�r�)r
r	r9)r3rrr�testSingleCmsgTrunc0<sz)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSingleCmsgTrunc0Csz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nr[)r�)r
)r3rrr�testSingleCmsgTrunc1Ksz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSingleCmsgTrunc1Osz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dS)Nr�)r�)r
r�)r3rrr�testSingleCmsgTrunc2IntTsz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSingleCmsgTrunc2IntXsz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jt�d�dd�dS)Nrr[)r�)r
r	r�)r3rrr�testSingleCmsgTruncLen0Minus1]sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSingleCmsgTruncLen0Minus1asz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|j�tjtjd�|j��|�|jtt	�t�
t�d�\}}}}|�|t	�|�
||j�|j|dtjd�|�t|�d�|r�|d\}}}|�|tj�|�|tj�|�t|�t�dS)Nr[T)r?r@r)rOrLr	r�r�r.rYr5rar�r�r�r�r8r�rCr9rHr�r�)r3r�r�r^r�r�r�r�rrr�testSingleCmsgTruncInDatafs


"z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSingleCmsgTruncInData|sz/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)Nr[T)r?r@rBrr+r�)rOrLr	r�r�rr.rYr5rar�r�r8r�rCr9r�rr�r�r[r�rGrH)r3r�r�r�r�r^r�r�r�r�r7rrr�checkTruncatedSecondHeader�s(






z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jt�t�tjd�dS)N)r�)rr	rdr�r9)r3rrr�testSecondCmsgTrunc0�sz)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSecondCmsgTrunc0�sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|�t�t�d�dS)Nr[)rr	rdr�)r3rrr�testSecondCmsgTrunc1�sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSecondCmsgTrunc1�sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|�t�t�dt�dS)Nr�)rr	rdr�)r3rrr�testSecondCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSecondCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|�t�t�t�d�d�dS)Nrr[)rr	rdr�r�)r3rrr�testSecondCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSecondCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
CsT|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�t�t�t�
t�d�\}}}}|�|t
�|�||j�|j|dtjd�tjtjh}|�d�\}}}|�|tj�|�|�|�t	|�t�t�d�}	|	�|�|�|	dd�|�|	dd�|�rD|�d�\}}}|�|tj�|�|�|�t	|�t�|�|g�dS)Nr[T)r?r@rr+r�)rOrLr	r�r�rr.rYr5rar�rdr�r�r�r8r�rCr9rr��pop�remover[r�rGrHr�)
r3r�r�r^r�Z
cmsg_typesr�r�r�r7rrr�testSecomdCmsgTruncInData�s4





"



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$|�|jj|jd��|�t�dS)N)ru)r�r.rlrDr0r�)r3rrr�_testSecomdCmsgTruncInData�sz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r�r)r�r)r)r)1r6r7r8r�r	r�r�r�r	r�r�r�r�r�r�rrrrrrrr
rrr
r�r�rrrrrrrrrrrrrrrrrrr r#r$rrrrr�E
sp



	
#






 




$r�c@seZdZdS)�SendrecvmsgUDPTestBaseN)r6r7r8rrrrr%�sr%r�c@seZdZdS)�SendmsgUDPTestN)r6r7r8rrrrr&�sr&r�c@seZdZdS)�RecvmsgUDPTestN)r6r7r8rrrrr'sr'rFc@seZdZdS)�RecvmsgIntoUDPTestN)r6r7r8rrrrr(sr(c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs |�|dd�|dd��dS)Nr)r�)r3r6r7rrrr8sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)r6r7r8r8rrrrr)sr)zIPv6 required for this test.r�rc@seZdZdS)�SendmsgUDP6TestN)r6r7r8rrrrr*sr*c@seZdZdS)�RecvmsgUDP6TestN)r6r7r8rrrrr+sr+c@seZdZdS)�RecvmsgIntoUDP6TestN)r6r7r8rrrrr, sr,r�c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestN)r6r7r8rrrrr-&sr-c@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestN)r6r7r8rrrrr..sr.c@seZdZdS)�SendrecvmsgTCPTestBaseN)r6r7r8rrrrr/8sr/c@seZdZdS)�SendmsgTCPTestN)r6r7r8rrrrr0<sr0c@seZdZdS)�RecvmsgTCPTestN)r6r7r8rrrrr1@sr1c@seZdZdS)�RecvmsgIntoTCPTestN)r6r7r8rrrrr2Esr2c@seZdZdS)�SendrecvmsgSCTPStreamTestBaseN)r6r7r8rrrrr3Ksr3r-r.r�c@seZdZdS)�SendmsgSCTPStreamTestN)r6r7r8rrrrr4Psr4cseZdZ�fdd�Z�ZS)�RecvmsgSCTPStreamTestc
sRytt|���Wn:tk
rL}z|jtjkr2�|�d�Wdd}~XYnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r;r5r�rr��ENOTCONNrM)r3rv)rBrrr�Zsz$RecvmsgSCTPStreamTest.testRecvmsgEOF)r6r7r8r�rErr)rBrr5Usr5cseZdZ�fdd�Z�ZS)�RecvmsgIntoSCTPStreamTestc
sRytt|���Wn:tk
rL}z|jtjkr2�|�d�Wdd}~XYnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r;r7r�rr�r6rM)r3rv)rBrrr�gsz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOF)r6r7r8r�rErr)rBrr7bsr7c@seZdZdS)�SendrecvmsgUnixStreamTestBaseN)r6r7r8rrrrr8psr8r�c@seZdZdS)�SendmsgUnixStreamTestN)r6r7r8rrrrr9tsr9c@seZdZdS)�RecvmsgUnixStreamTestN)r6r7r8rrrrr:ysr:c@seZdZdS)�RecvmsgIntoUnixStreamTestN)r6r7r8rrrrr;sr;r�r�c@seZdZdS)�RecvmsgSCMRightsStreamTestN)r6r7r8rrrrr<�sr<c@seZdZdS)�RecvmsgIntoSCMRightsStreamTestN)r6r7r8rrrrr=�sr=csDeZdZ�fdd�ZdZeed�r0dZdd�ZndZd	d�Z�Z	S)
�InterruptedTimeoutBasecs2t���t�tjdd��}|�tjtj|�dS)NcSsddS)Nr[rr)Zsignumr�rrrr��r�z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)r;r4rprqrC)r3Zorig_alrm_handler)rBrrr4�s

zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCst�tj|�dS)N)rpr?�ITIMER_REAL)r3�secondsrrr�setAlarm�szInterruptedTimeoutBase.setAlarmr�cCst�|�dS)N)rprj)r3rArrrrB�s)
r6r7r8r4rurrp�
alarm_timerBrErr)rBrr>�s

r>�siginterruptrjr?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)�InterruptedRecvTimeoutTestcst���|j�|j�dS)N)r;r4r/rNru)r3)rBrrr4�s
z InterruptedRecvTimeoutTest.setUpc	OsBz0|�|j�|�t��}|||�WdQRXWd|�d�XdS)Nr)rBrCr�rr)r3rr@rAr�rrr�checkInterruptedRecv�s
z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|�|jjd�dS)Ni)rFr/r�)r3rrr�testInterruptedRecvTimeout�sz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs|�|jjtd��dS)Ni)rFr/�	recv_intorC)r3rrr�testInterruptedRecvIntoTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|�|jjd�dS)Ni)rFr/r�)r3rrr�testInterruptedRecvfromTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs|�|jjtd��dS)Ni)rFr/�
recvfrom_intorC)r3rrr�"testInterruptedRecvfromIntoTimeout�sz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|�|jjd�dS)Ni)rFr/r�)r3rrr�testInterruptedRecvmsgTimeout�sz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrFcCs|�|jjtd�g�dS)Ni)rFr/rFrC)r3rrr�!testInterruptedRecvmsgIntoTimeout�sz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)r6r7r8r4rFrGrIrJrLr�r	rMrNrErr)rBrrE�s
rEcsteZdZ�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)r;r4r�r�rCrr=ZThread�	doConnect�startr/r�r�r�rNru)r3Z
cli_threadr�)rBrrr4�s

z InterruptedSendTimeoutTest.setUpcCs|j�|j�dS)N)r�r�r�)r3rrrrQ�sz$InterruptedSendTimeoutTest.doConnectc	OsHz6|�t��"}x|�|j�|||�qWWdQRXWd|�d�XdS)Nr)r�rrrBrC)r3rr@rAr�rrr�checkInterruptedSend�sz/InterruptedSendTimeoutTest.checkInterruptedSendr.r�cCs|�|jjd�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rSr�r�)r3rrr�testInterruptedSendTimeout	sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|�|jjd|j�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rSr�r�r�)r3rrr�testInterruptedSendtoTimeout
sz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs|�|jjdg�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rSr�r�)r3rrr�testInterruptedSendmsgTimeoutsz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)r6r7r8r4rQrSrZrequires_mac_verrTrUr�r	rVrErr)rBrrO�s	
	
rOc@seZdZdd�Zdd�ZdS)�
TCPCloserTestcCsh|j��\}}|��|j}t�|gggd�\}}}|�||g�|�|�d�d�|��|��dS)Ng�?r[r�)r/r�rr|rr�r�)r3r�r��sdrr�r�rrr�	testCloseszTCPCloserTest.testClosecCs |j�t|jf�t�d�dS)Ng�?)r|r�r�r1r�r�)r3rrr�
_testClose+szTCPCloserTest._testCloseN)r6r7r8rYrZrrrrrWs
rWc@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestrzcCstj||d�dS)N)r{)r�r<)r3r{rrrr<2szBasicSocketPairTest.__init__cCs\|�|tj�ttd�r*|�|jtj�n|�|jtj�|�|jtj�|�|j	d�dS)Nr�r)
r�r	rr�r�r�r-r�r.r�)r3r)rrr�_check_defaults5s
z#BasicSocketPairTest._check_defaultscCs|�|j�dS)N)r\r|)r3rrr�
_testDefaults>sz!BasicSocketPairTest._testDefaultscCs|�|j�dS)N)r\r/)r3rrr�testDefaultsAsz BasicSocketPairTest.testDefaultscCs|j�d�}|�|t�dS)Ni)r/r�r�r�)r3r�rrrr
DszBasicSocketPairTest.testRecvcCs|j�t�dS)N)r|r�r�)r3rrrrHszBasicSocketPairTest._testRecvcCs|j�t�dS)N)r/r�r�)r3rrr�testSendKszBasicSocketPairTest.testSendcCs|j�d�}|�|t�dS)Ni)r|r�r�r�)r3r�rrr�	_testSendNszBasicSocketPairTest._testSendN)rz)r6r7r8r<r\r]r^r
rr_r`rrrrr[0s
	r[c@s�eZdZd$dd�Zdd�Zdd�Zejdd	��Ze�e�Z	e
�ee
d
�d�e�dd
d�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)%�NonBlockingTCPTestsrzcCst��|_tj||d�dS)N)r{)r=r`�eventryr<)r3r{rrrr<Us
zNonBlockingTCPTests.__init__cCs�|j�d�|�|j���|�|j���tr@|�t|j��|j�d�|�|j��d�|�	|j���tr�|�	t|j��|j�
d�|�|j���tr�|�t|j��|j�
d�|�	|j���|�|j��d�tr�|�	t|j��|j�
d�|�|j���|�|j��d�t�r8|�	t|j��|j�
d�|�	|j���t�rj|�	t|j��t��}y|j��Wnt
k
�r�YnXt��}|�||dkd�dS)NTFgrr.g�?z Error setting non-blocking mode.)r/r�rhr0r��getblockingrr*r�rIrNr�r�r)r3rR�endrrr�testSetBlockingYsFz#NonBlockingTCPTests.testSetBlockingcCsdS)Nr)r3rrr�_testSetBlocking�sz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|�d�|j�d�|�|j��d�|j�|jd�|�|j���dS)Nrzneeds UINT_MAX < ULONG_MAXFgr[)	rr#Z	ULONG_MAXrMr/r�r�r0rh)r3rrrr�testSetBlocking_overflow�s
z,NonBlockingTCPTests.testSetBlocking_overflowr�ztest needs socket.SOCK_NONBLOCKr���cCs�|j��t�tjtjtjB�|_|�|j���|�|j�	�d�t
�|j�|_|j�
�t��}y|j��Wntk
r�YnXt��}|�||dkd�dS)Nrg�?z&Error creating with non-blocking mode.)r/rr	r-r.r�rIrcr�r0rr0r1r2r�r�rr�)r3rRrdrrr�testInitNonBlocking�s

z'NonBlockingTCPTests.testInitNonBlockingcCsdS)Nr)r3rrr�_testInitNonBlocking�sz(NonBlockingTCPTests._testInitNonBlockingc	CsH|j�d�z |j��\}}|�tt��}Wd|��|j�d�XdS)Nr.)r/rNr�r�rar�r)r3r�r��messagerrr�testInheritFlags�sz$NonBlockingTCPTests.testInheritFlagscCs6t�d�|j�t|jf�t�d�|j�t�dS)Ng�������?g�?)r�r�r|r�r�r1r�r�)r3rrr�_testInheritFlags�s

z%NonBlockingTCPTests._testInheritFlagsc	Cs�|j�d�|�t��|j��\}}WdQRX|j��t�|jgggt�\}}}|j|krh|�	d�|j��\}}|�
|j�|�|�
��dS)Nrz'Error trying to do accept after select.)r/r�r��BlockingIOErrorr�rbrYr�MAIN_TIMEOUTr�rCrrhr0)r3r�r�rr�r�rrr�
testAccept�s


zNonBlockingTCPTests.testAcceptcCs |j��|j�t|jf�dS)N)rbrlr|r�r�r1)r3rrr�_testAccept�s
zNonBlockingTCPTests._testAcceptcCs|j��\}}|��dS)N)r/r�r)r3r�r�rrr�testConnect�szNonBlockingTCPTests.testConnectcCs"|j�d�|j�t|jf�dS)Nr.)r|rNr�r�r1)r3rrr�_testConnect�sz NonBlockingTCPTests._testConnectc	Cs�|j��\}}|�|j�|�d�|�t��|�tt	��}WdQRX|j
��t�|gggt
�\}}}||kr||�d�|�tt	��}|�|t	�dS)Nrz0Error during select call to non-blocking socket.)r/r�rCrr�r�ror�rar�rbrYrrpr�r�)r3r�r�r�rr�r�rrrr
�s


zNonBlockingTCPTests.testRecvcCs,|j�t|jf�|j��|j�t�dS)N)r|r�r�r1rbrlrsr�)r3rrrr�s
zNonBlockingTCPTests._testRecvN)rz)r6r7r8r<rerfrr�rgZ_testSetBlocking_overflowr�r�rr	�requires_linux_versionrjrkrmrnrqrrrsrtr
rrrrrraSs"
2
rac@s�eZdZdZdZdZdZdZeZ	dZ
eZd:dd	�Zd
d�Z
dd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z d2d3�Z!d4d5�Z"d6d7�Z#d8d9�Z$dS);�FileObjectClassTestCaserzutf-8�strictNrr�rzcCstj||d�dS)N)r{)r�r<)r3r{rrrr<sz FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_t�|�|jj|j	|j
|j|j|j
d�|_dS)NcSsg|]}t���qSr)r=r`)r�r+rrrr�!sz1FileObjectClassTestCase.setUp.<locals>.<listcomp>r�)�encoding�errors�newline)r��evt1�evt2�
serv_finished�cli_finishedr�r4r�r|�	read_moderNrxryrz�	read_file)r3rrrr4s"
zFileObjectClassTestCase.setUpcCs6|j��|j��|�|jj�d|_t�|�dS)N)r}rYr�rr��closedr�r5)r3rrrr5)s


z FileObjectClassTestCase.tearDowncCs0t�|�|jj|j|j|j|j|jd�|_	dS)N)rxryrz)
r�rqr�r|�
write_moderNrxryrz�
write_file)r3rrrrq0s
z#FileObjectClassTestCase.clientSetUpcCs6|j��|j��|�|jj�d|_t�|�dS)N)r~rYr�rr�r�r�rt)r3rrrrt8s


z&FileObjectClassTestCase.clientTearDownc	Csd|j�d�|j�d�|�tj|jjd�|�t��}|j�d�WdQRX|�dt	|j
��dS)Nr[rz!cannot read from timed out object)r�rNr�rr�r	rurr�r�r�)r3Zctxrrr�testReadAfterTimeout?sz,FileObjectClassTestCase.testReadAfterTimeoutcCs.|j�|jdd��|j��|j��dS)Nrr)r�r��	write_msg�flushr}rl)r3rrr�_testReadAfterTimeoutKs
z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|j�t|j�d�}|j�d�}||}|�||j�dS)Nr)r�rra�read_msgr�)r3�	first_segZ
second_segr�rrr�
testSmallReadPsz%FileObjectClassTestCase.testSmallReadcCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�_testSmallReadWsz&FileObjectClassTestCase._testSmallReadcCs|j��}|�||j�dS)N)r�rr�r�)r3r�rrr�testFullRead[s
z$FileObjectClassTestCase.testFullReadcCs|j�|j�|j��dS)N)r�r�r�r)r3rrr�
_testFullRead`sz%FileObjectClassTestCase._testFullReadcCs>t|j��}x|j�d�}|s P||7}qW|�||j�dS)Nr[)r�r�r�rr�)r3rI�charrrr�testUnbufferedReaddsz*FileObjectClassTestCase.testUnbufferedReadcCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�_testUnbufferedReadnsz+FileObjectClassTestCase._testUnbufferedReadcCs|j��}|�||j�dS)N)r��readliner�r�)r3�linerrr�testReadliners
z$FileObjectClassTestCase.testReadlinecCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�
_testReadlinewsz%FileObjectClassTestCase._testReadlinecCs&|j��|j��}|�||j�dS)N)r�rr�rr�r�)r3r�rrr�testCloseAfterMakefile{s

z.FileObjectClassTestCase.testCloseAfterMakefilecCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�_testCloseAfterMakefile�sz/FileObjectClassTestCase._testCloseAfterMakefilecCs@|j��|j�tt��}t|jt�r.|�	�}|�
||j�dS)N)r�rr�r�rar�r�r�r��decoder�)r3r�rrr�testMakefileAfterMakefileClose�s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�_testMakefileAfterMakefileClose�sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|�|jj�dS)N)r�r�r�)r3rrr�testClosedAttr�sz&FileObjectClassTestCase.testClosedAttrcCs|�|jj�dS)N)r�r�r�)r3rrr�_testClosedAttr�sz'FileObjectClassTestCase._testClosedAttrcCs,|�|jj|j�|�|jj|j���dS)N)r�r�r�rr�r�r�)r3rrr�testAttributes�sz&FileObjectClassTestCase.testAttributescCs,|�|jj|j�|�|jj|j���dS)N)r�r�r�r�r�r�r�)r3rrr�_testAttributes�sz'FileObjectClassTestCase._testAttributescCs8|j��|�t|jj�|j��|�t|jj�dS)N)r�rr�r2r�r�rr�)r3rrr�
testRealClose�s

z%FileObjectClassTestCase.testRealClosecCsdS)Nr)r3rrr�_testRealClose�sz&FileObjectClassTestCase._testRealClose)rz)%r6r7r8rNrxryrzrr�r�r�r�r<r4r5rqrtr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrvsB


rvc@s`eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�!UnbufferedFileObjectClassTestCasercCsL|j��}|�|d|j�|j�dd�|_|j��}|�|d|j�dS)NsA. rrsB. )r�r�r�r�r�r|)r3r�rrr�testUnbufferedReadline�s


z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|j�d|j�|j�d|j�|j��dS)NsA. sB. )r�r�r�r�)r3rrr�_testUnbufferedReadline�sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|j��|j�d�}|�||j�|j��|�t|jjd�dS)Ni)r�rr�r�r�r�r�r)r3r�rrr�testMakefileClose�s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�_testMakefileClose�sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t�|j�}|j��t�|j�}|�|d|�dS)Nr[)rr
r�r�rr�)r3Zrefcount_beforeZrefcount_afterrrr�testMakefileCloseSocketDestroy�s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdS)Nr)r3rrr�_testMakefileCloseSocketDestroy�szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|j�d�|�|j�td��d�|�|j�t|j�d�d�|j	�
�|j�d�|j�t|j�d�}|dkr�t
�d�|j�t|j�d�}td�}|j�|�}|�|d�||d|�}|�||j�|�|j�td��d�|�|j�d�d�dS)NFr.rg�?g�?rr[)r�r�r�r��readintorCrrar�r{rYr|rlr�r�)r3r�rIr�r�rrr�testSmallReadNonBlocking�s 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|j�d�|j�|j�|j��|j��|j�d�dS)Ng�?g@)	r{rlr�r�r�r�r|rYr})r3rrr�_testSmallReadNonBlocking�s


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|j�d�|jr|�|j�dS)Ng@)r~rl�serv_skippedrM)r3rrr�testWriteNonBlocking�sz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCsvd|_|j�d�dtj}d}|j�|�}|�|d�x8t|�D]&}|j�|�}|dkr\P|�|d�qBWd|_dS)NFror.rz$failed to saturate the socket buffer)	r�r�r�rrtr�r�rr�)r3ZBIGZLIMITr�r+rrr�_testWriteNonBlocking�s
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)r6r7r8rNr�r�r�r�r�r�r�r�r�r�rrrrr��s
		r�c@seZdZdZdS)�#LineBufferedFileObjectClassTestCaser[N)r6r7r8rNrrrrr�sr�c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�N)r6r7r8rNrrrrr�sr�c@s&eZdZdZe�d�ZdZeZdZ	dS)�"UnicodeReadFileObjectClassTestCaserzutf-8r�r�N)
r6r7r8rr�r�r�r�r�rzrrrrr�s

r�c@s&eZdZdZeZdZe�d�ZdZ	dS)�#UnicodeWriteFileObjectClassTestCaserr�zutf-8r�N)
r6r7r8rr�r�r�r�r�rzrrrrr�)s

r�c@s,eZdZdZe�d�ZdZe�d�ZdZ	dS)�'UnicodeReadWriteFileObjectClassTestCaserzutf-8r�r�N)
r6r7r8rr�r�r�r�r�rzrrrrr�3s


r�c@seZdZdd�ZdS)�NetworkConnectionTestcCst�t|jf�|_|j|_dS)N)r	�create_connectionr�r1r|r�)r3rrrrq@sz!NetworkConnectionTest.clientSetUpN)r6r7r8rqrrrrr�=sr�c@seZdZdS)�
BasicTCPTest2N)r6r7r8rrrrr�Fsr�c@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGst�d��dS)Nz	timed out)r	ru)r3r@rrrr�Msz,NetworkConnectionNoServer.MockSocket.connectN)r6r7r8r�rrrr�
MockSocketLsr�ccs&tj}|jt_z
dVWd|t_XdS)N)r	r�)r3Z
old_socketrrr�mocked_socket_modulePs

z.NetworkConnectionNoServer.mocked_socket_modulec	Cs^t��}t�tjtj�}|�|j�|�t��}|�	t
|f�WdQRX|�|jj
t
j�dS)N)rrFr	r-r.rCrr�rr�r�r�r�r�ZECONNREFUSED)r3r1r|r�rrr�test_connectZsz&NetworkConnectionNoServer.test_connectc	CsHt��}|�t��}t�t|f�WdQRXt��}|�|j	j
|�dS)N)rrFr�rr	r�r�Zget_socket_conn_refused_errsr�r�r�)r3r1r�Zexpected_errnosrrr�test_create_connectionbs
z0NetworkConnectionNoServer.test_create_connectionc
Cs>|���,|�tj��t�tdf�WdQRXWdQRXdS)Ni�)r�r�r	rur�r�)r3rrr�test_create_connection_timeoutzs
z8NetworkConnectionNoServer.test_create_connection_timeoutN)r6r7r8r	r��
contextlib�contextmanagerr�r�r�r�rrrrr�Js

r�c@sveZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestrzcCstj||d�t�|�dS)N)r{)r,r<rS)r3r{rrrr<�sz(NetworkConnectionAttributesTest.__init__cCst��|_dS)N)rrF�source_port)r3rrrrq�sz+NetworkConnectionAttributesTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrt�s
z.NetworkConnectionAttributesTest.clientTearDowncCs|j��\}}|��dS)N)r/r�r)r3r�r�rrr�_justAccept�sz+NetworkConnectionAttributesTest._justAcceptcCs8tjt|jfdd�|_|�|jj�|�|jjd�dS)N�)rur�)	r	r�r�r1r|rCrr�r�)r3rrr�_testFamily�sz+NetworkConnectionAttributesTest._testFamilycCsHtjt|jfdd|jfd�|_|�|jj�|�|j�	�d|j�dS)Nr�r�)ruZsource_addressr[)
r	r�r�r1r�r|rCrr�r�)r3rrr�_testSourceAddress�sz2NetworkConnectionAttributesTest._testSourceAddressc	Csd|�t��dk�t�d�z$t�t|jf�|_|�|jj	�Wdt�d�X|�
|j��d�dS)Nr�)r�r	r/r1r�r�r1r|rCrr�r0)r3rrr�_testTimeoutDefault�s
z3NetworkConnectionAttributesTest._testTimeoutDefaultc	Csh|�t��dk�t�d�z(tjt|jfdd�|_|�|jj	�Wdt�d�X|�
|j��d�dS)Nr�)ru)r�r	r/r1r�r�r1r|rCrr�r0)r3rrr�_testTimeoutNone�s
z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd�|_|�|j��d�dS)Nr�)ru)r	r�r�r1r|r�r0)r3rrr�_testTimeoutValueNamed�sz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8t�t|jfd�|_|�|jj�|�|j��d�dS)Nr�)	r	r�r�r1r|rCrr�r0)r3rrr�_testTimeoutValueNonamed�sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)rz)r6r7r8r<rqrtr�Z
testFamilyr�ZtestSourceAddressr�ZtestTimeoutDefaultr�ZtestTimeoutNoner�ZtestTimeoutValueNamedr�ZtestTimeoutValueNonamedr�rrrrr��s 
r�c@sBeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestrzcCstj||d�t�|�dS)N)r{)r,r<rS)r3r{rrrr<�sz'NetworkConnectionBehaviourTest.__init__cCsdS)Nr)r3rrrrq�sz*NetworkConnectionBehaviourTest.clientSetUpcCs|j��d|_t�|�dS)N)r|rrSrt)r3rrrrt�s
z-NetworkConnectionBehaviourTest.clientTearDowncCs2|j��\}}|�|j�t�d�|�d�dS)Nrsdone!)r/r�rCrr�r�r�)r3r�r�rrr�testInsideTimeout�s
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0t�t|jf�|_}|�d�}|�|d�dS)NrSsdone!)r	r�r�r1r|r�r�)r3r)r�rrr�_testInsideTimeout�s
z1NetworkConnectionBehaviourTest._testInsideTimeoutcs4tjt|jfdd�|_�|�tj�fdd��dS)Nr[)rucs
��d�S)NrS)r�r)r)rrr��r�zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r	r�r�r1r|r�ru)r3r)r)r�_testOutsideTimeout�sz2NetworkConnectionBehaviourTest._testOutsideTimeoutN)rz)
r6r7r8r<rqrtr�ZtestOutsideTimeoutr�r�rrrrr��s
r�c@s6eZdZdd�Zdd�Ze�eed�d�dd��Z	d	S)
�TCPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j��dS)Ng�?)r/rNr�)r@rA)r3rr�
raise_timeout�sz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP))r�r	ru)r3r�r)r3r�testTCPTimeout�s
zTCPTimeoutTest.testTCPTimeoutcCs|d}y|j�d�|j��}WnJtjk
r>|�d�Yn,tk
rTd}Yn|�d�YnX|sx|�d�dS)NFgz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r/rNr�r	rur�r)r3�ok�foorrr�testTimeoutZero�szTCPTimeoutTest.testTimeoutZerorjztest needs signal.alarm()c
s
|j�d�Gdd�dt���fdd�}t�tj|�}z�y�z�yt�d�|j��}Wn`tjk
rt|�	d�YnL�k
r�Yn:|�	dt
��dd�t�
�f�YnX|�	d	�Wdt�d
�XWn�k
r�|�	d�YnXWdt�tj|�XdS)Ng@c@seZdZdS)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmN)r6r7r8rrrr�Alarmsr�cs��dS)Nr)rpr�)r�rr�
alarm_handlersz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtrzgot Alarm in wrong place)r/rNr>rprqrjr�r	rur�r�exc_info�	traceback�
format_exc)r3r�rwr�r)r�r�testInterruptedTimeout�s(
$z%TCPTimeoutTest.testInterruptedTimeoutN)
r6r7r8r�r�r�r�rrpr�rrrrr��sr�c@seZdZdd�Zdd�ZdS)�UDPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j�d�dS)Ng�?i)r/rNr�)r@rA)r3rrr�"sz4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP))r�r	ru)r3r�r)r3r�testUDPTimeout!s
zUDPTimeoutTest.testUDPTimeoutcCs~d}y|j�d�|j�d�}WnJtjk
r@|�d�Yn,tk
rVd}Yn|�d�YnX|sz|�d�dS)NFgiz%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)z1recv() returned success when we did not expect it)r/rNr�r	rur�r)r3r�r�rrrr�(szUDPTimeoutTest.testTimeoutZeroN)r6r7r8r�r�rrrrr�sr�c@seZdZdd�Zdd�ZdS)�TestExceptionscCsJ|�ttt��|�ttjt��|�ttjt��|�ttjt��dS)N)r��
issubclassrr>r	r�r�ru)r3rrr�testExceptionTree8sz TestExceptions.testExceptionTreec	Csbt�tjtjd�}t�tjtjd|���}|��|�|j�|�t��|�	d�WdQRXdS)NrF)
r	r-r.r�rrCr�r�rr�)r3Zsock0r)rrr�test_setblocking_invalidfd>sz)TestExceptions.test_setblocking_invalidfdN)r6r7r8r�r�rrrrr�6sr�r$zLinux specific testc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TestLinuxAbstractNamespace�lcCs�d}t�tjtj��z}|�|�|��t�tjtj��L}|�|���|��d�&}|�|��|�|�|�	�|�WdQRXWdQRXWdQRXdS)Nspython-test-hello�r)
r	r�r.rKr2r�r�r�r�Zgetpeername)r3�address�s1r�Zs3rrr�testLinuxAbstractNamespacePs
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec	CsLdd|jd}t�tjtj�� }|�|�|�|��|�WdQRXdS)Nr��hr[)�
UNIX_PATH_MAXr	r�r.rKr�r�)r3r�rrrr�testMaxName[s
z&TestLinuxAbstractNamespace.testMaxNamec	Cs>dd|j}t�tjtj��}|�t|j|�WdQRXdS)N��h)r�r	r�r.r�rrK)r3r�rrrr�testNameOverflowasz+TestLinuxAbstractNamespace.testNameOverflowcCs>t�tjtj�}z|�d�|�|��d�Wd|��XdS)Nz
pythontests
pythontest)r	r�r.rKr�r�r)r3rrrr�testStrNamefs

z&TestLinuxAbstractNamespace.testStrNamec	Cs>t�tjtj��$}|�td��|�|��d�WdQRXdS)Ns
pythontest)r	r�r.rKrCr�r�)r3rrrr�testBytearrayNameosz,TestLinuxAbstractNamespace.testBytearrayNameN)	r6r7r8r�r�r�r�r�r�rrrrr�Ks	r�ztest needs socket.AF_UNIXc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestUnixDomaincCst�tjtj�|_dS)N)r	r�r.r))r3rrrr4xszTestUnixDomain.setUpcCs|j��dS)N)r)r)r3rrrr5{szTestUnixDomain.tearDownc
Cs:y
t�|�Stk
r4|�d�|t����YnXdS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r'�fsencoderdrMr�r�getfilesystemencoding)r3r�rrr�encoded~s
zTestUnixDomain.encodedc
CsXyt�||�WnBtk
rR}z$t|�dkr@|�d�|��n�Wdd}~XYnXdS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rr�rr�rMr�)r3r)r�rvrrrrK�s
zTestUnixDomain.bindcCs|�|j��d�dS)N)r�N)r�r)r�)r3rrr�testUnbound�szTestUnixDomain.testUnboundcCs@tj�tj�}|�|j|�|�tj|�|�	|j�
�|�dS)N)r'r��abspathr�TESTFNrKr)rCr�r�r�)r3r�rrr�testStrAddr�szTestUnixDomain.testStrAddrcCsFtj�tj�}|�|j|�|��|�tj	|�|�
|j��|�dS)N)r'r�r�rr�rKr)r�rCr�r�r�)r3r�rrr�
testBytesAddr�szTestUnixDomain.testBytesAddrcCsRtj�tj�}|�|�}|�|j|�dd��|�	tj
|�|�|j��|�dS)N�ascii�surrogateescape)
r'r�r�rZTESTFN_UNICODEr�rKr)r�rCr�r�r�)r3r�rfrrr�testSurrogateescapeBind�s

z&TestUnixDomain.testSurrogateescapeBindcCsTtjdkr|�d�tj�tj�}|�|j|�|�tj	|�|�
|j��|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLErMr'r�r�rKr)rCr�r�r�)r3r�rrr�testUnencodableAddr�s

z"TestUnixDomain.testUnencodableAddrN)r6r7r8r4r5r�rKr�r�r�r�r�rrrrr�us	r�c@s�eZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
dd�Zdd�ZeZ
dd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestrzcCstj||d�dS)N)r{)r�r<)r3r{rrrr<�szBufferIOTest.__init__cCsZt�ddgtt��}|j�|�}|�|tt��|��}|dtt��}|�|t�dS)NrZr)r[rar�r�rHr�r�)r3rIr�r�rrr�testRecvIntoArray�szBufferIOTest.testRecvIntoArraycCstt�}|j�|�dS)N)r�r�r�r�)r3rIrrr�_testRecvIntoArray�szBufferIOTest._testRecvIntoArraycCsDtd�}|j�|�}|�|tt��|dtt��}|�|t�dS)Ni)rCr�rHr�rar�)r3rIr�r�rrr�testRecvIntoBytearray�s
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|j�t|��}|�|tt��|dtt��}|�|t�dS)Ni)rCr�rHr�r�rar�)r3rIr�r�rrr�testRecvIntoMemoryview�s
z#BufferIOTest.testRecvIntoMemoryviewcCs^t�ddgtt��}|j�|�\}}|�|tt��|��}|dtt��}|�|t�dS)NrZr)r[rar�r�rKr�r�)r3rIr�r�r�rrr�testRecvFromIntoArray�sz"BufferIOTest.testRecvFromIntoArraycCstt�}|j�|�dS)N)r�r�r�r�)r3rIrrr�_testRecvFromIntoArray�sz#BufferIOTest._testRecvFromIntoArraycCsHtd�}|j�|�\}}|�|tt��|dtt��}|�|t�dS)Ni)rCr�rKr�rar�)r3rIr�r�r�rrr�testRecvFromIntoBytearray�s
z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|j�t|��\}}|�|tt��|dtt��}|�|t�dS)Ni)rCr�rKr�r�rar�)r3rIr�r�r�rrr�testRecvFromIntoMemoryview�s
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|�t|jj|d�dS)NrJi)rCr�r2r�rK)r3rIrrr�testRecvFromIntoSmallBuffer�sz(BufferIOTest.testRecvFromIntoSmallBuffercCs|j�t�dS)N)r�r�r�)r3rrr�_testRecvFromIntoSmallBuffersz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|j�|�|j�|d�dS)Nr)rCr�rK)r3rIrrr�testRecvFromIntoEmptyBuffersz(BufferIOTest.testRecvFromIntoEmptyBufferN)rz)r6r7r8r<r�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�r�Z_testRecvFromIntoBytearrayr�Z_testRecvFromIntoMemoryviewrrrZ_testRecvFromIntoEmptyBufferrrrrr��s"
r�i�����c
Csfttd�sdSytd�}Wntttfk
r4dSX|�"x|D]}|�d�rBdSqBWWdQRXdS)N�AF_TIPCFz
/proc/modulesztipc T)rr	r
�FileNotFoundError�IsADirectoryError�PermissionErrorr+)rr�rrr�isTipcAvailables


r	z6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZdd�ZdS)�TIPCTestcCs�t�tjtj�}t�tjtj�}|�|j�|�|j�|�tjtjd�tjt	t
tf}|�|�tj
t	t
ttt
d�df}|�t|�|�d�\}}|�|��|�|�|t�dS)Nr[r�ri)r	rr�rCrrLr�r��TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERrK�TIPC_ADDR_NAMErr�r�r�r�r�)r3r�r|�srvaddrZsendaddrr�Zrecvaddrrrr�testRDM)s
zTIPCTest.testRDMN)r6r7r8rrrrrr
&sr
c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�TIPCThreadableTestrzcCstjj||d�t�|�dS)N)r{)r�r�r<rS)r3r{rrrr<AszTIPCThreadableTest.__init__cCs�t�tjtj�|_|�|jj�|j�tjtjd�tj	t
ttf}|j�
|�|j��|��|j��\|_|_|�|jj�dS)Nr[)r	rr.r�rCrrLr�r�rrr
rrKr2rZr�r�r�)r3rrrrr4Es
zTIPCThreadableTest.setUpcCsdt�d�t�tjtj�|_|�|jj�tjt	t
ttt
d�df}|j�
|�|j��|_dS)Ng�������?r�r)r�r�r	rr.r|rCrrrr
rrr�r��cliaddr)r3r�rrrrqQs
zTIPCThreadableTest.clientSetUpcCs,|j�d�}|�|t�|�|j|j�dS)Ni)r�r�r�r�rr�)r3r�rrrr�]szTIPCThreadableTest.testStreamcCs|j�t�|j��dS)N)r|r�r�r)r3rrrr�bszTIPCThreadableTest._testStreamN)rz)r6r7r8r<r4rqr�r�rrrrr>s

rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestc	Cs�t���}|�|j�WdQRX|�|j�t���}|��WdQRX|�|j�t���}|�t|jd�WdQRX|�|j�dS)Nsfoo)r	rIr%r�rr�rrs)r3r)rrr�_testSocketClassis


z$ContextManagersTest._testSocketClasscCs2|j��\}}|�|j�|�d�}|�|�dS)Ni)r/r�rCrr�rs)r3r�r�r�rrr�testCreateConnectionBasews
z,ContextManagersTest.testCreateConnectionBasec	CsX|j��}t�|��.}|�|j�|�d�|�|�d�d�WdQRX|�	|j�dS)Nsfooi)
r/r�r	r�rIr%rsr�r�r�)r3r�r)rrr�_testCreateConnectionBase}s

z-ContextManagersTest._testCreateConnectionBasecCs2|j��\}}|�|j�|�d�}|�|�dS)Ni)r/r�rCrr�rs)r3r�r�r�rrr�testCreateConnectionClose�s
z-ContextManagersTest.testCreateConnectionClosec	CsH|j��}t�|��}|��WdQRX|�|j�|�t|j	d�dS)Nsfoo)
r/r�r	r�rr�r%r�rrs)r3r�r)rrr�_testCreateConnectionClose�s

z.ContextManagersTest._testCreateConnectionCloseN)r6r7r8rrrrrrrrrrgs
rc@s�eZdZe�eed�d�e�ddd�dd���Z	dd	�Z
d
d�Zdd
�Ze�
edkd�dd��Ze�
edkd�dd��Zdd�ZdS)�InheritanceTestrQzSOCK_CLOEXEC not definedr�rhric	CsDt�tjtjtjB��$}|�|jtj�|�|���WdQRXdS)N)r	r-r.rQr�r�rI�get_inheritable)r3rrrr�test_SOCK_CLOEXEC�sz!InheritanceTest.test_SOCK_CLOEXECc	Cs,t��}|�|�|��d�WdQRXdS)NF)r	r�r)r3r)rrr�test_default_inheritable�sz(InheritanceTest.test_default_inheritablec
CsLt��}|�6|��}|��|�|�|��d�WdQRXWdQRXdS)NF)r	rrr�r)r3r)Znewsockrrr�test_dup�szInheritanceTest.test_dupc	CsPt��}|�:|�d�|�|��d�|�d�|�|��d�WdQRXdS)NTF)r	�set_inheritabler�r)r3r)rrr�test_set_inheritable�s

z$InheritanceTest.test_set_inheritableNz
need fcntlc	Csnt��}|�X|��}|�|��d�t�|tj�}|tjM}t�|tj|�|�|��d�WdQRXdS)NFT)r	r�r�rr�F_GETFD�
FD_CLOEXECZF_SETFD)r3r)r�r^rrr�test_get_inheritable_cloexec�sz,InheritanceTest.test_get_inheritable_cloexecc	Csht��}|�R|��}|�t�|tj�tj@tj�|�d�|�t�|tj�tj@d�WdQRXdS)NTr)r	r�r�rr!r"r)r3r)r�rrr�test_set_inheritable_cloexec�s
z,InheritanceTest.test_set_inheritable_cloexeccCsHt��\}}|�|j�|�|j�|�|��d�|�|��d�dS)NF)r	r�rCrr�r)r3r�r�rrr�test_socketpair�s
zInheritanceTest.test_socketpair)r6r7r8r�r�rr	rrurrrr r�rr#r$r%rrrrr�s	
rr�zSOCK_NONBLOCK not definedc@s,eZdZddd�Ze�ddd�dd	��Zd
S)�NonblockConstantTestT�cCs�|rj|�|jtj�|�|��|�|�t�|tjtj	�tj	@�|dkrZ|�
|���q�|�|���nL|�|jtj�|�|��d�|�
t�|tjtj	�tj	@�|�|���dS)Nr)r�r�r	r.r0r�rr&r'r(rIrc)r3r�nonblockrurrr�
checkNonblock�s	z"NonblockConstantTest.checkNonblockr�rhric	Cs^t�tjtjtjB���}|�|�|�d�|j|dd�|�d�|�|�|�d�|j|dd�|�d�|j|dd�|�d�|j|dd�WdQRXt��}t�d�t���}|�|�WdQRXt�d�t���}|�|d�WdQRXt�d�t���}|j|dd�WdQRXt�d�t���}|�|d�WdQRXt�|�dS)Nr[F)r(rg@)rug)	r	r-r.r�r)r�rNr/r1)r3r�trrr�test_SOCK_NONBLOCK�s6














z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr')r6r7r8r)rrur+rrrrr&�s
r&rWzWindows specificzneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|��}|��}t�|�}|��\}}|�|�|��|��dS)N)rnr	�	fromsharer�rsr)r��qZsdatarlrr�rvrrr�remoteProcessServers

z%TestSocketSharing.remoteProcessServerc	Cs�t��}tj|j|fd�}|��|j�|j�}|j��}|j�	�|�
|�d}|�
|�t�|�}g}x|�
d�}|s|P|�|�qlW|�	�d�|�}|�||�|��dS)N)rPr@s
slapmahfrorYr�)�multiprocessingrdZProcessr/rRr/�share�pidr�rrsr	r�r�r�r�r�)	r3r.r�r�r�rlr�m�receivedrrr�	testShare's(






zTestSocketSharing.testSharecCs@|j�t���}|�ttj|dd��|�ttj|d�dS)Nrsfoo)r/r1r'�getpidr�r2r	r-)r3r�rrr�testShareLengthJsz!TestSocketSharing.testShareLengthcCsb|�|��d�|�|��|���|�|j|j�|�|j|j�|jdkr^|�|j|j�dS)Nr)r�r0r�r�r�)r3Zorg�otherrrr�compareSocketsOs
z TestSocketSharing.compareSocketscCs<|j�t���}t�|�}z|�|j|�Wd|��XdS)N)r/r1r'r6r	r-r9r)r3r�rrrr�testShareLocal_s

z TestSocketSharing.testShareLocalc
Cs�tjtjg}tjtjg}x�|D]~}xx|D]p}yt�||�}Wntk
rRw(YnXz8|�t���}t�	|�}z|�
||�Wd|��XWd|��Xq(WqWdS)N)r	r-r�r.rrr1r'r6r-r9r)r3Zfamilies�typesrr*�sourcer�Zsharedrrr�	testTypesgs


zTestSocketSharing.testTypesN)
r6r7r8r�r/r5r7r9r:r=rrrrr,s#r,c@s�eZdZdZdZdZdZedd��Zedd��Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"d;S)<�SendfileUsingSendTesti�i r�r�c	Cs�dd�}d�dd�t|j�D��}ttjd��(}x ||j|j�D]}|�|�q@WWdQRXttjd��}|��|_	WdQRXdS)Ncss*x||kr|V||8}qW|r&|VdS)Nr)Ztotal�steprrr�chunks�s

z0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSsg|]}t�tj����qSr)�random�choice�stringZ
ascii_lettersr�)r�r+rrrr��sz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r�r)
r�r��BUFSIZEr
rr��FILESIZEr�r�FILEDATA)r�r@�chunkrZcsizerrr�
setUpClass�s

z SendfileUsingSendTest.setUpClasscCst�tj�dS)N)rr�r�)r�rrr�
tearDownClass�sz#SendfileUsingSendTest.tearDownClasscCs6|j�t�|j��\}}|�|j�|�|j�|S)N)r/rNrpr��TIMEOUTrCr)r3r�r�rrr�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs0g}x |�|j�}|sP|�|�qWd�|�S)Nr�)r�rDr�r�)r3r�r4rGrrr�	recv_data�szSendfileUsingSendTest.recv_datacCs
t|d�S)NZ_sendfile_use_send)rh)r3r)rrr�meth_from_sock�sz$SendfileUsingSendTest.meth_from_sockc
Csr|j��}ttjd�}t�|��H}|�8}|�|�}||�}|�||j	�|�|�
�|j	�WdQRXWdQRXdS)Nr)r/r�r
rr�r	r�rMr�rE�tell)r3r��filer)�meth�sentrrr�_testRegularFile�s

z&SendfileUsingSendTest._testRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dS)N)rKrLr�rarErF)r3r�r�rrr�testRegularFile�s
z%SendfileUsingSendTest.testRegularFilec
Cs||j��}t�|j�}t�|��R}|�B}|�|�}|�||j	�|�|�
�|j	�|�tj|j
|�WdQRXWdQRXdS)N)r/r��io�BytesIOrFr	r�r�r�rErNr�r�r�)r3r�rOr)rQrrr�_testNonRegularFile�s

z)SendfileUsingSendTest._testNonRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dS)N)rKrLr�rarErF)r3r�r�rrr�testNonRegularFile�s
z(SendfileUsingSendTest.testNonRegularFilec
Cs�|j��}tjd}t|d��|�tj|�WdQRXt|d�}t�|��D}|�4}|�	|�}||�}|�
|d�|�
|��d�WdQRXWdQRXdS)N�2r�rr)r/r�rr�r
rCr�r	r�rMr�rN)r3r��filenamerOr)rPrQrrr�_testEmptyFileSend�s



z(SendfileUsingSendTest._testEmptyFileSendcCs"|��}|�|�}|�|d�dS)Nr�)rKrLr�)r3r�r�rrr�testEmptyFileSend�s
z'SendfileUsingSendTest.testEmptyFileSendc
Csz|j��}ttjd�}t�|��P}|�@}|�|�}||dd�}|�||j	d�|�|�
�|j	�WdQRXWdQRXdS)Nri�)�offset)r/r�r
rr�r	r�rMr�rErN)r3r�rOr)rPrQrrr�_testOffset�s

z!SendfileUsingSendTest._testOffsetcCsB|��}|�|�}|�t|�|jd�|�||jdd��dS)Ni�)rKrLr�rarErF)r3r�r�rrr�
testOffset�s
z SendfileUsingSendTest.testOffsetc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�WdQRXWdQRXdS)Nrr�)ruiGKL)rU)
r/r�r
rr�r	r�rMr�rN)r3r�rOr)rUrPrQrrr�
_testCount�s

z SendfileUsingSendTest._testCountcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)NiGKL)rKrLr�rarF)r3rUr�r�rrr�	testCounts

zSendfileUsingSendTest.testCountc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�WdQRXWdQRXdS)Nrr�)rur[)rU)
r/r�r
rr�r	r�rMr�rN)r3r�rOr)rUrPrQrrr�_testCountSmall
s

z%SendfileUsingSendTest._testCountSmallcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)Nr[)rKrLr�rarF)r3rUr�r�rrr�testCountSmalls

z$SendfileUsingSendTest.testCountSmallc
Cs�|j��}ttjd�}tj|dd��R}|�B}d}|�|�}||d|d�}|�||�|�|�	�|d�WdQRXWdQRXdS)Nrr�)rui��i�)r\rU)
r/r�r
rr�r	r�rMr�rN)r3r�rOr)rUrPrQrrr�_testCountWithOffset s

z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|��}|�|�}|�t|�|�|�||jd|d��dS)Ni��i�)rKrLr�rarF)r3rUr�r�rrr�testCountWithOffset*s

z)SendfileUsingSendTest.testCountWithOffsetc
Csr|j��}ttjd�}t�|��H}|�8}|�d�|�|�}|�	t
||�|�	t
|j|�WdQRXWdQRXdS)NrF)r/r�r
rr�r	r�r�rMr�r2r�)r3r�rOr)rPrrr�_testNonBlocking3s


z&SendfileUsingSendTest._testNonBlockingcCs |��}|�d�r|�d�dS)Ni z$was not supposed to receive any data)rKr�r�)r3r�rrr�testNonBlocking<s
z%SendfileUsingSendTest.testNonBlockingc
Csd|j��}ttjd�}tj|dd��6}|�&}|�|�}||�}|�||j	�WdQRXWdQRXdS)Nrr�)ru)
r/r�r
rr�r	r�rMr�rE)r3r�rOr)rPrQrrr�_testWithTimeoutCs

z&SendfileUsingSendTest._testWithTimeoutcCs6|��}|�|�}|�t|�|j�|�||j�dS)N)rKrLr�rarErF)r3r�r�rrr�testWithTimeoutKs
z%SendfileUsingSendTest.testWithTimeoutc
Cs`|j��}ttjd��@}t�|��*}|�d�|�|�}|�	tj
||�WdQRXWdQRXdS)Nrg{�G�z�?)r/r�r
rr�r	r�rNrMr�ru)r3r�rOr)rPrrr�_testWithTimeoutTriggeredSendSs


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|��}|�d�dS)Ni�X)rKr�)r3r�rrr�testWithTimeoutTriggeredSend[sz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdS)Nr)r3rrr�_test_errorsasz"SendfileUsingSendTest._test_errorsc
Csttjd��:}tjtjd�� }|�|�}|�td||�WdQRXWdQRXttjd��4}t��� }|�|�}|�td||�WdQRXWdQRXttjd��t}t���`}|�|�}|jtd||dd�|jtd||d	d�|jtd||d
d�|jtd||dd�WdQRXWdQRXdS)Nr)r�r.r�zbinary modezpositive integerrX)rUg�������?rr)	r
rr�r	rrMr�r2ru)r3rOrrPrrr�test_errorsds*
 

 

z!SendfileUsingSendTest.test_errorsN)#r6r7r8rErDrFrJr�rHrIrKrLrMrRrSrVrWrZr[r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrrrrr>{s>		
	
	
	
		r>r�z%os.sendfile() required for this test.c@seZdZdd�ZdS)�SendfileUsingSendfileTestcCs
t|d�S)Nr�)rh)r3r)rrrrM�sz(SendfileUsingSendfileTest.meth_from_sockN)r6r7r8rMrrrrrm|srmzAF_ALG requiredc@s|eZdZdd�Ze�dd�dd��Zdd�Ze�dd	�d
d��Ze�dd�d
d��Z	e�dd	�dd��Z
dd�Zdd�ZdS)�LinuxKernelCryptoAPIc
Csjt�tjtjd�}y|�||f�Wn<tk
r`}z|��t�t|�||��Wdd}~XYnX|SdS)Nr)	r	r!rrKrrr�ZSkipTestr�)r3�typr�r)rvrrr�
create_alg�s$zLinuxKernelCryptoAPI.create_algr�rSc
Cs�t�d�}|�dd���}|��\}}|�"|�d�|�|�d�|�WdQRX|��\}}|�L|�dtj	�|�dtj	�|�dtj	�|�d	�|�|�d�|�WdQRXWdQRXdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabci�a�b�cr�)
r��fromhexrpr�rsr�r�r�r	�MSG_MORE)r3r��algo�opr]rrr�test_sha256�s


z LinuxKernelCryptoAPI.test_sha256c
Cspt�d�}|�dd��P}|�tjtjd�|��\}}|�"|�d�|�	|�
d�|�WdQRXWdQRXdS)NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79rqz
hmac(sha1)sJefeswhat do ya want for nothing?i)r�rurprLr	�SOL_ALG�ALG_SET_KEYr�rsr�r�)r3r�rwrxr]rrr�test_hmac_sha1�s

z#LinuxKernelCryptoAPI.test_hmac_sha1rc

Cs�t�d�}t�d�}d}t�d�}t|�}|�dd���z}|�tjtj|�|��\}}|�6|j	tj
|tjd�|�|�|�
|�|�|�WdQRX|��\}}|�,|j	|gtj|d�|�
|�|�|�WdQRXd	}	|g|	}
|��\}}|�&|j	|
tj
|d�|�||	�}WdQRX|�
t|�||	�|�
|d|�|�|��\}}|�(|j	|gtj|d�|�||	�}WdQRX|�
t|�||	�|�
|||	�WdQRXdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))rx�ivr^)rxr}i)r�rurarprLr	rzr{r��
sendmsg_afalg�ALG_OP_ENCRYPTrvrsr�r��ALG_OP_DECRYPT)
r3�keyr}r�Z
ciphertextZmsglenrwrxr]Z
multiplierZlongmsg�encZdecrrr�test_aes_cbc�sD






z!LinuxKernelCryptoAPI.test_aes_cbcr�cCs�t�d�}t�d�}t�d�}t�d�}t�d�}t�d�}t|�}t|�}|�dd���N}	|	�tjtj|�|	�tjtjd|�|	�	�\}
}|
�v|
j
tj||tjd	�|
�
|tj�|
�
|�|
�|t|�|�}|�||||��|�|||d��WdQRX|	�	�\}
}|
�f||}
|
j
|
gtj||d
�|
�|t|�|�}|�||||��|�|||d��WdQRXt�d�j}|	�	�\}
}|
��||}
|
�|
gtjtj|tj�gtjtj|t|��|gtjtj||�gf�|
�t|
�|�}|�||||��|�|||d��WdQRX|	�	�\}
}|
�N|||}
|
j
|
gtj||d
�|
�t|
�|�}|�|||d��WdQRXWdQRXdS)NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))rxr}�assoclenr^)rxr}r�r)r�rurarprLr	rzr{ZALG_SET_AEAD_AUTHSIZEr�r~rrvrsr�r�r
�Structr�r�Z
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENr�)r3r�r}ZplainZassocZexpected_ctZexpected_tagZtaglenr�rwrxr]Zresr�Zpack_uint32rrr�test_aead_aes_gcm�s`







   z&LinuxKernelCryptoAPI.test_aead_aes_gcmc
Csn|�dd��X}t�d�}|�tjtj|�|��\}}|� |�d�}|�	t
|�d�WdQRXWdQRXdS)N�rngZdrbg_pr_sha256r)rpr'�urandomrLr	rzr{r�r�r�ra)r3rwZ
extra_seedrxr]Zrnrrr�test_drbg_pr_sha256s

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c
Cs�t�tjtjd�}|��|�t��|��WdQRX|�t��|jdd�WdQRX|�t��|�d�WdQRX|�t��|jtjdd�WdQRX|�t��|jtjdd�WdQRXWdQRXdS)Nr)rxr[)rxr�r)r	r!rr�rur~r)r3r)rrr�test_sendmsg_afalg_args&sz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc	Cs�t�tjtjd�}|�|j�|�t��|�d�WdQRX|�t	d��|�d�WdQRX|�t��|�d�WdQRX|�t	d��|�d�WdQRXdS)Nr)Z
tttttttttttttr�z
type too long)Zttttttttttttttr�)r�Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz
name too long)r�Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r	r!rrCrr�rrKr�r2)r3r)rrr�test_length_restriction8sz,LinuxKernelCryptoAPI.test_length_restrictionN)
r6r7r8rprruryr|r�r�r�r�r�rrrrrn�s
)?rn�winzrequires Windowsc@s$eZdZddddddhZdd�Zd	S)
�TestMSWindowsTCPFlagsZ
TCP_MAXSEGZTCP_NODELAYZTCP_FASTOPENZTCP_KEEPCNTZTCP_KEEPIDLEZ
TCP_KEEPINTVLcs6dd�tt�D�}�fdd�|D�}��g|d�dS)NcSsg|]}|�d�r|�qS)ZTCP)r+)r�rrrrr�Zsz<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]}|�jkr|�qSr)�
knownTCPFlags)r�r)r3rrr�[szANew TCP flags were discovered. See bpo-32394 for more information)r�r	r�)r3Zprovided�unknownr)r3r�test_new_tcp_flagsYsz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)r6r7r8r�r�rrrrr�Jsr�cCstttttttttg	}|�	t
ttt
ttttttttttg�|�t�|�t�|�t�|�	ttg�|�	ttg�|�	t t!g�|�t"�|�	t#t$g�|�	t%t&t't(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=g�|�t>�t?�@�}t?jA|�t?jB|�dS)N)Cr�rrWr�r�r�r�r(r��extendrarvr�r�r�r�r�r�r�r�r�rrr&r�r[r�r�r
rr�r�r�r�rnrr�r�r&r'r(r*r+r-r.r,r0r1r2r4r5r7r9r:r;r<r=rErOr,r>rmr�rZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_main`sr





r��__main__)�r�Ztestrr�rTrTr	rr�r�r�rcrr'r[r��weakrefrrprkr�r
rAr�rC�_threadrir=r0r>rr�r�r�rpr�r�rrrr r"r$r*ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_VSOCKr�r�r�r,r9r:rFrRrSryr}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr(r-rErJrMrNrPrQrRrlrtrwr�r�r�r�r�r�r%r&r'r(r)rbr*r+r,r-r.r/r0r1r2r3r4r5r7r8r9r:r;r<r=r>rrErOrWr[rarvr�r�r�r�r�r�r`r�r�r�r�r�r�r�r�r*r�r�r�rr
rr	r
rrrr&r�r,r>rmrnr+r�r�r6rrrr�<module>s:









3u!#	

D]
*
?.{7ww=#P;k7




















	 )5#4$l


	8E9
)
ES
',C
<
e
D&
A