Your IP : 216.73.216.52


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_socket.cpython-35.opt-2.pyc



$�Yf��+@sddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZyddlZWnek
rFdZYnXyddlZWnek
rqdZYnXejZdjd�ZyddlZ ddl!Z!Wnek
r�dZ dZ!YnXyddl"Z"Wnek
r�dZ"YnXdd�Z#d	d
�Z$e#�Z%e$�Z&ejd�j'Z(Gdd
�d
ej)�Z*Gdd�dej)�Z+Gdd�dej)�Z,Gdd�dej)�Z-Gdd�dej)�Z.Gdd�d�Z/Gdd�de*e/�Z0Gdd�de+e/�Z1Gdd�de-e/�Z2Gdd�de.e/�Z3Gd d!�d!e0�Z4Gd"d#�d#ej)e/�Z5Gd$d%�d%ej)�Z6Gd&d'�d'e6�Z7Gd(d)�d)e,e6e/�Z8Gd*d+�d+e7e8�Z9Gd,d-�d-e6�Z:Gd.d/�d/e:�Z;Gd0d1�d1e6�Z<Gd2d3�d3e<�Z=Gd4d5�d5e<�Z>Gd6d7�d7e<�Z?Gd8d9�d9e<�Z@Gd:d;�d;e@�ZAd<d=�ZBd>d?�ZCd@dA�ZDGdBdC�dCej)�ZEejFe%dD�GdEdF�dFej)��ZGejFe%dD�ejFe dG�GdHdI�dIe2���ZHejFe&dJ�GdKdL�dLej)��ZIejFe&dJ�ejFe dG�GdMdN�dNe3���ZJejFe dG�GdOdP�dPe4��ZKejFe dG�GdQdR�dRe1��ZLGdSdT�dTe,�ZMGdUdV�dVeM�ZNGdWdX�dXeM�ZOGdYdZ�dZeM�ZPGd[d\�d\eM�ZQGd]d^�d^eM�ZRGd_d`�d`eM�ZSGdadb�dbeS�ZTGdcdd�ddeT�ZUGdedf�dfeT�ZVGdgdh�dheM�ZWGdidj�djeW�ZXGdkdl�dleW�ZYGdmdn�dneNeW�ZZGdodp�dpej)�Z[Gdqdr�dreS�Z\Gdsdt�dteS�Z]Gdudv�dveOeQe8e>�Z^eCejdw�ejFe dG�Gdxdy�dyeVe^���Z_eCejdz�ejFe dG�Gd{d|�d|eYe^���Z`eCejd}�ejFe dG�Gd~d�deZe^���ZaGd�d��d�eOeQe8eA�ZbeCejdw�ejFejcd��eDd�d��ejFe dG�Gd�d��d�eVeb�����ZdeCejdz�ejFejcd��eDd�d��ejFe dG�Gd�d��d�eYeb�����ZeeCejd}�ejFejcd��eDd�d��ejFe dG�Gd�d��d�eZeb�����ZfeCejdz�ejFejcd��eCed��eDd�d��ejFe dG�Gd�d��d�e]eb������ZgeCejd}�ejFejcd��eCed��eDd�d��ejFe dG�Gd�d��d�eNe]eb������ZhGd�d��d�eRe9e=�ZieCejdw�ejFe dG�Gd�d��d�eUei���ZjeCejdz�ejFe dG�Gd�d��d�eYeXei���ZkeCejd}�ejFe dG�Gd�d��d�eZeXei���ZlGd�d��d�ePeRe9e?�ZmeCejdw�eDd�d�d��ejFe dG�Gd�d��d�eUem����ZneCejdz�eDd�d�d��ejFe dG�Gd�d��d�eYeXem����ZoeCejd}�eDd�d�d��ejFe dG�Gd�d��d�eZeXem����ZpGd�d��d�eRe9e;�ZqeCejdw�eCed��ejFe dG�Gd�d��d�eUeq����ZreCejdz�eCed��ejFe dG�Gd�d��d�eYeXeq����ZseCejd}�eCed��ejFe dG�Gd�d��d�eZeXeq����ZteCejdwdz�eCed�d�d��ejFe dG�Gd�d��d�e\eq����ZueCejdwd}�eCed�d�d��ejFe dG�Gd�d��d�eNe\eq����ZvGd�d��d�ej)�ZweCed��ejFexed��pexed��d��Gd�d��d�ewe>���ZyeCed��ejFexed��plexed��d��ejFe dG�Gd�d��d�ewe,e7e=����ZzejFe dG�Gd�d��d�e0��Z{ejFe dG�Gd�d��d�e5��Z|ejFe dG�Gd�d��d�e0��Z}ejFe dG�Gd�d��d�e4��Z~Gd�d��d�e~�ZGd�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�eK�Z�Gd�d��d�ej)�Z�ejFe dG�Gd�d��d�e*e/��Z�ejFe dG�Gd�d��d�e*e/��Z�Gd�d��d�e*�Z�Gd�d��d�e+�Z�Gd�d��d�ej)�Z�ejFejd�kd��Gd�d��d�ej)��Z�ejFexed��d��Gd�d��d�ej)��Z�ejFe dG�Gd�d��d�e4��Z�d�Z�d�Z�d�Z�d�d��Z�ejFe��d��Gd�d��d�ej)��Z�ejFe��d��Gd�d��d�ej)e/��Z�ejFe dG�Gd�d��d�e0��Z�Gd�d��d�ej)�Z�ejFexed��d��Gd�d��d�ej)��Z�ejFe
j�d�kd��ejFed��Gd�d��d�e*���Z�ejFe dG�Gdd�de0��Z�ejFe dG�ejFexe
d�d�Gdd�de����Z�dd�Z�e�dkr�e��dS(	�N)�support)�proxyFuMichael Gilfix was hereሴ
zutf-8cCsOy"tjtjtjtj�}Wnttfk
r@dSYnX|j�dS)NFT)�socket�PF_CAN�SOCK_RAW�CAN_RAW�AttributeError�OSError�close)�s�r�0/opt/alt/python35/lib64/python3.5/test_socket.py�_have_socket_can1s"	
rcCsLytjtjtjd�}Wnttfk
r=dSYnX|j�dS)NrFT)r�PF_RDS�SOCK_SEQPACKETrr	r
)rrrr
�_have_socket_rds;s	
r�ic@s(eZdZdd�Zdd�ZdS)�
SocketTCPTestcCsAtjtjtj�|_tj|j�|_|jj�dS)N)r�AF_INET�SOCK_STREAM�servr�	bind_port�port�listen)�selfrrr
�setUpNszSocketTCPTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
�tearDownSs
zSocketTCPTest.tearDownN)�__name__�
__module__�__qualname__rrrrrr
rLsrc@s(eZdZdd�Zdd�ZdS)�
SocketUDPTestcCs4tjtjtj�|_tj|j�|_dS)N)rr�
SOCK_DGRAMrrrr)rrrr
rYszSocketUDPTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
r]s
zSocketUDPTest.tearDownN)rrrrrrrrr
r Wsr csLeZdZerH�fdd�Z�fdd�Z�fdd�Z�S)�ThreadSafeCleanupTestCasecs&t�j||�tj�|_dS)N)�super�__init__�	threading�RLock�
_cleanup_lock)r�args�kwargs)�	__class__rr
r$isz"ThreadSafeCleanupTestCase.__init__c
s(|j�t�j||�SWdQRXdS)N)r'r#�
addCleanup)rr(r))r*rr
r+ms
z$ThreadSafeCleanupTestCase.addCleanupc
s(|j�t�j||�SWdQRXdS)N)r'r#�
doCleanups)rr(r))r*rr
r,qs
z$ThreadSafeCleanupTestCase.doCleanups)rrrr%r$r+r,rr)r*r
r"asr"c@s^eZdZdZdZdZeje�ZdZ	e	deje	�d7Z	dd�Z
d	S)
�
SocketCANTestZvcan0�z=IB3x8sz@3I4l2I�x�cCs{tjtjtjtj�|_|j|jj�y|jj|jf�Wn&t	k
rv|j
d|j�YnXdS)Nz%network interface `%s` does not exist)rrrrrr+r
�bind�	interfacer	�skipTest)rrrr
r�s!
	zSocketCANTest.setUpN)rrrr2�bufsize�
can_frame_fmt�struct�calcsizeZcan_frame_size�bcm_cmd_msg_fmtrrrrr
r-us
r-c@s"eZdZdZdd�ZdS)�
SocketRDSTesti cCsptjtjtjd�|_|j|jj�ytj|j�|_Wnt	k
rk|j
d�YnXdS)Nrzunable to bind RDS socket)rrrrr+r
rrrr	r3)rrrr
r�s
zSocketRDSTest.setUpN)rrrr4rrrrr
r9�sr9c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ThreadableTestcCs4|j|_|j|_|j|_|j|_dS)N)r�_ThreadableTest__setUpr�_ThreadableTest__tearDown�_setUp�	_tearDown)rrrr
r$�szThreadableTest.__init__cCs|jj�dS)N)�server_ready�set)rrrr
�serverExplicitReady�sz"ThreadableTest.serverExplicitReadycCs�tj�|_tj�|_tj�|_tjd�|_d|_|j�}|j	d�}||dd�}t
|d|�}tj|j
|f�|_z)y|j�Wnd|_�YnXWd|jj�X|jj�dS)N�F�.�_T)r%�Eventr?�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadr;r@�wait)rZ
methodnamerZtest_methodrrr
r=�s$		zThreadableTest._setUpcCs?|j�|jj�|jj�r;|jj�}|�dS)N)r<rGrQrH�qsize�get)r�excrrr
r>s


zThreadableTest._tearDowncCs�|jj�|j�|jj�|jr;|j�dSt|d�sVtd��zGy|�Wn5t	k
r�}z|j
j|�WYdd}~XnXWd|j�XdS)N�__call__z%test_func must be a callable function)r?rQ�clientSetUprFr@rJ�clientTearDown�hasattr�	TypeError�
BaseExceptionrH�put)rZ	test_func�errr
rPs


	
'zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedError)rrrr
rVszThreadableTest.clientSetUpcCs|jj�tj�dS)N)rGr@rN�exit)rrrr
rWs
zThreadableTest.clientTearDownN)
rrrr$rAr=r>rPrVrWrrrr
r:�s&r:c@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedTCPSocketTest�runTestcCs$tj|d|�tj|�dS)N�
methodName)rr$r:)rrarrr
r$%szThreadedTCPSocketTest.__init__cCstjtjtj�|_dS)N)rrr�cli)rrrr
rV)sz!ThreadedTCPSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rW,s
	z$ThreadedTCPSocketTest.clientTearDownN)rrrr$rVrWrrrr
r_#sr_c@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedUDPSocketTestr`cCs$tj|d|�tj|�dS)Nra)r r$r:)rrarrr
r$3szThreadedUDPSocketTest.__init__cCstjtjtj�|_dS)N)rrr!rb)rrrr
rV7sz!ThreadedUDPSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rW:s
	z$ThreadedUDPSocketTest.clientTearDownN)rrrr$rVrWrrrr
rc1srcc@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedCANSocketTestr`cCs$tj|d|�tj|�dS)Nra)r-r$r:)rrarrr
r$AszThreadedCANSocketTest.__init__cCsTtjtjtjtj�|_y|jj|jf�Wntk
rOYnXdS)N)rrrrrbr1r2r	)rrrr
rVEs
!
z!ThreadedCANSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rWNs
	z$ThreadedCANSocketTest.clientTearDownN)rrrr$rVrWrrrr
rd?s	rdc@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedRDSSocketTestr`cCs$tj|d|�tj|�dS)Nra)r9r$r:)rrarrr
r$UszThreadedRDSSocketTest.__init__cCsctjtjtjd�|_y,|jjtdf�|jj�|_Wntk
r^YnXdS)Nr)	rrrrbr1�HOST�getsockname�cli_addrr	)rrrr
rVYs
z!ThreadedRDSSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rWds
	z$ThreadedRDSSocketTest.clientTearDownN)rrrr$rVrWrrrr
reSsrec@sOeZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�SocketConnectedTestr`cCstj|d|�dS)Nra)r_r$)rrarrr
r$pszSocketConnectedTest.__init__cCs9tj|�|j�|jj�\}}||_dS)N)r_rrAr�accept�cli_conn)r�conn�addrrrr
rss

zSocketConnectedTest.setUpcCs'|jj�d|_tj|�dS)N)rkr
r_r)rrrr
r{s
	zSocketConnectedTest.tearDowncCs6tj|�|jjt|jf�|j|_dS)N)r_rVrb�connectrfr�	serv_conn)rrrr
rV�s
zSocketConnectedTest.clientSetUpcCs'|jj�d|_tj|�dS)N)ror
r_rW)rrrr
rW�s
	z"SocketConnectedTest.clientTearDownN)rrrr$rrrVrWrrrr
riis
ric@sOeZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�SocketPairTestr`cCs'tjj|d|�tj|�dS)Nra)�unittest�TestCaser$r:)rrarrr
r$�szSocketPairTest.__init__cCstj�\|_|_dS)N)r�
socketpairrrb)rrrr
r�szSocketPairTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
r�s
zSocketPairTest.tearDowncCsdS)Nr)rrrr
rV�szSocketPairTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rW�s
	zSocketPairTest.clientTearDownN)rrrr$rrrVrWrrrr
rp�s
rpc@s4eZdZdd�Zdd�Zdd�ZdS)�SocketTestBasecCs|j�|_|j�dS)N)�	newSocketr�
bindServer)rrrr
r�szSocketTestBase.setUpcCs&|j|j�|jj�|_dS)N)�bindSockrrg�	serv_addr)rrrr
rv�szSocketTestBase.bindServercCs|jj�d|_dS)N)rr
)rrrr
r�s
zSocketTestBase.tearDownN)rrrrrvrrrrr
rt�s	rtcs"eZdZ�fdd�Z�S)�SocketListeningTestMixincst�j�|jj�dS)N)r#rrr)r)r*rr
r�s
zSocketListeningTestMixin.setUp)rrrrrr)r*r
ry�srycsReZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Z�S)�ThreadedSocketTestMixincs$t�j||�tj|�dS)N)r#r$r:)rr(r))r*rr
r$�sz ThreadedSocketTestMixin.__init__cCs|j�|_|j�dS)N)�newClientSocketrb�
bindClient)rrrr
rV�sz#ThreadedSocketTestMixin.clientSetUpcCs
|j�S)N)ru)rrrr
r{�sz'ThreadedSocketTestMixin.newClientSocketcCs&|j|j�|jj�|_dS)N)rwrbrgrh)rrrr
r|�sz"ThreadedSocketTestMixin.bindClientcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rW�s
	z&ThreadedSocketTestMixin.clientTearDown)rrrr$rVr{r|rWrr)r*r
rz�s
rzcsXeZdZ�fdd�Z�fdd�Z�fdd�Z�fdd�Z�S)	�ConnectedStreamTestMixincs9t�j�|j�|jj�\}}||_dS)N)r#rrArrjrk)rrlrm)r*rr
r�s

zConnectedStreamTestMixin.setUpcs'|jj�d|_t�j�dS)N)rkr
r#r)r)r*rr
r�s
	z!ConnectedStreamTestMixin.tearDowncs0t�j�|jj|j�|j|_dS)N)r#rVrbrnrxro)r)r*rr
rV�s
z$ConnectedStreamTestMixin.clientSetUpcs'|jj�d|_t�j�dS)N)ror
r#rW)r)r*rr
rW�s
	z'ConnectedStreamTestMixin.clientTearDown)rrrrrrVrWrr)r*r
r}�s	r}cs.eZdZ�fdd�Zdd�Z�S)�UnixSocketTestBasecs6tj�|_|jtj|j�t�j�dS)N)�tempfile�mkdtemp�dir_pathr+�os�rmdirr#r)r)r*rr
r
szUnixSocketTestBase.setUpcCs9tjd|j�}|j|�|jtj|�dS)N�dir)r�mktempr�r1r+r�unlink)r�sock�pathrrr
rws
zUnixSocketTestBase.bindSock)rrrrrwrr)r*r
r~sr~c@seZdZdd�ZdS)�UnixStreamBasecCstjtjtj�S)N)r�AF_UNIXr)rrrr
ruszUnixStreamBase.newSocketN)rrrrurrrr
r�sr�cs4eZdZeZ�fdd�Zdd�Z�S)�InetTestBasecs!t�j�|jd|_dS)NrB)r#rrxr)r)r*rr
r#s
zInetTestBase.setUpcCstj|d|j�dS)N�host)rrr�)rr�rrr
rw'szInetTestBase.bindSock)rrrrfr�rrwrr)r*r
r�sr�c@seZdZdd�ZdS)�TCPTestBasecCstjtjtj�S)N)rrr)rrrr
ru-szTCPTestBase.newSocketN)rrrrurrrr
r�*sr�c@seZdZdd�ZdS)�UDPTestBasecCstjtjtj�S)N)rrr!)rrrr
ru3szUDPTestBase.newSocketN)rrrrurrrr
r�0sr�c@seZdZdd�ZdS)�SCTPStreamBasecCstjtjtjtj�S)N)rrr�IPPROTO_SCTP)rrrr
ru9szSCTPStreamBase.newSocketN)rrrrurrrr
r�6sr�c@seZdZejZdS)�
Inet6TestBaseN)rrrr�HOSTv6r�rrrr
r�>sr�c@seZdZdd�ZdS)�UDP6TestBasecCstjtjtj�S)N)r�AF_INET6r!)rrrr
ruFszUDP6TestBase.newSocketN)rrrrurrrr
r�Csr�cs;dd����fdd�}dd�}|r7|S|S)Nc_sdS)Nr)r(r)rrr
�client_passUsz%skipWithClientIf.<locals>.client_passcs=tj��|�}t|t�s9�fdd�|_|S)Ncs�S)Nr)�f)r�rr
�<lambda>Zsz3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)rq�skip�
isinstance�type�client_skip)�objZretval)r��reasonrr
�skipdecWsz!skipWithClientIf.<locals>.skipdeccSs1t|t�pt|d�s-dd�|_|S)Nr�cSs|S)Nr)r�rrr
r�^sz5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�rXr�)r�rrr
�	noskipdec\sz#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�r)r�r�r
�skipWithClientIfLs	r�cs@�fdd�|D�}t|ddjdd�|D���S)Ncs%g|]}t�|�s|�qSr)rX)�.0�name)r�rr
�
<listcomp>hs	z requireAttrs.<locals>.<listcomp>zdon't have z, css|]}|VqdS)Nr)r�r�rrr
�	<genexpr>jszrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingr)r�r
�requireAttrscsr�cGs�d}dd�|D�}|rBddjdd�|D��}nddd�|D�}ytj|�}Wn1tk
r�}zt|�}WYdd}~XnX|j�t|dk	djdjd	d�|D��|��S)
NcSs5g|]+}t|t�rtt|�r|�qSr)r��strrXr)r�r�rrr
r�us	z!requireSocket.<locals>.<listcomp>zdon't have z, css|]}|VqdS)Nr)r�r�rrr
r�xsz requireSocket.<locals>.<genexpr>cSs4g|]*}t|t�r*tt|�n|�qSr)r�r�rMr)r�r�rrr
r�zs	zcan't create socket({0}): {1}css|]}t|�VqdS)N)r�)r��orrr
r��s)r�rr	r�r
r��format)r(�errr�Zcallargsrr\rrr
�
requireSocketms#	

	r�c@s	eZdZdd�Zdd�Zejedk	d�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zejeed�d�ejeed�d�dd���Zejeed�d�dd��Zejeed�d�dd ��Zejeed!�d"�d#d$��Zd%d&�Zd'd(�Zejd)d*��Zd+d,�Zd-d.�Zejeed/�d0�d1d2��Zejeed3�d4�d5d6��Zejeed3�d4�d7d8��Zejeed9�d:�d;d<��Z ejeed9�d:�d=d>��Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'eje(j)dKkdL�dMdN��Z*dOdP�Z+dQdR�Z,ejej-dS�dT�dUdV��Z.dWdX�Z/dYdZ�Z0d[d\�Z1d]d^�Z2d_d`�Z3dadb�Z4dcdd�Z5dedf�Z6dgdh�Z7didj�Z8ejdkdl��Z9ejej:dm�dndo��Z;dpdq�Z<ej=e(j)dKkdr�dsdt��Z>ejee(du�dv�dwdx��Z?dS)y�GeneralModuleTestscCsRddl}|jtj|jk�tj�}|j|tj�|j�dS)Nr)�_socket�
assertTruer�
SocketType�assertIsInstancer
)rr�rrrr
�test_SocketType_is_socketobject�s
z2GeneralModuleTests.test_SocketType_is_socketobjectcCs!tjtjtj�}|��|jd|j�t|��|jdtjt|��|jdtjt|��|jdt|��|jdt|��|jd
�|jdt|��|jt|j	��t|��WdQRX|jd	t|��|jdt|��dS)Nzfd=%iz	family=%sztype=%szproto=0�raddr�	127.0.0.1r�laddrz[closed])r�r)
rrr�assertIn�fileno�repr�assertNotInr1r�rg)rrrrr
�	test_repr�s 
)zGeneralModuleTests.test_reprNzneed _socket modulecCs�tjtjtj�}z?d|j�|j|j|jf}|jt	|�|�Wd|j
�Xd|j|j|jf}|jt	|�|�dS)Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)r�rrrr��familyr��proto�assertEqualr�r
)rrZexpectedrrr
�test_csocket_repr�s"z$GeneralModuleTests.test_csocket_reprcCs�tjtjtj�}t|�}|j|j�|j��|j�d}y|j�Wntk
rrYnX|jd�dS)NzSocket proxy still exists)	rrrrr�r�r
�ReferenceError�fail)rr�prrr
�test_weakref�s

zGeneralModuleTests.test_weakrefcCs�d}|jtd|d��t�WdQRX|jtd|d��tj�WdQRX|jtd|d��tj�WdQRXdS)Nz$Error raising socket exception (%s).�msgr	z
socket.herrorzsocket.gaierror)�assertRaisesr	r�herror�gaierror)rr�rrr
�testSocketError�s
z"GeneralModuleTests.testSocketErrorcKCs�tjtjtj�}|j|j�|jd�|j�}|jt��}|j	d|�WdQRX|j
t|j�d�|jt��}|j	d|�WdQRX|j
t|j�d�|jt��}|j	dd�WdQRX|j
dt|j��|jt��}|j	dd|�WdQRX|j
t|j�d�|jt��}|j	dd|�WdQRX|j
t|j�d�|jt��}|j	ddd�WdQRX|j
dt|j��|jt��}|j	dd	|�WdQRX|j
d
t|j��|jt��}|j	ddd�WdQRX|j
d
t|j��|jt��}|j	d�WdQRX|j
dt|j��|jt��}|j	dd|d�WdQRX|j
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 NoneType�barzan integer is requiredz	(1 given)�z	(4 given))r�r)rrr!r+r
r1rgr�rY�sendtor�r��	exceptionr�)rrZsockname�cmrrr
�testSendtoErrors�sL
z#GeneralModuleTests.testSendtoErrorscCs<tjtjtjtjtjtjtjtjdS)N)	rrrr!r�SOCK_RDMr�
SOL_SOCKET�SO_REUSEADDR)rrrr
�testCrucialConstants�sz'GeneralModuleTests.testCrucialConstantscCs�tj�}ytj|�}Wntk
r@|jd�YnX|j|jd�dkd�ytj|�\}}}Wntk
r�|jd�YnX||g|}tj|�}||kr�|j	d|t
|�f�dS)Nzname lookup failurerCrzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r�gethostname�
gethostbynamer	r3r��find�
gethostbyaddr�getfqdnr�r�)r�hostnameZipZhname�aliases�ipaddrsZall_host_namesZfqhnrrr
�testHostnameRes�s

z"GeneralModuleTests.testHostnameRescCs�xIdddddgD]2}|jttj|�|jttj|�qWx3tjddgD]}|jtj|�|�q_Wx1tjgD]#}|j|tj|�d�q�WdS)	Nz0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1z10.0.0.1z255.255.255.255�)	r�r	rr�r�rrfr�r�)rrmr�rrr
�test_host_resolutions
z'GeneralModuleTests.test_host_resolution�sethostnameztest needs socket.sethostname()r�ztest needs socket.gethostname()cCs�tj�}ytjd�WnJtk
ri}z*|jtjkrT|jd�n�WYdd}~XnXz=|jtj�d�tjd�|jtj�d�Wdtj|�XdS)N�newztest should be run as rootsbarr�)rr�r�r	�errno�EPERMr3r�)rZoldhnr\rrr
�test_sethostnames
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�tj�}x�|D]�\}}|j|t�|j|t�|j|d�tj|�}|j|t�|j||�tj|�}|j|t�|j||�qWdS)Nr)	rr�r��intr��
assertGreater�if_nametoindexr��if_indextoname)rZ
interfaces�indexr�Z_index�_namerrr
�testInterfaceNameIndex3sz)GeneralModuleTests.testInterfaceNameIndexcCs\|jttjd�|jttjd�|jttjd�|jttjd�dS)NrZ	_DEADBEEF)r�r	rr�r�rY)rrrr
�testInvalidInterfaceNameIndexCsz0GeneralModuleTests.testInvalidInterfaceNameIndex�getrefcountztest needs sys.getrefcount()cCs^y#tjt�}tjtd�Wn4tk
rYtjt�|krU|jd�YnXdS)Nrz$socket.getnameinfo loses a reference)�sysr�rr�getnameinforYr�)rZorigrrr
�testRefCountGetNameInfoMs
z*GeneralModuleTests.testRefCountGetNameInfocCs-ytjdd�Wntk
r(YnXdS)Nr/r)r/rrr)rr�r	)rrrr
�testInterpreterCrashYs
z'GeneralModuleTests.testInterpreterCrashcCs�tjdtjdtjdtjdi}x�|j�D]�\}}d|>d}x6dD].}|j||@||||@��|@�qXW||�}|j||@|�|jt|d�q7WdS)
N� �rBr�r��gE#�2Tv�"���)rrBr�r�r�r�r�l)	r�htonl�ntohl�htons�ntohs�itemsr�r��
OverflowError)rZsizes�func�size�maskrZswappedrrr
�testNtoHas
,zGeneralModuleTests.testNtoHcCs�ddddddg}dddddd	g}xB|D]:}tj|�tj|�tj|�tj|�q7Wxf|D]^}|jttj|�|jttj|�|jttj|�|jttj|�q|WdS)
NrBr�����������rrr)rr�r�r�r�r�r�)rZgood_valuesZ
bad_values�krrr
�testNtoHErrorsos




z!GeneralModuleTests.testNtoHErrorscCsZ|j}tjjd�s*tjdkr3d}nd}x@|D]2}ytj|d
�}PWq@tk
rqYq@Xq@Wt�tj|�}|||�ytj|d�}Wntk
r�d}YnX|||�|tj|�|�|tj|d
�|�|dk	r*|tj|d�|�|jt	tjd�|jt	tjd
�dS)N�freebsd�netbsd�gnukfreebsd�linux�darwin�daytime�qotd�domain�echoZtcpZudprBi)rr	r
)rr)r
rr)rr
rr)
r�r��platform�
startswithr�
getservbynamer	�
getservbyportr�r�)r�eqZservicesZservicerZport2Zudpportrrr
�
testGetServBy~s2		

	


z GeneralModuleTests.testGetServBycCs|jtj�d�tj�}|j|j�d�|j�tjd�|jtj�d�tj�}|j|j�d�|j�tjd�|jtj�d�tj�}|j|j�d�|j�|jttjd�|jttjd�dS)N�
rBZspamr)	r�r�getdefaulttimeout�
gettimeoutr
�setdefaulttimeoutr��
ValueErrorrY)rrrrr
�testDefaultTimeout�s 




z%GeneralModuleTests.testDefaultTimeout�	inet_atonztest needs socket.inet_aton()cCs6|jdtjd��|jdtjd��dS)Nsr�z0.0.0.0s�z255.255.255.255ss����)r�rr)rrrr
�testIPv4_inet_aton_fourbytes�sz/GeneralModuleTests.testIPv4_inet_aton_fourbytes�	inet_ptonztest needs socket.inet_pton()cs�ddlm}m�m���fdd�}�fdd�}�jd|d���jd|d	���jd
|d���jd|d
���jd|d��||d�||d�||d�||d�||d��jd|d���jd|d	���jd
|d���jd|d��||d�||d�||d�||d�||d�dS)Nr)rrrcs
��|�S)Nr)�a)rrrr
r��sz5GeneralModuleTests.testIPv4toString.<locals>.<lambda>cs�jttf||�S)N)r�r	r)r�r )rrr
r��ssz0.0.0.0s��z255.0.255.0s����z170.170.170.170sz1.2.3.4s����z255.255.255.255z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5z::1)rrrrr�)rr��g�
assertInvalidr)rrrr
�testIPv4toString�s,








z#GeneralModuleTests.testIPv4toStringcsCy3ddlm�m�m}|s2�jd�Wntk
rT�jd�YnXtjdkr�y��d�WnAtk
r�}z!|j	dkr��jd�WYdd}~XnX��fd	d
����fdd
�}�j
d2�d���j
d3�d���j
d5�d���j
d�d���j
d8�d���j
d:�d��|d�|d�|d�|d�|d�|d �|d!�|d"�|d#��j
d<�d%���j
d?�d)���j
d*�d+��|d,�|d-�|d.�|d/�|d0�|d1�dS)@Nr)rr��has_ipv6zIPv6 not availablez+could not import needed symbols from socket�win32z::i&'zIPv6 might not be supportedcs
��|�S)Nr)r )r�rrr
r��sz5GeneralModuleTests.testIPv6toString.<locals>.<lambda>cs�jttf�|�S)N)r�r	r)r )r�rrr
r��ssr�z0::0s�z1::sE�v�V���$��z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes�B
�r�s'Tzad42:abc::127:0:254:2s
�z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6:z1:2:3:4:5:6z1:2:3:4:5:6:7:8:z1:2:3:4:5:6:7:8:0s�*@z::254.42.23.64sBr0s���*@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:8ssssss�B
�s�B
�'Tss
ss�*@ss
BsB���*@)rrr�r$r3�ImportErrorr�rr	�winerrorr�)rr$r\r"r)r�r�rrr
�testIPv6toString�s^
 










	







z#GeneralModuleTests.testIPv6toString�	inet_ntopztest needs socket.inet_ntop()csgddlm}m�m���fdd�}�fdd�}�jd|d���jd|d	���jd
|d���jd|d
��||d�||d�||d��jd|td	����jd|d���jd|d	���jd
|d��||d�||d�||d��jd|td	���dS)Nr)�	inet_ntoar+rcs
��|�S)Nr)r )rr+rr
r�*sz5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs�jttf||�S)N)r�r	r)r�r )rrr
r�+sz1.0.1.0sz
170.85.170.85s�U�Uz255.255.255.255s����z1.2.3.4ssr�r�ssssss)rr,r+rr��	bytearray)rr�r!r"r)rr+rr
�testStringToIPv4&s$





z#GeneralModuleTests.testStringToIPv4cscy3ddlm�m�m}|s2�jd�Wntk
rT�jd�YnXtjdkr�y��d�WnAtk
r�}z!|j	dkr��jd	�WYdd}~XnX��fd
d����fdd�}�j
d
�d���j
d�d���j
d�d���j
d�td���|d�|d�|d�dS)Nr)r+r�r$zIPv6 not availablez+could not import needed symbols from socketr%sr�i&'zIPv6 might not be supportedcs
��|�S)Nr)r )r�r+rr
r�Qsz5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs�jttf�|�S)N)r�r	r)r )r�rrr
r�Rsz::z::1�sz!aef:b01:506:1001:ffff:9997:55:170s
�����Ups�r�sssssssss)rr+r�r$r3r(r�rr	r)r�r.)rr$r\r"r)r�r�r+rr
�testStringToIPv6@s.
 


z#GeneralModuleTests.testStringToIPv6cCs�tj�}tjtjtj�}|j|j�|jd|f�|j�}ytj	tj
��}Wntk
r�|jd�YnX|j
|dd|fd|d�|j|d|�dS)Nz0.0.0.0zname lookup failurerz
%s invalidrB)r�find_unused_portrrrr+r
r1rgr�r�r	r3r�r�)rrr�r�Z
my_ip_addrrrr
�testSockNameds
%zGeneralModuleTests.testSockNamecCsZtjtjtj�}|j|j�|jtjtj�}|j|dkd�dS)Nrzinitial mode is reuse)	rrrr+r
�
getsockoptr�r��assertFalse)rr��reuserrr
�testGetSockOptvsz!GeneralModuleTests.testGetSockOptcCsstjtjtj�}|j|j�|jtjtjd�|jtjtj�}|j	|dkd�dS)NrBrzfailed to set reuse mode)
rrrr+r
�
setsockoptr�r�r5r6)rr�r7rrr
�testSetSockOpt~s
z!GeneralModuleTests.testSetSockOptcCsItjtjtj�}|jd�|j�|jt|jd�dS)NrBsspam)rrr�
settimeoutr
r�r	�send)rr�rrr
�testSendAfterClose�s

z%GeneralModuleTests.testSendAfterClosecCs�tjtjtj�}|j|jtj�ttd�rf|j|jtjtjBtjf�n|j|jtj�|j|j	d�|j
�dS)N�SOCK_CLOEXECr)rrrr�r�rXr�r�r>r�r
)rr�rrr
�testNewAttributes�s
z$GeneralModuleTests.testNewAttributescCs�tj�}|j|j�tj�}|d}|d}|jt|jt|f�|jt|jt|f�x�t	j
�D]s}tj�}y|jt|f�WnFtk
r�}z&|jtj
ks�|dkr��WYdd}~Xq�XPq�WdS)Nir-)rr+r
rr3r�r�r1rf�	itertools�countr	r�Z
EADDRINUSE)rr�rZbig_portZneg_portrr\rrr
�test_getsockaddrarg�s

z&GeneralModuleTests.test_getsockaddrarg�ntzWindows specificcCs�|jttjd��|jttd��|jttd��|jttd��|jttd��tj�}|j|j�|jt|jdd�|jtjd	�dS)
N�ioctlZ
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFF�SIO_KEEPALIVE_VALSrB�dr)rBrFrF)	r�rXrr+r
r�rrDrE)rrrrr
�test_sock_ioctl�sz"GeneralModuleTests.test_sock_ioctlc
Cszytjdd�WnJtjk
r`}z'|jtjkrK|jd��WYdd}~XnXx0tjtd�D]}|jt|�d�qtWtjdd�tjdd�tjdd�t	j
r�tjdd�tjtd�tjtd�tjtd�tjtdtjtj�}xo|D]g\}}}}}|j|tj�|jt
|�d�|j|tj�|jt
|�d	�q2Wtjtdd
tj�}x0|D](\}}}}}|j|tj�q�Wtjtdd
d
tj�tjtdd
d
d
tj�tjdd
tjtjd
tj�tjtd�}tjdtdd�}	|j||	�tjtdtj�}tjtdd
tj�}	|j||	�tjtdd
tj�}tjtddtj�}	|j||	�tjtdd
d
tj�}tjtddtj�}	|j||	�tjtdd
d
d
tj�}tjtddtj�}	|j||	�tjdd
tjtjd
tj�}tjdddd
d
tjdtjdd
dtj�}	|j||	�|jttjdd�ttd�rvy#tjddd
d
d
tj�Wntjk
ruYnXdS)N�	localhost�Pzbuggy libc versionr-z	127.0.0.1z::1ZhttpzAddressFamily.AF_INETzSocketKind.SOCK_STREAMrr�rr�r�r��flagsu��AI_NUMERICSERV)r�getaddrinfor�r��EAI_SERVICEr3rfr��lenr�IPV6_ENABLEDrrr��SOL_TCP�
AI_PASSIVE�	AF_UNSPECr��UnicodeEncodeErrorrXrK)
rr��infoZinfosr�r�rD�socktyper �brrr
�testGetaddrinfo�sr
	
!z"GeneralModuleTests.testGetaddrinfocCs|jttjdd�dS)N�mail.python.orgr)rXr)r�r	rr�)rrrr
�test_getnameinfosz#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledcCsdtjd��tjd�WdQRXd}tj|�tj|�tj|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetrr��gethostbyname_exrLrRr)rrrrr
�	test_idna
s

zGeneralModuleTests.test_idnacsIttd�s ttd�r-�jd��fdd�}�fdd�}tj�\}}tjtj|�}z�|r�|jd��jt��&tj	d	�|j
d
tj�WdQRX|rtjtj|�tj	d	��jtj
|j
d
tj�Wdtj	d�tjtj|�|j�|j�XdS)N�alarmrsz9signal.alarm and socket.socketpair required for this testcs�jttjd�dS)Nr)r�r�math�acosh)r()rrr
�
ok_handler!sz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs"�jttjd�dddS)NrrB)r�rr]r^)r()rrr
�raising_handler#szEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg�?rB�xr)rX�signalrr3rs�SIGALRMr;r��ZeroDivisionErrorr\�sendallr�
SOCK_MAX_SIZE�timeoutr
)rZwith_timeoutr_r`�cr�	old_alarmr)rr
�check_sendall_interrupteds* 





z,GeneralModuleTests.check_sendall_interruptedcCs|jd�dS)NF)rj)rrrr
�test_sendall_interrupted:sz+GeneralModuleTests.test_sendall_interruptedcCs|jd�dS)NT)rj)rrrr
�%test_sendall_interrupted_with_timeout=sz8GeneralModuleTests.test_sendall_interrupted_with_timeoutcCs�tjtjtj�}t|�}|jt��}d}tj�WdQRX|j|t	|j
jd��tjtjtj�}|jd�}t|�}d}tj�|jt��d}tj�WdQRXdS)Nr�rb)
rrrr�ZassertWarns�ResourceWarningrZ
gc_collectr�r��warningr(�makefile)rr��rr�r�rrr
�test_dealloc_warn@s 
z$GeneralModuleTests.test_dealloc_warnc
CsUtjtjtj��6}|jd�}|j�|jt|�d�WdQRXdS)Nrmz<_io.BufferedReader name=-1>)rrrrpr
r�r�)rr��fprrr
�test_name_closed_socketioQs
z,GeneralModuleTests.test_name_closed_socketiocCs�tj���}|jddd�}|j|j��|j|j��|j|j��|j�|jt	|j�|jt	|j�|jt	|j�WdQRXdS)Nrm�	bufferingr)
rrpr��readabler6�writable�seekabler
r�r)rr�rsrrr
�test_unusable_closed_socketioWs
z0GeneralModuleTests.test_unusable_closed_socketiocCsqxjdD]b}|jd|��Gtj��3}|j|��}|j|j|�WdQRXWdQRXWdQRXqWdS)Nrqrm�rw�w�wb�mode)rqrmrzr{r|)�subTestrrpr�r})rr}r�rsrrr
�test_makefile_modebs

z%GeneralModuleTests.test_makefile_modecCslxedD]]}|jd|��Btj��.}|jtd��|j|�WdQRXWdQRXWdQRXqWdS)N�rtr/�+r r}zinvalid mode)r�r/r�r )r~r�assertRaisesRegexrrp)rr}r�rrr
�test_makefile_invalid_modeis

z-GeneralModuleTests.test_makefile_invalid_modec
Cs�tj�}|�<x4ttjd�D]}|jttj||�q'WWdQRXx}ttjd�D]h}tjtjtj|��}|j	|tj�tjtjtj
|��}|j	|tj
�qeWdS)NrB)r�range�pickle�HIGHEST_PROTOCOLr�rY�dumps�loadsrr�r)rr��protocolr�r�rrr
�test_pickleps$zGeneralModuleTests.test_picklecCs�xPdD]H}tjtjtj��'}|jtdf�|j|�WdQRXqWtjtjtj��$}|jtdf�|j�WdQRXdS)NrrBr)rr)rrrr1rfr)r�backlog�srvrrr
�test_listen_backlog{s
z&GeneralModuleTests.test_listen_backlogcCsbddl}tjtjtj�}|jtdf�|jt|j|j	d�|j
�dS)NrrB)�	_testcapirrrr1rfr�r�r�INT_MAXr
)rr�r�rrr
�test_listen_backlog_overflow�s
z/GeneralModuleTests.test_listen_backlog_overflowzIPv6 required for this test.c
Csm|jttjtjddfd�tjtjtj��)}|jt|jtjddf�WdQRXdS)Nrl��ri����)	r�r�rr�rr�r�rr1)rrrrr
�
test_flowinfo�sz GeneralModuleTests.test_flowinfoc
CsXtjtjtj��9}|jt|j�d�|jt|j�d�WdQRXdS)NzAddressFamily.AF_INETzSocketKind.SOCK_STREAM)rrrr�r�r�r�)rrrrr
�test_str_for_enums�sz%GeneralModuleTests.test_str_for_enumszWill not work on Windowsc
Cswtj�\}}|jtj|�tjddddd|��-}|j|jd�|j|jd�WdQRXdS)Nr�i��r�i4r�)	r�mkstempr+r�r�rr�r�r�)r�fdr�rrrr
�test_uknown_socket_family_repr�s

!z1GeneralModuleTests.test_uknown_socket_family_repr�sendfileztest needs os.sendfile()cCs�Gdd�d�}tj���}tjtjtj�}tj|�|jtj��|j||��WdQRX|jt	��|j|d��WdQRX|jt
��|j|d��WdQRXWdQRXdS)Nc@s(eZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dS)N)r�)rr�rrr
r$�szEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jS)N)r�)rrrr
r��szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rrrr$r�rrrr
�File�sr�r�i�lC)rr��open�curdir�O_RDONLYr
r��_GiveupOnSendfile�_sendfile_use_sendfiler�rY)rr�r�r�rrr
�test__sendfile_use_sendfile�s
z.GeneralModuleTests.test__sendfile_use_sendfile)@rrrr�r�rq�
skipUnlessr�r�r�r�r�r�r�r�rXrr�r�r�r�r�r�rr�cpython_onlyrrrrr#r*r/r2r4r8r:r=r?rBr�r�rGrWrYZis_resource_enabledr[rjrkrlrrrtryrr�r�r�r�rOr�r��skipIfr�r�rrrr
r��st$


,*	'=#'K
	!'r�z!SocketCan required for this test.c@s�eZdZdd�Zejeed�d�dd��Zdd�Z	ejeed�d�d	d
��Z
dd�Zd
d�Zejeed�d�dd��Z
ejeed�d�dd��ZdS)�BasicCANTestcCstjtjtjdS)N)r�AF_CANrr)rrrr
r��sz!BasicCANTest.testCrucialConstants�CAN_BCMz&socket.CAN_BCM required for this test.cCs_tjtjtjtjtjtjtjtjtj	tj
tjtjtj
dS)N)rr��CAN_BCM_TX_SETUP�CAN_BCM_TX_DELETE�CAN_BCM_TX_READ�CAN_BCM_TX_SEND�CAN_BCM_RX_SETUP�CAN_BCM_RX_DELETE�CAN_BCM_RX_READ�CAN_BCM_TX_STATUS�CAN_BCM_TX_EXPIRED�CAN_BCM_RX_STATUS�CAN_BCM_RX_TIMEOUT�CAN_BCM_RX_CHANGED)rrrr
�testBCMConstants�szBasicCANTest.testBCMConstantsc	Cs,tjtjtjtj��}WdQRXdS)N)rrrr)rrrrr
�testCreateSocket�s!zBasicCANTest.testCreateSocketc	Cs,tjtjtjtj��}WdQRXdS)N)rrr!r�)rrrrr
�testCreateBCMSocket�s!z BasicCANTest.testCreateBCMSocketc	Cs9tjtjtjtj��}|jd�WdQRXdS)Nr�)r�)rrrrr1)rrrrr
�testBindAny�s!zBasicCANTest.testBindAnyc
CsLtjtjtjtj��'}|jtd|jddf�WdQRXdS)Nzinterface name too longr/i)rrrrr�r	r1)rrrrr
�testTooLongInterfaceName�s!z%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c
Csxtjtjtjtj��S}xIdD]A}|jtjtj|�|j||jtjtj��q(WWdQRXdS)NrrB)rrB)	rrrrr9�SOL_CAN_RAWr�r�r5)rrZloopbackrrr
�testLoopback�s!
	zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c
Cs�d\}}tjd||�}tjtjtjtj��d}|jtjtj|�|j	||j
tjtjd��|jtjtjt|��WdQRXdS)N��z=IIr0)r�r�)r6�packrrrrr9r�r�r�r5r.)r�can_idZcan_maskZ
can_filterrrrr
�
testFilter�s!	zBasicCANTest.testFilterN)rrrr�rqr�rXrr�r�r�r�r�r�r�rrrr
r��s	r�z!Threading required for this test.c@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
jeed�d�dd��Ze
jeed�d�dd��ZdS)�CANTestr`cCstj|d|�dS)Nra)rdr$)rrarrr
r$szCANTest.__init__cCs7t|�}|jdd�}tj|j|||�S)Nr0s)rN�ljustr6r�r5)�clsr��data�can_dlcrrr
�build_can_frameszCANTest.build_can_framecCs5tj|j|�\}}}|||d|�fS)N)r6�unpackr5)r��framer�r�r�rrr
�dissect_can_frameszCANTest.dissect_can_framecCs`|jj|j�\}}|j|j|�|j|d|j�|j|dtj�dS)NrrB)r�recvfromr4r��cfr2rr�)rr�rmrrr
�
testSendFrameszCANTest.testSendFramecCs,|jdd�|_|jj|j�dS)Nrs)r�r�rbr<)rrrr
�_testSendFrameszCANTest._testSendFramecCs2|jj|j�\}}|j|j|�dS)N)rr�r4r�r�)rr�rmrrr
�testSendMaxFrame"szCANTest.testSendMaxFramecCs,|jdd�|_|jj|j�dS)Nrsr0s)r�r�rbr<)rrrr
�_testSendMaxFrame&szCANTest._testSendMaxFramecCs`|jj|j�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r4r��cf1�cf2)rr�rmrrr
�testSendMultiFrames*szCANTest.testSendMultiFramescCsT|jdd�|_|jj|j�|jdd�|_|jj|j�dS)N�sD3"�s�"3)r�r�rbr<r�)rrrr
�_testSendMultiFrames1szCANTest._testSendMultiFramesr�z&socket.CAN_BCM required for this test.cCsp|jj|j�\}}|j|j|�|j|�\}}}|j|j|�|j|j|�dS)N)rbr�r4r�r�r�r�r�)rr�rmr�r�r�rrr
�_testBCM8s
zCANTest._testBCMcCstjtjtjtj�}|j|j�|j|jf�d|_t	dddg�|_
|j|j|j
�|_tj
}d}d}d}}}}d}	d}
tj|j||||||||	|
�
}||j}|j|�}
|j|
t|��dS)Ni#����ri"rB)rrr!r�r+r
rnr2r��bytesr�r�r�r�r6r�r8r<r�rN)rZbcmZopcoderJrAZ
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr
�testBCMAs2			
zCANTest.testBCMN)rrrr$�classmethodr�r�r�r�r�r�r�r�rqr�rXrr�r�rrrr
r�sr�z#RDS sockets required for this test.c@s4eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdS)N)r�AF_RDSr)rrrr
r�dsz!BasicRDSTest.testCrucialConstantsc	Cs)tjtjtjd��}WdQRXdS)Nr)rrr)rrrrr
r�hszBasicRDSTest.testCreateSocketcCsad}tjtjtjd��9}|jtjtj|�|jtjtj|�WdQRXdS)Ni@r)rrrr9r��	SO_RCVBUF�	SO_SNDBUF)rr4rrrr
�testSocketBufferSizelsz!BasicRDSTest.testSocketBufferSizeN)rrrr�r�r�rrrr
r�asr�cs�eZdZddd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	e
j
d�dd��Ze	e
j
d�dd��Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Z�S) �RDSTestr`cCstj|d|�dS)Nra)rer$)rrarrr
r$wszRDSTest.__init__cs t�j�tj�|_dS)N)r#rr%rE�evt)r)r*rr
rzs
z
RDSTest.setUpcCsE|jj|j�\}}|j|j|�|j|j|�dS)N)rr�r4r�r�rh)rr�rmrrr
�testSendAndRecv~szRDSTest.testSendAndRecvcCs/d|_|jj|jdt|jf�dS)Nsspamr)r�rbr�rfr)rrrr
�_testSendAndRecv�s	zRDSTest._testSendAndRecvcCsf|jj|jtj�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r4r�MSG_PEEKr�r�)rr�rmrrr
�testPeek�s!zRDSTest.testPeekcCs/d|_|jj|jdt|jf�dS)Nsspamr)r�rbr�rfr)rrrr
�	_testPeek�s	zRDSTest._testPeek�recvmsgcCs8|jj|j�\}}}}|j|j|�dS)N)rr�r4r�r�)rr��ancdataZ	msg_flagsrmrrr
�testSendAndRecvMsg�s!zRDSTest.testSendAndRecvMsg�sendmsgcCs9dd|_|jj|jgfdt|jf�dS)Nshello rr)r�rbr�rfr)rrrr
�_testSendAndRecvMsg�s
zRDSTest._testSendAndRecvMsgcCs`|jj|j�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r4r��data1�data2)rr�rmrrr
�testSendAndRecvMulti�szRDSTest.testSendAndRecvMulticCsZd|_|jj|jdt|jf�d|_|jj|jdt|jf�dS)Nsbaconrsegg)r�rbr�rfrr�)rrrr
�_testSendAndRecvMulti�s	"	zRDSTest._testSendAndRecvMulticCsltj|jgggd�\}}}|j|j|�|jj|j�\}}|j|j|�dS)Ng@)�selectrr�r�r4r�r�)rrqr{r/r�rmrrr
�
testSelect�s'zRDSTest.testSelectcCs/d|_|jj|jdt|jf�dS)Nsselectr)r�rbr�rfr)rrrr
�_testSelect�s	zRDSTest._testSelectcCs|jj�dS)N)r�rQ)rrrr
�testCongestion�szRDSTest.testCongestioncCs�d|_|jjd�y |jjtjtjd�Wntk
rMYnX|jt��E}z-x&|jj	|jdt
|jf�qfWWd|jj
�XWdQRX|j|jjtj�tj|jgggd�\}}}|j|j|�dS)NsfillFi@rg@)r�rb�setblockingr9rr�r�r	r�r�rfrr�r@r�r�r�ZENOBUFSr�rr�)rr�rqr{r/rrr
�_testCongestion�s	 
*'zRDSTest._testCongestion)rrrr$rr�r�r�r�r�rr�r�r�r�r�r�r�r�rr)r*r
r�ssr�c@seZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zeje�Zejd$d%��Zd&d'�Zd(d)�Zd*S)+�BasicTCPTestr`cCstj|d|�dS)Nra)rir$)rrarrr
r$�szBasicTCPTest.__init__cCs&|jjd�}|j|t�dS)Ni)rk�recvr��MSG)rr�rrr
�testRecv�szBasicTCPTest.testRecvcCs|jjt�dS)N)ror<r�)rrrr
�	_testRecv�szBasicTCPTest._testRecvcCsL|jjtt�d�}|jjd�}||}|j|t�dS)Nri)rkr�rNr�r�)r�seg1�seg2r�rrr
�testOverFlowRecv�s
zBasicTCPTest.testOverFlowRecvcCs|jjt�dS)N)ror<r�)rrrr
�_testOverFlowRecv�szBasicTCPTest._testOverFlowRecvcCs,|jjd�\}}|j|t�dS)Ni)rkr�r�r�)rr�rmrrr
�testRecvFrom�szBasicTCPTest.testRecvFromcCs|jjt�dS)N)ror<r�)rrrr
�
_testRecvFrom�szBasicTCPTest._testRecvFromcCsX|jjtt�d�\}}|jjd�\}}||}|j|t�dS)Nri)rkr�rNr�r�)rr�rmr�r�rrr
�testOverFlowRecvFrom�s"
z!BasicTCPTest.testOverFlowRecvFromcCs|jjt�dS)N)ror<r�)rrrr
�_testOverFlowRecvFrom�sz"BasicTCPTest._testOverFlowRecvFromcCsHd}x'|jjd�}|s"P||7}q	W|j|dd�dS)N�i�fi)rkr�r�)rr��readrrr
�testSendAll�szBasicTCPTest.testSendAllcCsdd}|jj|�dS)Nri)rore)rZ	big_chunkrrr
�_testSendAlls
zBasicTCPTest._testSendAllcCsp|jj�}tj|tjtj�}|j|j�|j|tj�|j	d�}|j
|t�dS)Ni)rkr�r�fromfdrrr+r
r�r�r�r�)rr�r�r�rrr
�
testFromFdszBasicTCPTest.testFromFdcCs|jjt�dS)N)ror<r�)rrrr
�_testFromFdszBasicTCPTest._testFromFdcCsB|jj�}|j|j�|jd�}|j|t�dS)Ni)rk�dupr+r
r�r�r�)rr�r�rrr
�testDupszBasicTCPTest.testDupcCs|jjt�dS)N)ror<r�)rrrr
�_testDupszBasicTCPTest._testDupcCs3|jjd�}|j|t�|jj�dS)Ni)rkr�r�r�rGrQ)rr�rrr
�testShutdownszBasicTCPTest.testShutdowncCs$|jjt�|jjd�dS)Nr�)ror<r��shutdown)rrrr
�
_testShutdown&szBasicTCPTest._testShutdowncCstddl}|jjt�|jt|jj|jd�|jt|jjd|jd�|jjd�dS)NrrBr�)	r�ror<r�r�r�rr��UINT_MAX)rr�rrr
�_testShutdown_overflow,sz#BasicTCPTest._testShutdown_overflowcCs�|jj�}|jj�}|j||�|j|jj�|jt|jjd�|jj	�t
j
t
jt
jd|�}|j
|j	�|jd�}|j|t�dS)Nir�)rkr��detachr�r��_closedr�r	r�r
rrrr+r�)rr�r�r�r�rrr
�
testDetach7s
zBasicTCPTest.testDetachcCs|jjt�dS)N)ror<r�)rrrr
�_testDetachGszBasicTCPTest._testDetachN)rrrr$r�r�r�r�r�rrrrrr	r
rr
rrrr�ZtestShutdown_overflowrrrrrrr
r��s*
		r�c@sgeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestr`cCstj|d|�dS)Nra)rcr$)rrarrr
r$MszBasicUDPTest.__init__cCs,|jjtt��}|j|t�dS)N)rr�rNr�r�)rr�rrr
�testSendtoAndRecvPszBasicUDPTest.testSendtoAndRecvcCs#|jjtdt|jf�dS)Nr)rbr�r�rfr)rrrr
�_testSendtoAndRecvUszBasicUDPTest._testSendtoAndRecvcCs2|jjtt��\}}|j|t�dS)N)rr�rNr�r�)rr�rmrrr
r�XszBasicUDPTest.testRecvFromcCs#|jjtdt|jf�dS)Nr)rbr�r�rfr)rrrr
r]szBasicUDPTest._testRecvFromcCs|jt|jjd�dS)NrBr)r�rrr�)rrrr
�testRecvFromNegative`sz!BasicUDPTest.testRecvFromNegativecCs#|jjtdt|jf�dS)Nr)rbr�r�rfr)rrrr
�_testRecvFromNegativedsz"BasicUDPTest._testRecvFromNegativeN)
rrrr$rrr�rrrrrrr
rJsrcs�eZdZdZ�fdd�Zdd�ZfZdd�Zdd	�Zd
d�Z	dd
�Z
dZx$dD]Zee
eed�OZqsWdZdZdZdddddd�Z�S)�SendrecvmsgBaseg@cs tj�|_t�j�dS)N)r%rE�
misc_eventr#r)r)r*rr
r�szSendrecvmsgBase.setUpcCs|jj|�S)N)�cli_sockr<)rr�rrr
�sendToServer�szSendrecvmsgBase.sendToServercGs'|jj||jt|�d��S)N)rr��sendmsg_to_server_defaultsrN)rr(rrr
�sendmsgToServer�s	zSendrecvmsgBase.sendmsgToServercGs#|j||�}|j|�|S)N)r��registerRecvmsgResult)rr�r4r(�resultrrr
�	doRecvmsg�s
zSendrecvmsgBase.doRecvmsgcCsdS)Nr)rr#rrr
r"�sz%SendrecvmsgBase.registerRecvmsgResultcCs|j||�dS)N)r�)r�addr1�addr2rrr
�checkRecvmsgAddress�sz#SendrecvmsgBase.checkRecvmsgAddressr�
MSG_CTRUNC�MSG_OOBNc
Cs�|j}|j}|r5||jO}||jO}n&|dk	r[||jO}||jO}||M}||M}||O}||O}||@|@}|r�tdj|���||B|@}	|j||	@||	@�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�)
rrJ�eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothrrrr
�
checkFlags�s$		




	zSendrecvmsgBase.checkFlags)r(r))rrr�fail_timeoutrrr r!r$r"r'r+r�rMrr*r,r-r3rr)r*r
r�s

rc@seZdZdd�ZdS)�RecvmsgIntoMixincGst|�}|j|g|�}|j|�|j|dd�|j|d|�t|d|d��f|dd�S)NrrB)r.�recvmsg_intor"�assertGreaterEqual�assertLessEqualr�)rr�r4r(�bufr#rrr
r$�s
zRecvmsgIntoMixin.doRecvmsgN)rrrr$rrrr
r5�sr5cs(eZdZe�fdd��Z�S)�SendrecvmsgDgramFlagsBasecst�jtjBS)N)r#r-r�	MSG_TRUNC)r)r*rr
r-sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rrr�propertyr-rr)r*r
r:sr:cs(eZdZe�fdd��Z�S)�SendrecvmsgSCTPFlagsBasecst�jtjBS)N)r#r,r�MSG_EOR)r)r*rr
r,sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rrrr<r,rr)r*r
r=
sr=c@sReZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jS)N)r)rrrr
�	serv_socksz'SendrecvmsgConnectionlessBase.serv_sockcCs|jS)N)rb)rrrr
rsz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfS)Nr)rx)rrrr
r "sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|jj||j�S)N)rr�rx)rr�rrr
r&sz*SendrecvmsgConnectionlessBase.sendToServerN)rrrr<r@rr rrrrr
r?sr?c@s@eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jS)N)rk)rrrr
r@0sz"SendrecvmsgConnectedBase.serv_sockcCs|jS)N)ro)rrrr
r4sz!SendrecvmsgConnectedBase.cli_sockcCsdS)Nr)rr%r&rrr
r'8sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rrrr<r@rr'rrrr
rA*srAcs"eZdZ�fdd�Z�S)�SendrecvmsgServerTimeoutBasecs$t�j�|jj|j�dS)N)r#rr@r;r4)r)r*rr
rAs
z"SendrecvmsgServerTimeoutBase.setUp)rrrrrr)r*r
rB>srBc@seZdZdd�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|jjtt��t�dS)N)r�r@r�rNr�)rrrr
�testSendmsgJszSendmsgTests.testSendmsgcCs&|j|jtg�tt��dS)N)r�r!r�rN)rrrr
�_testSendmsgNszSendmsgTests._testSendmsgcCs&|j|jjtt��t�dS)N)r�r@r�rNr�)rrrr
�testSendmsgDataGeneratorQsz%SendmsgTests.testSendmsgDataGeneratorcCs3|j|jdd�tgD��tt��dS)Ncss|]}|VqdS)Nr)r�r�rrr
r�Vsz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>)r�r!r�rN)rrrr
�_testSendmsgDataGeneratorUs"z&SendmsgTests._testSendmsgDataGeneratorcCs&|j|jjtt��t�dS)N)r�r@r�rNr�)rrrr
�testSendmsgAncillaryGeneratorYsz*SendmsgTests.testSendmsgAncillaryGeneratorcCs6|j|jtgdd�gD��tt��dS)Ncss|]}|VqdS)Nr)r�r�rrr
r�^sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>)r�r!r�rN)rrrr
�_testSendmsgAncillaryGenerator]s%z+SendmsgTests._testSendmsgAncillaryGeneratorcCs&|j|jjtt��t�dS)N)r�r@r�rNr�)rrrr
�testSendmsgArrayaszSendmsgTests.testSendmsgArraycCs2|j|jtjdt�g�tt��dS)N�B)r�r!�arrayr�rN)rrrr
�_testSendmsgArrayes!zSendmsgTests._testSendmsgArraycCs&|j|jjtt��t�dS)N)r�r@r�rNr�)rrrr
�testSendmsgGatheriszSendmsgTests.testSendmsgGathercCs=|j|jtdd�tdd�g�tt��dS)Nr)r�r!r�rN)rrrr
�_testSendmsgGathermszSendmsgTests._testSendmsgGathercCs |j|jjd�d�dS)Ni�sdone)r�r@r�)rrrr
�testSendmsgBadArgspszSendmsgTests.testSendmsgBadArgscCs�|jt|jj�|jt|jd�|jt|jt��|jt|jt�g�|jt|jtt�g�|jt|jtgt��|jt|jtggt��|jt|jtggdt��|jd�dS)Nsnot in an iterablersdone)r�rYrr�r!�objectr�r)rrrr
�_testSendmsgBadArgsts 

z SendmsgTests._testSendmsgBadArgscCs |j|jjd�d�dS)Ni�sdone)r�r@r�)rrrr
�testSendmsgBadCmsg�szSendmsgTests.testSendmsgBadCmsgcCs�|jt|jtgt�g�|jt|jtgt�ddfg�|jt|jtgdt�dfg�|jt|jtgddt�fg�|jt|jtgdg�|jt|jtgdg�|jd�dS)Nr�data�*sdone)rr)rrrTrU)r�rYr!r�rQr)rrrr
�_testSendmsgBadCmsg�sz SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs |j|jjd�d�dS)Ni�sdone)r�r@r�)rrrr
�testSendmsgBadMultiCmsg�sz$SendmsgTests.testSendmsgBadMultiCmsgcCs[|jt|jtgdddg�|jt|jtgdt�g�|jd�dS)Nrrsdone)rrr)r�rYr!r�rQr)rrrr
�_testSendmsgBadMultiCmsg�s
z%SendmsgTests._testSendmsgBadMultiCmsgcCs |j|jjd�d�dS)Ni�sdone)r�r@r�)rrrr
�testSendmsgExcessCmsgReject�sz(SendmsgTests.testSendmsgExcessCmsgRejectc
Csettd�sT|jt�� }|jtgddg�WdQRX|j|jj�|j	d�dS)NrWrrsdone)rrr)rrr)
rXrr�r	r!r��assertIsNoner�r�r)rr�rrr
�_testSendmsgExcessCmsgReject�s
 z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdS)Nr)rrrr
�testSendmsgAfterClose�sz"SendmsgTests.testSendmsgAfterClosecCs*|jj�|jt|jtg�dS)N)rr
r�r	r!r�)rrrr
�_testSendmsgAfterClose�s
z#SendmsgTests._testSendmsgAfterCloseN)rrrrDrErFrGrHrIrJrMrNrOrPrRrSrVr�rrXr�rYrZr\r]r^rrrr
rCFs(rCc@syeZdZdd�Zdd�Zdd�Zdd�Zeej	dkd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs&|j|jjtt��t�dS)N)r�r@r�rNr�)rrrr
�testSendmsgExplicitNoneAddr�sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs/|j|jtggdd�tt��dS)Nr)r�r!r�rN)rrrr
�_testSendmsgExplicitNoneAddr�sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCsC|j|jjd�dd�|j|jjd|j��dS)Ni�arg)r�r@r�r�rrQr4)rrrr
�testSendmsgTimeout�s z%SendmsgStreamTests.testSendmsgTimeoutcCs^zI|jjd�|jtj�� x|jddg�q)WWdQRXWd|jj�XdS)Ng���Q��?rbi)rr;r�rrgr!rr@)rrrr
�_testSendmsgTimeout�s#z&SendmsgStreamTests._testSendmsgTimeoutrz<MSG_DONTWAIT not known to work on this platform when sendingcCsC|j|jjd�dd�|j|jjd|j��dS)Nirbrg)r�r@r�r�rrQr4)rrrr
�testSendmsgDontWait�s z&SendmsgStreamTests.testSendmsgDontWaitcCsxzc|jt��+}x!|jddggtj�qWWdQRX|j|jjtjtj	f�Wd|j
j�XdS)Nrbi)r�r	r!r�MSG_DONTWAITr�r�r��EAGAIN�EWOULDBLOCKrr@)rr�rrr
�_testSendmsgDontWait�s(z'SendmsgStreamTests._testSendmsgDontWaitN>r)
rrrr`rarcrdr�r�rrer�rirrrr
r_�sr_c@s(eZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdS)Nr)rrrr
�testSendmsgNoDestAddr�sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCsE|jt|jjtg�|jt|jjtggdd�dS)Nr)r�r	rr�r�)rrrr
�_testSendmsgNoDestAddr�s
z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rrrrkrlrrrr
rj�srjc@sQeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
�dd��Ze	j
d
�dd��Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zeed"�d#d$��Zejd%d&��Zeejd'�d(d)��Zejd*d+��Zd,S)-�RecvmsgGenericTestscCsq|j|jtt��\}}}}|j|t�|j||j�|j|g�|j|dd�dS)Nr/T)r$r@rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsg	s
'zRecvmsgGenericTests.testRecvmsgcCs|jt�dS)N)rr�)rrrr
�_testRecvmsg	sz RecvmsgGenericTests._testRecvmsgcCsw|j|jtt�dd�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)Nrr/T)r$r@rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgExplicitDefaults	s!z/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|jt�dS)N)rr�)rrrr
�_testRecvmsgExplicitDefaults	sz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsu|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrUr/T)r$r@rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgShorter	sz&RecvmsgGenericTests.testRecvmsgShortercCs|jt�dS)N)rr�)rrrr
�_testRecvmsgShorter$	sz'RecvmsgGenericTests._testRecvmsgShorterr0cCs|j|jtt�d�\}}}}|j|tdd��|j||j�|j|g�|j|dd�dS)Nrr/Fr)r$r@rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgTrunc)	sz$RecvmsgGenericTests.testRecvmsgTrunccCs|jt�dS)N)rr�)rrrr
�_testRecvmsgTrunc3	sz%RecvmsgGenericTests._testRecvmsgTrunccCst|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrBr/T)r$r@rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgShortAncillaryBuf7	sz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgShortAncillaryBuf@	sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCst|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)Ni(r/T)r$r@rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgLongAncillaryBufC	sz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgLongAncillaryBufL	sz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs-|jj�|jt|j|jd�dS)Ni)r@r
r�r	r$)rrrr
�testRecvmsgAfterCloseO	s
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdS)Nr)rrrr
�_testRecvmsgAfterCloseT	sz*RecvmsgGenericTests._testRecvmsgAfterClosecCsNz9|jjd�|jtj|j|jtt��Wd|jj	�XdS)Ng���Q��?)
r@r;r�rrgr$rNr�rr@)rrrr
�testRecvmsgTimeoutW	s
z&RecvmsgGenericTests.testRecvmsgTimeoutcCs#|j|jjd|j��dS)Nrg)r�rrQr4)rrrr
�_testRecvmsgTimeout`	sz'RecvmsgGenericTests._testRecvmsgTimeoutr�c	Cs}|j|jtt�ddtj�\}}}}|j|tdd��|j||j�|j|g�|j	|dddt
tdd��|j|jtt�dtj�\}}}}|j|t�|j||j�|j|g�|j	|dd�|j|jtt��\}}}}|j|t�|j||j�|j|g�|j	|dd�dS)	Nrrr/Fr2r;Tr)r$r@rNr�rr�r�r'rhr3rM)rr�r�rJrmrrr
�testRecvmsgPeekc	s('z#RecvmsgGenericTests.testRecvmsgPeekcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgPeek�	sz$RecvmsgGenericTests._testRecvmsgPeekr�cCs�|jj|j�|j|jtt��\}}}}|j|t�|j||j�|j|g�|j	|dd�dS)Nr/T)
r@r;r4r$rNr�r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgFromSendmsg�	s'z*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs=|j|jtdd�tdd�g�tt��dS)Nr)r�r!r�rN)rrrr
�_testRecvmsgFromSendmsg�	sz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rrrrnrorprqrrrsrZrequires_freebsd_versionrtrurvrwrxryrzr{r|r}r�rr~r�rr�r�rrrr
rm	s(		
			#rmc@sOeZdZejd�dd��Zdd�Zdd�Zdd	�Zd
S)�RecvmsgGenericStreamTestsz)fails intermittently when run within KojicCsk|j|jd�\}}}}|j|d�|j||j�|j|g�|j|dd�dS)Nirr/)r$r@r�r'rhr3)rr�r�rJrmrrr
�testRecvmsgEOF�	s
!z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|jj�dS)N)rr
)rrrr
�_testRecvmsgEOF�	sz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|j|jtt�d�\}}}}|j||j�|j|g�|j|dd�|j|jd�\}}}}|j||j�|j|g�|j|dd�||}|j|t�dS)Nrr/FiT)r$r@rNr�r'rhr�r3)rr�r�rJrmr�r�rrr
�testRecvmsgOverflow�	s!
z-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgOverflow�	sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)	rrrrqZ_skipInRpmBuildr�r�r�r�rrrr
r��	s	r�c@s(eZdZdd�Zdd�ZdS)�RecvmsgTestscCsh|jt|jj�|jt|jjddd�|jt|jjtt�dd�|jt|jjtd�gdd�|jt|jjt�dd�|jt|jjtt�t�d�|jt|jjtt�dt��|jjtt�dd�\}}}}|j	|t�|j
||j�|j	|g�|j|dd�dS)NrBrrr/Trr)
r�rYr@r�rrNr�r.rQr�r'rhr3)rr�r�rJrmrrr
�testRecvmsgBadArgs�	s$
*zRecvmsgTests.testRecvmsgBadArgscCs|jt�dS)N)rr�)rrrr
�_testRecvmsgBadArgs�	sz RecvmsgTests._testRecvmsgBadArgsN)rrrr�r�rrrr
r��	sr�c@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�RecvmsgIntoTestscCs�ttt��}|jt|jj�|jt|jjtt�dd�|jt|jj|dd�|jt|jjt�gdd�|jt|jjdgdd�|jt|jj|t�gdd�|jt|jj|gdd�|jt|jj|gt�d�|jt|jj|gdt��|jj|gdd�\}}}}|j	|tt��|j	|tt��|j
||j�|j	|g�|j|dd�dS)NrsI'm not writablerBr/Tr)
r.rNr�r�rYr@r6rQrr�r'rhr3)rr9�nbytesr�rJrmrrr
�testRecvmsgIntoBadArgs�	s0
'z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|jt�dS)N)rr�)rrrr
�_testRecvmsgIntoBadArgs�	sz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCs�ttt��}|jjdd�|gD��\}}}}|j|tt��|j|tt��|j||j�|j|g�|j|dd�dS)Ncss|]}|VqdS)Nr)r�r�rrr
r�
sz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>r/T)	r.rNr�r@r6r�r'rhr3)rr9r�r�rJrmrrr
�testRecvmsgIntoGenerator�	s	%z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgIntoGenerator
sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCs�tjddgtt��}|jj|g�\}}}}|j|tt��|j|j�t�|j||j�|j|g�|j	|dd�dS)NrKrr/T)
rLrNr�r@r6r��tobytesr'rhr3)rr9r�r�rJrmrrr
�testRecvmsgIntoArray
s!z%RecvmsgIntoTests.testRecvmsgIntoArraycCs|jt�dS)N)rr�)rrrr
�_testRecvmsgIntoArray
sz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|jj|t|�dd�|g�\}}}}|j|td��|j|td��|j|td��|j|td	��|j||j�|j|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	sMary had a little lambsMarys
01 had a 9slittle lamb---r/T)	r.r@r6�
memoryviewr�rNr'rhr3)rZb1Zb2Zb3r�r�rJrmrrr
�testRecvmsgIntoScatter
s	.z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|jd�dS)NsMary had a little lamb)r)rrrr
�_testRecvmsgIntoScatter'
sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)rrrr�r�r�r�r�r�r�r�rrrr
r��	s
r�c@s�eZdZyddlZWnek
r6dZYnXedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs|jtjd�d}ttd��tt|d|��}|jtjd�tjd�jd�xM|D]E}tj|�}|j|tjd�|�|j	||j�qsW|j
ttjd�|j
ttj|�|j
ttjtj
�dS)NrrBirr�r)�socklen_t_limitrr��listr�r�rL�itemsizer�r8r�r�r��maxsize)r�toobig�values�n�retrrr
�testCMSG_LEN8
s))
zCmsgMacroTests.testCMSG_LENrWcCs:|jtjd�d}ttd��tt|d|��}tjd�}|j|tjd�jd�x||D]t}tj|�}|j||�|j|tj	|��|j||tj	d��|j
||j�|}qyW|jttjd�|jttj|�|jttjt
j�dS)NrBirrr�r)r�rrWr�r�r�rLr�r7r�r8r�r�r�r�)rr�r�Zlastr�r�rrr
�testCMSG_SPACEM
s) 

zCmsgMacroTests.testCMSG_SPACE)rrrr�r(r��minr�r�rr�r�rrrr
r�+
s
r�c@s�eZdZdeZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
dd�Z	dd�Z
dd�Zdd�Zdd�Z
eed�dd��Zejdd��Zdd�Zdd �Zejejd!kd"�ejejjd#�d$�eed�d%d&����Zejejejd!kd"�ejejjd#�d$�d'd(����Zejejd!kd"�ejejjd#�d$�eed�d)d*����Zejejejd!kd"�ejejjd#�d$�d+d,����Zd-d.�Zejejd!kd/�d0d1��Zd2d3�Z d4d5�Z!d6d7�Z"eed�d8d9��Z#e#jd:d;��Z$d
d<d=�Z%d>d?�Z&d@dA�Z'dBdC�Z(dDdE�Z)dFdG�Z*dHdI�Z+dJdK�Z,dLdM�Z-dNdO�Z.dPdQ�Z/d
dRdS�Z0dTdU�Z1dVdW�Z2dXdY�Z3dZd[�Z4d\d]�Z5d^d_�Z6d`da�Z7dbdc�Z8ddS)f�
SCMRightsTestiUUcCs�g}xut|�D]g}tj�\}}|jtj|�|jtj|�tj|t|�j	��|j
|�qW|S)N)r�rr�r+r�r�r
�writer��encode�append)rr��fdsrr�r�rrr
�newFDsn
szSCMRightsTest.newFDscCs_xXt|�D]J\}}tj|dtj�|jtj|d�t|�j��q
WdS)Nri)�	enumerater��lseek�SEEK_SETr�rr�r�)rr�r�r�rrr
�checkFDsz
szSCMRightsTest.checkFDscCs|j|j|�dS)N)r+�closeRecvmsgFDs)rr#rrr
r"�
sz#SCMRightsTest.registerRecvmsgResultcCs�x�|dD]�\}}}|tjkr|tjkrtjd�}|j|dt|�t|�|j��x|D]}tj|�q|WqWdS)NrBr)	rr��
SCM_RIGHTSrL�	frombytesrNr�r�r
)rZrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datar�r�rrr
r��
s"
zSCMRightsTest.closeRecvmsgFDsc	CsP|j|jtgtjtjtjd|j|��fg�tt��dS)Nr)	r�r!r�rr�r�rLr�rN)rr�rrr
�createAndSendFDs�
s!zSCMRightsTest.createAndSendFDsrBrcCs@|\}}}}|j|t�|j||j�|j|dddtjd|�|j|t�|j	t
|�|�tjd�}	x�|D]�}
|j|
t�|
\}}}
|j|tj
�|j|tj�|j|
t�|jt
|
�td�|	j|
�q�W|jt
|	�|�|j|	�dS)Nr/Tr1r2rr)r�r�r'rhr3rr(r�r�r8rNrL�tupler�r�r��
SIZEOF_INTr�r�)rZnumfdsr#�maxcmsgs�ignoreflagsr�r�rJrmr��itemr�r�r�rrr
�checkRecvmsgFDs�
s$
zSCMRightsTest.checkRecvmsgFDscCs,|jd|j|jtt�d��dS)NrBi()r�r$r@rNr�)rrrr
�testFDPassSimple�
szSCMRightsTest.testFDPassSimplec	CsV|j|jtgtjtjtjd|jd��j�fg�t	t��dS)NrrB)
r�r!r�rr�r�rLr�r�rN)rrrr
�_testFDPassSimple�
s'zSCMRightsTest._testFDPassSimplecCs,|jd|j|jtt�d��dS)Nr�i()r�r$r@rNr�)rrrr
�testMultipleFDPass�
sz SCMRightsTest.testMultipleFDPasscCs|jd�dS)Nr�)r�)rrrr
�_testMultipleFDPass�
sz!SCMRightsTest._testMultipleFDPassrWcCs9|jd|j|jtt�tjdt���dS)Nr�)r�r$r@rNr�rrWr�)rrrr
�testFDPassCMSG_SPACE�
sz"SCMRightsTest.testFDPassCMSG_SPACEcCs|jd�dS)Nr�)r�)rrrr
�_testFDPassCMSG_SPACE�
sz#SCMRightsTest._testFDPassCMSG_SPACEcCsB|jd|j|jtt�tjdt��dtj�dS)NrBr�r�)	r�r$r@rNr�rr�r�r()rrrr
�testFDPassCMSG_LEN�
s	z SCMRightsTest.testFDPassCMSG_LENcCs|jd�dS)NrB)r�)rrrr
�_testFDPassCMSG_LEN�
sz!SCMRightsTest._testFDPassCMSG_LENrzskipping, see issue #12958�aixzskipping, see issue #22397cCs2|jd|j|jtt�d�dd�dS)Nr�i(r�)r�r$r@rNr�)rrrr
�testFDPassSeparate�
s	z SCMRightsTest.testFDPassSeparatec	Cs�|jd�\}}|j|jtgtjtjtjd|g�ftjtjtjd|g�fg�tt��dS)Nr�r)	r�r�r!r�rr�r�rLrN)r�fd0�fd1rrr
�_testFDPassSeparate�
sz!SCMRightsTest._testFDPassSeparatecCsQ|jd|j|jtt�tjt�tjt��dddtj	�dS)Nr�r�r�)
r�r$r@rNr�rrWr�r�r()rrrr
�testFDPassSeparateMinSpace�
s
	z(SCMRightsTest.testFDPassSeparateMinSpacec	Cs�|jd�\}}|j|jtgtjtjtjd|g�ftjtjtjd|g�fg�tt��dS)Nr�r)	r�r�r!r�rr�r�rLrN)rr�r�rrr
�_testFDPassSeparateMinSpacesz)SCMRightsTest._testFDPassSeparateMinSpacecCs�y|j|g|�}WnJtk
re}z*|j|jt�|j|g�}WYdd}~XnX|j|t|��dS)N)r!r	r�r�r�r�rN)rr�r�r�r\rrr
�sendAncillaryIfPossibles%z%SCMRightsTest.sendAncillaryIfPossiblezskipping, see issue #24725cCs5|jd|j|jtt�d�dtj�dS)Nri(r�)r�r$r@rNr�rr()rrrr
�testFDPassEmpty szSCMRightsTest.testFDPassEmptycCs&|jttjtjdfg�dS)Nr)r�r�rr�r�)rrrr
�_testFDPassEmpty(szSCMRightsTest._testFDPassEmptycCs�|j|jtt�d�\}}}}|j|t�|j||j�|j|dddtj	�|j
t|�d�xS|D]K\}}}|j|tj�|j|tj�|j
t|�t�q�WdS)Ni(r/Tr2rB)r$r@rNr�r�r'rhr3rr(r8r�r��
assertLessr�)rr�r�rJrmr�r�r�rrr
�testFDPassPartialInt-sz"SCMRightsTest.testFDPassPartialIntcCsH|jttjtjtjd|jg�j�dd�fg�dS)NrrBr)r�r�rr�r�rL�badfdr�)rrrr
�_testFDPassPartialInt:s
z#SCMRightsTest._testFDPassPartialIntc	Cs#|j|jtt�d�\}}}}|j|t�|j||j�|j|dddtj	�|j
t|�d�tjd�}xk|D]c\}}}|j|tj�|j|tj
�|j|dt|�t|�|j��q�W|j
t|�d�|j|�dS)Ni(r/Tr2r�r)r$r@rNr�r�r'rhr3rr(r8rLr�r�r�r�r�)	rr�r�rJrmr�r�r�r�rrr
�testFDPassPartialIntInMiddleAs&z*SCMRightsTest.testFDPassPartialIntInMiddlecCs�|jd�\}}|jttjtjtjd||jg�j�dd�ftjtjtjd|g�fg�dS)Nr�rrBr)	r�r�r�rr�r�rLr�r�)rr�r�rrr
�_testFDPassPartialIntInMiddleTs+z+SCMRightsTest._testFDPassPartialIntInMiddlecCsk|\}}}}|j|t�|j||j�|j|g�|j|dddtjd|�dS)Nr/Tr0r2)r�r�r'rhr3rr()rr#r�r�r�rJrmrrr
�checkTruncatedHeader`sz"SCMRightsTest.checkTruncatedHeadercCs/|j|j|jtt��dtj�dS)Nr�)r�r$r@rNr�rr()rrrr
�testCmsgTruncNoBufSizejs!z$SCMRightsTest.testCmsgTruncNoBufSizecCs|jd�dS)NrB)r�)rrrr
�_testCmsgTruncNoBufSizessz%SCMRightsTest._testCmsgTruncNoBufSizecCs2|j|j|jtt�d�dtj�dS)Nrr�)r�r$r@rNr�rr()rrrr
�testCmsgTrunc0vs$zSCMRightsTest.testCmsgTrunc0cCs|jd�dS)NrB)r�)rrrr
�_testCmsgTrunc0{szSCMRightsTest._testCmsgTrunc0cCs)|j|j|jtt�d��dS)NrB)r�r$r@rNr�)rrrr
�testCmsgTrunc1�szSCMRightsTest.testCmsgTrunc1cCs|jd�dS)NrB)r�)rrrr
�_testCmsgTrunc1�szSCMRightsTest._testCmsgTrunc1cCs-|j|j|jtt�td��dS)Nr�)r�r$r@rNr�r�)rrrr
�testCmsgTrunc2Int�szSCMRightsTest.testCmsgTrunc2IntcCs|jd�dS)NrB)r�)rrrr
�_testCmsgTrunc2Int�sz SCMRightsTest._testCmsgTrunc2IntcCs6|j|j|jtt�tjd�d��dS)NrrB)r�r$r@rNr�rr�)rrrr
�testCmsgTruncLen0Minus1�sz%SCMRightsTest.testCmsgTruncLen0Minus1cCs|jd�dS)NrB)r�)rrrr
�_testCmsgTruncLen0Minus1�sz&SCMRightsTest._testCmsgTruncLen0Minus1cCsN|j|jtt�|�\}}}}|j|t�|j||j�|j|dddtj	�|dkr�|gkr�dS|jt|�d�|d\}}	}
|j|tj
�|j|	tj�|jt|
�|�|j
t|
�|�tjd�}|j|
dt|
�t|
�|j��|j|�dS)Nr/Tr0rrBr)r$r@rNr�r�r'rhr3rr(r�r�r7r8rLr�r�r�)r�ancbuf�maxdataZmindatar�r�rJrmr�r�r�r�rrr
�checkTruncatedArray�s""z!SCMRightsTest.checkTruncatedArraycCs#|jdtjd�dd�dS)Nr�rr�)r�rr�)rrrr
�testCmsgTruncLen0�szSCMRightsTest.testCmsgTruncLen0cCs|jd�dS)NrB)r�)rrrr
�_testCmsgTruncLen0�sz SCMRightsTest._testCmsgTruncLen0cCs'|jdtjd�ddd�dS)Nr�rrBr�)r�rr�)rrrr
�testCmsgTruncLen0Plus1�sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|jd�dS)Nr�)r�)rrrr
�_testCmsgTruncLen0Plus1�sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs#|jdtjt�dt�dS)Nr�r�)r�rr�r�)rrrr
�testCmsgTruncLen1�szSCMRightsTest.testCmsgTruncLen1cCs|jd�dS)Nr�)r�)rrrr
�_testCmsgTruncLen1�sz SCMRightsTest._testCmsgTruncLen1cCs3|jdtjdt�dddtd�dS)Nr�r�rBr�)r�rr�r�)rrrr
�testCmsgTruncLen2Minus1�s z%SCMRightsTest.testCmsgTruncLen2Minus1cCs|jd�dS)Nr�)r�)rrrr
�_testCmsgTruncLen2Minus1�sz&SCMRightsTest._testCmsgTruncLen2Minus1Ni����)9rrrr�r�r�r"r�r�r�r�r�r�r�r�rr�r�r�r�r�rqr�r�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
r�f
sl
	
!0!
0'

	r�c@s�eZdZdZd^Zdd�Zdddd�Zeed	d
�dd��Z	e	j
d
d��Zeedd	d
�dd��Zej
dd��Z
eejd�eed	d
�dd���Zej
dd��Zdddd�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,��Zdd-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%ddGdH�Z&eedd	d
dd�dIdJ��Z'e'j
dKdL��Z(eedd	d
dd�dMdN��Z)e)j
dOdP��Z*eedd	d
dd�dQdR��Z+e+j
dSdT��Z,eedd	d
dd�dUdV��Z-e-j
dWdX��Z.eedd	d
dd�dYdZ��Z/e/j
d[d\��Z0d]S)_�RFC3542AncillaryTestr�rBcCsJi}x=|D]5\}}}|j||f|�||||f<q
W|S)N)r�)rr��dr�r�r�rrr
�ancillaryMapping�s
z%RFC3542AncillaryTest.ancillaryMappingr�rcCsi|jjtjtjd�|jj�|j|jtt	�|�\}}}}|j
|t	�|j||j�|j
|dddtjd|�|j
t|�d�|j|dt�|d\}}	}
|j
|tj�|j
|	tj�|j|
t�|j
t|
�t�tjd�}|j|
�|j|dd�|j|d|�dS)NrBr/Tr1r2rr)r@r9r�IPPROTO_IPV6�IPV6_RECVHOPLIMITrr@r$rNr�r�r'rhr3r(r�r��
IPV6_HOPLIMITr�r�rLr�r7r8)r�
ancbufsize�maxhopr�r�r�rJrmr�r�r�r rrr
�
checkHopLimit�s(


z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS)Nr�i()r�)rrrr
�testRecvHopLimitsz%RFC3542AncillaryTest.testRecvHopLimitcCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testRecvHopLimit
sz&RFC3542AncillaryTest._testRecvHopLimitrWcCs|jdtjt��dS)Nr�)r�rrWr�)rrrr
�testRecvHopLimitCMSG_SPACEsz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testRecvHopLimitCMSG_SPACEsz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cCs|jddd|j�dS)Nr�i(r�)r��	hop_limit)rrrr
�testSetHopLimit!sz$RFC3542AncillaryTest.testSetHopLimitcCsl|j|jjd|j��|j|jtgtjtj	t
j
d|jg�fg�tt��dS)Nrgr)
r�rrQr4r�r!r�rr�r�rLr�rN)rrrr
�_testSetHopLimit(sz%RFC3542AncillaryTest._testSetHopLimitcCs�|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�|�\}}}}|j|t
�|j||j
�|j|dddtjd|�|jt	|�d�|j|�}|tjtjf}	|jt	|	�t�tjd�}
|
j|	�|j|
dd�|j|
dd	�|tjtjf}|jt	|�t�tjd�}
|
j|�|j|
dd�|j|
d|�dS)
NrBr/Tr1r2r�rrr�)r@r9rr�r��IPV6_RECVTCLASSrr@r$rNr�r�r'rhr3r(r��IPV6_TCLASSr�rLr�r7r8r�)rr�r�r�r�r�rJrmZancmapZtcdatar Zhldatarrr
�checkTrafficClassAndHopLimit1s2




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr�r�cCs|jdd�dS)Nr�i()r�)rrrr
�testRecvTrafficClassAndHopLimitUsz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
� _testRecvTrafficClassAndHopLimit[sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs!|jdtjt�d�dS)Nr�r�)r�rrWr�)rrrr
�)testRecvTrafficClassAndHopLimitCMSG_SPACE`s	z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�*_testRecvTrafficClassAndHopLimitCMSG_SPACEhsz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jddd|j�dS)Nr�i(r�)r�r�)rrrr
�testSetTrafficClassAndHopLimitmsz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc	Cs�|j|jjd|j��|j|jtgtjtj	t
j
d|jg�ftjtjt
j
d|j
g�fg�tt��dS)Nrgr)r�rrQr4r�r!r�rr�r�rL�
traffic_classr�r�rN)rrrr
�_testSetTrafficClassAndHopLimitvsz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jddd|j�dS)Nr�i(r�)r�r�)rrrr
�testOddCmsgSize�sz$RFC3542AncillaryTest.testOddCmsgSizecCs<|j|jjd|j��yk|jtgtjtjt	j	d|j
g�j�dftjtjt	j	d|j
g�fg�}Wn�tk
r7}z�|j|jt�|jtgtjtjt	j	d|j
g�ftjtjt	j	d|j
g�fg�}|j|tt��WYdd}~XnXdS)Nrgrs)r�rrQr4r!r�rr�r�rLrr�r�r�r	r�r�r�r�rN)rr�r\rrr
�_testOddCmsgSize�s""%!z%RFC3542AncillaryTest._testOddCmsgSizecCs�|jjtjtjd�|jj�|dkr;fn|f}|j|jtt	�|�\}}}}|j
|t	�|j||j�|j
|g�|j
|dddtjd|�dS)NrBr/Tr0r2)r@r9rr�r�rr@r$rNr�r�r'rhr3r()rr�r�r(r�r�rJrmrrr
�checkHopLimitTruncatedHeader�s

z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdddtj�dS)Nr�r�)rrr()rrrr
r��sz+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
r��sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdddtj�dS)Nr�rr�)rrr()rrrr
�testSingleCmsgTrunc0�sz)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSingleCmsgTrunc0�sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nr�rB)r)rrrr
�testSingleCmsgTrunc1�sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSingleCmsgTrunc1�sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jddt�dS)Nr�r�)rr�)rrrr
�testSingleCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSingleCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs!|jdtjd�d�dS)Nr�rrB)rrr�)rrrr
�testSingleCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSingleCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs|jjtjtjd�|jj�|j|jtt	�tj
t�d�\}}}}|j|t	�|j
||j�|j|dddtj�|jt|�d�|r
|d\}}}|j|tj�|j|tj�|jt|�t�dS)NrBr/Tr0r)r@r9rr�r�rr@r$rNr�r�r�r�r'rhr3r(r8r�r�)rr�r�rJrmr�r�r�rrr
�testSingleCmsgTruncInData�s

1z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSingleCmsgTruncInData
sz/RFC3542AncillaryTest._testSingleCmsgTruncInDatacCsj|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�|�\}}}}|j|t
�|j||j
�|j|dddtjd|�|jt	|�d�|d\}}}	|j|tj�|j|tjtjh�|jt	|	�t�tjd�}
|
j|	�|j|
dd�|j|
dd�dS)	NrBr/Tr0r2rrr�)r@r9rr�r�r�rr@r$rNr�r�r'rhr3r(r�r�r�r�rLr�r7r8)rr�r�r�r�rJrmr�r�r�r rrr
�checkTruncatedSecondHeader

s(



z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs#|jtjt�dtj�dS)Nr�)rrrWr�r()rrrr
�testSecondCmsgTrunc0*
sz)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSecondCmsgTrunc00
sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|jtjt�d�dS)NrB)rrrWr�)rrrr
�testSecondCmsgTrunc15
sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSecondCmsgTrunc1:
sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs"|jtjt�dt�dS)Nr�)rrrWr�)rrrr
�testSecondCmsgTrunc2Int?
sz,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSecondCmsgTrunc2IntE
sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs+|jtjt�tjd�d�dS)NrrB)rrrWr�r�)rrrr
�testSecondCmsgTruncLen0Minus1J
sz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSecondCmsgTruncLen0Minus1P
sz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
Cs�|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�tjt�tj
t�d�\}}}}|j|t
�|j||j�|j|dddtj�tjtjh}|jd�\}}}|j|tj�|j|�|jt	|�t�tjd�}	|	j|�|j|	dd�|j|	dd�|r�|jd�\}}}|j|tj�|j|�|jt	|�t�|j|g�dS)NrBr/Tr0rrr�)r@r9rr�r�r�rr@r$rNr�rWr�r�r�r'rhr3r(r�r��pop�removerLr�r7r8r�)
rr�r�rJrmZ
cmsg_typesr�r�r�r rrr
�testSecomdCmsgTruncInDataU
s4


/


z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs0|j|jjd|j��|jt�dS)Nrg)r�rrQr4rr�)rrrr
�_testSecomdCmsgTruncInDataz
sz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataNr)1rrrr�rr�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�rrrrrr�r�rrrr	r
rrr
rrrrrrrrrrrrrrrrr
r��sp
!
!	# $r�c@seZdZdS)�SendrecvmsgUDPTestBaseN)rrrrrrr
r�
srr�c@seZdZdS)�SendmsgUDPTestN)rrrrrrr
r�
srr�c@seZdZdS)�RecvmsgUDPTestN)rrrrrrr
r�
srr6c@seZdZdS)�RecvmsgIntoUDPTestN)rrrrrrr
r �
sr c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs(|j|dd�|dd��dS)NrBrr)r�)rr%r&rrr
r'�
sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)rrrr'rrrr
r!�
sr!zIPv6 required for this test.r�r!c@seZdZdS)�SendmsgUDP6TestN)rrrrrrr
r"�
sr"c@seZdZdS)�RecvmsgUDP6TestN)rrrrrrr
r#�
sr#c@seZdZdS)�RecvmsgIntoUDP6TestN)rrrrrrr
r$�
sr$r�c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestN)rrrrrrr
r%�
sr%c@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestN)rrrrrrr
r&�
sr&c@seZdZdS)�SendrecvmsgTCPTestBaseN)rrrrrrr
r'�
sr'c@seZdZdS)�SendmsgTCPTestN)rrrrrrr
r(�
sr(c@seZdZdS)�RecvmsgTCPTestN)rrrrrrr
r)�
sr)c@seZdZdS)�RecvmsgIntoTCPTestN)rrrrrrr
r*�
sr*c@seZdZdS)�SendrecvmsgSCTPStreamTestBaseN)rrrrrrr
r+�
sr+rrr�c@seZdZdS)�SendmsgSCTPStreamTestN)rrrrrrr
r,�
sr,cs"eZdZ�fdd�Z�S)�RecvmsgSCTPStreamTestcseytt|�j�WnGtk
r`}z'|jtjkrA�|jd�WYdd}~XnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r#r-r�r	r��ENOTCONNr3)rr\)r*rr
r��
sz$RecvmsgSCTPStreamTest.testRecvmsgEOF)rrrr�rr)r*r
r-�
sr-cs"eZdZ�fdd�Z�S)�RecvmsgIntoSCTPStreamTestcseytt|�j�WnGtk
r`}z'|jtjkrA�|jd�WYdd}~XnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r#r/r�r	r�r.r3)rr\)r*rr
r��
sz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOF)rrrr�rr)r*r
r/�
sr/c@seZdZdS)�SendrecvmsgUnixStreamTestBaseN)rrrrrrr
r0sr0r�c@seZdZdS)�SendmsgUnixStreamTestN)rrrrrrr
r1sr1c@seZdZdS)�RecvmsgUnixStreamTestN)rrrrrrr
r2sr2c@seZdZdS)�RecvmsgIntoUnixStreamTestN)rrrrrrr
r3sr3r�r�c@seZdZdS)�RecvmsgSCMRightsStreamTestN)rrrrrrr
r4sr4c@seZdZdS)�RecvmsgIntoSCMRightsStreamTestN)rrrrrrr
r5%sr5cs^eZdZ�fdd�ZdZeed�rHdZdd�ZndZd	d�Z�S)
�InterruptedTimeoutBasecsXt�j�tjtjdd��}|jtjtj|�|j|jd�dS)NcSsddS)NrBrr)�signumr�rrr
r�:sz.InterruptedTimeoutBase.setUp.<locals>.<lambda>r)r#rrbrcr+�setAlarm)rZorig_alrm_handler)r*rr
r7s

zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCstjtj|�dS)N)rbr9�ITIMER_REAL)r�secondsrrr
r8GszInterruptedTimeoutBase.setAlarmr�cCstj|�dS)N)rbr\)rr;rrr
r8Ms)	rrrrrgrXrb�
alarm_timer8rr)r*r
r62sr6�siginterruptr\r9z+Don't have signal.alarm or signal.setitimercs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	e
j
d
�dd��Ze	e
j
d�dd��Z�S)�InterruptedRecvTimeoutTestcs$t�j�|jj|j�dS)N)r#rrr;rg)r)r*rr
rZs
z InterruptedRecvTimeoutTest.setUpc
Os:|j|j�|jt��}|||�WdQRXdS)N)r8r<r�rd)rr�r(r)r�rrr
�checkInterruptedRecv^sz/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|j|jjd�dS)Ni)r?rr�)rrrr
�testInterruptedRecvTimeoutesz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs |j|jjtd��dS)Ni)r?r�	recv_intor.)rrrr
�testInterruptedRecvIntoTimeouthsz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|j|jjd�dS)Ni)r?rr�)rrrr
�testInterruptedRecvfromTimeoutksz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs |j|jjtd��dS)Ni)r?r�
recvfrom_intor.)rrrr
�"testInterruptedRecvfromIntoTimeoutnsz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|j|jjd�dS)Ni)r?rr�)rrrr
�testInterruptedRecvmsgTimeoutqsz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr6cCs#|j|jjtd�g�dS)Ni)r?rr6r.)rrrr
�!testInterruptedRecvmsgIntoTimeoutusz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)
rrrrr?r@rBrCrEr�rrFrGrr)r*r
r>Ssr>cs�eZdZ�fdd�Zdd�Zdd�Zejdd�d	d
��Zejdd�dd��Z	ejdd�e
ejd
�dd���Z�S)�InterruptedSendTimeoutTestcs�t�j�|j�|_|j|jj�tjd|j�}|j	�|j
j�\|_}|j|jj�|j
�|jj|j�dS)N�target)r#rruror+r
r%�Thread�	doConnect�startrrjrkr�r;rg)rZ
cli_threadrm)r*rr
r�s


z InterruptedSendTimeoutTest.setUpcCs|jj|j�dS)N)rornrx)rrrr
rK�sz$InterruptedSendTimeoutTest.doConnectc
OsA|jt��+}x!|j|j�|||�qWWdQRXdS)N)r�rdr8r<)rr�r(r)r�rrr
�checkInterruptedSend�sz/InterruptedSendTimeoutTest.checkInterruptedSendrr�cCs|j|jjdd�dS)Nrbi)rMror<)rrrr
�testInterruptedSendTimeout�sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs$|j|jjdd|j�dS)Nrbi)rMror�rx)rrrr
�testInterruptedSendtoTimeout�sz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs!|j|jjddg�dS)Nrbi)rMror�)rrrr
�testInterruptedSendmsgTimeout�sz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)
rrrrrKrMrZrequires_mac_verrNrOr�rrPrr)r*r
rH|s

	rHc@s(eZdZdd�Zdd�ZdS)�
TCPCloserTestcCs�|jj�\}}|j�|j}tj|gggd�\}}}|j||g�|j|jd�d�|j�|j�dS)Ng�?rBr)rrjr
rbr�r�r�)rrlrm�sdrr�r�rrr
�	testClose�s
	$
zTCPCloserTest.testClosecCs*|jjt|jf�tjd�dS)Ng�?)rbrnrfr�time�sleep)rrrr
�
_testClose�szTCPCloserTest._testCloseN)rrrrSrVrrrr
rQ�s
rQc@sseZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr`cCstj|d|�dS)Nra)rpr$)rrarrr
r$�szBasicSocketPairTest.__init__cCs~|j|tj�ttd�r;|j|jtj�n|j|jtj�|j|jtj�|j|j	d�dS)Nr�r)
r�rrXr�r�r�rr�rr�)rr�rrr
�_check_defaults�sz#BasicSocketPairTest._check_defaultscCs|j|j�dS)N)rXrb)rrrr
�
_testDefaults�sz!BasicSocketPairTest._testDefaultscCs|j|j�dS)N)rXr)rrrr
�testDefaults�sz BasicSocketPairTest.testDefaultscCs&|jjd�}|j|t�dS)Ni)rr�r�r�)rr�rrr
r��szBasicSocketPairTest.testRecvcCs|jjt�dS)N)rbr<r�)rrrr
r��szBasicSocketPairTest._testRecvcCs|jjt�dS)N)rr<r�)rrrr
�testSend�szBasicSocketPairTest.testSendcCs&|jjd�}|j|t�dS)Ni)rbr�r�r�)rr�rrr
�	_testSend�szBasicSocketPairTest._testSendN)rrrr$rXrYrZr�r�r[r\rrrr
rW�s	rWc@seZdZddd�Zdd�Zdd�Zejdd	��Zeje�Z	e
jee
d
�d�ejdd
d�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�NonBlockingTCPTestsr`cCstj|d|�dS)Nra)r_r$)rrarrr
r$�szNonBlockingTCPTests.__init__cCs�|jjd�|j|jj��|jjd�|j|jj�d�tj�}y|jj�Wntk
r�YnXtj�}|j||dkd�dS)NTFgg�?z Error setting non-blocking mode.)	rr�r[rr�rTrjr	r�)rrL�endrrr
�testSetBlocking�s
z#NonBlockingTCPTests.testSetBlockingcCsdS)Nr)rrrr
�_testSetBlocking�sz$NonBlockingTCPTests._testSetBlockingcCs�ddl}|j|jkr+|jd�|jjd�|j|jj�d�|jj|jd�|j|jj��dS)Nrzneeds UINT_MAX < ULONG_MAXFgrB)	r�rZ	ULONG_MAXr3rr�r�rr[)rr�rrr
�testSetBlocking_overflows
z,NonBlockingTCPTests.testSetBlocking_overflow�
SOCK_NONBLOCKztest needs socket.SOCK_NONBLOCKr���cCs�|jj�tjtjtjtjB�|_tj|j�|_|jj	�t
j
�}y|jj�Wntk
r�YnXt
j
�}|j
||dkd�dS)Ng�?z&Error creating with non-blocking mode.)rr
rrrrbrrrrrTrjr	r�)rrLr^rrr
�testInitNonBlockings


z'NonBlockingTCPTests.testInitNonBlockingcCsdS)Nr)rrrr
�_testInitNonBlocking"sz(NonBlockingTCPTests._testInitNonBlockingcCs`|jjd�z.|jj�\}}|jtt��}Wd|j�|jjd�XdS)Nr)rr;rjr�rNr�r
)rrlrm�messagerrr
�testInheritFlags%s
z$NonBlockingTCPTests.testInheritFlagscCsGtjd�|jjt|jf�tjd�|jjt�dS)Ng�������?g�?)rTrUrbrnrfrr<r�)rrrr
�_testInheritFlags0s

z%NonBlockingTCPTests._testInheritFlagscCs�|jjd�y|jj�\}}Wntk
r=YnX|jd�tj|jggg�\}}}|j|kr�|jj�\}}|j|j��|j�n
|jd�dS)Nrz'Error trying to do non-blocking accept.z'Error trying to do accept after select.)	rr�rjr	r�r�r[rr
)rrlrmrr�r�rrr
�
testAccept6s

$
zNonBlockingTCPTests.testAcceptcCs*tjd�|jjt|jf�dS)Ng�������?)rTrUrbrnrfr)rrrr
�_testAcceptGs
zNonBlockingTCPTests._testAcceptcCs#|jj�\}}|j�dS)N)rrjr
)rrlrmrrr
�testConnectKszNonBlockingTCPTests.testConnectcCs-|jjd�|jjt|jf�dS)Nr)rbr;rnrfr)rrrr
�_testConnectPsz NonBlockingTCPTests._testConnectcCs�|jj�\}}|jd�y|jtt��}Wntk
rOYnX|jd�tj|ggg�\}}}||kr�|jtt��}|j	�|j
|t�n
|jd�dS)Nrz%Error trying to do non-blocking recv.z0Error during select call to non-blocking socket.)rrjr�r�rNr�r	r�r�r
r�)rrlrmr�rr�r�rrr
r�Ts


!
zNonBlockingTCPTests.testRecvcCs:|jjt|jf�tjd�|jjt�dS)Ng�������?)rbrnrfrrTrUr<r�)rrrr
r�fs
zNonBlockingTCPTests._testRecvN)rrrr$r_r`rr�raZ_testSetBlocking_overflowrqr�rXr�requires_linux_versionrerfrhrirjrkrlrmr�r�rrrr
r]�s"$r]c@soeZdZd:ZdZdZdZdZeZ	dZ
eZddd	�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);�FileObjectClassTestCaserBzutf-8�strictNrmr|r`cCstj|d|�dS)Nra)rir$)rrarrr
r$�sz FileObjectClassTestCase.__init__c	Cs{dd�td�D�\|_|_|_|_tj|�|jj|j	|j
d|jd|jd|j
�|_dS)NcSsg|]}tj��qSr)r%rE)r�rrrr
r��s	z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r��encoding�errors�newline)r��evt1�evt2�
serv_finished�cli_finishedrirrkrp�	read_moder4rqrrrs�	read_file)rrrr
r�s1
			zFileObjectClassTestCase.setUpcCsG|jj�|jj�|j|jj�d|_tj|�dS)N)rvr@ryr
r��closedrir)rrrr
r�s


	z FileObjectClassTestCase.tearDownc	CsJtj|�|jj|j|jd|jd|jd|j�|_	dS)Nrqrrrs)
rirVrorp�
write_moder4rqrrrs�
write_file)rrrr
rV�s
			z#FileObjectClassTestCase.clientSetUpcCsG|jj�|jj�|j|jj�d|_tj|�dS)N)rwr@r|r
r�rzrirW)rrrr
rW�s


	z&FileObjectClassTestCase.clientTearDowncCs�|jjd�|jjd�|jtj|jjd�|jt��}|jjd�WdQRX|jdt	|j
��dS)NrBrz!cannot read from timed out object)rkr;ryrr�rrgr	r�r�r�)r�ctxrrr
�testReadAfterTimeout�sz,FileObjectClassTestCase.testReadAfterTimeoutcCs;|jj|jdd��|jj�|jj�dS)Nrr)r|r��	write_msg�flushrvrQ)rrrr
�_testReadAfterTimeout�s
z-FileObjectClassTestCase._testReadAfterTimeoutcCsR|jjt|j�d�}|jjd�}||}|j||j�dS)Nr)ryrrN�read_msgr�)r�	first_segZ
second_segr�rrr
�
testSmallRead�s
z%FileObjectClassTestCase.testSmallReadcCs$|jj|j�|jj�dS)N)r|r�rr�)rrrr
�_testSmallRead�sz&FileObjectClassTestCase._testSmallReadcCs&|jj�}|j||j�dS)N)ryrr�r�)rr�rrr
�testFullRead�sz$FileObjectClassTestCase.testFullReadcCs$|jj|j�|jj�dS)N)r|r�rr
)rrrr
�
_testFullRead�sz%FileObjectClassTestCase._testFullReadcCsSt|j��}x'|jjd�}|s.P||7}qW|j||j�dS)NrB)r�r�ryrr�)rr9�charrrr
�testUnbufferedRead�sz*FileObjectClassTestCase.testUnbufferedReadcCs$|jj|j�|jj�dS)N)r|r�rr�)rrrr
�_testUnbufferedRead�sz+FileObjectClassTestCase._testUnbufferedReadcCs&|jj�}|j||j�dS)N)ry�readliner�r�)r�linerrr
�testReadline�sz$FileObjectClassTestCase.testReadlinecCs$|jj|j�|jj�dS)N)r|r�rr�)rrrr
�
_testReadline�sz%FileObjectClassTestCase._testReadlinecCs3|jj�|jj�}|j||j�dS)N)rkr
ryrr�r�)rr�rrr
�testCloseAfterMakefile�s
z.FileObjectClassTestCase.testCloseAfterMakefilecCs$|jj|j�|jj�dS)N)r|r�rr�)rrrr
�_testCloseAfterMakefile�sz/FileObjectClassTestCase._testCloseAfterMakefilecCsZ|jj�|jjtt��}t|jt�rC|j	�}|j
||j�dS)N)ryr
rkr�rNr�r�r�r��decoder�)rr�rrr
�testMakefileAfterMakefileClose�s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs$|jj|j�|jj�dS)N)r|r�rr�)rrrr
�_testMakefileAfterMakefileClose�sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|j|jj�dS)N)r�ryrz)rrrr
�testClosedAttr�sz&FileObjectClassTestCase.testClosedAttrcCs|j|jj�dS)N)r�r|rz)rrrr
�_testClosedAttr�sz'FileObjectClassTestCase._testClosedAttrcCs<|j|jj|j�|j|jj|jj��dS)N)r�ryr}rxr�rkr�)rrrr
�testAttributes�sz&FileObjectClassTestCase.testAttributescCs<|j|jj|j�|j|jj|jj��dS)N)r�r|r}r{r�ror�)rrrr
�_testAttributessz'FileObjectClassTestCase._testAttributescCsJ|jj�|jt|jj�|jj�|jt|jj�dS)N)ryr
r�rr�rkr	rg)rrrr
�
testRealCloses

z%FileObjectClassTestCase.testRealClosecCsdS)Nr)rrrr
�_testRealClosesz&FileObjectClassTestCase._testRealCloser)%rrrr4rqrrrsrxr�r�r{rr$rrrVrWr~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
roksB


roc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�!UnbufferedFileObjectClassTestCasercCsh|jj�}|j|d|j�|jjdd�|_|jj�}|j|d|j�dS)NsA. rmrsB. )ryr�r�rrkrp)rr�rrr
�testUnbufferedReadlines
z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs?|jjd|j�|jjd|j�|jj�dS)NsA. sB. )r|r�rr�)rrrr
�_testUnbufferedReadline#sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCs\|jj�|jjd�}|j||j�|jj�|jt|jjd�dS)Ni)rkr
r�r�r�ryr�r	)rr�rrr
�testMakefileClose(s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs$|jj|j�|jj�dS)N)r|r�rr�)rrrr
�_testMakefileClose1sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCsItj|j�}|jj�tj|j�}|j|d|�dS)NrB)r�r�rkryr
r�)rZrefcount_beforeZrefcount_afterrrr
�testMakefileCloseSocketDestroy5s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdS)Nr)rrrr
�_testMakefileCloseSocketDestroy;szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCsf|jjd�|j|jjtd��d�|j|jjt|j�d�d�|j	j
�|jjd�|jjt|j�d�}|dkr�t
jd�|jjt|j�d�}td�}|jj|�}|j|d�||d|�}|j||j�|j|jjtd��d�|j|jjd�d�dS)NFrrg�?g�?r�rB)rkr�r�ry�readintor.rrNr�rtr@rurQrTrU)rr�r9r�r�rrr
�testSmallReadNonBlockingBs ")

"z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCsQ|jjd�|jj|j�|jj�|jj�|jjd�dS)Ng�?g@)	rtrQr|r�rr�rur@rv)rrrr
�_testSmallReadNonBlockingUs


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs-|jjd�|jr)|j|j�dS)Ng@)rwrQ�serv_skippedr3)rrrr
�testWriteNonBlocking^s	z6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCs�d|_|jjd�dtj}d}|jj|�}|j|d�xLt|�D]5}|jj|�}|dkr�P|j|d�q[Wd|_dS)NFrarrz$failed to saturate the socket buffer)	r�ror�rrfr|r�r�r�)rZBIGZLIMITr�rrrr
�_testWriteNonBlockinges	
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rrrr4r�r�r�r�r�r�r�r�r�r�rrrr
r�s
		r�c@seZdZdZdS)�#LineBufferedFileObjectClassTestCaserBN)rrrr4rrrr
r�{sr�c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�N)rrrr4rrrr
r��sr�c@s7eZdZdZejd�ZdZeZdZ	dS)�"UnicodeReadFileObjectClassTestCaserqzutf-8r|r�N)
rrrrxr�r�r�r{rrsrrrr
r��s
r�c@s7eZdZdZeZdZejd�ZdZ	dS)�#UnicodeWriteFileObjectClassTestCasermr{zutf-8r�N)
rrrrxr�r�r{r�rrsrrrr
r��s
r�c@s@eZdZdZejd�ZdZejd�ZdZ	dS)�'UnicodeReadWriteFileObjectClassTestCaserqzutf-8r{r�N)
rrrrxr�r�r�r{rrsrrrr
r��s
r�c@seZdZdd�ZdS)�NetworkConnectionTestcCs+tjt|jf�|_|j|_dS)N)r�create_connectionrfrrbro)rrrr
rV�sz!NetworkConnectionTest.clientSetUpN)rrrrVrrrr
r��sr�c@seZdZdS)�
BasicTCPTest2N)rrrrrrr
r��sr�c@sbeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGstjd��dS)Nz	timed out)rrg)rr(rrr
rn�sz,NetworkConnectionNoServer.MockSocket.connectN)rrrrnrrrr
�
MockSocket�sr�ccs/tj}|jt_z	dVWd|t_XdS)N)rr�)rZ
old_socketrrr
�mocked_socket_module�s
		z.NetworkConnectionNoServer.mocked_socket_modulec
Cs}tj�}tjtjtj�}|j|j�|jt��}|j	t
|f�WdQRX|j|jj
t
j�dS)N)rr3rrrr+r
r�r	rnrfr�r�r��ECONNREFUSED)rrrbr�rrr
�test_connect�sz&NetworkConnectionNoServer.test_connectc
Cs}tj�}|jt��}tjt|f�WdQRXtjg}t	td�rc|j
tj�|j|j
j|�dS)N�ENETUNREACH)rr3r�r	rr�rfr�r�rXr�r�r�r�)rrr�Zexpected_errnosrrr
�test_create_connection�sz0NetworkConnectionNoServer.test_create_connectioncCsE|j��2|jtj��tjtdf�WdQRXWdQRXdS)Ni�)r�r�rrgr�rf)rrrr
�test_create_connection_timeout�s
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rrrrr��
contextlib�contextmanagerr�r�r�r�rrrr
r��s

r�c@s�eZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestr`cCs$tj|d|�tj|�dS)Nra)rr$r:)rrarrr
r$�sz(NetworkConnectionAttributesTest.__init__cCstj�|_dS)N)rr3�source_port)rrrr
rV�sz+NetworkConnectionAttributesTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rW�s
	z.NetworkConnectionAttributesTest.clientTearDowncCs#|jj�\}}|j�dS)N)rrjr
)rrlrmrrr
�_justAccept�sz+NetworkConnectionAttributesTest._justAcceptcCsNtjt|jfdd�|_|j|jj�|j|jjd�dS)Nrg�r�)	rr�rfrrbr+r
r�r�)rrrr
�_testFamily�s!z+NetworkConnectionAttributesTest._testFamilycCsgtjt|jfdddd|jf�|_|j|jj�|j|jj	�d|j�dS)Nrgr��source_addressr�rB)
rr�rfrr�rbr+r
r�rg)rrrr
�_testSourceAddresssz2NetworkConnectionAttributesTest._testSourceAddresscCs�|jtj�dk�tjd�z2tjt|jf�|_|j|jj	�Wdtjd�X|j
|jj�d�dS)NrU)r�rrrr�rfrrbr+r
r�r)rrrr
�_testTimeoutDefaults
z3NetworkConnectionAttributesTest._testTimeoutDefaultcCs�|jtj�dk�tjd�z8tjt|jfdd�|_|j|jj	�Wdtjd�X|j
|jj�d�dS)Nr�rg)r�rrrr�rfrrbr+r
r�r)rrrr
�_testTimeoutNones
!z0NetworkConnectionAttributesTest._testTimeoutNonecCs>tjt|jfdd�|_|j|jj�d�dS)Nrgr�)rr�rfrrbr�r)rrrr
�_testTimeoutValueNamed&s!z6NetworkConnectionAttributesTest._testTimeoutValueNamedcCsNtjt|jfd�|_|j|jj�|j|jj�d�dS)Nr�)	rr�rfrrbr+r
r�r)rrrr
�_testTimeoutValueNonamed+sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)rrrr$rVrWr�Z
testFamilyr�ZtestSourceAddressr�ZtestTimeoutDefaultr�ZtestTimeoutNoner�ZtestTimeoutValueNamedr�ZtestTimeoutValueNonamedr�rrrr
r��s r�c@saeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestr`cCs$tj|d|�tj|�dS)Nra)rr$r:)rrarrr
r$3sz'NetworkConnectionBehaviourTest.__init__cCsdS)Nr)rrrr
rV7sz*NetworkConnectionBehaviourTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rbr
r:rW)rrrr
rW:s
	z-NetworkConnectionBehaviourTest.clientTearDowncCsC|jj�\}}|j|j�tjd�|jd�dS)Nrsdone!)rrjr+r
rTrUr<)rrlrmrrr
�testInsideTimeout?s
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCsBtjt|jf�|_}|jd�}|j|d�dS)Nr-sdone!)rr�rfrrbr�r�)rr�r�rrr
�_testInsideTimeoutFsz1NetworkConnectionBehaviourTest._testInsideTimeoutcsHtjt|jfdd�|_�|jtj�fdd��dS)NrgrBcs
�jd�S)Nr-)r�r)r�rr
r�MszDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)rr�rfrrbr�rg)rr)r�r
�_testOutsideTimeoutKs%z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)
rrrr$rVrWr�ZtestOutsideTimeoutr�r�rrrr
r�0sr�c@sOeZdZdd�Zdd�Zejeed�d�dd��Z	d	S)
�TCPTimeoutTestcs,�fdd�}�jtj|d�dS)Ncs!�jjd��jj�dS)Ng�?)rr;rj)r(r))rrr
�
raise_timeoutSsz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP))r�rrg)rr�r)rr
�testTCPTimeoutRszTCPTimeoutTest.testTCPTimeoutcCs�d}y#|jjd�|jj�}WnMtjk
rM|jd�Yn,tk
rdd}Yn|jd�YnX|s�|jd�dS)NFgz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rr;rjrrgr�r	)r�ok�foorrr
�testTimeoutZeroYs

zTCPTimeoutTest.testTimeoutZeror\ztest needs signal.alarm()cs?|jjd�Gdd�dt���fdd�}tjtj|�}z�y�tjd�z�y|jj�}Wnhtjk
r�|j	d�YnT�k
r�YnC|j	dt
j�dd�tj
�f�YnX|j	d	�Wdtjd
�XWn�k
r"|j	d�YnXWdtjtj|�XdS)Ng@c@seZdZdS)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmN)rrrrrrr
�Alarmnsr�cs
��dS)Nr)rbr�)r�rr
�
alarm_handlerpsz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtrzgot Alarm in wrong place)rr;r.rbrcr\rjrrgr�r��exc_info�	traceback�
format_exc)rr�rir�r)r�r
�testInterruptedTimeoutgs(

	*
z%TCPTimeoutTest.testInterruptedTimeoutN)
rrrr�r�rqr�rXrbr�rrrr
r�Psr�c@s(eZdZdd�Zdd�ZdS)�UDPTimeoutTestcs,�fdd�}�jtj|d�dS)Ncs$�jjd��jjd�dS)Ng�?i)rr;r�)r(r))rrr
r��sz4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP))r�rrg)rr�r)rr
�testUDPTimeout�szUDPTimeoutTest.testUDPTimeoutcCs�d}y&|jjd�|jjd�}WnMtjk
rP|jd�Yn,tk
rgd}Yn|jd�YnX|s�|jd�dS)NFgiz%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)z1recv() returned success when we did not expect it)rr;r�rrgr�r	)rr�r�rrr
r��s

zUDPTimeoutTest.testTimeoutZeroN)rrrr�r�rrrr
r��sr�c@seZdZdd�ZdS)�TestExceptionscCse|jttt��|jttjt��|jttjt��|jttjt��dS)N)r��
issubclassr	r.rr�r�rg)rrrr
�testExceptionTree�sz TestExceptions.testExceptionTreeN)rrrr�rrrr
r��sr�rzLinux specific testc@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TestLinuxAbstractNamespace�lcCs�d}tjtjtj���}|j|�|j�tjtjtj��`}|j|j��|j�d�3}|j|j�|�|j|j	�|�WdQRXWdQRXWdQRXdS)Nspython-test-hello�r)
rr�rr1rrnrgrjr��getpeername)r�address�s1�s2Zs3rrr
�testLinuxAbstractNamespace�s

z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec
Cs^dd|jd}tjtjtj��*}|j|�|j|j�|�WdQRXdS)Ns�hrB)�
UNIX_PATH_MAXrr�rr1r�rg)rr�rrrr
�testMaxName�s
z&TestLinuxAbstractNamespace.testMaxNamecCsMdd|j}tjtjtj��}|jt|j|�WdQRXdS)N��h)r�rr�rr�r	r1)rr�rrrr
�testNameOverflow�sz+TestLinuxAbstractNamespace.testNameOverflowc
CsQtjtjtj�}z'|jd�|j|j�d�Wd|j�XdS)Nz
pythontests
pythontest)rr�rr1r�rgr
)rrrrr
�testStrName�s

z&TestLinuxAbstractNamespace.testStrNamec
CsOtjtjtj��0}|jtd��|j|j�d�WdQRXdS)Ns
pythontest)rr�rr1r.r�rg)rrrrr
�testBytearrayName�sz,TestLinuxAbstractNamespace.testBytearrayNameN)	rrrr�r�r�r�r�r�rrrr
r��s	r�ztest needs socket.AF_UNIXc@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestUnixDomaincCstjtjtj�|_dS)N)rr�rr�)rrrr
r�szTestUnixDomain.setUpcCs|jj�dS)N)r�r
)rrrr
r�szTestUnixDomain.tearDowncCsIytj|�SWn1tk
rD|jdj|tj���YnXdS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoderSr3r�r��getfilesystemencoding)rr�rrr
�encoded�s
zTestUnixDomain.encodedcCsky|j|�WnStk
rf}z3t|�dkrQ|jdj|��n�WYdd}~XnXdS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r1r	r�r3r�)rr�r�r\rrr
r1�s
zTestUnixDomain.bindcCs|j|jj�d�dS)Nr�)Nr�)r�r�rg)rrrr
�testUnbound�szTestUnixDomain.testUnboundcCsXtjjtj�}|j|j|�|jtj|�|j	|jj
�|�dS)N)r�r��abspathr�TESTFNr1r�r+r�r�rg)rr�rrr
�testStrAddr�szTestUnixDomain.testStrAddrcCsatjjtj�}|j|j|j|��|jtj	|�|j
|jj�|�dS)N)r�r�r�rr�r1r�r�r+r�r�rg)rr�rrr
�
testBytesAddr�szTestUnixDomain.testBytesAddrcCsstjjtj�}|j|�}|j|j|jdd��|j	tj
|�|j|jj�|�dS)N�ascii�surrogateescape)
r�r�r�rZTESTFN_UNICODEr�r1r�r�r+r�r�rg)rr�rVrrr
�testSurrogateescapeBinds
z&TestUnixDomain.testSurrogateescapeBindcCsttjdkr|jd�tjjtj�}|j|j|�|jtj	|�|j
|jj�|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLEr3r�r�r�r1r�r+r�r�rg)rr�rrr
�testUnencodableAddr
s
z"TestUnixDomain.testUnencodableAddrN)rrrrrr�r1r�r�r�r�r�rrrr
r��s	r�c@s�eZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
dd�Zdd�ZeZ
dd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestr`cCstj|d|�dS)Nra)rir$)rrarrr
r$szBufferIOTest.__init__cCs}tjddgtt��}|jj|�}|j|tt��|j�}|dtt��}|j|t�dS)NrKr)rLrNr�rkrAr�r�)rr9r�r�rrr
�testRecvIntoArrayszBufferIOTest.testRecvIntoArraycCs tt�}|jj|�dS)N)r�r�ror<)rr9rrr
�_testRecvIntoArray'szBufferIOTest._testRecvIntoArraycCs^td�}|jj|�}|j|tt��|dtt��}|j|t�dS)Ni)r.rkrAr�rNr�)rr9r�r�rrr
�testRecvIntoBytearray+s
z"BufferIOTest.testRecvIntoBytearraycCsdtd�}|jjt|��}|j|tt��|dtt��}|j|t�dS)Ni)r.rkrAr�r�rNr�)rr9r�r�rrr
�testRecvIntoMemoryview4s
z#BufferIOTest.testRecvIntoMemoryviewcCs�tjddgtt��}|jj|�\}}|j|tt��|j�}|dtt��}|j|t�dS)NrKr)rLrNr�rkrDr�r�)rr9r�rmr�rrr
�testRecvFromIntoArray=sz"BufferIOTest.testRecvFromIntoArraycCs tt�}|jj|�dS)N)r�r�ror<)rr9rrr
�_testRecvFromIntoArrayEsz#BufferIOTest._testRecvFromIntoArraycCsdtd�}|jj|�\}}|j|tt��|dtt��}|j|t�dS)Ni)r.rkrDr�rNr�)rr9r�rmr�rrr
�testRecvFromIntoBytearrayIs
z&BufferIOTest.testRecvFromIntoBytearraycCsjtd�}|jjt|��\}}|j|tt��|dtt��}|j|t�dS)Ni)r.rkrDr�r�rNr�)rr9r�rmr�rrr
�testRecvFromIntoMemoryviewRs
z'BufferIOTest.testRecvFromIntoMemoryviewcCs,td�}|jt|jj|d�dS)Nr0i)r.r�rrkrD)rr9rrr
�testRecvFromIntoSmallBuffer[sz(BufferIOTest.testRecvFromIntoSmallBuffercCs|jjt�dS)N)ror<r�)rrrr
�_testRecvFromIntoSmallBuffer`sz)BufferIOTest._testRecvFromIntoSmallBuffercCs0t�}|jj|�|jj|d�dS)Nr)r.rkrD)rr9rrr
�testRecvFromIntoEmptyBuffercs	z(BufferIOTest.testRecvFromIntoEmptyBufferN)rrrr$r�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�r�Z_testRecvFromIntoBytearrayr�Z_testRecvFromIntoMemoryviewr�r�rZ_testRecvFromIntoEmptyBufferrrrr
r�s"r�i�����cCs{ttd�sdSytd�}Wntttfk
rDdSYnX|�)x!|D]}|jd�rSdSqSWWdQRXdS)N�AF_TIPCFz
/proc/modulesztipc T)rXrr��FileNotFoundError�IsADirectoryError�PermissionErrorr)r�r�rrr
�isTipcAvailableos	
rz6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZdd�ZdS)�TIPCTestcCstjtjtj�}tjtjtj�}|j|j�|j|j�|jtjtjd�tjt	t
tf}|j|�tj
t	t
ttt
d�df}|jt|�|jd�\}}|j|j�|�|j|t�dS)NrBr�ri)rrr�r+r
r9r�r��TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERr1�TIPC_ADDR_NAMEr�r�r�r�r�rg)rr�rb�srvaddrZsendaddrr�Zrecvaddrrrr
�testRDM�s	
	zTIPCTest.testRDMN)rrrrrrrr
r�src@sOeZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TIPCThreadableTestr`cCs'tjj|d|�tj|�dS)Nra)rqrrr$r:)rrarrr
r$�szTIPCThreadableTest.__init__cCs�tjtjtj�|_|j|jj�|jjtjtjd�tj	t
ttf}|jj
|�|jj�|j�|jj�\|_|_|j|jj�dS)NrB)rrrr�r+r
r9r�r�r	r
rrr1rrArjrl�connaddr)rrrrr
r�s	

zTIPCThreadableTest.setUpcCs�tjd�tjtjtj�|_|j|jj�tjt	t
ttt
d�df}|jj
|�|jj�|_dS)Ng�������?r�r)rTrUrrrrbr+r
r
r
rr�rrnrg�cliaddr)rrmrrr
rV�s
	zTIPCThreadableTest.clientSetUpcCs<|jjd�}|j|t�|j|j|j�dS)Ni)rlr�r�r�rr)rr�rrr
�
testStream�szTIPCThreadableTest.testStreamcCs!|jjt�|jj�dS)N)rbr<r�r
)rrrr
�_testStream�szTIPCThreadableTest._testStreamN)rrrr$rrVrrrrrr
r�s
rc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestcCs�tj��}|j|j�WdQRX|j|j�tj��}|j�WdQRX|j|j�tj��}|jt|jd�WdQRX|j|j�dS)Nsfoo)rr6rr�r
r�r	re)rr�rrr
�_testSocketClass�sz$ContextManagersTest._testSocketClasscCsE|jj�\}}|j|j�|jd�}|j|�dS)Ni)rrjr+r
r�re)rrlrmr�rrr
�testCreateConnectionBase�sz,ContextManagersTest.testCreateConnectionBasec
Csr|jj�}tj|��=}|j|j�|jd�|j|jd�d�WdQRX|j	|j�dS)Nsfooi)
rrgrr�r6rrer�r�r�)rr�r�rrr
�_testCreateConnectionBase�s
 z-ContextManagersTest._testCreateConnectionBasecCsE|jj�\}}|j|j�|jd�}|j|�dS)Ni)rrjr+r
r�re)rrlrmr�rrr
�testCreateConnectionClose�sz-ContextManagersTest.testCreateConnectionClosecCs\|jj�}tj|��}|j�WdQRX|j|j�|jt|j	d�dS)Nsfoo)
rrgrr�r
r�rr�r	re)rr�r�rrr
�_testCreateConnectionClose�s
z.ContextManagersTest._testCreateConnectionCloseN)rrrrrrrrrrrr
r�s
rc@s�eZdZejeed�d�ejddd�dd���Z	dd	�Z
d
d�Zdd
�Zej
edkd�dd��Zej
edkd�dd��Zejeed�d�dd��ZdS)�InheritanceTestr>zSOCK_CLOEXEC not definedr�rcrdc
CsWtjtjtjtjB��1}|j|jtj@�|j|j��WdQRXdS)N)rrrr>r�r�r6�get_inheritable)rrrrr
�test_SOCK_CLOEXEC�sz!InheritanceTest.test_SOCK_CLOEXECc
Cs4tj�}|�|j|j�d�WdQRXdS)NF)rr�r)rr�rrr
�test_default_inheritable�sz(InheritanceTest.test_default_inheritablecCsXtj�}|�?|j�}|j�|�|j|j�d�WdQRXWdQRXdS)NF)rrr
r�r)rr�Znewsockrrr
�test_dups
zInheritanceTest.test_dupc
Csdtj�}|�K|jd�|j|j�d�|jd�|j|j�d�WdQRXdS)NTF)r�set_inheritabler�r)rr�rrr
�test_set_inheritables

z$InheritanceTest.test_set_inheritableNz
need fcntlcCs�tj�}|�v|j�}|j|j�d�tj|tj�}|tjM}tj|tj|�|j|j�d�WdQRXdS)NFT)rr�r�r�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)rr�r�rJrrr
�test_get_inheritable_cloexecsz,InheritanceTest.test_get_inheritable_cloexeccCs�tj�}|�m|j�}|jtj|tj�tj@tj�|jd�|jtj|tj�tj@d�WdQRXdS)NTr)rr�r�r"r#r$r )rr�r�rrr
�test_set_inheritable_cloexecs

z,InheritanceTest.test_set_inheritable_cloexecrszneed socket.socketpair()cCsbtj�\}}|j|j�|j|j�|j|j�d�|j|j�d�dS)NF)rrsr+r
r�r)rr�r�rrr
�test_socketpair,s
zInheritanceTest.test_socketpair)rrrrqr�rXrrrnrrrr!r�r"r%r&r'rrrr
r�s$	$$
rrbzSOCK_NONBLOCK not definedc@sCeZdZdddd�Zejddd�dd	��Zd
S)�NonblockConstantTestTgcCsg|r6|j|jtj@�|j|j�|�n-|j|jtj@�|j|j�d�dS)N)r�r�rrbr�rr6)rrZnonblockrgrrr
�
checkNonblock9s
z"NonblockConstantTest.checkNonblockr�rcrdc&Cs�tjtjtjtjB���}|j|�|jd�|j|d�|jd�|j|�|jd�|j|d�|jd�|j|dd�|jd�|j|d�WdQRXtj�}tjd�tj��}|j|�WdQRXtjd�tj��}|j|d�WdQRXtjd�tj��}|j|dd�WdQRXtjd�tj��}|j|d�WdQRXtj|�dS)NrBFrg@rgg)	rrrrbr)r�r;rr)rr�trrr
�test_SOCK_NONBLOCKAs6










z'NonblockConstantTest.test_SOCK_NONBLOCKN)rrrr)rrnr+rrrr
r(6sr(rCzWindows specificzneed multiprocessingc@s^eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCs^|j�}|j�}tj|�}|j�\}}|j|�|j�|j�dS)N)rSr�	fromsharerjrer
)r��qZsdatargrr�rhrrr
�remoteProcessServerhs

z%TestSocketSharing.remoteProcessServerc	Cs�tj�}tjd|jd|f�}|j�|jj|j�}|jj�}|jj	�|j
|�d}|j
|�tj|�}g}x'|j
d�}|s�P|j|�q�W|j	�dj|�}|j||�|j�dS)NrIr(s
slapmahfrorFr)�multiprocessingrI�Processr/rLr�share�pidrgr
r[rr�r�r�r�r�)	rr.r�r�rmrgr�m�receivedrrr
�	testSharevs(




zTestSocketSharing.testSharecCsV|jjtj��}|jttj|dd��|jttj|d�dS)NrBsfoor)rr2r��getpidr�rrr-)rr�rrr
�testShareLength�s z!TestSocketSharing.testShareLengthcCs�|j|j�d�|j|j�|j��|j|j|j�|j|j|j�|jdkr�|j|j|j�dS)Nr)r�rr�r�r�)rZorg�otherrrr
�compareSockets�sz TestSocketSharing.compareSocketsc
CsP|jjtj��}tj|�}z|j|j|�Wd|j�XdS)N)rr2r�r7rr-r:r
)rr�rrrr
�testShareLocal�s
z TestSocketSharing.testShareLocalcCs�tjtjg}tjtjg}x�|D]�}x�|D]�}ytj||�}Wntk
rkw8YnXzJ|jtj��}tj	|�}z|j
||�Wd|j�XWd|j�Xq8Wq+WdS)N)rrr�rr!r	r2r�r7r-r:r
)r�families�typesr�r*�sourcer�Zsharedrrr
�	testTypes�s


zTestSocketSharing.testTypesN)
rrrr�r/r6r8r:r;r?rrrr
r,cs#r,c@sxeZdZd>ZdZdZdZedd��Zedd	��Z	d
d�Z
dd
�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Z d8d9�Z!d:d;�Z"d<S)?�SendfileUsingSendTestrii rr�cCs�dd�}djdd�t|j�D��}ttjd��4}x*||j|j�D]}|j|�q\WWdQRXttjd��}|j�|_	WdQRXdS)Ncss1x||kr!|V||8}qW|r-|VdS)Nr)�total�steprrr
�chunks�s
z0SendfileUsingSendTest.setUpClass.<locals>.chunksrcSs(g|]}tjtj�j��qSr)�random�choice�string�
ascii_lettersr�)r�rrrr
r��s	z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r|rm)
r�r��BUFSIZEr�rr��FILESIZEr�r�FILEDATA)r�rC�chunkr�Zcsizerrr
�
setUpClass�sz SendfileUsingSendTest.setUpClasscCstjtj�dS)N)rr�r�)r�rrr
�
tearDownClass�sz#SendfileUsingSendTest.tearDownClasscCsL|jj|j�|jj�\}}|j|j�|j|j�|S)N)rr;�TIMEOUTrjr+r
)rrlrmrrr
�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs@g}x*|j|j�}|s"P|j|�q	Wdj|�S)Nr)r�rHr�r�)rrlr5rKrrr
�	recv_data�szSendfileUsingSendTest.recv_datacCs
t|d�S)N�_sendfile_use_send)rM)rr�rrr
�meth_from_sock�sz$SendfileUsingSendTest.meth_from_sockcCs�|jj�}ttjd�}tj|��^}|�N}|j|�}||�}|j||j	�|j|j
�|j	�WdQRXWdQRXdS)Nrm)rrgr�rr�rr�rRr�rI�tell)rr��filer��meth�sentrrr
�_testRegularFilesz&SendfileUsingSendTest._testRegularFilecCsK|j�}|j|�}|jt|�|j�|j||j�dS)N)rOrPr�rNrIrJ)rrlr�rrr
�testRegularFilesz%SendfileUsingSendTest.testRegularFilecCs�|jj�}tj|j�}tj|��k}|�[}|j|�}|j||j	�|j|j
�|j	�|jtj|j
|�WdQRXWdQRXdS)N)rrg�io�BytesIOrJrr�r�r�rIrSr�r�r�)rr�rTr�rVrrr
�_testNonRegularFilesz)SendfileUsingSendTest._testNonRegularFilecCsK|j�}|j|�}|jt|�|j�|j||j�dS)N)rOrPr�rNrIrJ)rrlr�rrr
�testNonRegularFilesz(SendfileUsingSendTest.testNonRegularFilecCs�|jj�}tjd}t|d��|jtj|�WdQRXt|d�}tj|��X}|�H}|j	|�}||�}|j
|d�|j
|j�d�WdQRXWdQRXdS)N�2r|rmr)rrgrr�r�r+r�rr�rRr�rS)rr��filenamerTr�rUrVrrr
�_testEmptyFileSend&s
z(SendfileUsingSendTest._testEmptyFileSendcCs/|j�}|j|�}|j|d�dS)Nr)rOrPr�)rrlr�rrr
�testEmptyFileSend2sz'SendfileUsingSendTest.testEmptyFileSendcCs�|jj�}ttjd�}tj|��h}|�X}|j|�}||dd�}|j||j	d�|j|j
�|j	�WdQRXWdQRXdS)Nrm�offseti�)rrgr�rr�rr�rRr�rIrS)rr�rTr�rUrVrrr
�_testOffset9sz!SendfileUsingSendTest._testOffsetcCsY|j�}|j|�}|jt|�|jd�|j||jdd��dS)Ni�)rOrPr�rNrIrJ)rrlr�rrr
�
testOffsetBsz SendfileUsingSendTest.testOffsetcCs�|jj�}ttjd�}tj|dd��d}|�T}d}|j|�}||d|�}|j||�|j|j	�|�WdQRXWdQRXdS)Nrmrgr�iGKLrA)
rrgr�rr�rr�rRr�rS)rr�rTr�rArUrVrrr
�
_testCountJs!z SendfileUsingSendTest._testCountcCsXd}|j�}|j|�}|jt|�|�|j||jd|��dS)NiGKL)rOrPr�rNrJ)rrArlr�rrr
�	testCountTs
zSendfileUsingSendTest.testCountcCs�|jj�}ttjd�}tj|dd��d}|�T}d}|j|�}||d|�}|j||�|j|j	�|�WdQRXWdQRXdS)Nrmrgr�rBrA)
rrgr�rr�rr�rRr�rS)rr�rTr�rArUrVrrr
�_testCountSmall]s!z%SendfileUsingSendTest._testCountSmallcCsXd}|j�}|j|�}|jt|�|�|j||jd|��dS)NrB)rOrPr�rNrJ)rrArlr�rrr
�testCountSmallgs
z$SendfileUsingSendTest.testCountSmallcCs�|jj�}ttjd�}tj|dd��n}|�^}d}|j|�}||ddd|�}|j||�|j|j	�|d�WdQRXWdQRXdS)Nrmrgr�i��rai�rA)
rrgr�rr�rr�rRr�rS)rr�rTr�rArUrVrrr
�_testCountWithOffsetps!z*SendfileUsingSendTest._testCountWithOffsetcCs\d}|j�}|j|�}|jt|�|�|j||jd|d��dS)Ni��i�)rOrPr�rNrJ)rrArlr�rrr
�testCountWithOffsetzs
z)SendfileUsingSendTest.testCountWithOffsetcCs�|jj�}ttjd�}tj|��\}|�L}|jd�|j|�}|j	t
||�|j	t
|j|�WdQRXWdQRXdS)NrmF)rrgr�rr�rr�r�rRr�rr�)rr�rTr�rUrrr
�_testNonBlocking�s
z&SendfileUsingSendTest._testNonBlockingcCs,|j�}|jd�r(|jd�dS)Ni z$was not supposed to receive any data)rOr�r�)rrlrrr
�testNonBlocking�sz%SendfileUsingSendTest.testNonBlockingcCs�|jj�}ttjd�}tj|dd��E}|�5}|j|�}||�}|j||j	�WdQRXWdQRXdS)Nrmrgr�)
rrgr�rr�rr�rRr�rI)rr�rTr�rUrVrrr
�_testWithTimeout�s!z&SendfileUsingSendTest._testWithTimeoutcCsK|j�}|j|�}|jt|�|j�|j||j�dS)N)rOrPr�rNrIrJ)rrlr�rrr
�testWithTimeout�sz%SendfileUsingSendTest.testWithTimeoutcCsy|jj�}ttjd�}tj|dd��<}|�,}|j|�}|jtj	||�WdQRXWdQRXdS)Nrmrgg{�G�z�?)
rrgr�rr�rr�rRr�rg)rr�rTr�rUrrr
�_testWithTimeoutTriggeredSend�s	z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|j�}|jd�dS)Ni�X)rOr�)rrlrrr
�testWithTimeoutTriggeredSend�sz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdS)Nr)rrrr
�_test_errors�sz"SendfileUsingSendTest._test_errorsc1Cslttjd��K}tjdtj��,}|j|�}|jtd||�WdQRXWdQRXttjd��B}tj��,}|j|�}|jtd||�WdQRXWdQRXttjd���}tj���}|j|�}|jtd||dd�|jtd||dd	�|jtd||dd
�|jtd||dd�WdQRXWdQRXdS)
Nrmr�rr�zbinary modezpositive integerrAr]g�������?rrBr)	r�rr�rr!rRr�rrY)rrTrrUrrr
�test_errors�s*z!SendfileUsingSendTest.test_errorsNi(i�)#rrrrIrHrJrNr�rLrMrOrPrRrWrXr[r\r_r`rbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrr
r@�s>		
	
	
	
		r@r�z%os.sendfile() required for this test.c@seZdZdd�ZdS)�SendfileUsingSendfileTestcCs
t|d�S)Nr�)rM)rr�rrr
rR�sz(SendfileUsingSendfileTest.meth_from_sockN)rrrrRrrrr
rr�srrcCs:tttttttttg	}|j	t
ttt
ttttttttttg�|jt�|jt�|jt�|j	ttg�|j	ttg�|j	t t!g�|j	t"t#t$t%t&t't(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:g�t;j<�}t;j=|�t;j>|�dS)N)?r�r�rQr�r�r�r�rr��extendr]ror�r�r�r�r�r�r�r�r�rrr(r�rWr�r�rrr�r�r�r�r�rrr r"r#r%r&r$r(r)r*r,r-r/r1r2r3r4r5r>rHr,r@rrrZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr
�	test_main�sh





ru�__main__)�rqZtestrr�rYr@rr�rrTr�rHr�r�rLrr��weakrefrrbr]r�r6rDrFr0r(r"rfr�r��_threadrNr%r�rrZHAVE_SOCKET_CANZHAVE_SOCKET_RDSr�r�rrrr r"r-r9r:r_rcrdrerirprtryrzr}r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr5r:r=r?rArBrCr_rjrmr�r�r�r�r�r�rrrr r!rOr"r#r$r%r&r'r(r)r*r+r,r-r/r0r1r2r3r4r5r6rXr>rHrQrWr]ror�r�r�r�r�r�rQr�r�r�r�r�r�r�r�r�r�r�r
rrrrrrrr(r�r,r@rrrurrrrr
�<module>s8

	



		
3k!		 	
���6D[Zz7ww2�$P;�i��
	!!&!2"�l


	;D9%)%DS',E+e�;