Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/test_socket.cpython-39.pyc

a

��g���@s�ddlZddlmZddlmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZddlZddlZddlZzddlZWne �ydZYn0zddl!Z!Wne �y.dZ!Yn0ej"Z"d�#d�Z$dZ%e�&�d	kZ'zddl(Z(Wne �ytdZ(Yn0d
d�Z)dd
�Z*dd�Z+dd�Z,dd�Z-dd�Z.dd�Z/dd�Z0dd�Z1ej2dd��Z3e*�Z4e+�Z5e,�Z6e-�Z7e.�Z8e/�Z9e0�Z:e;ed�Z<e1�Z=e�d�j>Z?Gd d!�d!ej@�ZAGd"d#�d#ej@�ZBGd$d%�d%eB�ZCGd&d'�d'�ZDGd(d)�d)ej@�ZEGd*d+�d+ej@�ZFGd,d-�d-�ZGGd.d/�d/eAeG�ZHGd0d1�d1eBeG�ZIe�Je<d2�Gd3d4�d4eCeG��ZKGd5d6�d6eEeG�ZLGd7d8�d8eFeG�ZMe�Ne!dud9�e�Je:d:�e�Je)�d;kd<�Gd=d>�d>ej@eG����ZOGd?d@�d@eH�ZPGdAdB�dBej@eG�ZQGdCdD�dDej@�ZRGdEdF�dFeR�ZSGdGdH�dHeDeReG�ZTGdIdJ�dJeSeT�ZUGdKdL�dLeR�ZVGdMdN�dNeV�ZWGdOdP�dPeR�ZXGdQdR�dReX�ZYGdSdT�dTeX�ZZGdUdV�dVeX�Z[GdWdX�dXeX�Z\GdYdZ�dZeX�Z]Gd[d\�d\e]�Z^Gd]d^�d^e]�Z_d_d`�Z`dadb�Zadcdd�ZbGdedf�dfej@�Zce�Je4dg�Gdhdi�diej@��Zde�Je4dg�Gdjdk�dkeL��Zee�Je5dl�Gdmdn�dnej@��Zfe�Je6do�Gdpdq�dqej@��Zge�Je7dr�Gdsdt�dtej@��Zhe�Je7dr�Gdudv�dveM��Zie�Je9dw�Gdxdy�dyej@��Zje�Ne!dud9�e�Je:d:�Gdzd{�d{ej@���Zke�Je=d|�Gd}d~�d~ej@��ZlGdd��d�eP�ZmGd�d��d�eI�Zne�Je<d2�Gd�d��d�eK��ZoGd�d��d�eD�ZpGd�d��d�ep�ZqGd�d��d�ep�ZrGd�d��d�ep�ZsGd�d��d�ep�ZtGd�d��d�ep�ZuGd�d��d�ep�ZvGd�d��d�ev�ZwGd�d��d�ew�ZxGd�d��d�ew�ZyGd�d��d�ep�ZzGd�d��d�ez�Z{Gd�d��d�ez�Z|Gd�d��d�eqez�Z}Gd�d��d�ej@�Z~Gd�d��d�ev�ZGd�d��d�ev�Z�Gd�d��d�ereteTeZ�Z�eaejd��Gd�d��d�eye���Z�eaejd��Gd�d��d�e|e���Z�eaejd��Gd�d��d�e}e���Z�Gd�d��d�ereteTe^�Z�eaejd��e�Jej�d��ebd�d��Gd�d��d�eye�����Z�eaejd��e�Jej�d��ebd�d��Gd�d��d�e|e�����Z�eaejd��e�Jej�d��ebd�d��Gd�d��d�e}e�����Z�eaejd��e�Jej�d��eaed��ebd�d��Gd�d��d�e�e������Z�eaejd��e�Jej�d��eaed��ebd�d��Gd�d��d�eqe�e������Z�e�Je<d2�Gd�dÄd�ereteTe[��Z�e�Je<d2�eaejd��Gd�dńd�eye����Z�e�Je<d2�eaejd��Gd�dDŽd�e|e����Z�e�Je<d2�eaejd��Gd�dɄd�e}e����Z�e�Je<d2�Gd�d˄d�ereteTe_��Z�eaejd��e�Jej�d��e�Je<d2�ebd�d��Gd�d̈́d�eye������Z�eaejd��e�Jej�d��e�Je<d2�ebd�d��Gd�dτd�e|e������Z�eaejd��e�Jej�d��e�Je<d2�ebd�d��Gd�dфd�e}e������Z�eaejd��e�Jej�d��e�Je<d2�eaed��ebd�d��Gd�dӄd�e�e�������Z�eaejd��e�Jej�d��e�Je<d2�eaed��ebd�d��Gd�dՄd�eqe�e�������Z�Gd�dׄd�eueUeY�Z�eaejd��Gd�dلd�exe���Z�eaejd��Gd�dۄd�e|e{e���Z�eaejd��Gd�d݄d�e}e{e���Z�Gd�d߄d�eseueUe\�Z�eaejd��e�Ne'd�ebd�d�d�Gd�d�d�exe�����Z�eaejd��e�Ne'd�ebd�d�d�Gd�d�d�e|e{e�����Z�eaejd��e�Ne'd�ebd�d�d�Gd�d�d�e}e{e�����Z�Gd�d�d�eueUeW�Z�eaejd��eaed�Gd�d�d�exe����Z�eaejd��eaed�Gd�d�d�e|e{e����Z�eaejd��eaed�Gd�d�d�e}e{e����Z�eaejd�d��eaed�d�d�Gd�d��d�ee����Z�eaejd�d��eaed�d�d�Gd�d��d�eqee����Z�Gd�d��d��Z�eaed��e�Je;ed���p�e;ed��d��Gd��d��de�eZ���Z�eaed��e�Je;ed���
p"e;ed��d��G�d�d��de�eDeSeY���Z�G�d�d��deH�Z�G�d�d��deQ�Z�G�d�d��deQ�Z�G�d	�d
��d
eH�Z�G�d�d��deP�Z�G�d
�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de��Z�G�d�d��de�em�Z�G�d�d��dej@�Z�G�d�d ��d eAeG�Z�G�d!�d"��d"eAeG�Z�G�d#�d$��d$eA�Z�G�d%�d&��d&eB�Z�e�Je<d2�G�d'�d(��d(eC��Z�G�d)�d*��d*ej@�Z�e�Jej�d+k�d,�G�d-�d.��d.ej@��Z�e�Je;ed��d/�G�d0�d1��d1ej@��Z�G�d2�d3��d3eP�Z��d4Z��d5Z��d6Z��d7�d8�Z�e�Jeƒ�d9�G�d:�d;��d;ej@��Z�e�Jeƒ�d9�G�d<�d=��d=ej@eG��Z�G�d>�d?��d?eH�Z�G�d@�dA��dAej@�Z�e�Je;e�dB��dC�G�dD�dE��dEej@��Z�e�JejȐdFk�dG�e�Je�dH�G�dI�dJ��dJeA���Z�G�dK�dL��dLeH�Z�e�Je;e�dM��dN�G�dO�dP��dPeʃ�Z�e�Je8�dQ�G�dR�dS��dSej@��Z�e�Jej�͐dT��dU�G�dV�dW��dWej@��Z�G�dX�dY��dYej@�Z�G�dZ�d[��d[ej@�Z�eae�d\�eae�d]�eaed�G�d^�d_��d_ej@����Zѐd`�da�Z�eӐdbk�r�e�ԡdS(c�N)�support)�
socket_helper)�proxyFuMichael Gilfix was hereሴ
�utf-8���AIXcCs�tdurdSttd�sdSz>tdd�� }t�|tjd�}Wd�n1sL0YWntylYdS0t�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.9/test/test_socket.py�get_cid2s
2rc	Cs>zt�tjtjtj�}Wnttfy0YdS0|��dS)z5Check whether CAN sockets are supported on this host.FT)r
�PF_CAN�SOCK_RAW�CAN_RAW�AttributeErrorr�close��srrr�_have_socket_can?src	Cs>zt�tjtjtj�}Wnttfy0YdS0|��dS)z;Check whether CAN ISOTP sockets are supported on this host.FT)r
r�
SOCK_DGRAM�	CAN_ISOTPrrrrrrr�_have_socket_can_isotpIsr"c	Cs>zt�tjtjtj�}Wnttfy0YdS0|��dS)z;Check whether CAN J1939 sockets are supported on this host.FT)r
rr �	CAN_J1939rrrrrrr�_have_socket_can_j1939Ssr$c	Cs<zt�tjtjd�}Wnttfy.YdS0|��dS)z5Check whether RDS sockets are supported on this host.rFT)r
�PF_RDS�SOCK_SEQPACKETrrrrrrr�_have_socket_rds]sr'c	Cs<zt�tjtjd�}Wnttfy.YdS0|��dS)z8Check whether AF_ALG sockets are supported on this host.rFT)r
�AF_ALGr&rrrrrrr�_have_socket_alggsr)c	Cs<zt�tjtjd�}Wnttfy.YdS0|��dS)z<Check whether AF_QIPCRTR sockets are supported on this host.rFT)r
�
AF_QIPCRTRr rrrrrrr�_have_socket_qipcrtrqsr+cCst�du}|S)z:Check whether AF_VSOCK sockets are supported on this host.N)r)�retrrr�_have_socket_vsock{s
r-c	Cs>zt�tjtjtj�}Wnttfy0YdS0|��dS)z>Check whether AF_BLUETOOTH sockets are supported on this host.FT)r
�AF_BLUETOOTH�SOCK_STREAM�BTPROTO_RFCOMMrrrrrrr�_have_socket_bluetooth�sr1c	cs8t��}zt�|�dVWt�|�nt�|�0dS�N)r
�getdefaulttimeout�setdefaulttimeout)�timeoutZold_timeoutrrr�socket_setdefaulttimeout�s

r6�IPPROTO_UDPLITE�ic@seZdZdd�Zdd�ZdS)�
SocketTCPTestcCs.t�tjtj�|_t�|j�|_|j��dSr2)r
�AF_INETr/�servr�	bind_port�port�listen��selfrrr�setUp�szSocketTCPTest.setUpcCs|j��d|_dSr2�r;rr?rrr�tearDown�s
zSocketTCPTest.tearDownN��__name__�
__module__�__qualname__rArCrrrrr9�sr9c@seZdZdd�Zdd�ZdS)�
SocketUDPTestcCs$t�tjtj�|_t�|j�|_dSr2)r
r:r r;rr<r=r?rrrrA�szSocketUDPTest.setUpcCs|j��d|_dSr2rBr?rrrrC�s
zSocketUDPTest.tearDownNrDrrrrrH�srHc@seZdZdd�ZdS)�SocketUDPLITETestcCs(t�tjtjtj�|_t�|j�|_dSr2)r
r:r r7r;rr<r=r?rrrrA�szSocketUDPLITETest.setUpN)rErFrGrArrrrrI�srIcs8eZdZdZ�fdd�Z�fdd�Z�fdd�Z�ZS)�ThreadSafeCleanupTestCasez�Subclass of unittest.TestCase with thread-safe cleanup methods.

    This subclass protects the addCleanup() and doCleanups() methods
    with a recursive lock.
    cs t�j|i|��t��|_dSr2)�super�__init__�	threading�RLock�
_cleanup_lock�r@�args�kwargs��	__class__rrrL�sz"ThreadSafeCleanupTestCase.__init__cs<|j�"t�j|i|��Wd�S1s.0YdSr2)rOrK�
addCleanuprPrSrrrU�sz$ThreadSafeCleanupTestCase.addCleanupcs<|j�"t�j|i|��Wd�S1s.0YdSr2)rOrK�
doCleanupsrPrSrrrV�sz$ThreadSafeCleanupTestCase.doCleanups)rErFrG�__doc__rLrUrV�
__classcell__rrrSrrJ�srJc@sHeZdZdZdZdZdZe�e�Z	dZ
e
de�e
�d7Z
dd	�Zd
S)�
SocketCANTestz�To be able to run this test, a `vcan0` CAN interface can be created with
    the following commands:
    # modprobe vcan
    # ip link add dev vcan0 type vcan
    # ip link set up vcan0
    �vcan0�z=IB3x8sz@3I4l2I�x�cCs`t�tjtjtj�|_|�|jj�z|j�|jf�Wn"t	yZ|�
d|j�Yn0dS�N�%network interface `%s` does not exist)r
rrrrrUr�bind�	interfacer�skipTestr?rrrrAs�zSocketCANTest.setUpN)rErFrGrWra�bufsize�
can_frame_fmtr�calcsizeZcan_frame_size�bcm_cmd_msg_fmtrArrrrrY�s

rYc@seZdZdZdZdd�ZdS)�
SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
    � cCsVt�tjtjd�|_|�|jj�zt�|j�|_Wnt	yP|�
d�Yn0dS)Nrzunable to bind RDS socket)r
r%r&r;rUrrr<r=rrbr?rrrrAszSocketRDSTest.setUpN)rErFrGrWrcrArrrrrgsrgc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ThreadableTesta�Threadable Test class

    The ThreadableTest class makes it easy to create a threaded
    client/server pair from an existing unit test. To create a
    new threaded class from an existing unit test, use multiple
    inheritance:

        class NewClass (OldClass, ThreadableTest):
            pass

    This class defines two new fixture functions with obvious
    purposes for overriding:

        clientSetUp ()
        clientTearDown ()

    Any new test functions within the class must then define
    tests in pairs, where the test name is preceded with a
    '_' to indicate the client portion of the test. Ex:

        def testFoo(self):
            # Server portion

        def _testFoo(self):
            # Client portion

    Any exceptions raised by the clients during their tests
    are caught and transferred to the main thread to alert
    the testing framework.

    Note, the server setup function cannot call any blocking
    functions that rely on the client thread during setup,
    unless serverExplicitReady() is called just before
    the blocking call (such as in setting up a client/server
    connection and performing the accept() in setUp().
    cCs|j|_|j|_dSr2)rA�_ThreadableTest__setUp�_setUpr?rrrrLDszThreadableTest.__init__cCs|j��dS)z�This method allows the server to explicitly indicate that
        it wants the client thread to proceed. This is useful if the
        server is about to execute a blocking routine that is
        dependent upon the client thread during its setup routine.N)�server_ready�setr?rrr�serverExplicitReadyIsz"ThreadableTest.serverExplicitReadycs
t���_�j�����jjddd�t���_t���_	t���_
t�d��_d�_
�fdd�}��|����}|�d�}||dd�}t�d|�}t��j|f��_z0z���Wnd�_
�Yn0W�j��n�j��0�j	�����j
j�dS)N�Fcs�j��r�j���dSr2)�queue�qsize�getrr?rr�raise_queued_exception[s
z5ThreadableTest._setUp.<locals>.raise_queued_exception�.�_T)rZwait_threads_exitZwait_threads�	__enter__rU�__exit__rM�Eventrl�client_ready�donerp�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadrjrm�wait)r@rsZ
methodnamer8Ztest_methodrr?rrkPs2






�

zThreadableTest._setUpc
Cs�|j��zbz|��WnFty^}z.|j�|�|��WYd}~W|j��dSd}~00W|j��n|j��0|j	r�|��dSt
|d�s�td��zHz
|�Wn0ty�}z|j�|�WYd}~n
d}~00W|��n
|��0dS)N�__call__z%test_func must be a callable function)rlr��clientSetUp�
BaseExceptionrp�put�clientTearDownryrmr|r�	TypeError)r@Z	test_func�errrr�rs(

�

$zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedErrorr?rrrr��szThreadableTest.clientSetUpcCs|j��t��dSr2)rzrmr��exitr?rrrr��s
zThreadableTest.clientTearDownN)
rErFrGrWrLrnrkr�r�r�rrrrris%"ric@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcCstj||d�t�|�dS�N)�
methodName�r9rLri�r@r�rrrrL�szThreadedTCPSocketTest.__init__cCst�tjtj�|_dSr2)r
r:r/�clir?rrrr��sz!ThreadedTCPSocketTest.clientSetUpcCs|j��d|_t�|�dSr2�r�rrir�r?rrrr��s
z$ThreadedTCPSocketTest.clientTearDownN)r��rErFrGrLr�r�rrrrr��s
r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPSocketTestr�cCstj||d�t�|�dSr�)rHrLrir�rrrrL�szThreadedUDPSocketTest.__init__cCst�tjtj�|_dSr2)r
r:r r�r?rrrr��sz!ThreadedUDPSocketTest.clientSetUpcCs|j��d|_t�|�dSr2r�r?rrrr��s
z$ThreadedUDPSocketTest.clientTearDownN)r�r�rrrrr��s
r�z'UDPLITE sockets required for this test.c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPLITESocketTestr�cCstj||d�t�|�dSr�)rIrLrir�rrrrL�sz"ThreadedUDPLITESocketTest.__init__cCst�tjtjtj�|_dSr2)r
r:r r7r�r?rrrr��sz%ThreadedUDPLITESocketTest.clientSetUpcCs|j��d|_t�|�dSr2r�r?rrrr��s
z(ThreadedUDPLITESocketTest.clientTearDownN)r�r�rrrrr��s
r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedCANSocketTestr�cCstj||d�t�|�dSr�)rYrLrir�rrrrL�szThreadedCANSocketTest.__init__cCsBt�tjtjtj�|_z|j�|jf�Wnty<Yn0dSr2)r
rrrr�r`rarr?rrrr��s
z!ThreadedCANSocketTest.clientSetUpcCs|j��d|_t�|�dSr2r�r?rrrr��s
z$ThreadedCANSocketTest.clientTearDownN)r�r�rrrrr��s
	r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedRDSSocketTestr�cCstj||d�t�|�dSr�)rgrLrir�rrrrL�szThreadedRDSSocketTest.__init__cCsLt�tjtjd�|_z |j�tdf�|j��|_WntyFYn0dS�Nr)	r
r%r&r�r`�HOST�getsockname�cli_addrrr?rrrr��sz!ThreadedRDSSocketTest.clientSetUpcCs|j��d|_t�|�dSr2r�r?rrrr��s
z$ThreadedRDSSocketTest.clientTearDownN)r�r�rrrrr��s
r��
need fcntlz%VSOCK sockets required for this test.�z-This test can only be run on a virtual guest.c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�ThreadedVSOCKSocketStreamTestr�cCstjj||d�t�|�dSr���unittest�TestCaserLrir�rrrrL�sz&ThreadedVSOCKSocketStreamTest.__init__cCsht�tjtj�|_|�|jj�|j�tjtf�|j�	�|�
�|j��\|_|_
|�|jj�dSr2)r
�AF_VSOCKr/r;rUrr`�VMADDR_CID_ANY�	VSOCKPORTr>rn�accept�conn�connaddrr?rrrrA�s
z#ThreadedVSOCKSocketStreamTest.setUpcCsDt�d�t�tjtj�|_|�|jj�t�}|j�	|t
f�dS)N皙�����?)�time�sleepr
r�r/r�rUrr�connectr�)r@Zcidrrrr��s

z)ThreadedVSOCKSocketStreamTest.clientSetUpcCs|j�d�}|�|t�dS�N�)r��recv�assertEqual�MSG�r@�msgrrr�
testStreamsz(ThreadedVSOCKSocketStreamTest.testStreamcCs|j�t�|j��dSr2�r��sendr�rr?rrr�_testStreamsz)ThreadedVSOCKSocketStreamTest._testStreamN)r��rErFrGrLrAr�r�r�rrrrr��s

	r�c@s:eZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�SocketConnectedTestz�Socket tests for client-server connection.

    self.cli_conn is a client socket connected to the server.  The
    setUp() method guarantees that it is connected to the server.
    r�cCstj||d�dSr�)r�rLr�rrrrLszSocketConnectedTest.__init__cCs*t�|�|��|j��\}}||_dSr2)r�rArnr;r��cli_conn�r@r��addrrrrrAs
zSocketConnectedTest.setUpcCs|j��d|_t�|�dSr2)r�rr�rCr?rrrrCs
zSocketConnectedTest.tearDowncCs(t�|�|j�t|jf�|j|_dSr2)r�r�r�r�r�r=�	serv_connr?rrrr�s
zSocketConnectedTest.clientSetUpcCs|j��d|_t�|�dSr2)r�rr�r�r?rrrr�$s
z"SocketConnectedTest.clientTearDownN)r�)	rErFrGrWrLrArCr�r�rrrrr�s
r�c@s>eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�SocketPairTestr�cCs*tjj||d�t�|�d|_d|_dSr�)r�r�rLrir�r;r�rrrrL+s
zSocketPairTest.__init__cCst��Sr2)r
�
socketpairr?rrrr�1szSocketPairTest.socketpaircCs|��\|_|_dSr2)r�r;r�r?rrrrA5szSocketPairTest.setUpcCs|jr|j��d|_dSr2rBr?rrrrC8s
zSocketPairTest.tearDowncCsdSr2rr?rrrr�=szSocketPairTest.clientSetUpcCs$|jr|j��d|_t�|�dSr2r�r?rrrr�@s
zSocketPairTest.clientTearDownN)r�)	rErFrGrLr�rArCr�r�rrrrr�)s
r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�SocketTestBasez�A base class for socket tests.

    Subclasses must provide methods newSocket() to return a new socket
    and bindSock(sock) to bind it to an unused address.

    Creates a socket self.serv and sets self.serv_addr to its address.
    cCs|��|_|��dSr2)�	newSocketr;�
bindServerr?rrrrAVs
zSocketTestBase.setUpcCs|�|j�|j��|_dS)z9Bind server socket and set self.serv_addr to its address.N)�bindSockr;r��	serv_addrr?rrrr�ZszSocketTestBase.bindServercCs|j��d|_dSr2rBr?rrrrC_s
zSocketTestBase.tearDownN)rErFrGrWrAr�rCrrrrr�Msr�cs eZdZdZ�fdd�Z�ZS)�SocketListeningTestMixinz%Mixin to listen on the server socket.cst���|j��dSr2)rKrAr;r>r?rSrrrAgs
zSocketListeningTestMixin.setUp)rErFrGrWrArXrrrSrr�dsr�cs@eZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Z�Z	S)�ThreadedSocketTestMixinz�Mixin to add client socket and allow client/server tests.

    Client socket is self.cli and its address is self.cli_addr.  See
    ThreadableTest for usage information.
    cs t�j|i|��t�|�dSr2)rKrLrirPrSrrrLtsz ThreadedSocketTestMixin.__init__cCs|��|_|��dSr2)�newClientSocketr��
bindClientr?rrrr�xs
z#ThreadedSocketTestMixin.clientSetUpcCs|��S)z&Return a new socket for use as client.)r�r?rrrr�|sz'ThreadedSocketTestMixin.newClientSocketcCs|�|j�|j��|_dS)z8Bind client socket and set self.cli_addr to its address.N)r�r�r�r�r?rrrr��sz"ThreadedSocketTestMixin.bindClientcCs|j��d|_t�|�dSr2r�r?rrrr��s
z&ThreadedSocketTestMixin.clientTearDown)
rErFrGrWrLr�r�r�r�rXrrrSrr�lsr�csDeZdZdZ�fdd�Z�fdd�Z�fdd�Z�fdd	�Z�ZS)
�ConnectedStreamTestMixinz�Mixin to allow client/server stream tests with connected client.

    Server's socket representing connection to client is self.cli_conn
    and client's connection to server is self.serv_conn.  (Based on
    SocketConnectedTest.)
    cs*t���|��|j��\}}||_dSr2)rKrArnr;r�r�r�rSrrrA�s
zConnectedStreamTestMixin.setUpcs|j��d|_t���dSr2)r�rrKrCr?rSrrrC�s
z!ConnectedStreamTestMixin.tearDowncs$t���|j�|j�|j|_dSr2)rKr�r�r�r�r�r?rSrrr��s
z$ConnectedStreamTestMixin.clientSetUpcs6z|j��d|_Wnty&Yn0t���dSr2)r�rrrKr�r?rSrrr��s

z'ConnectedStreamTestMixin.clientTearDown)	rErFrGrWrArCr�r�rXrrrSrr��s
r�cs(eZdZdZ�fdd�Zdd�Z�ZS)�UnixSocketTestBasez(Base class for Unix-domain socket tests.cs(t��|_|�tj|j�t���dSr2)�tempfile�mkdtemp�dir_pathrU�os�rmdirrKrAr?rSrrrA�s
zUnixSocketTestBase.setUpcCs,tj|jd�}t�||�|�tj|�dS)N)�dir)r��mktempr�r�bind_unix_socketrUr�unlink)r@�sock�pathrrrr��szUnixSocketTestBase.bindSock)rErFrGrWrAr�rXrrrSrr��sr�c@seZdZdZdd�ZdS)�UnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.cCst�tjtj�Sr2)r
�AF_UNIXr/r?rrrr��szUnixStreamBase.newSocketN�rErFrGrWr�rrrrr��sr�cs,eZdZdZeZ�fdd�Zdd�Z�ZS)�InetTestBasez!Base class for IPv4 socket tests.cst���|jd|_dS�Nro)rKrAr�r=r?rSrrrA�s
zInetTestBase.setUpcCstj||jd�dS)N��host)rr<r��r@r�rrrr��szInetTestBase.bindSock)	rErFrGrWr�r�rAr�rXrrrSrr��sr�c@seZdZdZdd�ZdS)�TCPTestBasez#Base class for TCP-over-IPv4 tests.cCst�tjtj�Sr2)r
r:r/r?rrrr��szTCPTestBase.newSocketNr�rrrrr��sr�c@seZdZdZdd�ZdS)�UDPTestBasez#Base class for UDP-over-IPv4 tests.cCst�tjtj�Sr2)r
r:r r?rrrr��szUDPTestBase.newSocketNr�rrrrr��sr�c@seZdZdZdd�ZdS)�UDPLITETestBasez'Base class for UDPLITE-over-IPv4 tests.cCst�tjtjtj�Sr2)r
r:r r7r?rrrr��szUDPLITETestBase.newSocketNr�rrrrr��sr�c@seZdZdZdd�ZdS)�SCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.cCst�tjtjtj�Sr2)r
r:r/�IPPROTO_SCTPr?rrrr��s�zSCTPStreamBase.newSocketNr�rrrrr��sr�c@seZdZdZejZdS)�
Inet6TestBasez!Base class for IPv6 socket tests.N)rErFrGrWr�HOSTv6r�rrrrr��sr�c@seZdZdZdd�ZdS)�UDP6TestBasez#Base class for UDP-over-IPv6 tests.cCst�tjtj�Sr2)r
�AF_INET6r r?rrrr��szUDP6TestBase.newSocketNr�rrrrr��sr�c@seZdZdZdd�ZdS)�UDPLITE6TestBasez'Base class for UDPLITE-over-IPv6 tests.cCst�tjtjtj�Sr2)r
r�r r7r?rrrr��szUDPLITE6TestBase.newSocketNr�rrrrr��sr�cs*dd����fdd�}dd�}|r&|S|S)aSkip decorated test if condition is true, add client_skip decorator.

    If the decorated object is not a class, sets its attribute
    "client_skip" to a decorator which will return an empty function
    if the test is to be skipped, or the original function if it is
    not.  This can be used to avoid running the client part of a
    skipped test when using ThreadableTest.
    c_sdSr2r�rQrRrrr�client_passsz%skipWithClientIf.<locals>.client_passcs*t���|�}t|t�s&�fdd�|_|S)Ncs�Sr2r�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|Sr2rr�rrrr�r�z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�rr��r�rrr�	noskipdecs
z#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�rr�r�skipWithClientIfs	r�cs0�fdd�|D�}t|dd�dd�|D���S)z�Skip decorated test if obj is missing any of the given attributes.

    Sets client_skip attribute as skipWithClientIf() does.
    csg|]}t�|�s|�qSr)r��.0�namer�rr�
<listcomp>r�z requireAttrs.<locals>.<listcomp>�don't have �, css|]
}|VqdSr2rr�rrr�	<genexpr> r�zrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingrr�r�requireAttrss�rc
Gs�d}dd�|D�}|r0dd�dd�|D��}nRdd�|D�}ztj|�}Wn,tyx}zt|�}WYd}~nd}~00|��t|dud	�d�d
d�|D��|��S)aSkip decorated test if a socket cannot be created with given arguments.

    When an argument is given as a string, will use the value of that
    attribute of the socket module, or skip the test if it doesn't
    exist.  Sets client_skip attribute as skipWithClientIf() does.
    NcSs$g|]}t|t�rtt|�s|�qSr)r��strrr
�r�r�rrrr�+s�z!requireSocket.<locals>.<listcomp>r�r�css|]
}|VqdSr2rr�rrrr�.r�z requireSocket.<locals>.<genexpr>cSs$g|]}t|t�rtt|�n|�qSr)r�rrr
rrrrr�0s�zcan't create socket({0}): {1}css|]}t|�VqdSr2)r�r��orrrr�<r�)rr
rrrr��format)rQ�errrZcallargsrr�rrr�
requireSocket#s$���r	c@speZdZdd�Zdd�Ze�edud�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
e�ejdkd�dd��Ze�ejdkd�e�ejd�dd���Zdd�Zdd�Zd d!�Ze�eed"�d#�e�eed$�d%�d&d'���Ze�eed(�d)�d*d+��Ze�eed,�d-�d.d/��Ze�eed0�d1�d2d3��Ze�eed4�d5�d6d7��Zd8d9�Z d:d;�Z!e"j#d<d=��Z$d>d?�Z%d@dA�Z&e�eedB�dC�dDdE��Z'e�eedF�dG�dHdI��Z(e�eedF�dG�dJdK��Z)e�eedL�dM�dNdO��Z*e�eedL�dM�dPdQ��Z+dRdS�Z,dTdU�Z-dVdW�Z.dXdY�Z/dZd[�Z0d\d]�Z1d^d_�Z2e�ejdkd�d`da��Z3e�ejdkd�e�eedb�dc�ddde���Z4dfdg�Z5dhdi�Z6e�e"�7dj�dk�dldm��Z8dndo�Z9dpdq�Z:drds�Z;dtdu�Z<dvdw�Z=dxdy�Z>dzd{�Z?d|d}�Z@d~d�ZAd�d��ZBd�d��ZCe"j#d�d���ZDe�ejd��d�d���ZEe�ejd��d�d���ZFe�ejd��e�Gejd�kd��e�GeHd��d�d�����ZIe�ejd��e�ejd�kd��d�d����ZJe�ejd��e�Gejd�kd��e�GeHd��d�d�����ZKe�ejd��e�ejd�kd��d�d����ZLd�d��ZMd�d��ZNd�d��ZOe�eed��d��d�d���ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUe�Gejdkd��d�d���ZVd�d��ZWd�d��ZXdS)��GeneralModuleTestscCs<ddl}|�tj|ju�t��}|�|tj�|��dSr�)�_socket�
assertTruer
�
SocketType�assertIsInstancer)r@rrrrr�test_SocketType_is_socketobjectDs
z2GeneralModuleTests.test_SocketType_is_socketobjectcCs�t�tjtj�}|��|�d|��t|��|�dtjt|��|�dtjt|��|�dt|��|�dt|��|�d�|�dt|��|�t|�	��t|��Wd�n1s�0Y|�dt|��|�dt|��dS)	Nzfd=%iz	family=%sztype=%szproto=0�raddr��	127.0.0.1r�laddrz[closed])
r
r:r/�assertIn�fileno�repr�assertNotInr`rr��r@rrrr�	test_reprKs
6zGeneralModuleTests.test_reprNzneed _socket modulecCszt�tjtj�}z6d|��|j|j|jf}|�t	|�|�W|�
�n
|�
�0d|j|j|jf}|�t	|�|�dS)Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)rr
r:r/r�familyr��protor�rr)r@r�expectedrrr�test_csocket_reprYs��z$GeneralModuleTests.test_csocket_reprcCs�t�tjtj��,}t|�}|�|��|���Wd�n1sB0Yd}t��z|��WntyvYn0|�	d�dS)NzSocket proxy still exists)
r
r:r/rr�rr�
gc_collect�ReferenceError�fail)r@r�prrr�test_weakreffs2zGeneralModuleTests.test_weakrefcCs�d}|jt|dd��t�Wd�n1s00Y|jt|dd��tj�Wd�n1sh0Y|jt|dd��tj�Wd�n1s�0YdS)Nz$Error raising socket exception (%s).r�r�z
socket.herrorzsocket.gaierror)�assertRaisesrr
�herror�gaierrorr�rrr�testSocketErrorss"$z"GeneralModuleTests.testSocketErrorcCst�tjtj�}|�|j�|�d�|��}|�t��}|�	d|�Wd�n1sZ0Y|�
t|j�d�|�t��}|�	d|�Wd�n1s�0Y|�
t|j�d�|�t��}|�	dd�Wd�n1s�0Y|�
dt|j��|�t��}|�	dd|�Wd�n1�s60Y|�
t|j�d�|�t��}|�	dd|�Wd�n1�s�0Y|�
t|j�d�|�t��}|�	ddd�Wd�n1�s�0Y|�
dt|j��|�t��}|�	dd	|�Wd�n1�s0Y|�
d
t|j��|�t��}|�	ddd�Wd�n1�sf0Y|�
d
t|j��|�t��}|�	d�Wd�n1�s�0Y|�
dt|j��|�t�� }|�	dd|d�Wd�n1�s�0Y|�
d
t|j��dS)N)�ru☠z*a bytes-like object is required, not 'str'y@z.a bytes-like object is required, not 'complex'�fooznot NoneTyper�barzan integer is requiredz	(1 given)�z	(4 given))r
r:r rUrr`r�r$r��sendtor�r�	exceptionr)r@r�sockname�cmrrr�testSendtoErrors}sT
*�*�*.�.�...*0z#GeneralModuleTests.testSendtoErrorscCs@tjtjrtjtjtjtjtjtjtj	tj
dSr2)r
r:�has_ipv6r�r/r r�SOCK_RDMr&�
SOL_SOCKET�SO_REUSEADDRr?rrr�testCrucialConstants�sz'GeneralModuleTests.testCrucialConstantscCstjtjtjrtjdSr2)r
�IPPROTO_TCP�IPPROTO_UDPr1�IPPROTO_IPV6r?rrr�testCrucialIpProtoConstants�sz.GeneralModuleTests.testCrucialIpProtoConstants�nt�Windows specificcCs4tjtjtjtjtjtjtjtjdSr2)	r
ZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPr�r?rrr�testWindowsSpecificConstants�sz/GeneralModuleTests.testWindowsSpecificConstants�darwinzmacOS specific test�IPv6 required for this testcCs0hd�}|D]}|�tt|�d|�d��qdS)N>�IPV6_RECVPKTINFO�IPV6_RTHDR_TYPE_0�IPV6_RECVDSTOPTS�
IPV6_DONTFRAG�
IPV6_CHECKSUM�IPV6_RECVPATHMTU�IPV6_PATHMTU�IPV6_TCLASS�IPV6_PKTINFO�IPV6_NEXTHOP�IPV6_RECVHOPLIMIT�IPV6_HOPOPTS�IPV6_RECVTCLASS�IPV6_RECVRTHDR�IPV6_RECVHOPOPTS�
IPV6_RTHDR�
IPV6_HOPLIMIT�IPV6_DSTOPTS�IPV6_USE_MIN_MTU�IPV6_RTHDRDSTOPTSzMissing RFC3542 socket option '�')rrr
)r@Zopts�optrrr�test3542SocketOptions�s
�z(GeneralModuleTests.test3542SocketOptionscCs�t��}zt�|�}Wnty2|�d�Yn0|�|�d�dkd�zt�|�\}}}Wntyz|�d�Yn0||g|}t�|�}||vr�|�	d|t
|�f�dS)N�name lookup failurertrzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r
�gethostname�
gethostbynamerrbr�find�
gethostbyaddr�getfqdnr r)r@�hostname�ipZhname�aliases�ipaddrsZall_host_namesZfqhnrrr�testHostnameRes�s
z"GeneralModuleTests.testHostnameRescCsLtjddfD]}|�t�|�|�qtjfD]}|�|t�|�d�q,dS)Nz10.0.0.1�255.255.255.255r�)rZHOSTv4r�r
rXrrZ)r@r�r�rrr�test_host_resolution�sz'GeneralModuleTests.test_host_resolutionc	Cs�d}dD]t}|jt|d��t�|�Wd�n1s:0Y|jt|d��t�|�Wd�q1sr0YqdS)Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r#)r$rr
rXrZ)r@Zexplanationr�rrr� test_host_resolution_bad_addresss�(z3GeneralModuleTests.test_host_resolution_bad_address�sethostnameztest needs socket.sethostname()rWztest needs socket.gethostname()c
Cs�t��}zt�d�Wn>tyT}z&|jtjkr>|�d�n�WYd}~n
d}~00z8|�t��d�t�d�|�t��d�Wt�|�nt�|�0dS)N�newztest should be run as rootsbarr*)r
rWrdr�errnoZEPERMrbr�)r@Zoldhnr�rrr�test_sethostnames
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�t��}|D]p\}}|�|t�|�|t�|�|d�t�|�}|�|t�|�||�t�|�}|�|t�|�||�qdSr�)	r
rhr�intr�
assertGreater�if_nametoindexr��if_indextoname)r@Z
interfaces�indexr�Z_index�_namerrr�testInterfaceNameIndex%s

z)GeneralModuleTests.testInterfaceNameIndexrlz&socket.if_indextoname() not available.c	Cs�|�ttjd�|�ttjd�|�ttjdd�|�ttjd�ttd�r�tt���}|D]L}|d}||vr^|�ttf��t�|�Wd�q^1s�0Yq^dD]D}||vr�|�ttf��t�|�Wd�q�1s�0Yq�dS)	Nr���r����	_DEADBEEFrh�)���l����)	r$rr
rl�
OverflowErrorr�r�dictrh)r@�indicesrm�index2rrr�testInvalidInterfaceIndexToName5s
*z2GeneralModuleTests.testInvalidInterfaceIndexToNamerkz&socket.if_nametoindex() not available.cCs$|�ttjd�|�ttjd�dS)Nrrr)r$r�r
rkrr?rrr�testInvalidInterfaceNameToIndexHsz2GeneralModuleTests.testInvalidInterfaceNameToIndex�getrefcountztest needs sys.getrefcount()cCsJzt�t�}t�td�Wn*tyDt�t�|kr@|�d�Yn0dS)Nrz$socket.getnameinfo loses a reference)�sysr{rEr
�getnameinfor�r )r@�origrrr�testRefCountGetNameInfoNs
z*GeneralModuleTests.testRefCountGetNameInfocCs(zt�dd�Wnty"Yn0dS)N)r\rrrr)r
r}rr?rrr�testInterpreterCrashZsz'GeneralModuleTests.testInterpreterCrashc	Cs�tjdtjdtjdtjdi}|��D]d\}}d|>d}dD]$}|�||@||||@��|@�q<||�}|�||@|�|�t|d�q$dS)N� �ro)rro�i��r�igE#i2Tvl)	r
�htonl�ntohl�htons�ntohs�itemsr�r$ru)r@Zsizes�func�size�maskr8Zswappedrrr�testNtoHbs�"zGeneralModuleTests.testNtoHcCs
ddl}gd�}|dg}ddddd>g}||jd|jdg}d	|jg}|D]}t�|�t�|�qP|D]}t�|�t�|�qn|D]$}|�t	tj|�|�t	tj|�q�|D]$}|�t	tj|�|�t	tj|�q�|D]$}|�
ttj|�|�
ttj|�q�dS)
Nr)rror�r�rtrp���rsrorq�)�	_testcapiZINT_MIN�INT_MAXr
r�r�r�r�r$ru�assertWarns�DeprecationWarning)r@r�Z
s_good_valuesZ
l_good_valuesZl_bad_valuesZs_bad_valuesZs_deprecated_values�krrr�testNtoHErrorsps.

�


z!GeneralModuleTests.testNtoHErrorsc	Cs |j}tj�d�stjdvr"d}nd}|D].}zt�|d�}Wq^Wq*tyVYq*0q*t�ttd�rtt��dkr�t�|�}|||�zt�|d�}Wnty�d}Yn0|||�t	j
s�|t�|�|�|t�|d�|�|dur�|t�|d�|�|�t
tjd	�|�t
tjd
�dS)N)�freebsdZnetbsdZgnukfreebsd)�linuxr=)�daytimeZqotd�domain)Zechor�r�Ztcp�getandroidapilevel�Zudprpr�)r�r|�platform�
startswithr
�
getservbynamerrr�rZ
is_android�
getservbyportr$ru)r@�eqZservicesZservicer=Zport2Zudpportrrr�
testGetServBy�s<�


�



z GeneralModuleTests.testGetServByc	Cs0|�t��d�t��� }|�|��d�Wd�n1s>0Ytd���|�t��d�t��� }|�|��d�Wd�n1s�0Yt�d�|�t��d�t��� }|�|��d�Wd�n1s�0YWd�n1�s0Y|�ttjd�|�ttjd�dS)N�
rpZspam)	r�r
r3�
gettimeoutr6r4r$�
ValueErrorr�)r@rr�rrr�testDefaultTimeout�s
.

.

Nz%GeneralModuleTests.testDefaultTimeout�	inet_atonztest needs socket.inet_aton()cCs(|�dt�d��|�dt�d��dS)N��0.0.0.0�����ra)r�r
r�r?rrr�testIPv4_inet_aton_fourbytes�sz/GeneralModuleTests.testIPv4_inet_aton_fourbytes�	inet_ptonztest needs socket.inet_pton()cs*ddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
����d|d��ts�||d�||d�||d�||d�||d���d|d����d|d	����d
|d����d|d��||d�||d�||d�||d�||d�dS)Nr)r�r�r:cs
��|�Sr2r��a)r:r�rrr��r�z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>cs��ttf||�Sr2�r$rr��r�r�r?rrr��s
�r�r�s��z255.0.255.0s����z170.170.170.170��1.2.3.4r�raz0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5�::1)r
r�r�r:r�r�r@r�g�
assertInvalidr)r:r�r@r�testIPv4toString�s.








z#GeneralModuleTests.testIPv4toStringc
s�z&ddlm�m�m}|s$��d�WntyB��d�Yn0tjdkr�z��d�Wn8ty�}z |j	dkr���d�WYd}~n
d}~00��fd	d
����fdd
�}��
d�d����
d�d
����
d�d����
d�d����
d�d����
d�d��|d�|d�|d�|d�|d�|d�|d�|d�t�s`|d���
d�d ����
d!�d"����
d#�d$��|d%�|d&�|d'�|d(�|d)�|d*�dS)+Nr)r�r�r1�IPv6 not available�+could not import needed symbols from socket�win32�::�&'�IPv6 might not be supportedcs
��|�Sr2rr�)r�r�rrr�r�z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>cs��ttf�|�Sr2r�r��rr@rrr�	s
��z0::0sz1::sE�v�V���$��z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes�B
�'Tzad42:abc::127:0:254:2s
z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:0z1:2:3:4:5:6:7:8:s�*@z::254.42.23.64sB���*@z42::a29b:254.42.23.64sB�������*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)r
r�r�r1rb�ImportErrorr|r�r�winerrorr�r�r@r1r�r�r)r�rr�r@r�testIPv6toString�sj

 �����z#GeneralModuleTests.testIPv6toString�	inet_ntopztest needs socket.inet_ntop()csddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
��||d�||d�||d���d|td	�����d|d����d|d	����d
|d��||d�||d�||d���d|td	���dS)Nr)�	inet_ntoar�r:cs
��|�Sr2rr�)r:r�rrr�;r�z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs��ttf||�Sr2r�r�r?rrr�<s
�z1.0.1.0sz
170.85.170.85s�U�Urar�r�r�ssr�)r
r�r�r:r��	bytearrayr�r)r:r�r@r�testStringToIPv47s$





z#GeneralModuleTests.testStringToIPv4c
sz&ddlm�m�m}|s$��d�WntyB��d�Yn0tjdkr�z��d�Wn8ty�}z |j	dkr���d�WYd}~n
d}~00��fd	d
����fdd
�}��
d�d����
d
�d����
d�d����
d
�td���|d�|d�|d�dS)Nr)r�r�r1r�r�r�r�r�r�cs
��|�Sr2rr�)r�r�rrr�br�z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs��ttf�|�Sr2r�r�r�rrr�cs
�r�r�sz!aef:b01:506:1001:ffff:9997:55:170s
�����Upsss)r
r�r�r1rbr�r|r�rr�r�r�r�r)r�rr�r@r�testStringToIPv6Qs0

 �z#GeneralModuleTests.testStringToIPv6cCs�t��}t�tjtj�}|�|j�|�d|f�|��}zt�	t�
��}Wntyh|�d�Yn0|�
|dd|fd|d�|�|d|�dS)Nr�rVrz
%s invalidro)r�find_unused_portr
r:r/rUrr`r�rXrWrrbrr�)r@r=r�r�Z
my_ip_addrrrr�testSockNameuszGeneralModuleTests.testSockNamecCs@t�tjtj�}|�|j�|�tjtj�}|�|dkd�dS)Nrzinitial mode is reuse)	r
r:r/rUr�
getsockoptr3r4�assertFalse�r@r�Zreuserrr�testGetSockOpt�sz!GeneralModuleTests.testGetSockOptcCsRt�tjtj�}|�|j�|�tjtjd�|�tjtj�}|�	|dkd�dS)Nrorzfailed to set reuse mode)
r
r:r/rUr�
setsockoptr3r4r�r�r�rrr�testSetSockOpt�s
z!GeneralModuleTests.testSetSockOptcCsNt�tjtj��}|�d�Wd�n1s00Y|�t|jd�dS)Nro�spam)r
r:r/�
settimeoutr$rr�r�rrr�testSendAfterClose�s(z%GeneralModuleTests.testSendAfterClosec
Cs�t��}|�tjdf�tj|��d���z|��Wn:tyr}z"|�|jtjtj	f�WYd}~nd}~00|�
d�dS)Nr�rz#close() should raise EBADF/ENOTSOCK)r
r`�
_LOCALHOSTrrrrrf�EBADF�ENOTSOCKr )r@r�rrrr�testCloseException�s,z%GeneralModuleTests.testCloseExceptioncCs�t�tjtj��f}|�|jtj�ttd�rJ|�|jtjtjBtjf�n|�|jtj�|�|j	d�Wd�n1s|0YdS)N�SOCK_CLOEXECr)
r
r:r/r�rrrr�r�rr�rrr�testNewAttributes�s

��z$GeneralModuleTests.testNewAttributescCs�t��}|�|j�t��}|d}|d}|�t|jt|f�|�t|jt|f�t	�
�D]^}t��}z|�t|f�Wn:ty�}z"|jtj
ks�|dkr��WYd}~q\d}~00q�q\dS)Nr��)r
rUrrr�r$rur`r��	itertools�countrrfZ
EADDRINUSE)r@r�r=Zbig_portZneg_portr8r�rrr�test_getsockaddrarg�sz&GeneralModuleTests.test_getsockaddrargcCs�|�ttjd��|�ttd��|�ttd��|�ttd��|�ttd��t��}|�|j�|�t|jdd�|�tjd�dS)NrZ
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFF�SIO_KEEPALIVE_VALSrp)ro�dr�)	rrr
rUrr$r�rr�rrrr�test_sock_ioctl�sz"GeneralModuleTests.test_sock_ioctl�SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc
Cs~t��}|�|j�z|�tjd�Wn>tyd}z&d}|j|krN|�d��WYd}~n
d}~00|�t	|jtjd�dS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
r
rUrrr�rr�rbr$r�)r@r�excZ
WSAEOPNOTSUPPrrr�test_sio_loopback_fast_path�s

z.GeneralModuleTests.test_sio_loopback_fast_pathc

Cs@zt�dd�Wn>tjyN}z$|jtjkr8|�d��WYd}~n
d}~00t�td�D]}|�t|�d�q\t�dd�t�dd�t�dd�t	j
r�t�dd�ttd�r�t�
�dkr�t�td	�t�td�t�td�t�tdtjtj�}|D]J\}}}}}|�|tj�|�t|�d
�|�|tj�|�t|�d�q�t�tddtj�}|D]\}}}}}|�|tj��q\t�tdddtj�t�tddddtj�t�ddtjtjdtj�t�td�}tjtdd
�}	|�||	�t�tdtj�}tjtdtjd�}	|�||	�t�tddtj�}tjtdtjd�}	|�||	�t�tdddtj�}tjtdtjd�}	|�||	�t�tddddtj�}tjtdtjd�}	|�||	�t�ddtjtjdtj�}tjddtjtjdtjd�}	|�||	�|�ttjdd�ttd��r<zt�dddddtj�Wntj�y:Yn0dS)N�	localhost�Pzbuggy libc versionr�rr�r�r��http�AddressFamily.AF_INET�SocketKind.SOCK_STREAMr)r�r=�r�r�)r)�flags)r�r=rr�rr�u��AI_NUMERICSERV)r
�getaddrinfor&rf�EAI_SERVICErbr�r��lenr�IPV6_ENABLEDrr|r�r:r/r�SOL_TCP�
AI_PASSIVE�	AF_UNSPECr$�UnicodeEncodeErrorr�)
r@r�infoZinfosrr�ru�socktyper��brrr�testGetaddrinfo�s�


�����z"GeneralModuleTests.testGetaddrinfocCs|�ttjdd�dS)N)zmail.python.orgrr)r$rr
r}r?rrr�test_getnameinfo4sz#GeneralModuleTests.test_getnameinfo�networkznetwork is not enabledcCsdt�d��t�d�Wd�n1s*0Yd}t�|�t�|�t�|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetr
rX�gethostbyname_exr�r�r/)r@r�rrr�	test_idna8s(

zGeneralModuleTests.test_idnac
s2ttd�rttd�s��d��fdd�}�fdd�}t��\}}t�tj|�}z�|r`|�d���t��*t�	d	�|�
d
tj�Wd�n1s�0Y|r�t�tj|�t�	d	���tj
|j
d
tj�Wt�	d�t�tj|�|��|��n*t�	d�t�tj|�|��|��0dS)N�alarmr�z9signal.alarm and socket.socketpair required for this testcs��ttjd�dSr��r$r��math�acosh�rQr?rr�
ok_handlerOsz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs��ttjd�dddS�Nrror�rr?rr�raising_handlerQszEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg�?ro�xr)r�signalr
rbr��SIGALRMr�r$�ZeroDivisionErrorr��sendallr�
SOCK_MAX_SIZEr5r)r@Zwith_timeoutrr�cr�	old_alarmrr?r�check_sendall_interruptedIs4


.
�

�
z,GeneralModuleTests.check_sendall_interruptedcCs|�d�dS�NF�rr?rrr�test_sendall_interruptedhsz+GeneralModuleTests.test_sendall_interruptedcCs|�d�dS)NTrr?rrr�%test_sendall_interrupted_with_timeoutksz8GeneralModuleTests.test_sendall_interrupted_with_timeoutcCs�t�tjtj�}t|�}|�t��}d}t��Wd�n1sD0Y|�|t	|j
jd��t�tjtj�}|�d�}t|�}d}t��|�t��d}t��Wd�n1s�0YdS)Nrr	)
r
r:r/rr��ResourceWarningrrrr�warningrQ�makefile)r@r�rr/rrrr�test_dealloc_warnns&
z$GeneralModuleTests.test_dealloc_warncCsVt�tjtj��2}|�d�}|��|�t|�d�Wd�n1sH0YdS)Nr	z<_io.BufferedReader name=-1>)r
r:r/rrr�r�r@r��fprrr�test_name_closed_socketios
z,GeneralModuleTests.test_name_closed_socketiocCs�t���z}|jddd�}|�|���|�|���|�|���|��|�t	|j�|�t	|j�|�t	|j�Wd�n1s�0YdS)Nr	r)�	buffering)
r
rr�readabler��writable�seekablerr$r�rrrr�test_unusable_closed_socketio�s
z0GeneralModuleTests.test_unusable_closed_socketiocCs2t��}z�|�tdf�t�|���|�t��|�d�Wd�n1sP0YW|�t��|��Wd�q�1s�0Yn4|�t��|��Wd�n1s�0Y0|�t��t�d�Wd�n1s�0Y|�t��t�d�Wd�n1�s$0YdS)Nrrorp)	r
r`r�rrr$rr>r�r�rrr�test_socket_close�s*(�((z$GeneralModuleTests.test_socket_closecCs�dD]�}|j|d��pt���H}|�|��}|�|j|�Wd�n1sN0YWd�n1sl0YWd�q1s�0YqdS)N)rr	�rw�w�wb��mode)�subTestr
rr�r")r@r"r�rrrr�test_makefile_mode�s

z%GeneralModuleTests.test_makefile_modecCs�dD]�}|j|d��nt���F}|�td��|�|�Wd�n1sL0YWd�n1sj0YWd�q1s�0YqdS)N)�rtr\�+r�r!zinvalid mode)r#r
�assertRaisesRegexr�r)r@r"r�rrr�test_makefile_invalid_mode�s

z-GeneralModuleTests.test_makefile_invalid_modecCs�t��}|�6ttjd�D]}|�ttj||�qWd�n1sH0Yttjd�D]H}t�t�tj|��}|�	|tj�t�t�tj
|��}|�	|tj
�q`dSr�)r
�range�pickle�HIGHEST_PROTOCOLr$r��dumps�loadsr:r�r/)r@r��protocolrr�rrr�test_pickle�s2zGeneralModuleTests.test_picklec	Cs�dD]L}t�tjtj��(}|�tdf�|�|�Wd�q1sF0Yqt�tjtj��&}|�tdf�|��Wd�n1s�0YdS)N)rrpr)r
r:r/r`r�r>)r@�backlog�srvrrr�test_listen_backlog�s*z&GeneralModuleTests.test_listen_backlogcCs`ddl}t�tjtj��4}|�tdf�|�t|j|j	d�Wd�n1sR0YdSr)
r�r
r:r/r`r�r$rur>r�)r@r�r1rrr�test_listen_backlog_overflow�sz/GeneralModuleTests.test_listen_backlog_overflow�IPv6 required for this test.cCsf|�ttjtjddfd�t�tjtj��(}|�t|jtjddf�Wd�n1sX0YdS)Nrrti����)	r$rur
r}rr�r�r/r`rrrr�
test_flowinfo�s

�z GeneralModuleTests.test_flowinfocCs0t�ddtjtjtj�\�^}}|�|d�dS)N�ff02::1de:c0:face:8Dr)�ff02::1de:c0:face:8drrr)r
r�r�r r7r�)r@ru�sockaddrrrr�test_getaddrinfo_ipv6_basic�s�z.GeneralModuleTests.test_getaddrinfo_ipv6_basicr�zdoes not work on WindowszSymbolic scope id does not workcCsLt��d\}}t�d|dtjtjtj�\�^}}|�|ddd|f�dS)Nr�ff02::1de:c0:face:8D%rr7)r
rhr�r�r r7r�)r@�ifindex�test_interfacerur8rrr�&test_getaddrinfo_ipv6_scopeid_symbolic�s�z9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicz.Numeric scope id does not work or undocumentedcCsDd}t�dt|�dtjtjtj�\�^}}|�|ddd|f�dS)N�*r:rr7r)r
r�rr�r r7r�)r@r;rur8rrr�%test_getaddrinfo_ipv6_scopeid_numeric�s
�z8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericcCsHt��d\}}ddd|f}t�|tjtjB�}|�|d|df�dS)Nrr6r�ff02::1de:c0:face:8d%�1234)r
rhr}�NI_NUMERICHOST�NI_NUMERICSERVr�)r@r;r<r8�nameinforrr�&test_getnameinfo_ipv6_scopeid_symbolic�sz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symboliccCs@d}ddd|f}t�|tjtjB�}|�|dt|�df�dS)Nr>r6rrr@rA)r
r}rBrCr�r)r@r;r8rDrrr�%test_getnameinfo_ipv6_scopeid_numericsz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericcCsXt�tjtj��4}|�t|j�d�|�t|j�d�Wd�n1sJ0YdS)Nr�r�)r
r:r/r�rrr�rrrr�test_str_for_enumssz%GeneralModuleTests.test_str_for_enumscCs�ttdd�}ttdd�}tj|B|B}t�tj|���}|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�|�d�|�|jtj�Wd�n1s�0YdS)N�
SOCK_NONBLOCKrr�roTF)rr
r/r:r�r�r��setblocking)r@rHr�Z	sock_typerrrr� test_socket_consistent_sock_types



z3GeneralModuleTests.test_socket_consistent_sock_typecCs�t�tjtj�}|��}ttjj���d}tdd�tjj�	�D��d}tj||d|d��>}|�
|j|�|�
|j|�|�
|jddh�Wd�n1s�0YdS)Nrocss|]\}}|dvr|VqdS)>rHr�Nr)r�r��kindrrrr�3s�zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>r�)rr�rrr)r
r:r/�detach�max�
AddressFamily�__members__�values�
SocketKindr�r�rr�rr)r@r��fdZunknown_familyZunknown_typerrrr�test_unknown_socket_family_repr(s 
���z2GeneralModuleTests.test_unknown_socket_family_repr�sendfileztest needs os.sendfile()c	CsGdd�d�}t����}t�tjtj�}t�|�|�tj��|�||��Wd�n1sb0Y|�t	��"|�|dd��Wd�n1s�0Y|�t
��|�|d��Wd�n1s�0YWd�n1s�0YdS)Nc@seZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dSr2�rR)r@rRrrrrLDszEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jSr2rUr?rrrrGszCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rErFrGrLrrrrr�FileCsrVr�rq)r
r�r�curdir�O_RDONLYrr$�_GiveupOnSendfile�_sendfile_use_sendfilerur�)r@rVr�rRrrr�test__sendfile_use_sendfileAs

,0z.GeneralModuleTests.test__sendfile_use_sendfilecCst|�|j|�|�|j|�|��}tj|d�}|�|j�|��|�|j|�|�|j|�|�|��|�dS�Nr�)r�rr�rr
rUrrL)r@rr�styperR�s2rrr�_test_socket_filenoSsz&GeneralModuleTests._test_socket_filenocCsPt�tjtj�}|�|j�|�tjdf�|�|tjtj�t	td�r�t�tjtj
�}|�|j�|�tjdf�|�|tjtj
�tjr�t�tjtj�}|�|j�|�tj
dddf�|�|tjtj�t	td��rLt��}|�tj|�t�tjtj�}|�|j�z|�tj�|d��Wnt�y8Yn0|�|tjtj�dS)Nrr r�r
)r
r:r/rUrr`rr�r_rr r�r�r�r�r��shutil�rmtreer�r�r�r�PermissionError)r@rZtmpdirrrr�test_socket_fileno`s4

�z%GeneralModuleTests.test_socket_filenocCsD|�td��$tjtjtjdd�Wd�n1s60YdS)Nzinteger argument expectedg@E@r��r'r�r
r:r/r?rrr� test_socket_fileno_rejects_floatsz3GeneralModuleTests.test_socket_fileno_rejects_floatcCsD|�td��$tjtjtjdd�Wd�n1s60YdS)Nzinteger is required�foor�rdr?rrr�&test_socket_fileno_rejects_other_types�sz9GeneralModuleTests.test_socket_fileno_rejects_other_typescCsD|�td��$tjtjtjdd�Wd�n1s60YdS)N�negative file descriptorrpr��r'r�r
r:r/r?rrr�)test_socket_fileno_rejects_invalid_socket�sz<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlycCsD|�td��$tjtjtjdd�Wd�n1s60YdS)Nrhi���r�rir?rrr�#test_socket_fileno_rejects_negative�sz6GeneralModuleTests.test_socket_fileno_rejects_negativecCs�d}|�t�� }tjt��d�Wd�n1s40Y|�|jjtj|f�|�t��(}tjtj	tj
t��d�Wd�n1s�0Y|�|jjtj|f�dS)Ni6'r�)r$rr
rZmake_bad_fdrr-rfr�r:r/)r@ZWSAENOTSOCKr/rrr�$test_socket_fileno_requires_valid_fd�s.�$z7GeneralModuleTests.test_socket_fileno_requires_valid_fdc	Cs�t����}|�t�� tj|��d�Wd�n1s:0Y|�t��(}tjtjtj|��d�Wd�n1s|0Y|�|j	j
t
j�Wd�n1s�0YdSr\)r��NamedTemporaryFiler$rr
rr:r/r�r-rfr�)r@Zafiler/rrr�%test_socket_fileno_requires_socket_fd�s
.�$z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)YrErFrGrrr��
skipUnlessrrr"r'r0r5r9r�r�r<r|r�rr�rUr`rbrcrr
rgroryrzrr�r�r�cpython_onlyr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�Zis_resource_enabledr�rrrrrrrr$r(r/r2r3r5r9�skipIfrr=r?rErFrGrJrSr[r_rcrergrjrkrlrnrrrrr
Bs


,


	�
�
�
�


,�
�
�
>�
�
"

�
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)�BasicCANTestcCstjtjtjdSr2)r
�AF_CANrrr?rrrr5�sz!BasicCANTest.testCrucialConstants�CAN_BCM�&socket.CAN_BCM required for this test.cCs�tjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjtjtjtjtjtjtjtjtjtjdSr2)r
rtZCAN_BCM_TX_SETUPZCAN_BCM_TX_DELETEZCAN_BCM_TX_READ�CAN_BCM_TX_SENDZCAN_BCM_RX_SETUPZCAN_BCM_RX_DELETEZCAN_BCM_RX_READZCAN_BCM_TX_STATUSZCAN_BCM_TX_EXPIREDZCAN_BCM_RX_STATUSZCAN_BCM_RX_TIMEOUTZCAN_BCM_RX_CHANGEDZCAN_BCM_SETTIMERZCAN_BCM_STARTTIMERZCAN_BCM_TX_COUNTEVTZCAN_BCM_TX_ANNOUNCEZCAN_BCM_TX_CP_CAN_IDZCAN_BCM_RX_FILTER_IDZCAN_BCM_RX_CHECK_DLCZCAN_BCM_RX_NO_AUTOTIMERZCAN_BCM_RX_ANNOUNCE_RESUMEZCAN_BCM_TX_RESET_MULTI_IDXZCAN_BCM_RX_RTR_FRAMEr?rrr�testBCMConstants�s0zBasicCANTest.testBCMConstantscCs8t�tjtjtj��}Wd�n1s*0YdSr2�r
rrrrrrr�testCreateSocket�szBasicCANTest.testCreateSocketcCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
rr rtrrrr�testCreateBCMSocket�sz BasicCANTest.testCreateBCMSocketcCsVt�tjtjtj��.}d}|�|�|�|��|�Wd�n1sH0YdS)N)r()r
rrrr`r�r�)r@r�addressrrr�testBindAny�s
zBasicCANTest.testBindAnycCsJt�tjtjtj��"}|�td|jd�Wd�n1s<0YdS)N�interface name too long)�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r
rrrr'rr`rrrr�testTooLongInterfaceName�s�z%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c	Cslt�tjtjtj��D}dD].}|�tjtj|�|�||�tjtj��qWd�n1s^0YdS)N)rro)	r
rrrr��SOL_CAN_RAWr�r�r�)r@rZloopbackrrr�testLoopback�s��zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c	Cs�d\}}t�d||�}t�tjtjtj��R}|�tjtj|�|�	||�
tjtjd��|�tjtjt|��Wd�n1s�0YdS)N)�iz=IIr])r�packr
rrrr�r�r�r�r�r�)r@�can_idZcan_maskZ
can_filterrrrr�
testFilter�s�zBasicCANTest.testFilterN)rErFrGr5r�rorr
rwryrzr|rr�r�rrrrrr�s(�
�
�
�rrc@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
�eed�d�dd��Ze
�eed�d�dd��ZdS)�CANTestr�cCstj||d�dSr�)r�rLr�rrrrLszCANTest.__init__cCs&t|�}|�dd�}t�|j|||�S)zBuild a CAN frame.r]�)r��ljustrr�rd)�clsr��data�can_dlcrrr�build_can_frameszCANTest.build_can_framecCs&t�|j|�\}}}|||d|�fS)zDissect a CAN frame.N)rrrd)r��framer�r�r�rrr�dissect_can_frameszCANTest.dissect_can_framecCs6|j�|j�\}}|�|j|�|�|d|j�dSr�)r�recvfromrcr��cfra�r@r�r�rrr�
testSendFrameszCANTest.testSendFramecCs |�dd�|_|j�|j�dS)Nrs�r�r�r�r�r?rrr�_testSendFrameszCANTest._testSendFramecCs$|j�|j�\}}|�|j|�dSr2)rr�rcr�r�r�rrr�testSendMaxFrameszCANTest.testSendMaxFramecCs |�dd�|_|j�|j�dS)Nrsr�r?rrr�_testSendMaxFrameszCANTest._testSendMaxFramecCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr2)rr�rcr��cf1�cf2r�rrr�testSendMultiFrames"szCANTest.testSendMultiFramescCs<|�dd�|_|j�|j�|�dd�|_|j�|j�dS)N�sD3"�s�"3)r�r�r�r�r�r?rrr�_testSendMultiFrames)szCANTest._testSendMultiFramesrtrucCsP|j�|j�\}}|�|j|�|�|�\}}}|�|j|�|�|j|�dSr2)r�r�rcr�r�r�r�r�)r@r�r�r�r�r�rrr�_testBCM0s
zCANTest._testBCMcCs�t�tjtjtj�}|�|j�|�|jf�d|_t	gd��|_
|�|j|j
�|_tj
}d}d}d}}}}d}	d}
t|j�dks�J�t�|j||||||||	|
�
}||j}|�|�}
|�|
t|��dS)N�#)����ri"ror�)r
rr rtrUrr�rar��bytesr�r�r�rvr�rr�rfr�r�)r@ZbcmZopcoder�r�Z
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr�testBCM9s6�

zCANTest.testBCMN)r�)rErFrGrL�classmethodr�r�r�r�r�r�r�r�r�rorr
r�r�rrrrr��s&


�
�r�z!CAN ISOTP required for this test.csVeZdZ�fdd�Zdd�Zdd�Ze�ee	d�d�d	d
��Z
dd�Zd
d�Z�Z
S)�	ISOTPTestcst�j|i|��d|_dS�NrZ�rKrLrarPrSrrrL\szISOTPTest.__init__cCstjtjtjtjdSr2)r
rsrr!r r?rrrr5`szISOTPTest.testCrucialConstantscCs8t�tjtjtj��}Wd�n1s*0YdSr2rxrrrrryfszISOTPTest.testCreateSocketr!z(socket.CAN_ISOTP required for this test.cCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
rr r!rrrr�testCreateISOTPSocketjszISOTPTest.testCreateISOTPSocketc	Csnt�tjtjtj��F}|�td��|�d�Wd�n1sB0YWd�n1s`0YdS)Nr})r~ror�)r
rr r!r'rr`rrrrrpsz"ISOTPTest.testTooLongInterfaceNamec
Cs�z^t�tjtjtj��6}|jddf}|�|�|�|��|�Wd�n1sR0YWnDty�}z,|j	t	j
kr�|�d|j�n�WYd}~n
d}~00dS)Nr�iVr_)r
rr r!rar`r�r�rrf�ENODEVrb�r@rr�r�rrr�testBindvs
2�zISOTPTest.testBind)rErFrGrLr5ryr�rorr
r�rr�rXrrrSrr�Ys�
r�z!CAN J1939 required for this test.csXeZdZ�fdd�Ze�eed�d�dd��Ze�eed�d�dd��Z	d	d
�Z
�ZS)�	J1939Testcst�j|i|��d|_dSr�r�rPrSrrrL�szJ1939Test.__init__r#z(socket.CAN_J1939 required for this test.cCs�tjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjtjtjtjtjtjtjtjtjtjdSr2)r
r#ZJ1939_MAX_UNICAST_ADDRZJ1939_IDLE_ADDR�
J1939_NO_ADDR�
J1939_NO_NAMEZJ1939_PGN_REQUESTZJ1939_PGN_ADDRESS_CLAIMEDZJ1939_PGN_ADDRESS_COMMANDEDZJ1939_PGN_PDU1_MAXZ
J1939_PGN_MAX�J1939_NO_PGNZSO_J1939_FILTERZSO_J1939_PROMISCZSO_J1939_SEND_PRIOZSO_J1939_ERRQUEUEZSCM_J1939_DEST_ADDRZSCM_J1939_DEST_NAMEZSCM_J1939_PRIOZSCM_J1939_ERRQUEUEZ
J1939_NLA_PADZJ1939_NLA_BYTES_ACKEDZJ1939_EE_INFO_NONEZJ1939_EE_INFO_TX_ABORTZJ1939_FILTER_MAXr?rrr�testJ1939Constants�s0zJ1939Test.testJ1939ConstantscCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
rr r#rrrr�testCreateJ1939Socket�szJ1939Test.testCreateJ1939Socketc
Cs�zft�tjtjtj��>}|jtjtjtjf}|�|�|�	|�
�|�Wd�n1sZ0YWnDty�}z,|jtj
kr�|�d|j�n�WYd}~n
d}~00dSr^)r
rr r#rar�r�r�r`r�r�rrfr�rbr�rrrr��s
2�zJ1939Test.testBind)rErFrGrLr�rorr
r�r�r�rXrrrSrr��s�
!�
r�z#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdSr2)r
ZAF_RDSr%r?rrrr5�sz!BasicRDSTest.testCrucialConstantscCs6t�tjtjd��}Wd�n1s(0YdSr�)r
r%r&rrrrry�szBasicRDSTest.testCreateSocketcCs^d}t�tjtjd��4}|�tjtj|�|�tjtj|�Wd�n1sP0YdS)Ni@r)r
r%r&r�r3�	SO_RCVBUF�	SO_SNDBUF)r@rcrrrr�testSocketBufferSize�sz!BasicRDSTest.testSocketBufferSizeN)rErFrGr5ryr�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)�RDSTestr�cCstj||d�dSr�)r�rLr�rrrrL�szRDSTest.__init__cst���t��|_dSr2)rKrArMrxZevtr?rSrrrA�s
z
RDSTest.setUpcCs2|j�|j�\}}|�|j|�|�|j|�dSr2)r;r�rcr�r�r��r@r�r�rrr�testSendAndRecv�szRDSTest.testSendAndRecvcCs"d|_|j�|jdt|jf�dS�Nr�r�r�r�r,r�r=r?rrr�_testSendAndRecv�szRDSTest._testSendAndRecvcCsH|j�|jtj�\}}|�|j|�|j�|j�\}}|�|j|�dSr2)r;r�rcr
�MSG_PEEKr�r�r�rrr�testPeek�szRDSTest.testPeekcCs"d|_|j�|jdt|jf�dSr�r�r?rrr�	_testPeek�szRDSTest._testPeek�recvmsgcCs(|j�|j�\}}}}|�|j|�dSr2)r;r�rcr�r�)r@r��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�r=r?rrr�_testSendAndRecvMsg�szRDSTest._testSendAndRecvMsgcCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr2)r;r�rcr��data1�data2r�rrr�testSendAndRecvMulti�szRDSTest.testSendAndRecvMulticCs@d|_|j�|jdt|jf�d|_|j�|jdt|jf�dS)Nsbaconrsegg)r�r�r,r�r=r�r?rrr�_testSendAndRecvMulti	szRDSTest._testSendAndRecvMulticCsLt�|jgggd�\}}}|�|j|�|j�|j�\}}|�|j|�dS)Ng@)�selectr;rr�rcr�r�)r@rrr\r�r�rrr�
testSelect		szRDSTest.testSelectcCs"d|_|j�|jdt|jf�dS)Nsselectrr�r?rrr�_testSelect	szRDSTest._testSelect)r�)rErFrGrLrAr�r�r�r�rr
r�r�r�r�r�r�rXrrrSrr��s




r�z'QIPCRTR sockets required for this test.c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�BasicQIPCRTRTestcCs
tjdSr2)r
r*r?rrrr5	sz%BasicQIPCRTRTest.testCrucialConstantscCs4t�tjtj��}Wd�n1s&0YdSr2)r
r*r rrrrry	sz!BasicQIPCRTRTest.testCreateSocketcCsHt�tjtj��$}|�|��dd�Wd�n1s:0YdS�Nror)r
r*r r�r�rrrr�testUnbound	szBasicQIPCRTRTest.testUnboundcCs^t�tjtj��:}tj||��dd�|�|��dd�Wd�n1sP0YdS)Nrr�ro)r
r*r rr<r��assertNotEqualrrrr�testBindSock"	szBasicQIPCRTRTest.testBindSockcCsHt�tjtj��$}|jttj|dd�Wd�n1s:0YdS)Nr�r�)r
r*r r$rrr<rrrr�testInvalidBindSock'	sz$BasicQIPCRTRTest.testInvalidBindSockcCsRt�tjtj��.}|�d�|�|��dd�Wd�n1sD0YdS)N)�{r�ror)r
r*r r�r�r�rrrr�testAutoBindSock+	s
z!BasicQIPCRTRTest.testAutoBindSockN)	rErFrGr5ryr�r�r�r�rrrrr�	sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BasicVSOCKTestcCs
tjdSr2)r
r�r?rrrr55	sz#BasicVSOCKTest.testCrucialConstantscCs4tjtjtjtjtjtjtjtjdSr2)	r
�SO_VM_SOCKETS_BUFFER_SIZE�SO_VM_SOCKETS_BUFFER_MIN_SIZE�SO_VM_SOCKETS_BUFFER_MAX_SIZEr�ZVMADDR_PORT_ANYZVMADDR_CID_HOSTZVM_SOCKETS_INVALID_VERSIONrr?rrr�testVSOCKConstants8	sz!BasicVSOCKTest.testVSOCKConstantscCs4t�tjtj��}Wd�n1s&0YdSr2)r
r�r/rrrrryB	szBasicVSOCKTest.testCreateSocketcCs�t�tjtj���}|�tjtj�}|�tjtj�}|�tjtj�}|�tjtj|d�|�tjtj|d�|�tjtj|d�|�|d|�tjtj��|�|d|�tjtj��|�|d|�tjtj��Wd�n1s�0YdS�Nr�)	r
r�r/r�r�r�r�r�r�)r@rZorig_maxr~Zorig_minrrrr�F	sD���
�
�
�
��
��
��z#BasicVSOCKTest.testSocketBufferSizeN)rErFrGr5r�ryr�rrrrr�0	s
r�z)Bluetooth sockets required for this test.c@sveZdZdd�Zdd�Ze�ejdkd�dd��Z	e�ejdkd	�d
d��Z
e�ejdkpdej�d�d
�dd��ZdS)�BasicBluetoothTestcCsJtjtjtjtjtjdkrFtjtjtj	tj�
d�sFtjdS)Nr�r�)r
�
BDADDR_ANY�BDADDR_LOCALr.r0r|r��BTPROTO_HCI�SOL_HCI�
BTPROTO_L2CAPr��BTPROTO_SCOr?rrr�testBluetoothConstantse	s
z)BasicBluetoothTest.testBluetoothConstantscCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
r.r/r0rrrr�testCreateRfcommSockets	sz)BasicBluetoothTest.testCreateRfcommSocketr�z&windows does not support L2CAP socketscCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
r.r&r�rrrr�testCreateL2capSocketw	sz(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketscCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
r.rr�rrrr�testCreateHciSocket|	sz&BasicBluetoothTest.testCreateHciSocketr�z.windows and freebsd do not support SCO socketscCs8t�tjtjtj��}Wd�n1s*0YdSr2)r
r.r&r�rrrr�testCreateScoSocket�	sz&BasicBluetoothTest.testCreateScoSocketN)
rErFrGr�r�r�rqr|r�r�r�r�r�rrrrr�a	s

�r�c@s�eZdZd+dd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�e�Zejd$d%��Zd&d'�Zd(d)�Zd*S),�BasicTCPTestr�cCstj||d�dSr��r�rLr�rrrrL�	szBasicTCPTest.__init__cCs|j�d�}|�|t�dSr�)r�r�r�r�r�rrr�testRecv�	szBasicTCPTest.testRecvcCs|j�t�dSr2�r�r�r�r?rrr�	_testRecv�	szBasicTCPTest._testRecvcCs8|j�tt�d�}|j�d�}||}|�|t�dS�N�r�)r�r�r�r�r�)r@�seg1�seg2r�rrr�testOverFlowRecv�	szBasicTCPTest.testOverFlowRecvcCs|j�t�dSr2r�r?rrr�_testOverFlowRecv�	szBasicTCPTest._testOverFlowRecvcCs |j�d�\}}|�|t�dSr�)r�r�r�r��r@r�r�rrr�testRecvFrom�	szBasicTCPTest.testRecvFromcCs|j�t�dSr2r�r?rrr�
_testRecvFrom�	szBasicTCPTest._testRecvFromcCs@|j�tt�d�\}}|j�d�\}}||}|�|t�dSr�)r�r�r�r�r�)r@r�r�r�r�rrr�testOverFlowRecvFrom�	sz!BasicTCPTest.testOverFlowRecvFromcCs|j�t�dSr2r�r?rrr�_testOverFlowRecvFrom�	sz"BasicTCPTest._testOverFlowRecvFromcCs0d}|j�d�}|sq ||7}q|�|d�dS)Nr�r��ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r�r�r�)r@r��readrrr�testSendAll�	s
zBasicTCPTest.testSendAllcCsd}|j�|�dS)Nr�)r�r)r@Z	big_chunkrrr�_testSendAll�	szBasicTCPTest._testSendAllcCsP|j��}t�|tjtj�}|�|j�|�|tj�|�	d�}|�
|t�dSr�)r�rr
�fromfdr:r/rUrrr�r�r�)r@rRr�r�rrr�
testFromFd�	s

zBasicTCPTest.testFromFdcCs|j�t�dSr2r�r?rrr�_testFromFd�	szBasicTCPTest._testFromFdcCs0|j��}|�|j�|�d�}|�|t�dSr�)r��duprUrr�r�r�)r@r�r�rrr�testDup�	s

zBasicTCPTest.testDupcCs|j�t�dSr2r�r?rrr�_testDup�	szBasicTCPTest._testDupcCs&|j�d�}|�|t�|j��dSr�)r�r�r�r�rzr�r�rrr�testShutdown�	szBasicTCPTest.testShutdowncCs|j�t�|j�d�dSr�)r�r�r��shutdownr?rrr�
_testShutdown�	szBasicTCPTest._testShutdowncCsXddl}|j�t�|�t|jj|jd�|�t|jjd|jd�|j�d�dS)Nrror�)	r�r�r�r�r$rurr��UINT_MAX�r@r�rrr�_testShutdown_overflow�	s��z#BasicTCPTest._testShutdown_overflowcCs�|j��}|j��}|�||�|�|jj�|�t|jjd�|j�	�t
j
t
jt
j|d�}|�
|j	�|�d�}|�|t�dS)Nr�r�)r�rrLr�r�_closedr$rr�rr
r:r/rUr�)r@rrr�r�rrr�
testDetach�	s



zBasicTCPTest.testDetachcCs|j�t�dSr2r�r?rrr�_testDetach�	szBasicTCPTest._testDetachN)r�)rErFrGrLr�r�r�r�r�r�r�r�r�r�r�r�rrrrrrpZtestShutdown_overflowrr	r
rrrrr��	s,

		


r�c@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestr�cCstj||d�dSr�)r�rLr�rrrrL
szBasicUDPTest.__init__cCs |j�tt��}|�|t�dSr2�r;r�r�r�r�r�rrr�testSendtoAndRecv
szBasicUDPTest.testSendtoAndRecvcCs|j�tdt|jf�dSr��r�r,r�r�r=r?rrr�_testSendtoAndRecv
szBasicUDPTest._testSendtoAndRecvcCs$|j�tt��\}}|�|t�dSr2�r;r�r�r�r�r�rrrr�
szBasicUDPTest.testRecvFromcCs|j�tdt|jf�dSr�rr?rrrr�
szBasicUDPTest._testRecvFromcCs|�t|jjd�dS�Nrp�r$r�r;r�r?rrr�testRecvFromNegative
sz!BasicUDPTest.testRecvFromNegativecCs|j�tdt|jf�dSr�rr?rrr�_testRecvFromNegative
sz"BasicUDPTest._testRecvFromNegativeN)r��
rErFrGrLr
rr�r�rrrrrrr
s
rc@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPLITETestr�cCstj||d�dSr�)r�rLr�rrrrL$
szBasicUDPLITETest.__init__cCs |j�tt��}|�|t�dSr2rr�rrrr
'
sz"BasicUDPLITETest.testSendtoAndRecvcCs|j�tdt|jf�dSr�rr?rrrr,
sz#BasicUDPLITETest._testSendtoAndRecvcCs$|j�tt��\}}|�|t�dSr2rr�rrrr�/
szBasicUDPLITETest.testRecvFromcCs|j�tdt|jf�dSr�rr?rrrr�4
szBasicUDPLITETest._testRecvFromcCs|�t|jjd�dSrrr?rrrr7
sz%BasicUDPLITETest.testRecvFromNegativecCs|j�tdt|jf�dSr�rr?rrrr;
sz&BasicUDPLITETest._testRecvFromNegativeN)r�rrrrrr 
s
rcs�eZdZejZ�fdd�Zdd�ZdZdd�Z	dd	�Z
d
d�Zdd
�ZdZ
dD]Ze
eeed�OZ
qNdZdZdZddd�Z�ZS)�SendrecvmsgBasecst��|_t���dSr2)rMrx�
misc_eventrKrAr?rSrrrA`
s
zSendrecvmsgBase.setUpcCs|j�|�Sr2)�cli_sockr�r�rrr�sendToServerd
szSendrecvmsgBase.sendToServerrcGs|jj||jt|�d��Sr2)rr��sendmsg_to_server_defaultsr��r@rQrrr�sendmsgToServerl
s�zSendrecvmsgBase.sendmsgToServercGs |j|g|�R�}|�|�|Sr2)r��registerRecvmsgResult)r@r�rcrQ�resultrrr�	doRecvmsgt
s
zSendrecvmsgBase.doRecvmsgcCsdSr2r�r@rrrrr~
sz%SendrecvmsgBase.registerRecvmsgResultcCs|�||�dSr2�r��r@Zaddr1Zaddr2rrr�checkRecvmsgAddress�
sz#SendrecvmsgBase.checkRecvmsgAddressr)�
MSG_CTRUNC�MSG_OOBNc
Cs�|j}|j}|r&||jO}||jO}n|durB||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�	Exceptionrr�)
r@r��eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothr�rrr�
checkFlags�
s&




�zSendrecvmsgBase.checkFlags)Nrrr)rErFrGr�LOOPBACK_TIMEOUT�fail_timeoutrArrrr rr$r(r�rr
r'r)r*r0rXrrrSrrY
s
rc@seZdZdd�ZdS)�RecvmsgIntoMixincGsht|�}|j|gg|�R�}|�|�|�|dd�|�|d|�t|d|d��f|dd�Sr)r��recvmsg_intor�assertGreaterEqual�assertLessEqualr�)r@r�rcrQ�bufrrrrr �
s
zRecvmsgIntoMixin.doRecvmsgN)rErFrGr rrrrr3�
sr3cs eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasecst�jtjBSr2)rKr*r
�	MSG_TRUNCr?rSrrr*�
sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rErFrG�propertyr*rXrrrSrr8�
sr8cs eZdZe�fdd��Z�ZS)�SendrecvmsgSCTPFlagsBasecst�jtjBSr2)rKr)r
�MSG_EORr?rSrrr)�
sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rErFrGr:r)rXrrrSrr;�
sr;c@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jSr2)r;r?rrr�	serv_sock�
sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jSr2)r�r?rrrr�
sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfSr�)r�r?rrrr�
sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j�||j�Sr2)rr,r�r�rrrr�
sz*SendrecvmsgConnectionlessBase.sendToServerN)rErFrGr:r>rrrrrrrr=�
s


r=c@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jSr2)r�r?rrrr>sz"SendrecvmsgConnectedBase.serv_sockcCs|jSr2)r�r?rrrrsz!SendrecvmsgConnectedBase.cli_sockcCsdSr2rr#rrrr$sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rErFrGr:r>rr$rrrrr?s


r?cseZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasecst���|j�|j�dSr2)rKrAr>r�r2r?rSrrrAs
z"SendrecvmsgServerTimeoutBase.setUp)rErFrGrArXrrrSrr@sr@c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeed�dd��Zejd d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SendmsgTestscCs|�|j�tt��t�dSr2�r�r>r�r�r�r?rrr�testSendmsg!szSendmsgTests.testSendmsgcCs|�|�tg�tt��dSr2�r�rr�r�r?rrr�_testSendmsg%szSendmsgTests._testSendmsgcCs|�|j�tt��t�dSr2rBr?rrr�testSendmsgDataGenerator(sz%SendmsgTests.testSendmsgDataGeneratorcCs&|�|�dd�tfD��tt��dS)Ncss|]
}|VqdSr2rrrrrr�-r�z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rDr?rrr�_testSendmsgDataGenerator,s�z&SendmsgTests._testSendmsgDataGeneratorcCs|�|j�tt��t�dSr2rBr?rrr�testSendmsgAncillaryGenerator0sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|�|�tgdd�dD��tt��dS)Ncss|]
}|VqdSr2rrrrrr�5r�z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>rrDr?rrr�_testSendmsgAncillaryGenerator4s�z+SendmsgTests._testSendmsgAncillaryGeneratorcCs|�|j�tt��t�dSr2rBr?rrr�testSendmsgArray8szSendmsgTests.testSendmsgArraycCs$|�|�t�dt�g�tt��dS)N�B)r�r�arrayr�r�r?rrr�_testSendmsgArray<s�zSendmsgTests._testSendmsgArraycCs|�|j�tt��t�dSr2rBr?rrr�testSendmsgGather@szSendmsgTests.testSendmsgGathercCs.|�|�tdd�tdd�g�tt��dS�Nr�rDr?rrr�_testSendmsgGatherDszSendmsgTests._testSendmsgGathercCs|�|j�d�d�dS�Nrq�done�r�r>r�r?rrr�testSendmsgBadArgsGszSendmsgTests.testSendmsgBadArgscCs�|�t|jj�|�t|jd�|�t|jt��|�t|jt�g�|�t|jtt�g�|�t|jtgt��|�t|jtggt��|�t|jtggdt��|�d�dS)Nsnot in an iterablerrR)r$r�rr�r�objectr�rr?rrr�_testSendmsgBadArgsKs.
�
�
�
�
�

�
�z SendmsgTests._testSendmsgBadArgscCs|�|j�d�d�dSrQrSr?rrr�testSendmsgBadCmsg]szSendmsgTests.testSendmsgBadCmsgcCs�|�t|jtgt�g�|�t|jtgt�ddfg�|�t|jtgdt�dfg�|�t|jtgddt�fg�|�t|jtgdg�|�t|jtgdg�|�d�dS)Nr�data)rr)rrrXr>rR�r$r�rr�rUrr?rrr�_testSendmsgBadCmsgas&

�
�
�
�
�
�z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs|�|j�d�d�dSrQrSr?rrr�testSendmsgBadMultiCmsgpsz$SendmsgTests.testSendmsgBadMultiCmsgcCs@|�t|jtggd��|�t|jtgdt�g�|�d�dS)N�rrr�rRrYr?rrr�_testSendmsgBadMultiCmsgvs

�
�z%SendmsgTests._testSendmsgBadMultiCmsgcCs|�|j�d�d�dSrQrSr?rrr�testSendmsgExcessCmsgReject~sz(SendmsgTests.testSendmsgExcessCmsgRejectcCsbttd�sT|�t��"}|�tgddg�Wd�n1s<0Y|�|jj�|�	d�dS)Nr[r]rR)
rr
r$rrr��assertIsNoner-rfr�r@r/rrr�_testSendmsgExcessCmsgReject�s

0z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdSr2rr?rrr�testSendmsgAfterClose�sz"SendmsgTests.testSendmsgAfterClosecCs |j��|�t|jtg�dSr2)rrr$rrr�r?rrr�_testSendmsgAfterClose�s
z#SendmsgTests._testSendmsgAfterCloseN)rErFrGrCrErFrGrHrIrJrMrNrPrTrVrWrZrr
r\r�r^r_rbrcrdrrrrrAs,

rAc@sReZdZdd�Zdd�Zdd�Zdd�Zeej	d	vd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs|�|j�tt��t�dSr2rBr?rrr�testSendmsgExplicitNoneAddr�sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|�|�tggdd�tt��dSr�rDr?rrr�_testSendmsgExplicitNoneAddr�sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs.|�|j�d�d�|�|jj|jd��dS�Nr��aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�r5�r�r>r�rrr�r2r?rrr�testSendmsgTimeout�sz%SendmsgStreamTests.testSendmsgTimeoutc
Cs�z||j�d�z|�dg�qWnDtjy4Yn<tyd}z|jtjkrP�WYd}~nd}~00|�d�W|j	�
�n|j	�
�0dS)N���Q��?ri�socket.timeout not raised)rr�rr
r5rrf�ENOMEMr rrm�r@r�rrr�_testSendmsgTimeout�sz&SendmsgStreamTests._testSendmsgTimeout>r�z<MSG_DONTWAIT not known to work on this platform when sendingcCs.|�|j�d�d�|�|jj|jd��dSrhrkr?rrr�testSendmsgDontWait�sz&SendmsgStreamTests.testSendmsgDontWaitcCszzh|�t��$}|�dggtj�qWd�n1s60Y|�|jjtjtj	tj
f�W|j��n|j��0dS�Nri)
r$rrr
�MSG_DONTWAITrr-rf�EAGAIN�EWOULDBLOCKrorrmrarrr�_testSendmsgDontWait�s2
�z'SendmsgStreamTests._testSendmsgDontWaitN)
rErFrGrfrgrlrqr�r|r�rrr�rwrrrrre�s
�
rec@seZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdSr2rr?rrr�testSendmsgNoDestAddr�sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|�t|jjtg�|�t|jjtggdd�dSr�)r$rrr�r�r?rrr�_testSendmsgNoDestAddr�s�
�z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rErFrGryrzrrrrrx�srxc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zeed!�d"d#��Zejd$d%��Zeejd&�d'd(��Zejd)d*��Zd+S),�RecvmsgGenericTestscCsR|�|jtt��\}}}}|�|t�|�||j�|�|g�|j|dd�dS�NT�r,�r r>r�r�r�r$r�r0�r@r�r�r�r�rrr�testRecvmsg�s
zRecvmsgGenericTests.testRecvmsgcCs|�t�dSr2�rr�r?rrr�_testRecvmsg�sz RecvmsgGenericTests._testRecvmsgcCsV|�|jtt�dd�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTr}r~rrrr�testRecvmsgExplicitDefaults�s
�z/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|�t�dSr2r�r?rrr�_testRecvmsgExplicitDefaults�sz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Nr>Tr}r~rrrr�testRecvmsgShorter�s
�z&RecvmsgGenericTests.testRecvmsgShortercCs|�t�dSr2r�r?rrr�_testRecvmsgShortersz'RecvmsgGenericTests._testRecvmsgShortercCs^|�|jtt�d�\}}}}|�|tdd��|�||j�|�|g�|j|dd�dS)Nr����Fr}r~rrrr�testRecvmsgTrunc	s
�z$RecvmsgGenericTests.testRecvmsgTrunccCs|�t�dSr2r�r?rrr�_testRecvmsgTruncsz%RecvmsgGenericTests._testRecvmsgTrunccCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NroTr}r~rrrr�testRecvmsgShortAncillaryBufs�z0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|�t�dSr2r�r?rrr�_testRecvmsgShortAncillaryBufsz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)N�(Tr}r~rrrr�testRecvmsgLongAncillaryBuf!s�z/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|�t�dSr2r�r?rrr�_testRecvmsgLongAncillaryBuf*sz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|j��|�t|j|jd�dSr�)r>rr$rr r?rrr�testRecvmsgAfterClose-s
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdSr2rr?rrr�_testRecvmsgAfterClose2sz*RecvmsgGenericTests._testRecvmsgAfterClosecCsFz4|j�d�|�tj|j|jtt��W|j�	�n|j�	�0dS)Nrm)
r>r�r$r
r5r r�r�rrmr?rrr�testRecvmsgTimeout5s�z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|�|jj|jd��dS�Nrj)rrr�r2r?rrr�_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)	Nr�rr�Fr9�r,r/Tr})r r>r�r�r
r�r�r$r�r0rrrrr�testRecvmsgPeekAs.�
��z#RecvmsgGenericTests.testRecvmsgPeekcCs|�t�dSr2r�r?rrr�_testRecvmsgPeekdsz$RecvmsgGenericTests._testRecvmsgPeekr�cCs`|j�|j�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dSr|)
r>r�r2r r�r�r�r$r�r0rrrr�testRecvmsgFromSendmsghsz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs.|�|�tdd�tdd�g�tt��dSrOrDr?rrr�_testRecvmsgFromSendmsgssz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rErFrGr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
r�r�r�r�r�rrrrr{�s0						
"



r{c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RecvmsgGenericStreamTestscCsN|�|jd�\}}}}|�|d�|�||j�|�|g�|j|dd�dS)Nr�r�r})r r>r�r$r�r0rrrr�testRecvmsgEOF|s
z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|j��dSr2)rrr?rrr�_testRecvmsgEOF�sz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|�|jtt�d�\}}}}|�||j�|�|g�|j|dd�|�|jd�\}}}}|�||j�|�|g�|j|dd�||}|�|t�dS)Nr�Fr}r�T)r r>r�r�r$r�r�r0)r@r�r�r�r�r�r�rrr�testRecvmsgOverflow�s
�z-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|�t�dSr2r�r?rrr�_testRecvmsgOverflow�sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)rErFrGr�r�r�r�rrrrr�x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)Nrprr�Tr})
r$r�r>r�r�r�r�r�rUr�r$r�r0rrrr�testRecvmsgBadArgs�s0�
�����zRecvmsgTests.testRecvmsgBadArgscCs|�t�dSr2r�r?rrr�_testRecvmsgBadArgs�sz RecvmsgTests._testRecvmsgBadArgsN)rErFrGr�r�rrrrr��sr�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 writablerpTr})
r�r�r�r$r�r>r4rUr�r�r$r�r0�r@r7�nbytesr�r�r�rrr�testRecvmsgIntoBadArgs�s@
��
����
�
�z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|�t�dSr2r�r?rrr�_testRecvmsgIntoBadArgs�sz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|j�dd�|fD��\}}}}|�|tt��|�|tt��|�||j�|�|g�|j|dd�dS)Ncss|]
}|VqdSr2rrrrrr��r�z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>Tr})	r�r�r�r>r4r�r$r�r0r�rrr�testRecvmsgIntoGenerator�s�z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|�t�dSr2r�r?rrr�_testRecvmsgIntoGenerator�sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxt�ddgtt��}|j�|g�\}}}}|�|tt��|�|��t�|�||j�|�|g�|j	|dd�dS)NrKrTr})
rLr�r�r>r4r��tobytesr$r�r0r�rrr�testRecvmsgIntoArray�sz%RecvmsgIntoTests.testRecvmsgIntoArraycCs|�t�dSr2r�r?rrr�_testRecvmsgIntoArray�sz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|j�|t|�dd�|g�\}}}}|�|td��|�|td��|�|td��|�|td	��|�||j�|�|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	�Mary had a little lambsMarys
01 had a 9slittle lamb---Tr})	r�r>r4�
memoryviewr�r�r$r�r0)r@�b1�b2Zb3r�r�r�r�rrr�testRecvmsgIntoScatter�s�z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|�d�dS)Nr�)rr?rrr�_testRecvmsgIntoScatter
sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)rErFrGr�r�r�r�r�r�r�r�rrrrr��s
r�c@s`eZdZzddlZWney*dZYn0edej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs�|jt�d�d}ttd��tt|d|��}|�t�d�t�d�jd�|D]2}t�|�}|�|t�d�|�|�	||j�qT|�
ttjd�|�
ttj|�|�
ttjtj
�dS)Nrro�r8r�rp)�socklen_t_limitr
r��listr)rjrL�itemsizer�r6r$rur|�maxsize)r@�toobigrP�nr,rrr�testCMSG_LEN
s
zCmsgMacroTests.testCMSG_LENr[cCs�|jt�d�d}ttd��tt|d|��}t�d�}|�|t�d�jd�|D]T}t�|�}|�||�|�|t�	|��|�||t�	d��|�
||j�|}qX|�ttjd�|�ttj|�|�ttjt
j�dS)Nror�rr8r�rp)r�r
r[r�r)rjrLr�r5r�r6r$rur|r�)r@r�rP�lastr�r,rrr�testCMSG_SPACE*
s

zCmsgMacroTests.testCMSG_SPACE)rErFrGr�r�r��minr�rr
r�r�rrrrr�
s

r�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdddd�Z	dd�Z
dd�Zdd�Zdd�Z
eed�dd��Zejdd��Zdd�Zdd �Ze�ejd!kd"�e�ed#�eed�d$d%����Zeje�ejd!kd"�e�ed#�d&d'����Ze�ejd!kd"�e�ed#�eed�d(d)����Zeje�ejd!kd"�e�ed#�d*d+����Zd,d-�Ze�ejd!kd.�d/d0��Zd1d2�Z d3d4�Z!d5d6�Z"eed�d7d8��Z#e#jd9d:��Z$ded;d<�Z%d=d>�Z&d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*dGdH�Z+dIdJ�Z,dKdL�Z-dMdN�Z.dOdP�Z/dfdQdR�Z0dSdT�Z1dUdV�Z2dWdX�Z3dYdZ�Z4d[d\�Z5d]d^�Z6d_d`�Z7dadb�Z8dcS)g�
SCMRightsTesti����cCs\g}t|�D]J}t��\}}|�tj|�|�tj|�t�|t|��	��|�
|�q|Sr2)r)r��mkstemprUr�r�r�writer�encode�append)r@r��fdsr8rRr�rrr�newFDsK
szSCMRightsTest.newFDscCsBt|�D]4\}}t�|dtj�|�t�|d�t|����qdS)Nrr�)�	enumerater��lseek�SEEK_SETr�r�rr�)r@r�r�rRrrr�checkFDsW
szSCMRightsTest.checkFDscCs|�|j|�dSr2)rU�closeRecvmsgFDsr!rrrr^
sz#SCMRightsTest.registerRecvmsgResultcCsn|dD]`\}}}|tjkr|tjkrt�d�}|�|dt|�t|�|j��|D]}t�|�qXqdS)Nror8)	r
r3�
SCM_RIGHTSrL�	frombytesr�r�r�r)r@Zrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datar�rRrrrr�a
s
�
�zSCMRightsTest.closeRecvmsgFDsc
Cs8|�|�tgtjtjt�d|�|��fg�tt��dS)Nr8)	r�rr�r
r3r�rLr�r�)r@r�rrr�createAndSendFDsm
s���zSCMRightsTest.createAndSendFDsrorcCs�|\}}}}|�|t�|�||j�|j|dtj|d�|�|t�|�	t
|�|�t�d�}	|D]`}
|�|
t�|
\}}}
|�|tj
�|�|tj�|�|
t�|�t
|
�td�|	�|
�qd|�t
|	�|�|�|	�dS)NT�r,r.r/r8r)r�r�r$r�r0r
r%rr�r6r�rL�tupler3r�r��
SIZEOF_INTr�r�)r@Znumfdsr�maxcmsgs�ignoreflagsr�r�r�r�r��itemr�r�r�rrr�checkRecvmsgFDsw
s&�

zSCMRightsTest.checkRecvmsgFDscCs |�d|�|jtt�d��dS)Nror��r�r r>r�r�r?rrr�testFDPassSimple�
s�zSCMRightsTest.testFDPassSimplec
Cs<|�|�tgtjtjt�d|�d����fg�t	t��dS)Nr8ro)
r�rr�r
r3r�rLr�r�r�r?rrr�_testFDPassSimple�
s���zSCMRightsTest._testFDPassSimplecCs |�d|�|jtt�d��dS)Nr+r�r�r?rrr�testMultipleFDPass�
s�z SCMRightsTest.testMultipleFDPasscCs|�d�dS�Nr+�r�r?rrr�_testMultipleFDPass�
sz!SCMRightsTest._testMultipleFDPassr[cCs*|�d|�|jtt�t�dt���dSr�)r�r r>r�r�r
r[r�r?rrr�testFDPassCMSG_SPACE�
s
��z"SCMRightsTest.testFDPassCMSG_SPACEcCs|�d�dSr�r�r?rrr�_testFDPassCMSG_SPACE�
sz#SCMRightsTest._testFDPassCMSG_SPACEc
Cs0|jd|�|jtt�t�dt��tjd�dS)Nror+�r�)	r�r r>r�r�r
r�r�r%r?rrr�testFDPassCMSG_LEN�
s��z SCMRightsTest.testFDPassCMSG_LENcCs|�d�dSr�r�r?rrr�_testFDPassCMSG_LEN�
sz!SCMRightsTest._testFDPassCMSG_LENr=zskipping, see issue #12958zskipping, see issue #22397cCs$|jd|�|jtt�d�dd�dS)Nr�r�)r�r�r?rrr�testFDPassSeparate�
s�z SCMRightsTest.testFDPassSeparatecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dS�Nr�r8�	r�r�rr�r
r3r�rLr��r@Zfd0�fd1rrr�_testFDPassSeparate�
s����z!SCMRightsTest._testFDPassSeparatecCs@d}|j||�|jtt�t�t�t�t|��dtj	d�dS)Nr�)r�r�)
r�r r>r�r�r
r[r�r�r%)r@Znum_fdsrrr�testFDPassSeparateMinSpace�
s���z(SCMRightsTest.testFDPassSeparateMinSpacecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dSr�r�r�rrr�_testFDPassSeparateMinSpace�
s����z)SCMRightsTest._testFDPassSeparateMinSpacec
Csfz|�|g|�}Wn>tyP}z&|�|jt�|�|g�}WYd}~n
d}~00|�|t|��dSr2)rrrrfrir�r�)r@r�r�r�r�rrr�sendAncillaryIfPossible�
s"z%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd|�|jtt�d�tjd�dS)Nrr�r�)r�r r>r�r�r
r%r?rrr�testFDPassEmpty�
s
��zSCMRightsTest.testFDPassEmptycCs|�ttjtjdfg�dS�Nr�)r�r�r
r3r�r?rrr�_testFDPassEmptys
�zSCMRightsTest._testFDPassEmptycCs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�|D]6\}}}|�|tj�|�|tj�|�
t|�t�q\dS)Nr�Tr�ro)r r>r�r�r�r$r�r0r
r%r6r3r��
assertLessr��r@r�r�r�r�r�r�r�rrr�testFDPassPartialInts�z"SCMRightsTest.testFDPassPartialIntc	Cs4|�ttjtjt�d|jg���dd�fg�dS)Nr8rp)r�r�r
r3r�rL�badfdr�r?rrr�_testFDPassPartialInts��z#SCMRightsTest._testFDPassPartialIntc	Cs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�t�d�}|D]J\}}}|�|tj�|�|tj
�|�|dt|�t|�|j��qf|�
t|�d�|�|�dS)Nr�Tr�r�r8)r r>r�r�r�r$r�r0r
r%r6rLr3r�r�r�r�)	r@r�r�r�r�r�r�r�r�rrr�testFDPassPartialIntInMiddles �
�
z*SCMRightsTest.testFDPassPartialIntInMiddlec
CsZ|�d�\}}|�ttjtjt�d||jg���dd�ftjtjt�d|g�fg�dS)Nr�r8rp)	r�r�r�r
r3r�rLr�r�r�rrr�_testFDPassPartialIntInMiddle2s����z+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}|�|t�|�||j�|�|g�|j|dtj|d�dS)NT�r,r-r/)r�r�r$r�r0r
r%)r@rr�r�r�r�r�rrr�checkTruncatedHeader>s�z"SCMRightsTest.checkTruncatedHeadercCs"|j|�|jtt��tjd�dS�Nr��r�r r>r�r�r
r%r?rrr�testCmsgTruncNoBufSizeHs�z$SCMRightsTest.testCmsgTruncNoBufSizecCs|�d�dSr�r�r?rrr�_testCmsgTruncNoBufSizeQsz%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j|�|jtt�d�tjd�dS)Nrr�r�r?rrr�testCmsgTrunc0Ts�zSCMRightsTest.testCmsgTrunc0cCs|�d�dSr�r�r?rrr�_testCmsgTrunc0YszSCMRightsTest._testCmsgTrunc0cCs|�|�|jtt�d��dSr�)r�r r>r�r�r?rrr�testCmsgTrunc1_szSCMRightsTest.testCmsgTrunc1cCs|�d�dSr�r�r?rrr�_testCmsgTrunc1bszSCMRightsTest._testCmsgTrunc1cCs"|�|�|jtt�td��dSr�)r�r r>r�r�r�r?rrr�testCmsgTrunc2Intes�zSCMRightsTest.testCmsgTrunc2IntcCs|�d�dSr�r�r?rrr�_testCmsgTrunc2Intlsz SCMRightsTest._testCmsgTrunc2Intc	Cs(|�|�|jtt�t�d�d��dSr)r�r r>r�r�r
r�r?rrr�testCmsgTruncLen0Minus1os�z%SCMRightsTest.testCmsgTruncLen0Minus1cCs|�d�dSr�r�r?rrr�_testCmsgTruncLen0Minus1ssz&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-rror8)r r>r�r�r�r$r�r0r
r%r3r�r5r6rLr�r�r�)r@�ancbuf�maxdataZmindatar�r�r�r�r�r�r�r�rrr�checkTruncatedArrayys&�
�z!SCMRightsTest.checkTruncatedArraycCs|jt�d�dd�dS)Nr�rr�rr
r�r?rrr�testCmsgTruncLen0�szSCMRightsTest.testCmsgTruncLen0cCs|�d�dSr�r�r?rrr�_testCmsgTruncLen0�sz SCMRightsTest._testCmsgTruncLen0cCs|jt�d�ddd�dS)Nrror	r
r?rrr�testCmsgTruncLen0Plus1�sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|�d�dSr�r�r?rrr�_testCmsgTruncLen0Plus1�sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jt�t�td�dS)Nr	�rr
r�r�r?rrr�testCmsgTruncLen1�s�zSCMRightsTest.testCmsgTruncLen1cCs|�d�dSr�r�r?rrr�_testCmsgTruncLen1�sz SCMRightsTest._testCmsgTruncLen1cCs(|jt�dt�ddtdd�dS)Nr�ror	rr?rrr�testCmsgTruncLen2Minus1�s
�z%SCMRightsTest.testCmsgTruncLen2Minus1cCs|�d�dSr�r�r?rrr�_testCmsgTruncLen2Minus1�sz&SCMRightsTest._testCmsgTruncLen2Minus1N)ror)r)r)9rErFrGr�r�r�rr�r�r�r�r�r�r�rr
r�r�r�r�r�r�rqr|r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr
rrrrrrrrrr�C
s~

	













	
r�c@seZdZdZdZdd�Zd^dd�Zeed	d
�dd��Z	e	j
d
d��Zeedd	d
�dd��Zej
dd��Z
eejd�eed	d
�dd���Zej
dd��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�rpcCs4i}|D]&\}}}|�||f|�||||f<q|Sr2)r)r@r��dr�r�r�rrr�ancillaryMapping�s
z%RFC3542AncillaryTest.ancillaryMappingr�rcCs|j�tjtjd�|j��|�|jtt	�|�\}}}}|�
|t	�|�||j�|j
|dtj|d�|�
t|�d�|�|dt�|d\}}	}
|�
|tj�|�
|	tj�|�|
t�|�
t|
�t�t�d�}|�|
�|�|dd�|�|d|�dS)NroTr�rr8)r>r�r
r8rIrrmr r�r�r�r$r�r0r%rr�rOr�r�rLr�r5r6)r@�
ancbufsize�maxhopr�r�r�r�r�r�r�r�r�rrr�
checkHopLimit�s.
�
��

z"RFC3542AncillaryTest.checkHopLimitrIrOcCs|jdd�dS�Nr��r)rr?rrr�testRecvHopLimit�sz%RFC3542AncillaryTest.testRecvHopLimitcCs$|�|jj|jd��|�t�dSr��rrr�r2rr�r?rrr�_testRecvHopLimit�sz&RFC3542AncillaryTest._testRecvHopLimitr[cCs|jt�t�d�dS)Nr)rr
r[r�r?rrr�testRecvHopLimitCMSG_SPACE�sz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dSr�rr?rrr�_testRecvHopLimitCMSG_SPACE�sz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cCs|jd|jd�dS�Nr�)rr)r�	hop_limitr?rrr�testSetHopLimit�sz$RFC3542AncillaryTest.testSetHopLimitcCsL|�|jj|jd��|�|�tgtjtj	t
�
d|jg�fg�tt��dS�Nrjr8)
rrr�r2r�rr�r
r8rOrLr"r�r?rrr�_testSetHopLimits���z%RFC3542AncillaryTest._testSetHopLimitcCsB|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|�|�}|tjtjf}	|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�|tjtjf}|�t	|�t�t�d�}
|
�|�|�|
dd�|�|
d|�dS)NroTr�r�r8rr�)r>r�r
r8rIrKrrmr r�r�r�r$r�r0r%rrFr�rLr�r5r6rO)r@rrr�r�r�r�r�ZancmapZtcdatar�Zhldatarrr�checkTrafficClassAndHopLimits:
�
�
��




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrKrFcCs|jdd�dSr)r&r?rrr�testRecvTrafficClassAndHopLimit3sz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$|�|jj|jd��|�t�dSr�rr?rrr� _testRecvTrafficClassAndHopLimit9sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jt�t�dd�dS�Nr�r)r&r
r[r�r?rrr�)testRecvTrafficClassAndHopLimitCMSG_SPACE>s�z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dSr�rr?rrr�*_testRecvTrafficClassAndHopLimitCMSG_SPACEFsz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jd�dSr!�r&r"r?rrr�testSetTrafficClassAndHopLimitKs�z3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitcCsd|�|jj|jd��|�|�tgtjtj	t
�
d|jg�ftjtjt
�
d|j
g�fg�tt��dSr$)rrr�r2r�rr�r
r8rFrL�
traffic_classrOr"r�r?rrr�_testSetTrafficClassAndHopLimitTs�����z4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jd�dSr!r,r?rrr�testOddCmsgSize_s�z$RFC3542AncillaryTest.testOddCmsgSizec
Cs�|�|jj|jd��zJ|�tgtjtjt	�	d|j
g���dftjtjt	�	d|j
g�fg�}Wn�ty�}zh|�|jt�|�tgtjtjt	�	d|j
g�ftjtjt	�	d|j
g�fg�}|�|tt��WYd}~n
d}~00dS)Nrjr8r�)rrr�r2rr�r
r8rFrLr.r�rOr"rrrfrir�r�)r@r�r�rrr�_testOddCmsgSizeis2��������z%RFC3542AncillaryTest._testOddCmsgSizecCs�|j�tjtjd�|j��|dur*dn|f}|j|jtt	�g|�R�\}}}}|�
|t	�|�||j�|�
|g�|j
|dtj|d�dS)NrorTr�)r>r�r
r8rIrrmr r�r�r�r$r�r0r%)r@rr�rQr�r�r�r�rrr�checkHopLimitTruncatedHeaders 
�
���z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N�rr��r2r
r%r?rrrr��s�z+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$|�|jj|jd��|�t�dSr�rr?rrrr��sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nrr3r4r?rrr�testSingleCmsgTrunc0�s�z)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSingleCmsgTrunc0�sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nror)r2r?rrr�testSingleCmsgTrunc1�sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSingleCmsgTrunc1�sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dSr))r2r�r?rrr�testSingleCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSingleCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jt�d�dd�dS)Nrror)r2r
r�r?rrr�testSingleCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSingleCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|j�tjtjd�|j��|�|jtt	�t�
t�d�\}}}}|�|t	�|�
||j�|j|dtjd�|�t|�d�|r�|d\}}}|�|tj�|�|tj�|�t|�t�dS)NroTrr)r>r�r
r8rIrrmr r�r�r�r�r�r$r�r0r%r6rOr�r�rrr�testSingleCmsgTruncInData�s 
�
�z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$|�|jj|jd��|�t�dSr�rr?rrr�_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)NroTr�rr8r�)r>r�r
r8rIrKrrmr r�r�r�r$r�r0r%rrFrOr�rLr�r5r6)r@rr�r�r�r�r�r�r�r�r�rrr�checkTruncatedSecondHeader�s0
�
�
��

z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jt�t�tjd�dSr�)r?r
r[r�r%r?rrr�testSecondCmsgTrunc0s�z)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSecondCmsgTrunc0sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|�t�t�d�dSr��r?r
r[r�r?rrr�testSecondCmsgTrunc1sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSecondCmsgTrunc1sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|�t�t�dt�dSr�rBr?rrr�testSecondCmsgTrunc2Ints�z,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSecondCmsgTrunc2Int#sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|�t�t�t�d�d�dSr)r?r
r[r�r�r?rrr�testSecondCmsgTruncLen0Minus1(s
��z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dSr�rr?rrr�_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)NroTrrr8r�)r>r�r
r8rIrKrrmr r�r�r[r�r�r�r$r�r0r%rFrO�pop�removerLr�r5r6r�)
r@r�r�r�r�Z
cmsg_typesr�r�r�r�rrr�testSecomdCmsgTruncInData3s:
�
�

�



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$|�|jj|jd��|�t�dSr�rr?rrr�_testSecomdCmsgTruncInDataXsz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r�r)r�r)r)r)1rErFrGr"r.rrrr
rr�rrr r#r%r&r'r(r*r+r-r/r0r1r2r�r�r5r6r7r8r9r:r;r<r=r>r?r@rArCrDrErFrGrHrKrLrrrrr�s�






	


�
$�


�



�



�





















 
�


�


�


�


�
#rc@seZdZdS)�SendrecvmsgUDPTestBaseN�rErFrGrrrrrM`srMr�c@seZdZdS)�SendmsgUDPTestNrNrrrrrOesrOr�c@seZdZdS)�RecvmsgUDPTestNrNrrrrrPisrPr4c@seZdZdS)�RecvmsgIntoUDPTestNrNrrrrrQmsrQc@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs |�|dd�|dd��dSrr"r#rrrr$vsz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN�rErFrGr$rrrrrRrsrRr4r�r c@seZdZdS)�SendmsgUDP6TestNrNrrrrrT{srTc@seZdZdS)�RecvmsgUDP6TestNrNrrrrrU�srUc@seZdZdS)�RecvmsgIntoUDP6TestNrNrrrrrV�srVr8c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestNrNrrrrrW�srWc@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestNrNrrrrrX�srXc@seZdZdS)�SendrecvmsgUDPLITETestBaseNrNrrrrrY�srYc@seZdZdS)�SendmsgUDPLITETestNrNrrrrrZ�srZc@seZdZdS)�RecvmsgUDPLITETestNrNrrrrr[�sr[c@seZdZdS)�RecvmsgIntoUDPLITETestNrNrrrrr\�sr\c@seZdZdd�ZdS)�SendrecvmsgUDPLITE6TestBasecCs |�|dd�|dd��dSrr"r#rrrr$�sz/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNrSrrrrr]�sr]c@seZdZdS)�SendmsgUDPLITE6TestNrNrrrrr^�sr^c@seZdZdS)�RecvmsgUDPLITE6TestNrNrrrrr_�sr_c@seZdZdS)�RecvmsgIntoUDPLITE6TestNrNrrrrr`�sr`c@seZdZdS)�#RecvmsgRFC3542AncillaryUDPLITE6TestNrNrrrrra�srac@seZdZdS)�'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNrNrrrrrb�s	rbc@seZdZdS)�SendrecvmsgTCPTestBaseNrNrrrrrc�srcc@seZdZdS)�SendmsgTCPTestNrNrrrrrd�srdc@seZdZdS)�RecvmsgTCPTestNrNrrrrre�srec@seZdZdS)�RecvmsgIntoTCPTestNrNrrrrrf�srfc@seZdZdS)�SendrecvmsgSCTPStreamTestBaseNrNrrrrrgsrgz6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr:r/r�c@seZdZdS)�SendmsgSCTPStreamTestNrNrrrrrh
srhcseZdZ�fdd�Z�ZS)�RecvmsgSCTPStreamTestc
sTztt|���Wn<tyN}z$|jtjkr0�|�d�WYd}~n
d}~00dS�Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rKrir�rrf�ENOTCONNrb�r@r�rSrrr�sz$RecvmsgSCTPStreamTest.testRecvmsgEOF�rErFrGr�rXrrrSrrisricseZdZ�fdd�Z�ZS)�RecvmsgIntoSCTPStreamTestc
sTztt|���Wn<tyN}z$|jtjkr0�|�d�WYd}~n
d}~00dSrj)rKrnr�rrfrkrbrlrSrrr�$sz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFrmrrrSrrnsrnc@seZdZdS)�SendrecvmsgUnixStreamTestBaseNrNrrrrro-sror�c@seZdZdS)�SendmsgUnixStreamTestNrNrrrrrp1srpc@seZdZdS)�RecvmsgUnixStreamTestNrNrrrrrq6srqc@seZdZdS)�RecvmsgIntoUnixStreamTestNrNrrrrrr<srrr3r�c@seZdZdS)�RecvmsgSCMRightsStreamTestNrNrrrrrsBsrsc@seZdZdS)�RecvmsgIntoSCMRightsStreamTestNrNrrrrrtGsrtcsFeZdZ�fdd�ZejZeed�r2dZ	dd�Z
ndZ	dd�Z
�ZS)	�InterruptedTimeoutBasecs2t���t�tjdd��}|�tjtj|�dS)NcSsddSr�r)�signumr�rrrr�[r�z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rKrArrrU)r@Zorig_alrm_handlerrSrrrAXs

�zInterruptedTimeoutBase.setUp�	setitimerg�������?cCst�tj|�dSr2)rrw�ITIMER_REAL�r@Zsecondsrrr�setAlarmgszInterruptedTimeoutBase.setAlarmr�cCst�|�dSr2)rr�ryrrrrzms)rErFrGrArr1r5rr�
alarm_timerzrXrrrSrruSs

ru�siginterruptr�rwz+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�dSr2)rKrAr;r�r5r?rSrrrAzs
z InterruptedRecvTimeoutTest.setUpc	OsdzR|�|j�|�t��}||i|��Wd�n1s<0YW|�d�n|�d�0dSr�)rzr{r$r�r@r�rQrRr/rrr�checkInterruptedRecv~s
.z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|�|jjd�dSr�)rr;r�r?rrr�testInterruptedRecvTimeout�sz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs|�|jjtd��dSr�)rr;�	recv_intor�r?rrr�testInterruptedRecvIntoTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|�|jjd�dSr�)rr;r�r?rrr�testInterruptedRecvfromTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs|�|jjtd��dSr�)rr;�
recvfrom_intor�r?rrr�"testInterruptedRecvfromIntoTimeout�sz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|�|jjd�dSr�)rr;r�r?rrr�testInterruptedRecvmsgTimeout�sz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr4cCs|�|jjtd�g�dSr�)rr;r4r�r?rrr�!testInterruptedRecvmsgIntoTimeout�sz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rErFrGrArr�r�r�r�rr
r�r�rXrrrSrr}ss



r}csteZdZ�fdd�Zdd�Zdd�Ze�dd�d	d
��Ze�dd�dd��Z	e�dd�e
ejd
�dd���Z�Z
S)�InterruptedSendTimeoutTestcspt���|��|_|�|jj�tj|jd�}|�	�|j
��\|_}|�|jj�|�
�|j�|j�dS)N)�target)rKrAr�r�rUrrM�Thread�	doConnect�startr;r�r�rr�r5)r@Z
cli_threadr�rSrrrA�s

z InterruptedSendTimeoutTest.setUpcCs|j�|j�dSr2)r�r�r�r?rrrr��sz$InterruptedSendTimeoutTest.doConnectc	OsfzT|�t��,}|�|j�||i|��qWd�n1s>0YW|�d�n|�d�0dSr�)r$rrzr{r~rrr�checkInterruptedSend�s
0z/InterruptedSendTimeoutTest.checkInterruptedSendr�r�cCs|�|jjd�dSrs)r�r�r�r?rrr�testInterruptedSendTimeout�sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|�|jjd|j�dSrs)r�r�r,r�r?rrr�testInterruptedSendtoTimeout�s�z7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs|�|jjdg�dSrs)r�r�r�r?rrr�testInterruptedSendmsgTimeout�sz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rErFrGrAr�r�rZrequires_mac_verr�r�rr
r�rXrrrSrr��s	





r�c@seZdZdd�Zdd�ZdS)�
TCPCloserTestcCsh|j��\}}|��|j}t�|gggd�\}}}|�||g�|�|�d�d�|��|��dS)N��?ror�)r;r�rr�r�r�r�)r@r�r��sdr�r�rrrr�	testClose�szTCPCloserTest.testClosecCs |j�t|jf�t�d�dS�Nr�)r�r�r�r=r�r�r?rrr�
_testClose�szTCPCloserTest._testCloseN)rErFrGr�r�rrrrr��s
r�c@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr�cCstj||d�dSr�)r�rLr�rrrrL�szBasicSocketPairTest.__init__cCs\|�|tj�ttd�r*|�|jtj�n|�|jtj�|�|jtj�|�|j	d�dS)Nr�r)
rr
rr�rr�r:r�r/rr�rrr�_check_defaults�s
z#BasicSocketPairTest._check_defaultscCs|�|j�dSr2)r�r�r?rrr�
_testDefaults�sz!BasicSocketPairTest._testDefaultscCs|�|j�dSr2)r�r;r?rrr�testDefaults�sz BasicSocketPairTest.testDefaultscCs|j�d�}|�|t�dSr��r;r�r�r�r�rrrr�szBasicSocketPairTest.testRecvcCs|j�t�dSr2�r�r�r�r?rrrr�szBasicSocketPairTest._testRecvcCs|j�t�dSr2�r;r�r�r?rrr�testSendszBasicSocketPairTest.testSendcCs|j�d�}|�|t�dSr��r�r�r�r�r�rrr�	_testSendszBasicSocketPairTest._testSendN)r�)rErFrGrLr�r�r�r�r�r�r�rrrrr��s
	r�cs�eZdZdd�Z�fdd�Z�fdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Ze�
eed�preed�d�e�ejd�dd���Zdd�Zdd�Zdd�Z�ZS)�PurePythonSocketPairTestcCs2zt�tj�WSty,t�tj�YS0dSr2)r
r�r�rr:r?rrrr�sz#PurePythonSocketPairTest.socketpaircs0ttd�rtj|_tjt_nd|_t���dS)Nr�)rrr
r��_orig_sp�_fallback_socketpairrKrAr?rSrrrAs


zPurePythonSocketPairTest.setUpcs t���|jdur|jt_dSr2)rKrCr�r
r�r?rSrrrC)s

z!PurePythonSocketPairTest.tearDowncCs|j�d�}|�|t�dSr�r�r�rrr�	test_recv/sz"PurePythonSocketPairTest.test_recvcCs|j�t�dSr2r�r?rrr�
_test_recv3sz#PurePythonSocketPairTest._test_recvcCs|j�t�dSr2r�r?rrr�	test_send6sz"PurePythonSocketPairTest.test_sendcCs|j�d�}|�|t�dSr�r�r�rrr�
_test_send9sz#PurePythonSocketPairTest._test_sendcCs$t�tj�\}}|��|��dSr2)r
r�r:r�r@r�r1rrr�	test_ipv4=sz"PurePythonSocketPairTest.test_ipv4cCsdSr2rr?rrr�
_test_ipv4Bsz#PurePythonSocketPairTest._test_ipv4r8�IPV6_V6ONLY� IPV6_V6ONLY option not supportedr>cCs$t�tj�\}}|��|��dSr2)r
r�r�rr�rrr�	test_ipv6Esz"PurePythonSocketPairTest.test_ipv6cCsdSr2rr?rrr�
_test_ipv6Nsz#PurePythonSocketPairTest._test_ipv6cs�tjj�d���fdd�}d}}zn|tj_|�t��t��\}}Wd�n1sX0YW�tj_�rx���|r�|��|r�|��n.�tj_�r����|r�|��|r�|��0dS)Nc	sf�|�}�durbt�tjtj����d�z��|dd��WnttfyVYn0��d�|S)NFr�T)r
r:r/rIr��BlockingIOError�InterruptedError)r@r.�Zinject_sockZorig_getsocknamerr�inject_getsocketnameUs

z[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname)r
r�r$rr�r)r@r��sock1�sock2rr�r�$test_injected_authentication_failureQs,,
�z=PurePythonSocketPairTest.test_injected_authentication_failurecCsdSr2rr?rrr�%_test_injected_authentication_failurersz>PurePythonSocketPairTest._test_injected_authentication_failure)rErFrGr�rArCr�r�r�r�r�r�r�rqrrrorr�r�r�r�r�rXrrrSrr�s$	
�!r�c@s�eZdZd&dd�Zdd�Zdd�Zdd	�Zejd
d��Z	e�e�Z
e�e
ed�d
�e�ddd�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%S)'�NonBlockingTCPTestsr�cCst��|_tj||d�dSr�)rMrx�eventr�rLr�rrrrL|s
zNonBlockingTCPTests.__init__cCsh|�|j��|�|dk}|�|��|�tdurd|du}t�|tjtj�}|�t|tj@�|�dS)N�)	r�r;r��getblockingr�F_GETFLr��
O_NONBLOCK�bool)r@r�r5�blockingZfd_blocking�flagrrr�assert_sock_timeout�sz'NonBlockingTCPTests.assert_sock_timeoutcCs�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�dS)NTFr�rr�)r;rIr�r�r?rrr�testSetBlocking�sz#NonBlockingTCPTests.testSetBlockingcCsdSr2rr?rrr�_testSetBlocking�sz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|�d�|j�d�|�|j��d�|j�|jd�|�|j���dS)Nrzneeds UINT_MAX < ULONG_MAXFr�ro)	r�rZ	ULONG_MAXrbr;rIr�r�r`rrrr�testSetBlocking_overflow�s
z,NonBlockingTCPTests.testSetBlocking_overflowrHztest needs socket.SOCK_NONBLOCKr���cCs4|j��t�tjtjtjB�|_|�|jd�dSr�)r;rr
r:r/rHr�r?rrr�testInitNonBlocking�s


�z'NonBlockingTCPTests.testInitNonBlockingcCsdSr2rr?rrr�_testInitNonBlocking�sz(NonBlockingTCPTests._testInitNonBlockingcCs`td��D|j�d�|j��\}}|�|j�|�|���Wd�n1sR0YdS)Nr�)r6r;r�r�rUrr`r�r�rrr�testInheritFlagsBlocking�s

z,NonBlockingTCPTests.testInheritFlagsBlockingcCs|j�t|jf�dSr2�r�r�r�r=r?rrr�_testInheritFlagsBlocking�sz-NonBlockingTCPTests._testInheritFlagsBlockingcCsfd}t|��F|j�d�|j��\}}|�|j�|�|��|�Wd�n1sX0YdS)Ng4@r�)r6r;r�r�rUrr�r�)r@Zdefault_timeoutr�r�rrr�testInheritFlagsTimeout�s
z+NonBlockingTCPTests.testInheritFlagsTimeoutcCs|j�t|jf�dSr2r�r?rrr�_testInheritFlagsTimeout�sz,NonBlockingTCPTests._testInheritFlagsTimeoutcCs�|j�d�t��}|�t��|j��\}}Wd�n1sB0Yt��|}|�|d�|j�	�t
�
|jgggtj�\}}}|j|vr�|�
d�|j��\}}|�|j�|�|���dS)NFr�z'Error trying to do accept after select.)r;rIr��	monotonicr$r�r�r�r�rmr�r�LONG_TIMEOUTr rUrr`r�)r@Z
start_timer�r�Zdtr�r�rrrr�
testAccept�s,


zNonBlockingTCPTests.testAcceptcCs |j��|j�t|jf�dSr2)r�r�r�r�r�r=r?rrr�_testAccept�s
zNonBlockingTCPTests._testAcceptcCs�|j��\}}|�|j�|�d�|�t��|�tt	��}Wd�n1sR0Y|j
��t�|gggt
j�\}}}||vr�|�d�|�tt	��}|�|t	�dS)NFz0Error during select call to non-blocking socket.)r;r�rUrrIr$r�r�r�r�r�rmr�rr�r r�)r@r�r�r�r�r�rrrrr��s
,

zNonBlockingTCPTests.testRecvcCs,|j�t|jf�|j��|j�t�dSr2)r�r�r�r=r�r�rr�r?rrrr�s
zNonBlockingTCPTests._testRecvN)r�)rErFrGrLr�r�r�rrpr�Z_testSetBlocking_overflowr�rorr
�requires_linux_versionr�r�r�r�r�r�r�r�r�r�rrrrr�zs*


�	r�c@s�eZdZdZdZdZdZdZdZe	Z
dZe	Zd;d	d
�Z
dd�Zd
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/d0�Z d1d2�Z!d3d4�Z"d5d6�Z#d7d8�Z$d9d:�Z%dS)<�FileObjectClassTestCaseaoUnit tests for the object returned by socket.makefile()

    self.read_file is the io object returned by makefile() on
    the client connection.  You can read from this file to
    get output from the server.

    self.write_file is the io object returned by makefile() on the
    server connection.  You can write to this file to send output
    to the client.
    rpr�strictNr	r r�cCstj||d�dSr�r�r�rrrrL0sz FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_t�|�|jj|j	|j
|j|j|j
d�|_dS)NcSsg|]}t���qSr)rMrx�r�r8rrrr�4sz1FileObjectClassTestCase.setUp.<locals>.<listcomp>r+��encoding�errors�newline)r)�evt1�evt2�
serv_finished�cli_finishedr�rAr�r�	read_modercr�r�r��	read_filer?rrrrA3s�
�zFileObjectClassTestCase.setUpcCs6|j��|j��|�|jj�d|_t�|�dSr2)r�rmr�rr�closedr�rCr?rrrrC=s


z FileObjectClassTestCase.tearDowncCs0t�|�|jj|j|j|j|j|jd�|_	dS)Nr�)
r�r�r�r�
write_modercr�r�r��
write_filer?rrrr�Ds
�z#FileObjectClassTestCase.clientSetUpcCs6|j��|j��|�|jj�d|_t�|�dSr2)r�rmr�rrr�r�r�r?rrrr�Ls


z&FileObjectClassTestCase.clientTearDowncCsx|j�d�|j�d�|�tj|jjd�|�t��}|j�d�Wd�n1sX0Y|�dt	|j
��dS)Nror�z!cannot read from timed out object)r�r�r�r�r$r
r5rrrr-)r@�ctxrrr�testReadAfterTimeoutSs*z,FileObjectClassTestCase.testReadAfterTimeoutcCs.|j�|jdd��|j��|j��dS)Nrr�)r�r��	write_msg�flushr�r�r?rrr�_testReadAfterTimeout_s
z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|j�t|j�d�}|j�d�}||}|�||j�dSrO)r�r�r��read_msgr�)r@�	first_segZ
second_segr�rrr�
testSmallReaddsz%FileObjectClassTestCase.testSmallReadcCs|j�|j�|j��dSr2�r�r�r�r�r?rrr�_testSmallReadksz&FileObjectClassTestCase._testSmallReadcCs|j��}|�||j�dSr2)r�r�r�r�r�rrr�testFullReados
z$FileObjectClassTestCase.testFullReadcCs|j�|j�|j��dSr2)r�r�r�rr?rrr�
_testFullReadtsz%FileObjectClassTestCase._testFullReadcCs:t|j��}|j�d�}|sq(||7}q|�||j�dSr�)r�r�r�r�r�)r@r7�charrrr�testUnbufferedReadxs
z*FileObjectClassTestCase.testUnbufferedReadcCs|j�|j�|j��dSr2r�r?rrr�_testUnbufferedRead�sz+FileObjectClassTestCase._testUnbufferedReadcCs|j��}|�||j�dSr2)r��readliner�r��r@�linerrr�testReadline�s
z$FileObjectClassTestCase.testReadlinecCs|j�|j�|j��dSr2r�r?rrr�
_testReadline�sz%FileObjectClassTestCase._testReadlinecCs&|j��|j��}|�||j�dSr2)r�rr�r�r�r�r�rrr�testCloseAfterMakefile�s

z.FileObjectClassTestCase.testCloseAfterMakefilecCs|j�|j�|j��dSr2r�r?rrr�_testCloseAfterMakefile�sz/FileObjectClassTestCase._testCloseAfterMakefilecCs@|j��|j�tt��}t|jt�r.|�	�}|�
||j�dSr2)r�rr�r�r�r�r�r�r�decoder�r�rrr�testMakefileAfterMakefileClose�s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs|j�|j�|j��dSr2r�r?rrr�_testMakefileAfterMakefileClose�sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|�|jj�dSr2)rr�r�r?rrr�testClosedAttr�sz&FileObjectClassTestCase.testClosedAttrcCs|�|jj�dSr2)rr�r�r?rrr�_testClosedAttr�sz'FileObjectClassTestCase._testClosedAttrcCs,|�|jj|j�|�|jj|j���dSr2)r�r�r"r�r�r�rr?rrr�testAttributes�sz&FileObjectClassTestCase.testAttributescCs,|�|jj|j�|�|jj|j���dSr2)r�r�r"r�r�r�rr?rrr�_testAttributes�sz'FileObjectClassTestCase._testAttributescCs8|j��|�t|jj�|j��|�t|jj�dSr2)r�rr$r�rr�rr�r?rrr�
testRealClose�s

z%FileObjectClassTestCase.testRealClosecCsdSr2rr?rrr�_testRealClose�sz&FileObjectClassTestCase._testRealClose)r�)&rErFrGrWrcr�r�r�r�r�r�r�r�rLrArCr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr�sD


r�c@sdeZdZdZdZdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�ZdS)�!UnbufferedFileObjectClassTestCasea�Repeat the tests from FileObjectClassTestCase with bufsize==0.

    In this case (and in this case only), it should be possible to
    create a file object, read a line from it, create another file
    object, read another line from it, without loss of data in the
    first file object's buffer.  Note that http.client relies on this
    when reading multiple requests from the same socket.rcCsL|j��}|�|d|j�|j�dd�|_|j��}|�|d|j�dS)N�A. r	r�B. )r�r�r�r�r�rr�rrr�testUnbufferedReadline�s


z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|j�d|j�|j�d|j�|j��dS)Nrrr�r?rrr�_testUnbufferedReadline�sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|j��|j�d�}|�||j�|j��|�t|jjd�dSr�)r�rr�r�r�r�r$rr�rrr�testMakefileClose�s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|j�|j�|j��dSr2r�r?rrr�_testMakefileClose�sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t�|j�}|j��t�|j�}|�|d|�dSr�)r|r{r�r�rr�)r@Zrefcount_beforeZrefcount_afterrrr�testMakefileCloseSocketDestroy�s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdSr2rr?rrr�_testMakefileCloseSocketDestroy�szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|j�d�|�|j�td��d�|�|j�t|j�d�d�|j	�
�|j�d�|j�t|j�d�}|dur�t
�d�|j�t|j�d�}td�}|j�|�}|�|d�||d|�}|�||j�|�|j�td��d�|�|j�d�d�dS)NFr�r�r�g�?r�ro)r�rIr�r��readintor�r�r�r�r�rmr�r�r�r�)r@r�r7r�r�rrr�testSmallReadNonBlocking�s 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|j�d�|j�|j�|j��|j��|j�d�dS)Nr��@)	r�r�r�r�r�r�r�rmr�r?rrr�_testSmallReadNonBlockings


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|j�d�|jr|�|j�dS)Nr)r�r��serv_skippedrbr?rrr�testWriteNonBlockingsz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCstd|_|j�d�dtj}d}|j�|�}|�|d�t|�D](}|j�|�}|dur\qp|�|d�q@d|_dS)NFrr�rz$failed to saturate the socket buffer)	rr�rIrr	r�r�rjr))r@ZBIGZLIMITr�r8rrr�_testWriteNonBlockings
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rErFrGrWrcrrrrrr	rr
rrrrrrr�s		rc@seZdZdZdS)�#LineBufferedFileObjectClassTestCaseroN�rErFrGrcrrrrr)src@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�Nrrrrrr.src@s*eZdZdZdZe�d�ZdZeZ	dZ
dS)�"UnicodeReadFileObjectClassTestCase�=Tests for socket.makefile() in text mode (rather than binary)rrr r(N�rErFrGrWr�r�r�r�r�r�r�rrrrr3s
rc@s*eZdZdZdZeZdZe�d�Z	dZ
dS)�#UnicodeWriteFileObjectClassTestCaserr	rrr(N)rErFrGrWr�r�r�r�r�r�r�rrrrr=s
rc@s0eZdZdZdZe�d�ZdZe�d�Z	dZ
dS)�'UnicodeReadWriteFileObjectClassTestCaserrrrr(NrrrrrrGs

rc@seZdZdZdd�ZdS)�NetworkConnectionTestzProve network connection.cCst�t|jf�|_|j|_dSr2)r
�create_connectionr�r=r�r�r?rrrr�Tsz!NetworkConnectionTest.clientSetUpN)rErFrGrWr�rrrrrQsrc@seZdZdZdS)�
BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)rErFrGrWrrrrrZsrc@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGst�d��dS)Nz	timed out)r
r5rrrrr�asz,NetworkConnectionNoServer.MockSocket.connectN)rErFrGr�rrrr�
MockSocket`srccs,tj}|jt_zdVW|t_n|t_0dS)z*Return a socket which times out on connectN)r
r)r@Z
old_socketrrr�mocked_socket_moduleds
z.NetworkConnectionNoServer.mocked_socket_modulecCsrt��}t�tjtj�}|�|j�|�t��}|�	t
|f�Wd�n1sR0Y|�|jj
t
j�dSr2)rr�r
r:r/rUrr$rr�r�r�r-rfZECONNREFUSED)r@r=r�r/rrr�test_connectns,z&NetworkConnectionNoServer.test_connectcCs\t��}|�t��}t�t|f�Wd�n1s60Yt��}|�|j	j
|�dSr2)rr�r$rr
rr�Zget_socket_conn_refused_errsrr-rf)r@r=r/Zexpected_errnosrrr�test_create_connectionvs
,z0NetworkConnectionNoServer.test_create_connectioncCs�|���xzt�tdf�WnJtjy0YnBtyf}z tjsP|jtj	krR�WYd}~nd}~00|�
d�Wd�n1s�0YdS)Nrrn)rr
rr�r5rrr�rfZEAFNOSUPPORTr rprrr�test_create_connection_timeout�s
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rErFrGr
r�
contextlib�contextmanagerrrr r!rrrrr^s
	rc@sveZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestr�cCstj||d�t�|�dSr�r�r�rrrrL�sz(NetworkConnectionAttributesTest.__init__cCst��|_dSr2)rr��source_portr?rrrr��sz+NetworkConnectionAttributesTest.clientSetUpcCs|j��d|_t�|�dSr2r�r?rrrr��s
z.NetworkConnectionAttributesTest.clientTearDowncCs|j��\}}|��dSr2)r;r�rr�rrr�_justAccept�sz+NetworkConnectionAttributesTest._justAcceptcCs:tjt|jftjd�|_|�|jj�|�	|jj
d�dS)Nrjr�)r
rr�r=rr1r�rUrr�rr?rrr�_testFamily�s
�z+NetworkConnectionAttributesTest._testFamilycCsJtjt|jftjd|jfd�|_|�|jj	�|�
|j��d|j�dS)Nr()r5�source_addressro)r
rr�r=rr1r%r�rUrr�r�r?rrr�_testSourceAddress�s�z2NetworkConnectionAttributesTest._testSourceAddressc	Csn|�t��du�t�d�z.t�t|jf�|_|�|jj	�Wt�d�nt�d�0|�
|j��d�dS)Nr>�rr
r3r4rr�r=r�rUrr�r�r?rrr�_testTimeoutDefault�s
z3NetworkConnectionAttributesTest._testTimeoutDefaultc	Csr|�t��du�t�d�z2tjt|jfdd�|_|�|jj	�Wt�d�nt�d�0|�
|j��d�dS�N�rjr*r?rrr�_testTimeoutNone�s
z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd�|_|�|j��d�dSr,)r
rr�r=r�r�r�r?rrr�_testTimeoutValueNamed�sz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8t�t|jfd�|_|�|jj�|�|j��d�dS)Nr-)	r
rr�r=r�rUrr�r�r?rrr�_testTimeoutValueNonamed�sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r�)rErFrGrLr�r�r&Z
testFamilyr'ZtestSourceAddressr)ZtestTimeoutDefaultr+ZtestTimeoutNoner.ZtestTimeoutValueNamedr/ZtestTimeoutValueNonamedr0rrrrr$�s 
	r$c@sBeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestr�cCstj||d�t�|�dSr�r�r�rrrrL�sz'NetworkConnectionBehaviourTest.__init__cCsdSr2rr?rrrr��sz*NetworkConnectionBehaviourTest.clientSetUpcCs|j��d|_t�|�dSr2r�r?rrrr��s
z-NetworkConnectionBehaviourTest.clientTearDowncCs2|j��\}}|�|j�t�d�|�d�dS)Nr��done!)r;r�rUrr�r�r�r�rrr�testInsideTimeout�s
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0t�t|jf�|_}|�d�}|�|d�dS)Nr�r2)r
rr�r=r�r�r�)r@r�r�rrr�_testInsideTimeout�s
z1NetworkConnectionBehaviourTest._testInsideTimeoutcs4tjt|jfdd�|_�|�tj�fdd��dS)Nrorjcs
��d�S)Nr�)r�r�r�rrr�r�zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)r
rr�r=r�r$r5r?rr5r�_testOutsideTimeout�sz2NetworkConnectionBehaviourTest._testOutsideTimeoutN)r�)
rErFrGrLr�r�r3ZtestOutsideTimeoutr4r6rrrrr1�s
r1c@s6eZdZdd�Zdd�Ze�eed�d�dd��Z	d	S)
�TCPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j��dSr�)r;r�r�r�r?rr�
raise_timeoutsz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)�r$r
r5�r@r8rr?r�testTCPTimeouts
�zTCPTimeoutTest.testTCPTimeoutcCsxd}z|j�d�|j��}WnFtjy<|�d�Yn*tyPd}Yn|�d�Yn0|st|�d�dS)NFr�z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r;r�r�r
r5r r�r@�okrfrrr�testTimeoutZeroszTCPTimeoutTest.testTimeoutZeror�ztest needs signal.alarm()c
s|j�d�Gdd�dt���fdd�}t�tj|�}z�z�z�zt�d�|j��}Wn\tjyr|�	d�YnJ�y�Yn:|�	dt
��dd�t�
�f�Yn0|�	d	�Wt�d
�nt�d
�0Wn�y�|�	d�Yn0Wt�tj|�nt�tj|�0dS)Nrc@seZdZdS)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNrNrrrr�Alarm!sr?cs��dSr2r)rr��r?rr�
alarm_handler#sz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtrzgot Alarm in wrong place)r;r�r+rrr�r�r
r5r r|�exc_info�	traceback�
format_exc)r@rArrfrr@r�testInterruptedTimeouts*
�z%TCPTimeoutTest.testInterruptedTimeoutN)
rErFrGr;r>r�rorrrErrrrr7s�r7c@seZdZdd�Zdd�ZdS)�UDPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j�d�dS�Nr�r��r;r�r�r�r?rrr8?sz4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)r9r:rr?r�testUDPTimeout>s
�zUDPTimeoutTest.testUDPTimeoutcCszd}z|j�d�|j�d�}WnFtjy>|�d�Yn*tyRd}Yn|�d�Yn0|sv|�d�dS)NFr�r�z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)�1recv() returned success when we did not expect it�r;r�r�r
r5r rr<rrrr>EszUDPTimeoutTest.testTimeoutZeroN)rErFrGrIr>rrrrrF<srFc@seZdZdd�Zdd�ZdS)�UDPLITETimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j�d�dSrGrHr�r?rrr8Xsz<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeoutz.Error generating a timeout exception (UDPLITE)r9r:rr?r�testUDPLITETimeoutWs
�z%UDPLITETimeoutTest.testUDPLITETimeoutcCszd}z|j�d�|j�d�}WnFtjy>|�d�Yn*tyRd}Yn|�d�Yn0|sv|�d�dS)NFr�r�z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)rJrKr<rrrr>^sz"UDPLITETimeoutTest.testTimeoutZeroN)rErFrGrMr>rrrrrLSsrLc@seZdZdd�Zdd�ZdS)�TestExceptionscCsJ|�ttt��|�ttjt��|�ttjt��|�ttjt��dSr2)r�
issubclassrr+r
r%r&r5r?rrr�testExceptionTreensz TestExceptions.testExceptionTreecCsvt�tjtjd�}t�tjtjd|���}|��|�|j�|�t��|�	d�Wd�n1sh0YdS)NrF)
r
r:r/rrrUrLr$rrI)r@Zsock0r�rrr�test_setblocking_invalidfdts�z)TestExceptions.test_setblocking_invalidfdN)rErFrGrPrQrrrrrNlsrNr��Linux specific testc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�TestLinuxAbstractNamespace�lc
Cs�d}t�tjtj���}|�|�|��t�tjtj��j}|�|���|��d�0}|�|��|�|�|�	�|�Wd�n1s�0YWd�n1s�0YWd�n1s�0YdS)Nspython-test-hello�r)
r
r�r/r`r>r�r�r�r��getpeername)r@r{�s1r^Zs3rrr�testLinuxAbstractNamespace�s
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacecCs`dd|jd}t�tjtj��*}|�|�|�|��|�Wd�n1sR0YdS)Nr��hro)�
UNIX_PATH_MAXr
r�r/r`r�r��r@r{rrrr�testMaxName�s
z&TestLinuxAbstractNamespace.testMaxNamecCsRdd|j}t�tjtj�� }|�t|j|�Wd�n1sD0YdS)N��h)rYr
r�r/r$rr`rZrrr�testNameOverflow�sz+TestLinuxAbstractNamespace.testNameOverflowcCsFt�tjtj�}z&|�d�|�|��d�W|��n
|��0dS)Nz
pythontest�
pythontest)r
r�r/r`r�r�rrrrr�testStrName�s

z&TestLinuxAbstractNamespace.testStrNamecCsRt�tjtj��.}|�td��|�|��d�Wd�n1sD0YdS)Nr_)r
r�r/r`r�r�r�rrrr�testBytearrayName�sz,TestLinuxAbstractNamespace.testBytearrayNamec	Cs�d}t�tjtj���}|�d�|�|��|�t�tjtj��>}|�d�|�|��|�|�|��|���Wd�n1s�0YWd�n1s�0YdS)Ns
^[0-9a-f]{5}r()r
r�r/r`ZassertRegexr�r�)r@Zabstract_addressrVr^rrr�testAutobind�s

z'TestLinuxAbstractNamespace.testAutobindN)
rErFrGrYrWr[r^r`rarbrrrrrS�s	rSztest needs socket.AF_UNIXc@sneZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Ze�
ejdkd�dd��ZdS)�TestUnixDomaincCst�tjtj�|_dSr2)r
r�r/r�r?rrrrA�szTestUnixDomain.setUpcCs|j��dSr2)r�rr?rrrrC�szTestUnixDomain.tearDownc
Cs:zt�|�WSty4|�d�|t����Yn0dS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoder�rbrr|�getfilesystemencoding�r@r�rrr�encoded�s��zTestUnixDomain.encodedc
CsZzt�||�WnDtyT}z,t|�dkr>|�d�|��n�WYd}~n
d}~00dS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rr�rrrbr)r@r�r�r�rrrr`�s��zTestUnixDomain.bindcCs|�|j��d�dS)N)r(N)rr�r�r?rrrr��szTestUnixDomain.testUnboundcCs@tj�tj�}|�|j|�|�tj|�|�	|j�
�|�dSr2)r�r��abspathr�TESTFNr`r�rUr�r�r�rfrrr�testStrAddr�szTestUnixDomain.testStrAddrcCsFtj�tj�}|�|j|�|��|�tj	|�|�
|j��|�dSr2)r�r�rhrrir`r�rgrUr�r�r�rfrrr�
testBytesAddr�szTestUnixDomain.testBytesAddrcCsRtj�tj�}|�|�}|�|j|�dd��|�	tj
|�|�|j��|�dS)N�ascii�surrogateescape)
r�r�rhrZTESTFN_UNICODErgr`r�r�rUr�r�r�)r@r�r�rrr�testSurrogateescapeBind�s

z&TestUnixDomain.testSurrogateescapeBindcCsTtjdur|�d�tj�tj�}|�|j|�|�tj	|�|�
|j��|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLErbr�r�rhr`r�rUr�r�r�rfrrr�testUnencodableAddr�s

z"TestUnixDomain.testUnencodableAddrr�rRcCs|�t|jjd�dS)Nr()r$rr�r`r?rrr�testEmptyAddress�szTestUnixDomain.testEmptyAddressN)rErFrGrArCrgr`r�rjrkrnror�rqr|r�rprrrrrc�s	
rcc@s�eZdZdZddd�Zdd�Zdd�Zd	d
�ZeZdd�Z	eZ
d
d�Zdd�Zdd�Z
eZdd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestzF
    Test the buffer versions of socket.recv() and socket.send().
    r�cCstj||d�dSr�r�r�rrrrLszBufferIOTest.__init__cCsZt�ddgtt��}|j�|�}|�|tt��|��}|dtt��}|�|t�dS�NrKr)rLr�r�r�r�r�r��r@r7r�r�rrr�testRecvIntoArrayszBufferIOTest.testRecvIntoArraycCstt�}|j�|�dSr2�r�r�r�r��r@r7rrr�_testRecvIntoArrayszBufferIOTest._testRecvIntoArraycCsDtd�}|j�|�}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�r�r�rsrrr�testRecvIntoBytearrays
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|j�t|��}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�r�r�r�rsrrr�testRecvIntoMemoryview s
z#BufferIOTest.testRecvIntoMemoryviewcCs^t�ddgtt��}|j�|�\}}|�|tt��|��}|dtt��}|�|t�dSrr)rLr�r�r�r�r�r��r@r7r�r�r�rrr�testRecvFromIntoArray)sz"BufferIOTest.testRecvFromIntoArraycCstt�}|j�|�dSr2rurvrrr�_testRecvFromIntoArray1sz#BufferIOTest._testRecvFromIntoArraycCsHtd�}|j�|�\}}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�r�r�rzrrr�testRecvFromIntoBytearray5s
z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|j�t|��\}}|�|tt��|dtt��}|�|t�dSr�)r�r�r�r�r�r�r�rzrrr�testRecvFromIntoMemoryview>s
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|�t|jj|d�dS)Nr]r�)r�r$r�r�r�rvrrr�testRecvFromIntoSmallBufferGsz(BufferIOTest.testRecvFromIntoSmallBuffercCs|j�t�dSr2r�r?rrr�_testRecvFromIntoSmallBufferLsz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|j�|�|j�|d�dSr�)r�r�r�rvrrr�testRecvFromIntoEmptyBufferOsz(BufferIOTest.testRecvFromIntoEmptyBufferN)r�)rErFrGrWrLrtrwrxZ_testRecvIntoBytearrayryZ_testRecvIntoMemoryviewr{r|r}Z_testRecvFromIntoBytearrayr~Z_testRecvFromIntoMemoryviewrr�r�Z_testRecvFromIntoEmptyBufferrrrrrqs$
rqi�����c
Cs�ttd�sdSztd�}Wntttfy4YdS0|�6|D] }|�d�r@Wd�dSq@Wd�n1sv0YdS)z�Check if the TIPC module is loaded

    The TIPC module is not loaded automatically on Ubuntu and probably
    other Linux distros.
    �AF_TIPCFz
/proc/modulesztipc NT)rr
r�FileNotFoundError�IsADirectoryErrorrbr�)rr�rrr�isTipcAvailable[s

2r�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)Nror�rr�)r
r�r2rUrr�r3r4�TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERr`�TIPC_ADDR_NAMErir,r�r�r�r�)r@r1r��srvaddrZsendaddrr�Zrecvaddrrrr�testRDMrs �
�zTIPCTest.testRDMN)rErFrGr�rrrrr�osr�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�TIPCThreadableTestr�cCstjj||d�t�|�dSr�r�r�rrrrL�szTIPCThreadableTest.__init__cCs�t�tjtj�|_|�|jj�|j�tjtjd�tj	t
ttf}|j�
|�|j��|��|j��\|_|_|�|jj�dSr�)r
r�r/r1rUrr�r3r4r�r�r�r�r`r>rnr�r�r�)r@r�rrrrA�s�
zTIPCThreadableTest.setUpcCsdt�d�t�tjtj�|_|�|jj�tjt	t
ttt
d�df}|j�
|�|j��|_dS)Nr�r�r)r�r�r
r�r/r�rUrr�r�r�rir�r�r��cliaddr)r@r�rrrr��s
�zTIPCThreadableTest.clientSetUpcCs,|j�d�}|�|t�|�|j|j�dSr�)r�r�r�r�r�r�r�rrrr��szTIPCThreadableTest.testStreamcCs|j�t�|j��dSr2r�r?rrrr��szTIPCThreadableTest._testStreamN)r�r�rrrrr��s

r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestcCs�t���}|�|j�Wd�n1s*0Y|�|j�t���}|��Wd�n1sf0Y|�|j�t��� }|�t|jd�Wd�n1s�0Y|�|j�dS�Nr))r
r�rrrr$rrr�rrr�_testSocketClass�s
*
&
.z$ContextManagersTest._testSocketClasscCs2|j��\}}|�|j�|�d�}|�|�dSr��r;r�rUrr�r�r@r�r�r�rrr�testCreateConnectionBase�s
z,ContextManagersTest.testCreateConnectionBasecCsl|j��}t�|��8}|�|j�|�d�|�|�d�d�Wd�n1sR0Y|�	|j�dS)Nr)r�)
r;r�r
rr�rrr�r�r�r@r{r�rrr�_testCreateConnectionBase�s

0z-ContextManagersTest._testCreateConnectionBasecCs2|j��\}}|�|j�|�d�}|�|�dSr�r�r�rrr�testCreateConnectionClose�s
z-ContextManagersTest.testCreateConnectionClosecCs\|j��}t�|��}|��Wd�n1s20Y|�|j�|�t|j	d�dSr�)
r;r�r
rrrrr$rrr�rrr�_testCreateConnectionClose�s

&z.ContextManagersTest._testCreateConnectionCloseN)rErFrGr�r�r�r�r�rrrrr��s
r�c@s�eZdZe�eed�d�e�ddd�dd���Z	dd	�Z
d
d�Zdd
�Ze�
edud�dd��Ze�
edud�dd��Zdd�ZdS)�InheritanceTestr�zSOCK_CLOEXEC not definedr�r�r�cCsXt�tjtjtjB��.}|�|jtj�|�|���Wd�n1sJ0YdSr2)r
r:r/r�r�r�r��get_inheritablerrrr�test_SOCK_CLOEXEC�s
�z!InheritanceTest.test_SOCK_CLOEXECcCs@t��}|� |�|��d�Wd�n1s20YdSr
)r
r�r�r�rrr�test_default_inheritable�sz(InheritanceTest.test_default_inheritablec	Cstt��}|�T|��}|��|� |�|��d�Wd�n1sH0YWd�n1sf0YdSr
)r
r�rr�r�)r@r�Znewsockrrr�test_dup�szInheritanceTest.test_dupcCsdt��}|�D|�d�|�|��d�|�d�|�|��d�Wd�n1sV0YdS)NTF)r
�set_inheritabler�r�r�rrr�test_set_inheritable�s

z$InheritanceTest.test_set_inheritableNr�cCs�t��}|�b|��}|�|��d�t�|tj�}|tjM}t�|tj|�|�|��d�Wd�n1st0YdS)NFT)r
rr�r�r�F_GETFD�
FD_CLOEXECZF_SETFD)r@r�rRr�rrr�test_get_inheritable_cloexec�sz,InheritanceTest.test_get_inheritable_cloexeccCs|t��}|�\|��}|�t�|tj�tj@tj�|�d�|�t�|tj�tj@d�Wd�n1sn0YdS)NTr)r
rr�rr�r�r�)r@r�rRrrr�test_set_inheritable_cloexec
s�
�z,InheritanceTest.test_set_inheritable_cloexeccCsHt��\}}|�|j�|�|j�|�|��d�|�|��d�dSr
)r
r�rUrr�r�)r@rVr^rrr�test_socketpairs
zInheritanceTest.test_socketpair)rErFrGr�rorr
rr�r�r�r�r�rqrr�r�r�rrrrr��s�	


r�rHzSOCK_NONBLOCK not definedc@s,eZdZddd�Ze�ddd�dd	��Zd
S)�NonblockConstantTestTr�cCs�|rj|�|jtj�|�|��|�|�t�|tjtj	�tj	@�|dkrZ|�
|���q�|�|���nL|�|jtj�|�|��d�|�
t�|tjtj	�tj	@�|�|���dSr�)r�r�r
r/r�rrr�r�r�r�r�)r@r�nonblockr5rrr�
checkNonblock"s�	�z"NonblockConstantTest.checkNonblockr�r�r�cCs�t�tjtjtjB���}|�|�|�d�|j|dd�|�d�|�|�|�d�|j|dd�|�d�|j|dd�|�d�|j|dd�Wd�n1s�0Yt��}t�d�t���}|�|�Wd�n1s�0Yt�d�t���}|�|d�Wd�n1�s.0Yt�d�t���}|j|dd�Wd�n1�sp0Yt�d�t���}|�|d�Wd�n1�s�0Yt�|�dS)NTF)r�g@rjr�)	r
r:r/rHr�rIr�r3r4)r@r�trrr�test_SOCK_NONBLOCK;s:
�






,

(

,

.

,z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr�)rErFrGr�rr�r�rrrrr�s
r�r:r;zneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|��}|��}t�|�}|��\}}|�|�|��|��dSr2)rrr
�	fromsharer�rr)r��qZsdata�messagerr^r
rrr�remoteProcessServerbs

z%TestSocketSharing.remoteProcessServerc	Cs�t��}tj|j|fd�}|��|j�|j�}|j��}|j�	�|�
|�d}|�
|�t�|�}g}|�
d�}|szq�|�|�qj|�	�d�|�}|�||�|��dS)N�r�rQs
slapmahfror�r�)�multiprocessingr{�Processr�r�r;�share�pidr�rr�r
rr�r�rr�)	r@r�r!r�r�r�r�m�receivedrrr�	testShareps&






zTestSocketSharing.testSharecCs@|j�t���}|�ttj|dd��|�ttj|d�dS)Nrpr))r;r�r��getpidr$r�r
r�)r@r�rrr�testShareLength�sz!TestSocketSharing.testShareLengthcCsb|�|��d�|�|��|���|�|j|j�|�|j|j�|jdkr^|�|j|j�dSr�)r�r�rr�r)r@Zorg�otherrrr�compareSockets�s
z TestSocketSharing.compareSocketscCsD|j�t���}t�|�}z|�|j|�W|��n
|��0dSr2)r;r�r�r�r
r�r�r)r@r�rrrr�testShareLocal�s

z TestSocketSharing.testShareLocalc
Cs�tjtjg}tjtjg}|D]�}|D]�}zt�||�}WntyNYq$Yn0zH|�t���}t�	|�}z|�
||�W|��n
|��0W|��q$|��0q$qdSr2)r
r:r�r/r rr�r�r�r�r�r)r@�families�typesrr��sourcer�Zsharedrrr�	testTypes�s

zTestSocketSharing.testTypesN)
rErFrGr�r�r�r�r�r�r�rrrrr�]s

#r�c@seZdZdZdZdZdZejZ	e
dd��Ze
dd��Zd	d
�Z
dd�Zd
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/d0�Z d1d2�Z!d3d4�Z"d5d6�Z#d7d8�Z$d9d:�Z%d;S)<�SendfileUsingSendTestz>
    Test the send() implementation of socket.sendfile().
    i�rhr�cCs�dd�}d�dd�t|j�D��}ttjd��.}||j|j�D]}|�|�q>Wd�n1sb0Yttjd��.}|��|_	t
|j	�|jks�J�Wd�n1s�0YdS)Ncss2||ksJ�||kr$|V||8}q|r.|VdSr2r)�total�steprrr�chunks�s
z0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSsg|]}t�tj����qSr)�random�choice�string�
ascii_lettersr�r�rrrr��s�z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r r	)rr)�BUFSIZErrri�FILESIZEr�r��FILEDATAr�)r�r��chunkrZcsizerrr�
setUpClass�s
�*
z SendfileUsingSendTest.setUpClasscCst�tj�dSr2)rr�ri)r�rrr�
tearDownClass�sz#SendfileUsingSendTest.tearDownClasscCs8|j�tj�|j��\}}|�|j�|�|j�|Sr2)r;r�rr�r��TIMEOUTrUrr�rrr�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs,g}|�|j�}|sq"|�|�qd�|�Sr�)r�r�r�r)r@r�r�r�rrr�	recv_data�szSendfileUsingSendTest.recv_datacCs
t|d�S)N�_sendfile_use_send�rr�rrr�meth_from_sock�sz$SendfileUsingSendTest.meth_from_sockc	Cs�|j��}ttjd�}t�|��f}|�B}|�|�}||�}|�||j	�|�|�
�|j	�Wd�n1sn0YWd�n1s�0YdS)Nr	�r;r�rrrir
rr�r�r��tell�r@r{�filer��meth�sentrrr�_testRegularFile�s

z&SendfileUsingSendTest._testRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dSr2�r�r�r�r�r�r��r@r�r�rrr�testRegularFiles
z%SendfileUsingSendTest.testRegularFilec	Cs�|j��}t�|j�}t�|��p}|�L}|�|�}|�||j	�|�|�
�|j	�|�tj|j
|�Wd�n1sx0YWd�n1s�0YdSr2)r;r��io�BytesIOr�r
rrTr�r�r�r$rYrZ)r@r{r�r�r�rrr�_testNonRegularFile
s

�z)SendfileUsingSendTest._testNonRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dSr2r�r�rrr�testNonRegularFiles
z(SendfileUsingSendTest.testNonRegularFilec	Cs�|j��}tjd}t|d��|�tj|�Wd�n1sB0Yt|d�}t�|��b}|�>}|�	|�}||�}|�
|d�|�
|��d�Wd�n1s�0YWd�n1s�0YdS)N�2r r	r)r;r�rrirrUr�r
rr�r�r�)r@r{�filenamer�r�r�r�rrr�_testEmptyFileSends

,

z(SendfileUsingSendTest._testEmptyFileSendcCs"|��}|�|�}|�|d�dSr�)r�r�r�r�rrr�testEmptyFileSend+s
z'SendfileUsingSendTest.testEmptyFileSendc	Cs�|j��}ttjd�}t�|��n}|�J}|�|�}||dd�}|�||j	d�|�|�
�|j	�Wd�n1sv0YWd�n1s�0YdS)Nr	�)�offsetr�r�rrr�_testOffset2s

z!SendfileUsingSendTest._testOffsetcCsB|��}|�|�}|�t|�|jd�|�||jdd��dS)Nr�r�r�rrr�
testOffset;s
z SendfileUsingSendTest.testOffsetc	Cs�|j��}ttjd�}tj|tjd�}|�j|�Fd}|�|�}|||d�}|�	||�|�	|�
�|�Wd�n1s|0YWd�n1s�0YdS)Nr	rj�GKL�r��r;r�rrrir
rr1r�r�r��r@r{r�r�r�r�r�rrr�
_testCountCs
�
z SendfileUsingSendTest._testCountcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)Nr��r�r�r�r�r��r@r�r�r�rrr�	testCountOs

zSendfileUsingSendTest.testCountc	Cs�|j��}ttjd�}tj|tjd�}|�j|�Fd}|�|�}|||d�}|�	||�|�	|�
�|�Wd�n1s|0YWd�n1s�0YdS)Nr	rjror�r�r�rrr�_testCountSmallXs
�
z%SendfileUsingSendTest._testCountSmallcCs@d}|��}|�|�}|�t|�|�|�||jd|��dSr�r�r�rrr�testCountSmallds

z$SendfileUsingSendTest.testCountSmallc	Cs�|j��}ttjd�}tj|dd��p}|�L}d}|�|�}||d|d�}|�||�|�|�	�|d�Wd�n1s|0YWd�n1s�0YdS)Nr	r�rj駆��)r�r�)
r;r�rrrir
rr�r�r�r�rrr�_testCountWithOffsetms

z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|��}|�|�}|�t|�|�|�||jd|d��dS)Nr�r�r�r�rrr�testCountWithOffsetws

z)SendfileUsingSendTest.testCountWithOffsetc	Cs�|j��}ttjd�}t�|��f}|�B}|�d�|�|�}|�	t
||�|�	t
|j|�Wd�n1sn0YWd�n1s�0YdS)Nr	F)r;r�rrrir
rrIr�r$r�rT�r@r{r�r�r�rrr�_testNonBlocking�s


z&SendfileUsingSendTest._testNonBlockingcCs |��}|�d�r|�d�dS)Nrhz$was not supposed to receive any data)r�r�r �r@r�rrr�testNonBlocking�s
z%SendfileUsingSendTest.testNonBlockingc	Cs�|j��}ttjd�}tj|tjd�}|�T|�0|�|�}||�}|�	||j
�Wd�n1sf0YWd�n1s�0YdS)Nr	rj)r;r�rrrir
rr1r�r�r�r�rrr�_testWithTimeout�s
�
z&SendfileUsingSendTest._testWithTimeoutcCs6|��}|�|�}|�t|�|j�|�||j�dSr2r�r�rrr�testWithTimeout�s
z%SendfileUsingSendTest.testWithTimeoutc	Cs�|j��}ttjd��^}t�|��4}|�d�|�|�}|�	tj
||�Wd�n1s\0YWd�n1sz0YdS)Nr	g{�G�z�?)r;r�rrrir
rr�r�r$r5r�rrr�_testWithTimeoutTriggeredSend�s


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs |��}|�d�t�d�dS)Ni�Xro)r�r�r�r�r�rrr�testWithTimeoutTriggeredSend�s
z2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdSr2rr?rrr�_test_errors�sz"SendfileUsingSendTest._test_errorsc	Cs�ttjd��X}tjtjd��*}|�|�}|�td||�Wd�n1sL0YWd�n1sj0Yttjd��R}t���*}|�|�}|�td||�Wd�n1s�0YWd�n1s�0Yttjd���}t���j}|�|�}|jtd||dd�|jtd||d	d�|jtd||d
d�|jtd||dd�Wd�n1�sj0YWd�n1�s�0YdS)Nr	r�r/r%zbinary modezpositive integerr�r�r�rrp)	rrrir
r r�r'r�r�)r@r�rr�rrr�test_errors�s6
�@

�@

����z!SendfileUsingSendTest.test_errorsN)&rErFrGrWr�r�r�rr1r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrrr��sD

		
			
		
r�rTz%os.sendfile() required for this test.c@seZdZdZdd�ZdS)�SendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    cCs
t|d�S)NrZr�r�rrrr��sz(SendfileUsingSendfileTest.meth_from_sockN)rErFrGrWr�rrrrr�srzAF_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
Cslt�tjtjd�}z|�||f�Wn>tyb}z&|��t�t|�||��WYd}~nd}~00|SdSr�)	r
r(r&r`r�rr�ZSkipTestr)r@�typr�r�r�rrr�
create_alg�s(zLinuxKernelCryptoAPI.create_algr+r�c	Cs�t�d�}|�dd���}|��\}}|�,|�d�|�|�d�|�Wd�n1sZ0Y|��\}}|�V|�dtj	�|�dtj	�|�dtj	�|�d	�|�|�d�|�Wd�n1s�0YWd�n1s�0YdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabcr��a�b�cr�)
r��fromhexrr�rr�r�r�r
�MSG_MORE)r@r�algo�oprurrr�test_sha256�s

0
z LinuxKernelCryptoAPI.test_sha256c	Cs�d}d}t�d�}|�dd��n}|�tjtj|�|��\}}|�,|�|�|�	|�
d�|�Wd�n1st0YWd�n1s�0YdS)NsPython loves AF_ALGswhat do ya want for nothing?Z(193dbb43c6297b47ea6277ec0ce67119a3f3aa66r	z
hmac(sha1)r�)r�r
rr�r
�SOL_ALG�ALG_SET_KEYr�rr�r�)r@�keyr�rrrrurrr�test_hmac_sha1�s

z#LinuxKernelCryptoAPI.test_hmac_sha1r�c
	Cs&t�d�}t�d�}d}t�d�}t|�}|�dd����}|�tjtj|�|��\}}|�@|j	tj
|tjd�|�|�|�
|�|�|�Wd�n1s�0Y|��\}}|�6|j	|gtj|d�|�
|�|�|�Wd�n1s�0Yd	}	|g|	}
|��\}}|�0|j	|
tj
|d�|�||	�}Wd�n1�sX0Y|�
t|�||	�|�
|d|�|�|��\}}|�2|j	|gtj|d�|�||	�}Wd�n1�s�0Y|�
t|�||	�|�
|||	�Wd�n1�s0YdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))r�ivr�)rrr�)r�r
r�rr�r
rrr��
sendmsg_afalg�ALG_OP_ENCRYPTrrr�r��ALG_OP_DECRYPT)
r@rrr�Z
ciphertextZmsglenrrruZ
multiplierZlongmsg�encZdecrrr�test_aes_cbcsL



�
0�0
�.�.z!LinuxKernelCryptoAPI.test_aes_cbcr�cCs t�d�}t�d�}t�d�}t�d�}t�d�}t�d�}t|�}t|�}|�dd����}	|	�tjtj|�|	�tjtjd|�|	�	�\}
}|
��|
j
tj||tjd	�|
�
|tj�|
�
|�|
�|t|�|�}|�||||��|�|||d��Wd�n1�s0Y|	�	�\}
}|
�p||}
|
j
|
gtj||d
�|
�|t|�|�}|�||||��|�|||d��Wd�n1�s�0Yt�d�j}|	�	�\}
}|
��||}
|
�|
gtjtj|tj�gtjtj|t|��|gtjtj||�gf�|
�t|
�|�}|�||||��|�|||d��Wd�n1�sx0Y|	�	�\}
}|
�X|||}
|
j
|
gtj||d
�|
�t|
�|�}|�|||d��Wd�n1�s�0YWd�n1�s0YdS)NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))rr�assoclenr�)rrrr
)r�r
r�rr�r
rrZALG_SET_AEAD_AUTHSIZEr�rrrrr�r�r�Structr�r�Z
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENr)r@rrZplainZassocZexpected_ctZexpected_tagZtaglenrrrru�resr�Zpack_uint32rrr�test_aead_aes_gcm0sl





�
�
6�6��6�z&LinuxKernelCryptoAPI.test_aead_aes_gcmc	Cs�|�dd��v}t�d�}|�tjtj|�|��\}}|�*|�d�}|�	t
|�d�Wd�n1sj0YWd�n1s�0YdS)N�rngZdrbg_pr_sha256r�)rr��urandomr�r
rrr�r�r�r�)r@rZ
extra_seedrruZrnrrr�test_drbg_pr_sha256os

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c	CsPt�tjtjd�}|��"|�t��|��Wd�n1sB0Y|�t��|jdd�Wd�n1sx0Y|�t��|�d�Wd�n1s�0Y|�t�� |jtjdd�Wd�n1s�0Y|�t�� |jtjdd�Wd�n1�s"0YWd�n1�sB0YdS)Nr)rro)rrrp)r
r(r&r$r�rrr�rrr�test_sendmsg_afalg_argszs&*(.z,LinuxKernelCryptoAPI.test_sendmsg_afalg_argscCs�t�tjtjd�}|�|j�|�t��|�d�Wd�n1sH0Y|�t	d��|�d�Wd�n1s~0Y|�t��|�d�Wd�n1s�0Y|�t	d��|�d�Wd�n1s�0YdS)Nr)Z
tttttttttttttr�z
type too long)Zttttttttttttttr�)r�Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz
name too long)r�Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r
r(r&rUrr$r�r`r'r�r�rrr�test_length_restriction�s(((z,LinuxKernelCryptoAPI.test_length_restrictionN)
rErFrGrrr�rrrrr"r#r$rrrrr�s



(

>


r�winzrequires Windowsc@seZdZhd�Zdd�ZdS)�TestMSWindowsTCPFlags>�
TCP_MAXSEG�TCP_KEEPIDLE�TCP_FASTOPEN�
TCP_KEEPINTVL�TCP_NODELAY�TCP_KEEPCNTcs6dd�tt�D�}�fdd�|D�}��g|d�dS)NcSsg|]}|�d�r|�qS)ZTCP)r��r�rrrrr��r�z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]}|�jvr|�qSr)�
knownTCPFlagsr-r?rrr��r�zANew TCP flags were discovered. See bpo-32394 for more information)r�r
r�)r@Zprovided�unknownrr?r�test_new_tcp_flags�s
�z(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rErFrGr.r0rrrrr&�s
r&c@s�eZdZdd�Zdd�Zdd�Ze�ee	d�p:ee	d�d	�e�
ejd
�dd���Z
e�e��d
�e�
ejd
�dd���ZdS)�CreateServerTestcCs�t��}t�d|f��8}|�|��dd�|�|��d|�Wd�n1sT0Ytjr�tjd|ftjd��8}|�|��dd�|�|��d|�Wd�n1s�0YdS)Nrrror�r�)rr�r
�
create_serverr�r�r�r��r@r=r�rrr�test_address�s2
�zCreateServerTest.test_addresscCs�t�d��0}|�|jtj�|�|jtj�Wd�n1s@0Ytjr�tjdtj	d��0}|�|jtj	�|�|jtj�Wd�n1s�0YdS)Nr�r�rr�)
r
r2r�rr:r�r/rr�r�)r@r�rrrr�test_family_and_type�s.z%CreateServerTest.test_family_and_typecCs�ttd�sD|�t��tjddd�Wd�q�1s80Yn�t�d��,}|�tjtj�}|�|d�Wd�n1s�0Ytjddd��,}|�tjtj�}|�	|d�Wd�n1s�0YdS)N�SO_REUSEPORT)r�rT)�
reuse_portr)
rr
r$r�r2r�r3r7r�r�)r@r�rTrrr�test_reuse_port�s
.*z CreateServerTest.test_reuse_portr8r�r�r>cCsHtjdtjd��$}|�tjtj�s&J�Wd�n1s:0YdS)Nr5r�)r
r2r�r�r8r�r�rrr�test_ipv6_only_default�sz'CreateServerTest.test_ipv6_only_default�dualstack_ipv6 not supportedcCsFtjdtjdd�� }|�|jtj�Wd�n1s80YdS)Nr5T�r�dualstack_ipv6)r
r2r�r�rr�rrr�test_dualstack_ipv6_family�s

�z+CreateServerTest.test_dualstack_ipv6_familyN)rErFrGr4r6r9r�rqrrrorr�r:r
�has_dualstack_ipv6r>rrrrr1�s	
��r1c@s�eZdZejZdd�Zdd�Zdd�Ze	�
ejd�dd	��Z
e	�e��d
�e	�
ejd�dd���Ze	�e��d
�e	�
ejd�d
d���ZdS)�CreateServerFunctionalTestcsV��fdd�}t���|��j�tj||fd�}|����|j�j����dS)Nc	s�|��|��\}}|�P���j�|�d�}|sNWd�Wd�dS|�|�Wd�n1sl0YWd�n1s�0YdSr�)r�r�r5r�r)r�r�rur��r�r@rr�run�s
z3CreateServerFunctionalTest.echo_server.<locals>.runr�)	rMrxr�r5r�r�rUrrm)r@r�rBr�rrAr�echo_server�s
z&CreateServerFunctionalTest.echo_servercCsbtj|d��B}|�|j�|�|�|�d�|�|�d�d�Wd�n1sT0YdS)Nr�r)r�)r
r�r5r�rr�r�)r@r�rr�rrr�echo_client�s


z&CreateServerFunctionalTest.echo_clientcCsVt��}t�d|f��,}|�|�|�d|ftj�Wd�n1sH0YdS)Nr(r)rr�r
r2rCrDr:r3rrr�	test_tcp4s
z$CreateServerFunctionalTest.test_tcp4r>cCs\t��}tjd|ftjd��,}|�|�|�d|ftj�Wd�n1sN0YdS)Nr(r�r��rr�r
r2r�rCrDr3rrr�	test_tcp6
s
�
z$CreateServerFunctionalTest.test_tcp6r;cCs^t��}tjd|ftjdd��,}|�|�|�d|ftj�Wd�n1sP0YdS)Nr(Tr<r)rr�r
r2r�rCrDr:r3rrr�test_dual_stack_client_v4s�
z4CreateServerFunctionalTest.test_dual_stack_client_v4cCs^t��}tjd|ftjdd��,}|�|�|�d|ftj�Wd�n1sP0YdS)Nr(Tr<r�rFr3rrr�test_dual_stack_client_v6s�
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rErFrGrr1r5rCrDrEr�rorr�rGrqr
r?rHrIrrrrr@�s 
	��r@�send_fds�recv_fdsc@seZdZdd�ZdS)�SendRecvFdsTestsc	Csndd�}dd�}dd�td�D�}|�||�dd�|D�}t�tjtj�\}}|�v|�Rt�|tg|�t�|t	t�d	t	|�d	�\}}}	}
|�||�Wd�n1s�0YWd�n1s�0Y|�
|t�|�
t	|�t	|��|�
|	d
�t|�D]&\}}|\}}
t�
|
t|�����qt|�D]*\}}t�|d�}|�
|t|�����q>dS)NcSs&|D]\}}t�|�t�|�qdSr2�r�r)�pipesr��fd2rrr�close_pipes-s
z8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipescSs|D]}t�|�qdSr2rM)r�rRrrr�	close_fds2sz6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fdscSsg|]}t���qSr)r��pipe)r�rurrrr�7r�z7SendRecvFdsTests.testSendAndRecvFds.<locals>.<listcomp>r�cSsg|]\}}|�qSrr)r��rfd�wfdrrrr�9r�r�rr�)r)rUr
r�r�r/rJr�rKr�r�r�r�r�rr�r�)r@rPrQrNr�r�r�r�Zfds2r�r�rmrSrTr�rrr�testSendAndRecvFds,s&&Hz#SendRecvFdsTests.testSendAndRecvFdsN)rErFrGrUrrrrrL(srLcCs t��}tjtjg|�R�dSr2)rZthreading_setupr�ZaddModuleCleanupZthreading_cleanup)�thread_inforrr�setUpModuleRsrW�__main__)�r��testrZtest.supportrrfr�r�r
r�r�r�rCrpr|r�r�rLr"�weakrefrrr�r*rr�r`r��_threadr�rMr�r�rr�r�r�r��systemrrrrr"r$r'r)r+r-r1r#r6ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_CAN_J1939ZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKrZHAVE_SOCKET_UDPLITEZHAVE_SOCKET_BLUETOOTHr�r�r�r9rHrIrJrYrgrir�r�ror�r�r�rqr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr	r
rrr�r�r�r�r�r�r�r�r�rrrr3r8r;r=r?r@rArerxr{r�r�r�r�r�rrMrOrPrQrRr�rTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirnrorprqrrrsrtrur}r�r�r�r�r�r�rrrrrrrUrrrr$r1r7rFrLrNrSrcrqr�r�r�r�r�r�r�r�r�r�r�r�rrr�r&r1r@rLrWrE�mainrrrr�<module>sV












	

3q���!$��$	
p
S
Z
*
=

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


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

�
��





�



�
�

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


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

'

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists