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

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

rGc@seZdZdZdZdd�ZdS)�
SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
    i cCsXt�tjtjd�|_|�|jj�yt�|j�|_Wnt	k
rR|�
d�YnXdS)Nrzunable to bind RDS socket)r	rrr/rCrrr0r1rrN)r3rrrr4�szSocketRDSTest.setUpN)r6r7r8rErOr4rrrrrS�srSc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�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|_|j|_|j|_dS)N)r4�_ThreadableTest__setUpr5�_ThreadableTest__tearDown�_setUp�	_tearDown)r3rrrr<
szThreadableTest.__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�set)r3rrr�serverExplicitReadysz"ThreadableTest.serverExplicitReadycCs�t��|_|j��t��|_t��|_t��|_t	�
d�|_	d|_|��}|�
d�}||dd�}t|d|�}t�|j|f�|_z&y|��Wnd|_�YnXWd|j��X|j��dS)N�F�.�_T)rZwait_threads_exit�wait_threads�	__enter__r=�EventrY�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadrUrZ�wait)r3Z
methodnamer+Ztest_methodrrrrWs(





zThreadableTest._setUpcCs>|��|j��|j�ddd�|j��r:|j��}|�dS)N)rVrcrmr_�__exit__rdZqsize�get)r3�excrrrrX6s


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

"zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedError)r3rrrrrUszThreadableTest.clientSetUpcCs|j��t��dS)N)rcrZrj�exit)r3rrrruXs
zThreadableTest.clientTearDownN)r6r7r8rEr<r[rWrXrlrrrurrrrrT�s$	rTc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcCstj||d�t�|�dS)N)�
methodName)r,r<rT)r3r|rrrr<^szThreadedTCPSocketTest.__init__cCst�tjtj�|_dS)N)r	r-r.�cli)r3rrrrrbsz!ThreadedTCPSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r}rrTru)r3rrrrues
z$ThreadedTCPSocketTest.clientTearDownN)r{)r6r7r8r<rrrurrrrrz\s
rzc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPSocketTestr{cCstj||d�t�|�dS)N)r|)r9r<rT)r3r|rrrr<lszThreadedUDPSocketTest.__init__cCst�tjtj�|_dS)N)r	r-rr})r3rrrrrpsz!ThreadedUDPSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r}rrTru)r3rrrruss
z$ThreadedUDPSocketTest.clientTearDownN)r{)r6r7r8r<rrrurrrrr~js
r~c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedCANSocketTestr{cCstj||d�t�|�dS)N)r|)rGr<rT)r3r|rrrr<zszThreadedCANSocketTest.__init__cCsDt�tjtjtj�|_y|j�|jf�Wntk
r>YnXdS)N)r	rrrr}rLrMr)r3rrrrr~s
z!ThreadedCANSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r}rrTru)r3rrrru�s
z$ThreadedCANSocketTest.clientTearDownN)r{)r6r7r8r<rrrurrrrrxs
	rc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedRDSSocketTestr{cCstj||d�t�|�dS)N)r|)rSr<rT)r3r|rrrr<�szThreadedRDSSocketTest.__init__cCsNt�tjtjd�|_y |j�tdf�|j��|_Wntk
rHYnXdS)Nr)	r	rrr}rL�HOST�getsockname�cli_addrr)r3rrrrr�sz!ThreadedRDSSocketTest.clientSetUpcCs|j��d|_t�|�dS)N)r}rrTru)r3rrrru�s
z$ThreadedRDSSocketTest.clientTearDownN)r{)r6r7r8r<rrrurrrrr��s
r�z
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�|�dS)N)r|)�unittest�TestCaser<rT)r3r|rrrr<�sz&ThreadedVSOCKSocketStreamTest.__init__cCsht�tjtj�|_|�|jj�|j�tjtf�|j�	�|�
�|j��\|_|_
|�|jj�dS)N)r	�AF_VSOCKr.r/rCrrL�VMADDR_CID_ANY�	VSOCKPORTr2r[�accept�conn�connaddr)r3rrrr4�s
z#ThreadedVSOCKSocketStreamTest.setUpcCsDt�d�t�tjtj�|_|�|jj�t�}|j�	|t
f�dS)Ng�������?)�time�sleepr	r�r.r}rCrr�connectr�)r3Zcidrrrrr�s

z)ThreadedVSOCKSocketStreamTest.clientSetUpcCs|j�d�}|�|t�dS)Ni)r��recv�assertEqual�MSG)r3�msgrrr�
testStream�sz(ThreadedVSOCKSocketStreamTest.testStreamcCs|j�t�|j��dS)N)r}�sendr�r)r3rrr�_testStream�sz)ThreadedVSOCKSocketStreamTest._testStreamN)r{)r6r7r8r<r4rrr�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�dS)N)r|)rzr<)r3r|rrrr<�szSocketConnectedTest.__init__cCs*t�|�|��|j��\}}||_dS)N)rzr4r[r/r��cli_conn)r3r��addrrrrr4�s
zSocketConnectedTest.setUpcCs|j��d|_t�|�dS)N)r�rrzr5)r3rrrr5�s
zSocketConnectedTest.tearDowncCs(t�|�|j�t|jf�|j|_dS)N)rzrrr}r�r�r1�	serv_conn)r3rrrrr�s
zSocketConnectedTest.clientSetUpcCs|j��d|_t�|�dS)N)r�rrzru)r3rrrru�s
z"SocketConnectedTest.clientTearDownN)r{)	r6r7r8rEr<r4r5rrrurrrrr��s
r�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketPairTestr{cCstjj||d�t�|�dS)N)r|)r�r�r<rT)r3r|rrrr<�szSocketPairTest.__init__cCst��\|_|_dS)N)r	�
socketpairr/r})r3rrrr4�szSocketPairTest.setUpcCs|j��d|_dS)N)r/r)r3rrrr5�s
zSocketPairTest.tearDowncCsdS)Nr)r3rrrrr�szSocketPairTest.clientSetUpcCs|j��d|_t�|�dS)N)r}rrTru)r3rrrru�s
zSocketPairTest.clientTearDownN)r{)r6r7r8r<r4r5rrrurrrrr��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|��|_|��dS)N)�	newSocketr/�
bindServer)r3rrrr4s
zSocketTestBase.setUpcCs|�|j�|j��|_dS)z9Bind server socket and set self.serv_addr to its address.N)�bindSockr/r��	serv_addr)r3rrrr�szSocketTestBase.bindServercCs|j��d|_dS)N)r/r)r3rrrr5s
zSocketTestBase.tearDownN)r6r7r8rEr4r�r5rrrrr�sr�cs eZdZdZ�fdd�Z�ZS)�SocketListeningTestMixinz%Mixin to listen on the server socket.cst���|j��dS)N)r;r4r/r2)r3)rBrrr4s
zSocketListeningTestMixin.setUp)r6r7r8rEr4rFrr)rBrr�sr�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.
    cst�j||�t�|�dS)N)r;r<rT)r3r@rA)rBrrr<)sz ThreadedSocketTestMixin.__init__cCs|��|_|��dS)N)�newClientSocketr}�
bindClient)r3rrrrr-s
z#ThreadedSocketTestMixin.clientSetUpcCs|��S)z&Return a new socket for use as client.)r�)r3rrrr�1sz'ThreadedSocketTestMixin.newClientSocketcCs|�|j�|j��|_dS)z8Bind client socket and set self.cli_addr to its address.N)r�r}r�r�)r3rrrr�5sz"ThreadedSocketTestMixin.bindClientcCs|j��d|_t�|�dS)N)r}rrTru)r3rrrru:s
z&ThreadedSocketTestMixin.clientTearDown)
r6r7r8rEr<rrr�r�rurFrr)rBrr�!s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��\}}||_dS)N)r;r4r[r/r�r�)r3r�r�)rBrrr4Is
zConnectedStreamTestMixin.setUpcs|j��d|_t���dS)N)r�rr;r5)r3)rBrrr5Qs
z!ConnectedStreamTestMixin.tearDowncs$t���|j�|j�|j|_dS)N)r;rrr}r�r�r�)r3)rBrrrrVs
z$ConnectedStreamTestMixin.clientSetUpcs8y|j��d|_Wntk
r(YnXt���dS)N)r�rrr;ru)r3)rBrrru[s

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









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








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

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








z#GeneralModuleTests.testIPv4toStringc
s�y&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�y��d�Wn6tk
r�}z|j	dkr���d�Wdd}~XYnX��fd	d
����fdd
�}��
d�d����
d�d
����
d�d����
d�d����
d�d����
d�d��|d�|d�|d�|d�|d�|d�|d�tj�d��sh|d�|d���
d �d!����
d"�d#����
d$�d%��|d&�|d'�|d(�|d)�|d*�|d+�dS),Nr)r7r��has_ipv6zIPv6 not availablez+could not import needed symbols from socket�win32z::i&'zIPv6 might not be supportedcs
��|�S)Nr)r8)r�r7rrr�sr�z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>cs��ttf�|�S)N)r�rr3)r8)rr3rrr�tssz0::0sz1::sE�v�V���$��z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes�B
�'Tzad42:abc::127:0:254:2s
z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6z1:2:3:4:5:6:7:8:0r9z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:s�*@z::254.42.23.64sB���*@z42::a29b:254.42.23.64sB�������*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)r	r7r�r=rN�ImportErrorrr+r�winerrorr�r,)r3r=rwr;r)r�rr7r3r�testIPv6toStringbs`






z#GeneralModuleTests.testIPv6toString�	inet_ntopztest needs socket.inet_ntop()csddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
��||d�||d�||d���d|td	�����d|d����d|d	����d
|d��||d�||d�||d���d|td	���dS)Nr)�	inet_ntoarBr-cs
��|�S)Nr)r8)r-rBrrr��r�z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs��ttf||�S)N)r�rr3)rr8)r3rrr��sz1.0.1.0sz
170.85.170.85s�U�Uz255.255.255.255s����z1.2.3.4ssss)r	rCrBr-r��	bytearray)r3rr:r;r)r-rBr3r�testStringToIPv4�s$





z#GeneralModuleTests.testStringToIPv4c
sy&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�y��d�Wn6tk
r�}z|j	dkr���d�Wdd}~XYnX��fd	d
����fdd
�}��
d�d����
d
�d����
d�d����
d
�td���|d�|d�|d�dS)Nr)rBr�r=zIPv6 not availablez+could not import needed symbols from socketr>si&'zIPv6 might not be supportedcs
��|�S)Nr)r8)r�rBrrr��r�z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs��ttf�|�S)N)r�rr3)r8)rr3rrr��sz::z::1sz!aef:b01:506:1001:ffff:9997:55:170s
�����Upsss)r	rBr�r=rNr?rr+rr@r�rD)r3r=rwr;r)r�rrBr3r�testStringToIPv6�s.


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

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

z.GeneralModuleTests.test_sio_loopback_fast_pathc

CsLyt�dd�Wn<tjk
rL}z|jtjkr:|�d��Wdd}~XYnXx$t�td�D]}|�t|�d�q\Wt�dd�t�dd�t�dd�t	j
r�t�dd�ttd�r�t�
�dkr�t�td	�t�td�t�td�t�tdtjtj�}xR|D]J\}}}}}|�|tj�|�t|�d
�|�|tj�|�t|�d�q�Wt�tddtj�}x&|D]\}}}}}|�|tj��qdWt�tdddtj�t�tddddtj�t�ddtjtjdtj�t�td�}tjtdd
�}	|�||	�t�tdtj�}tjtdtjd�}	|�||	�t�tddtj�}tjtdtjd�}	|�||	�t�tdddtj�}tjtdtjd�}	|�||	�t�tddddtj�}tjtdtjd�}	|�||	�t�ddtjtjdtj�}tjddtjtjdtjd�}	|�||	�|�ttjdd�ttd��rHyt�dddddtj�Wntjk
�rFYnXdS)NZ	localhost�Pzbuggy libc versionrTz	127.0.0.1z::1r)r*ZhttpzAddressFamily.AF_INETzSocketKind.SOCK_STREAMr)r�r1)r�)r�)r�)�flags)r�r1r�r�r�r_u��AI_NUMERICSERV)r	�getaddrinfor�rZEAI_SERVICErNr�r��lenr�IPV6_ENABLEDrrr)r-r.r�ZSOL_TCPZ
AI_PASSIVE�	AF_UNSPECr��UnicodeEncodeErrorr`)
r3r��infoZinfosr�r�r^Zsocktyper8�brrr�testGetaddrinfoSsv


z"GeneralModuleTests.testGetaddrinfocCs|�ttjdd�dS)N)zmail.python.orgrr)r�rr	r
)r3rrr�test_getnameinfo�sz#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledc	CsPt�d��t�d�WdQRXd}t�|�t�|�t�|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetr	r�Zgethostbyname_exrardr.)r3r(rrr�	test_idna�s

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

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


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


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



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

z.GeneralModuleTests.test__sendfile_use_sendfilecCst|�|j|�|�|j|�|��}tj|d�}|�|j�|��|�|j|�|�|j|�|�|��|�dS)N)r�)r�r�r�r�r	rCr�detach)r3rr��styper��s2rrr�_test_socket_fileno�sz&GeneralModuleTests._test_socket_filenocCs6t�tjtj�}|�|j�|�tjdf�|�|tjtj�t	td�r�t�tjtj
�}|�|j�|�tjdf�|�|tjtj
�tjr�t�tjtj�}|�|j�|�tj
dddf�|�|tjtj�t	td��r2t��}|�tj|�t�tjtj�}|�|j�|�tj�|d��|�|tjtj�dS)Nrrr�r	)r	r-r.rCrrLrr�r�rrrcr�r�r�r��shutilZrmtreer�r'r�r�)r3rZtmpdirrrr�test_socket_fileno�s*
z%GeneralModuleTests.test_socket_fileno)Mr6r7r8r�r�r��
skipUnlessr�r�r�r�r�r�r�r�r�rr	rr	r
rrrrr�cpython_onlyr$r.r4r6r<rArErFrHrLrNrPrQrSrWr'r�r[r]rhriZis_resource_enabledrjryrzr{r~r�r�r�r�r�r�r�r�rcr�r�r�r+r�r�r�r�r��skipIfr�r�r�r�rrrrr��s�


,		, ?#N
	

	
r�z!SocketCan required for this test.c@s�eZdZdd�Ze�eed�d�dd��Zdd�Z	e�eed�d�d	d
��Z
dd�Zd
d�Ze�eed�d�dd��Z
e�eed�d�dd��ZdS)�BasicCANTestcCstjtjtjdS)N)r	�AF_CANrr)r3rrrr��sz!BasicCANTest.testCrucialConstants�CAN_BCMz&socket.CAN_BCM required for this test.cCsRtjtjtjtjtjtjtjtjtj	tj
tjtjtj
dS)N)r	r�ZCAN_BCM_TX_SETUPZCAN_BCM_TX_DELETEZCAN_BCM_TX_READ�CAN_BCM_TX_SENDZCAN_BCM_RX_SETUPZCAN_BCM_RX_DELETEZCAN_BCM_RX_READZCAN_BCM_TX_STATUSZCAN_BCM_TX_EXPIREDZCAN_BCM_RX_STATUSZCAN_BCM_RX_TIMEOUTZCAN_BCM_RX_CHANGED)r3rrr�testBCMConstants�szBasicCANTest.testBCMConstantsc	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr)r3rrrr�testCreateSocket
szBasicCANTest.testCreateSocketc	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr�)r3rrrr�testCreateBCMSocketsz BasicCANTest.testCreateBCMSocketc	Cs.t�tjtjtj��}|�d�WdQRXdS)N)r�)r	rrrrL)r3rrrr�testBindAnyszBasicCANTest.testBindAnyc	Cs6t�tjtjtj��}|�td|jd�WdQRXdS)Nzinterface name too long)�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r	rrrr�rrL)r3rrrr�testTooLongInterfaceNamesz%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c	Cs\t�tjtjtj��>}x6dD].}|�tjtj|�|�||�tjtj��qWWdQRXdS)N)rr\)	r	rrrrM�SOL_CAN_RAWr�r�rI)r3rZloopbackrrr�testLoopbacks
zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c	Cs|d\}}t�d||�}t�tjtjtj��H}|�tjtj|�|�	||�
tjtjd��|�tjtjt|��WdQRXdS)N)iiz=IIrK)r
�packr	rrrrMr�r�r�rIrD)r3�can_idZcan_maskZ
can_filterrrrr�
testFilter(szBasicCANTest.testFilterN)r6r7r8r�r�r�rr	r�r�r�r�r�r�r�rrrrr��s	r�c@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
�eed�d�dd��Ze
�eed�d�dd��ZdS)�CANTestr{cCstj||d�dS)N)r|)rr<)r3r|rrrr<7szCANTest.__init__cCs&t|�}|�dd�}t�|j|||�S)zBuild a CAN frame.rK�)rb�ljustr
r�rP)�clsr��data�can_dlcrrr�build_can_frame:szCANTest.build_can_framecCs&t�|j|�\}}}|||d|�fS)zDissect a CAN frame.N)r
rrP)r��framer�r�r�rrr�dissect_can_frameAszCANTest.dissect_can_framecCs2|j�|j�\}}|�|j|�|�||j�dS)N)r�recvfromrOr��cfrM)r3r�r�rrr�
testSendFrameGszCANTest.testSendFramecCs |�dd�|_|j�|j�dS)Nrs)r�r�r}r�)r3rrr�_testSendFrameOszCANTest._testSendFramecCs$|j�|j�\}}|�|j|�dS)N)rr�rOr�r�)r3r�r�rrr�testSendMaxFrameSszCANTest.testSendMaxFramecCs |�dd�|_|j�|j�dS)Nrs)r�r�r}r�)r3rrr�_testSendMaxFrameWszCANTest._testSendMaxFramecCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dS)N)rr�rOr��cf1�cf2)r3r�r�rrr�testSendMultiFrames[szCANTest.testSendMultiFramescCs<|�dd�|_|j�|j�|�dd�|_|j�|j�dS)N�sD3"�s�"3)r�r�r}r�r�)r3rrr�_testSendMultiFramesbszCANTest._testSendMultiFramesr�z&socket.CAN_BCM required for this test.cCsP|j�|j�\}}|�|j|�|�|�\}}}|�|j|�|�|j|�dS)N)r}r�rOr�r�r�r�r�)r3r�r�r�r�r�rrr�_testBCMis
zCANTest._testBCMcCs�t�tjtjtj�}|�|j�|�|jf�d|_t	dddg�|_
|�|j|j
�|_tj
}d}d}d}}}}d}	d}
t|j�dks�t�t�|j||||||||	|
�
}||j}|�|�}
|�|
t|��dS)	Ni#����ri"r\r)r	rrr�rCrr�rMr��bytesr�r�r�r�rb�AssertionErrorr
r�rRr�r�)r3ZbcmZopcoder_rVZ
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr�testBCMrs4

zCANTest.testBCMN)r{)r6r7r8r<�classmethodr�r�r�r�r�r�r�r�r�r�rr	r�r�rrrrr�4s
r�z!CAN ISOTP required for this test.csVeZdZ�fdd�Zdd�Zdd�Ze�ee	d�d�d	d
��Z
dd�Zd
d�Z�Z
S)�	ISOTPTestcst�j||�d|_dS)NrH)r;r<rM)r3r@rA)rBrrr<�szISOTPTest.__init__cCstjtjtjtjdS)N)r	r�rrr)r3rrrr��szISOTPTest.testCrucialConstantsc	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr)r3rrrrr��szISOTPTest.testCreateSocketrz(socket.CAN_ISOTP required for this test.c	Cs$t�tjtjtj��}WdQRXdS)N)r	rrr)r3rrrr�testCreateISOTPSocket�szISOTPTest.testCreateISOTPSocketc
CsFt�tjtjtj��(}|�td��|�d�WdQRXWdQRXdS)Nzinterface name too long)r�r\r�)r	rrrr�rrL)r3rrrrr��sz"ISOTPTest.testTooLongInterfaceNamec
Cs�yJt�tjtjtj��,}|jddf}|�|�|�|��|�WdQRXWnBtk
r�}z$|j	t	j
krz|�d|j�n�Wdd}~XYnXdS)Ni#iVz%network interface `%s` does not exist)r	rrrrMrLr�r�rrZENODEVrN)r3rr�rwrrr�testBind�s
zISOTPTest.testBind)r6r7r8r<r�r�r�r�rr	r�r�r�rFrr)rBrr��sr�z#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdS)N)r	ZAF_RDSr)r3rrrr��sz!BasicRDSTest.testCrucialConstantsc	Cs"t�tjtjd��}WdQRXdS)Nr)r	rr)r3rrrrr��szBasicRDSTest.testCreateSocketc	CsJd}t�tjtjd��*}|�tjtj|�|�tjtj|�WdQRXdS)Ni@r)r	rrrMr�Z	SO_RCVBUFZ	SO_SNDBUF)r3rOrrrr�testSocketBufferSize�sz!BasicRDSTest.testSocketBufferSizeN)r6r7r8r�r�r�rrrrr��sr�cs�eZdZddd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	e
j
d�dd��Ze	e
j
d�dd��Zdd�Z
dd�Zdd�Zdd�Z�ZS)�RDSTestr{cCstj||d�dS)N)r|)r�r<)r3r|rrrr<�szRDSTest.__init__cst���t��|_dS)N)r;r4r=raZevt)r3)rBrrr4�s
z
RDSTest.setUpcCs2|j�|j�\}}|�|j|�|�|j|�dS)N)r/r�rOr�r�r�)r3r�r�rrr�testSendAndRecv�szRDSTest.testSendAndRecvcCs"d|_|j�|jdt|jf�dS)Nsspamr)r�r}r�r�r1)r3rrr�_testSendAndRecv�szRDSTest._testSendAndRecvcCsH|j�|jtj�\}}|�|j|�|j�|j�\}}|�|j|�dS)N)r/r�rOr	�MSG_PEEKr�r�)r3r�r�rrr�testPeek�szRDSTest.testPeekcCs"d|_|j�|jdt|jf�dS)Nsspamr)r�r}r�r�r1)r3rrr�	_testPeek�szRDSTest._testPeek�recvmsgcCs(|j�|j�\}}}}|�|j|�dS)N)r/r�rOr�r�)r3r��ancdataZ	msg_flagsr�rrr�testSendAndRecvMsg�szRDSTest.testSendAndRecvMsg�sendmsgcCs&d|_|j�|jgddt|jf�dS)Ns<hello hello hello hello hello hello hello hello hello hello rr)r�r}rr�r1)r3rrr�_testSendAndRecvMsg�szRDSTest._testSendAndRecvMsgcCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dS)N)r/r�rOr��data1�data2)r3r�r�rrr�testSendAndRecvMulti�szRDSTest.testSendAndRecvMulticCs@d|_|j�|jdt|jf�d|_|j�|jdt|jf�dS)Nsbaconrsegg)rr}r�r�r1r)r3rrr�_testSendAndRecvMulti�szRDSTest._testSendAndRecvMulticCsLt�|jgggd�\}}}|�|j|�|j�|j�\}}|�|j|�dS)Ng@)�selectr/r�r�rOr�r�)r3rr�rJr�r�rrr�
testSelectszRDSTest.testSelectcCs"d|_|j�|jdt|jf�dS)Nsselectr)r�r}r�r�r1)r3rrr�_testSelect
szRDSTest._testSelect)r{)r6r7r8r<r4r�r�r�r�r�r	r�rrrrrrFrr)rBrr��s
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BasicVSOCKTestcCs
tjdS)N)r	r�)r3rrrr�sz#BasicVSOCKTest.testCrucialConstantscCs4tjtjtjtjtjtjtjtjdS)N)	r	�SO_VM_SOCKETS_BUFFER_SIZE�SO_VM_SOCKETS_BUFFER_MIN_SIZE�SO_VM_SOCKETS_BUFFER_MAX_SIZEr�ZVMADDR_PORT_ANYZVMADDR_CID_HOSTZVM_SOCKETS_INVALID_VERSIONr)r3rrr�testVSOCKConstantssz!BasicVSOCKTest.testVSOCKConstantsc	Cs t�tjtj��}WdQRXdS)N)r	r�r.)r3rrrrr�!szBasicVSOCKTest.testCreateSocketc	Cs�t�tjtj���}|�tjtj�}|�tjtj�}|�tjtj�}|�tjtj|d�|�tjtj|d�|�tjtj|d�|�|d|�tjtj��|�|d|�tjtj��|�|d|�tjtj��WdQRXdS)Nr�)	r	r�r.rIrr
rrMr�)r3rZorig_maxrZorig_minrrrr�%s,




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



zBasicTCPTest.testDetachcCs|j�t�dS)N)r�r�r�)r3rrr�_testDetach�szBasicTCPTest._testDetachN)r{)r6r7r8r<rrrrrrrrrrrrr r!r"r$rr�ZtestShutdown_overflowr&r(r)rrrrr@s*

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



zSendrecvmsgBase.checkFlags)Nrrr)r6r7r8�fail_timeoutr4r2r3r4r7r5r:r=r�rir	r<r>r?rErFrr)rBrr/�s

r/c@seZdZdd�ZdS)�RecvmsgIntoMixincGsft|�}|j|gf|��}|�|�|�|dd�|�|d|�t|d|d��f|dd�S)Nrr\)rD�recvmsg_intor5�assertGreaterEqual�assertLessEqualr�)r3r)rOr@�bufr6rrrr7l	s
zRecvmsgIntoMixin.doRecvmsgN)r6r7r8r7rrrrrGi	srGcs eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasecst�jtjBS)N)r;r?r	�	MSG_TRUNC)r3)rBrrr?x	sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)r6r7r8�propertyr?rFrr)rBrrLu	srLcs eZdZe�fdd��Z�ZS)�SendrecvmsgSCTPFlagsBasecst�jtjBS)N)r;r>r	ZMSG_EOR)r3)rBrrr>�	sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)r6r7r8rNr>rFrr)rBrrO}	srOc@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jS)N)r/)r3rrr�	serv_sock�	sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jS)N)r})r3rrrr1�	sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfS)Nr)r�)r3rrrr3�	sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j�||j�S)N)r1r�r�)r3r�rrrr2�	sz*SendrecvmsgConnectionlessBase.sendToServerN)r6r7r8rNrQr1r3r2rrrrrP�	srPc@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jS)N)r�)r3rrrrQ�	sz"SendrecvmsgConnectedBase.serv_sockcCs|jS)N)r�)r3rrrr1�	sz!SendrecvmsgConnectedBase.cli_sockcCsdS)Nr)r3r8r9rrrr:�	sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)r6r7r8rNrQr1r:rrrrrR�	srRcseZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasecst���|j�|j�dS)N)r;r4rQrOrF)r3)rBrrr4�	s
z"SendrecvmsgServerTimeoutBase.setUp)r6r7r8r4rFrr)rBrrS�	srSc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeed�dd��Zejd d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SendmsgTestscCs|�|j�tt��t�dS)N)r�rQr�rbr�)r3rrr�testSendmsg�	szSendmsgTests.testSendmsgcCs|�|�tg�tt��dS)N)r�r4r�rb)r3rrr�_testSendmsg�	szSendmsgTests._testSendmsgcCs|�|j�tt��t�dS)N)r�rQr�rbr�)r3rrr�testSendmsgDataGenerator�	sz%SendmsgTests.testSendmsgDataGeneratorcCs&|�|�dd�tgD��tt��dS)Ncss|]
}|VqdS)Nr)r�r�rrrr��	sz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>)r�r4r�rb)r3rrr�_testSendmsgDataGenerator�	sz&SendmsgTests._testSendmsgDataGeneratorcCs|�|j�tt��t�dS)N)r�rQr�rbr�)r3rrr�testSendmsgAncillaryGenerator�	sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|�|�tgdd�dD��tt��dS)Ncss|]
}|VqdS)Nr)r�r�rrrr��	sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>r)r�r4r�rb)r3rrr�_testSendmsgAncillaryGenerator�	sz+SendmsgTests._testSendmsgAncillaryGeneratorcCs|�|j�tt��t�dS)N)r�rQr�rbr�)r3rrr�testSendmsgArray�	szSendmsgTests.testSendmsgArraycCs$|�|�t�dt�g�tt��dS)N�B)r�r4�arrayr�rb)r3rrr�_testSendmsgArray�	szSendmsgTests._testSendmsgArraycCs|�|j�tt��t�dS)N)r�rQr�rbr�)r3rrr�testSendmsgGather�	szSendmsgTests.testSendmsgGathercCs.|�|�tdd�tdd�g�tt��dS)Nr)r�r4r�rb)r3rrr�_testSendmsgGather�	szSendmsgTests._testSendmsgGathercCs|�|j�d�d�dS)Ni�sdone)r�rQr�)r3rrr�testSendmsgBadArgs�	szSendmsgTests.testSendmsgBadArgscCs�|�t|jj�|�t|jd�|�t|jt��|�t|jt�g�|�t|jtt�g�|�t|jtgt��|�t|jtggt��|�t|jtggdt��|�d�dS)Nsnot in an iterablersdone)r�rvr1rr4�objectr�r2)r3rrr�_testSendmsgBadArgs�	s 







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





z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs|�|j�d�d�dS)Ni�sdone)r�rQr�)r3rrr�testSendmsgBadMultiCmsg	
sz$SendmsgTests.testSendmsgBadMultiCmsgcCsB|�t|jtgdddg�|�t|jtgdt�g�|�d�dS)Nrr�)rrr�sdone)r�rvr4r�rbr2)r3rrr�_testSendmsgBadMultiCmsg
s


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

z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdS)Nr)r3rrr�testSendmsgAfterClose$
sz"SendmsgTests.testSendmsgAfterClosecCs |j��|�t|jtg�dS)N)r1rr�rr4r�)r3rrr�_testSendmsgAfterClose(
s
z#SendmsgTests._testSendmsgAfterCloseN)r6r7r8rUrVrWrXrYrZr[r^r_r`rarcrdrer�r	rgr�rhrirkrlrmrrrrrT�	s(rTc@sReZdZdd�Zdd�Zdd�Zdd�Zeej	d	kd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs|�|j�tt��t�dS)N)r�rQr�rbr�)r3rrr�testSendmsgExplicitNoneAddr1
sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|�|�tggdd�tt��dS)Nr)r�r4r�rb)r3rrr�_testSendmsgExplicitNoneAddr5
sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs.|�|j�d�d�|�|jj|jd��dS)Nisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rv)r�rQr�r�r0rmrF)r3rrr�testSendmsgTimeout8
sz%SendmsgStreamTests.testSendmsgTimeoutc
Cs�zv|j�d�yx|�dg�qWWnDtjk
r:Yn:tk
rh}z|jtjkrX�Wdd}~XYnX|�d�Wd|j	�
�XdS)Ng���Q��?saaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazsocket.timeout not raised)r1rOr4r	rvrr�ENOMEMr�r0rZ)r3rprrr�_testSendmsgTimeout=
sz&SendmsgStreamTests._testSendmsgTimeout>r%z<MSG_DONTWAIT not known to work on this platform when sendingcCs.|�|j�d�d�|�|jj|jd��dS)Nisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rv)r�rQr�r�r0rmrF)r3rrr�testSendmsgDontWaitT
sz&SendmsgStreamTests.testSendmsgDontWaitc	Cs`zN|�t��}x|�dggtj�qWWdQRX|�|jjtjtj	tj
f�Wd|j��XdS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
r�rr4r	ZMSG_DONTWAITr�r�rZEAGAINZEWOULDBLOCKrrr0rZ)r3r�rrr�_testSendmsgDontWait\
s 
z'SendmsgStreamTests._testSendmsgDontWaitN)
r6r7r8rorprqrsr�rr+rtr�rurrrrrn-
s
rnc@seZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdS)Nr)r3rrr�testSendmsgNoDestAddro
sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|�t|jjtg�|�t|jjtggdd�dS)Nr)r�rr1rr�)r3rrr�_testSendmsgNoDestAddrt
sz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)r6r7r8rwrxrrrrrvj
srvc@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)rA)r7rQrbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsg
s
zRecvmsgGenericTests.testRecvmsgcCs|�t�dS)N)r2r�)r3rrr�_testRecvmsg�
sz RecvmsgGenericTests._testRecvmsgcCsV|�|jtt�dd�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrT)rA)r7rQrbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsgExplicitDefaults�
sz/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgExplicitDefaults�
sz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Nr�T)rA)r7rQrbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsgShorter�
sz&RecvmsgGenericTests.testRecvmsgShortercCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgShorter�
sz'RecvmsgGenericTests._testRecvmsgShortercCs^|�|jtt�d�\}}}}|�|tdd��|�||j�|�|g�|j|dd�dS)Nr���F)rA)r7rQrbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsgTrunc�
sz$RecvmsgGenericTests.testRecvmsgTrunccCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgTrunc�
sz%RecvmsgGenericTests._testRecvmsgTrunccCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Nr\T)rA)r7rQrbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsgShortAncillaryBuf�
sz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgShortAncillaryBuf�
sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)Ni(T)rA)r7rQrbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsgLongAncillaryBuf�
sz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgLongAncillaryBuf�
sz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|j��|�t|j|jd�dS)Ni)rQrr�rr7)r3rrr�testRecvmsgAfterClose�
s
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdS)Nr)r3rrr�_testRecvmsgAfterClose�
sz*RecvmsgGenericTests._testRecvmsgAfterClosecCs<z*|j�d�|�tj|j|jtt��Wd|j�	�XdS)Ng���Q��?)
rQrOr�r	rvr7rbr�r0rZ)r3rrr�testRecvmsgTimeout�
s
z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|�|jj|jd��dS)N)rv)r�r0rmrF)r3rrr�_testRecvmsgTimeout�
sz'RecvmsgGenericTests._testRecvmsgTimeoutr�cCs|�|jtt�ddtj�\}}}}|�|tdd��|�||j�|�|g�|j	|dt
tdd�d�|�|jtt�dtj�\}}}}|�|t�|�||j�|�|g�|j	|dd�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dS)	Nrrr�FrM)rArDT)rA)r7rQrbr�r	r�r�r:r�rEri)r3r�r�r_r�rrr�testRecvmsgPeek�
s(z#RecvmsgGenericTests.testRecvmsgPeekcCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgPeek�
sz$RecvmsgGenericTests._testRecvmsgPeekrcCs`|j�|j�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dS)NT)rA)
rQrOrFr7rbr�r�r:r�rE)r3r�r�r_r�rrr�testRecvmsgFromSendmsgsz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs.|�|�tdd�tdd�g�tt��dS)Nr)r�r4r�rb)r3rrr�_testRecvmsgFromSendmsgsz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)r6r7r8rzr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r	r�r�r�r�r�rrrrry{
s(						#ryc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RecvmsgGenericStreamTestscCsN|�|jd�\}}}}|�|d�|�||j�|�|g�|j|dd�dS)Nir�)rA)r7rQr�r:r�rE)r3r�r�r_r�rrr�testRecvmsgEOFs
z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|j��dS)N)r1r)r3rrr�_testRecvmsgEOFsz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|�|jtt�d�\}}}}|�||j�|�|g�|j|dd�|�|jd�\}}}}|�||j�|�|g�|j|dd�||}|�|t�dS)NrF)rAiT)r7rQrbr�r:r�r�rE)r3rr�r_r�rr�rrr�testRecvmsgOverflow sz-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgOverflow0sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)r6r7r8r�r�r�r�rrrrr�sr�c@seZdZdd�Zdd�ZdS)�RecvmsgTestscCs|�t|jj�|�t|jjddd�|�t|jjtt�dd�|�t|jjtd�gdd�|�t|jjt�dd�|�t|jjtt�t�d�|�t|jjtt�dt��|j�tt�dd�\}}}}|�	|t�|�
||j�|�	|g�|j|dd�dS)Nrrr/T)rA)
r�rvrQr�r3rbr�rDrbr�r:r�rE)r3r�r�r_r�rrr�testRecvmsgBadArgs7s$
zRecvmsgTests.testRecvmsgBadArgscCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgBadArgsMsz RecvmsgTests._testRecvmsgBadArgsN)r6r7r8r�r�rrrrr�4sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�RecvmsgIntoTestscCsLttt��}|�t|jj�|�t|jjtt�dd�|�t|jj|dd�|�t|jjt�gdd�|�t|jjdgdd�|�t|jj|t�gdd�|�t|jj|gdd�|�t|jj|gt�d�|�t|jj|gdt��|j�|gdd�\}}}}|�	|tt��|�	|tt��|�
||j�|�	|g�|j|dd�dS)NrsI'm not writablerT)rA)
rDrbr�r�rvrQrHrbr3r�r:r�rE)r3rK�nbytesr�r_r�rrr�testRecvmsgIntoBadArgsTs0
z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgIntoBadArgspsz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|j�dd�|gD��\}}}}|�|tt��|�|tt��|�||j�|�|g�|j|dd�dS)Ncss|]
}|VqdS)Nr)r�r�rrrr�wsz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>T)rA)	rDrbr�rQrHr�r:r�rE)r3rKr�r�r_r�rrr�testRecvmsgIntoGeneratorssz)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgIntoGenerator~sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxt�ddgtt��}|j�|g�\}}}}|�|tt��|�|��t�|�||j�|�|g�|j	|dd�dS)Nr\rT)rA)
r]rbr�rQrHr��tobytesr:r�rE)r3rKr�r�r_r�rrr�testRecvmsgIntoArray�sz%RecvmsgIntoTests.testRecvmsgIntoArraycCs|�t�dS)N)r2r�)r3rrr�_testRecvmsgIntoArray�sz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|j�|t|�dd�|g�\}}}}|�|td��|�|td��|�|td��|�|td	��|�||j�|�|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	sMary had a little lambsMarys
01 had a 9slittle lamb---T)rA)	rDrQrH�
memoryviewr�rbr:r�rE)r3Zb1Zb2Zb3r�r�r_r�rrr�testRecvmsgIntoScatter�s z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|�d�dS)NsMary had a little lamb)r2)r3rrr�_testRecvmsgIntoScatter�sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)r6r7r8r�r�r�r�r�r�r�r�rrrrr�Qs
r�c@sbeZdZyddlZWnek
r,dZYnXedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs�|jt�d�d}ttd��tt|d|��}|�t�d�t�d�jd�x:|D]2}t�|�}|�|t�d�|�|�	||j�qVW|�
ttjd�|�
ttj|�|�
ttjtj
�dS)Nrr\ir+r�r)�socklen_t_limitr	r��listr�rr]�itemsizer�rJr�rr�maxsize)r3�toobigr��nr#rrr�testCMSG_LEN�s

zCmsgMacroTests.testCMSG_LENrfcCs�|jt�d�d}ttd��tt|d|��}t�d�}|�|t�d�jd�x\|D]T}t�|�}|�||�|�|t�	|��|�||t�	d��|�
||j�|}qZW|�ttjd�|�ttj|�|�ttjt
j�dS)Nr\irr+r�r)r�r	rfr�r�rr]r�rIr�rJr�rrr�)r3r�r�Zlastr�r#rrr�testCMSG_SPACE�s


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



zSCMRightsTest.closeRecvmsgFDsc
Cs8|�|�tgtjtjt�d|�|��fg�tt��dS)Nr+)	r�r4r�r	r�r�r]r�rb)r3r�rrr�createAndSendFDsszSCMRightsTest.createAndSendFDsr\rcCs�|\}}}}|�|t�|�||j�|j|dtj|d�|�|t�|�	t
|�|�t�d�}	xh|D]`}
|�|
t�|
\}}}
|�|tj
�|�|tj�|�|
t�|�t
|
�td�|	�|
�qfW|�t
|	�|�|�|	�dS)NT)rArCrDr+r)r�r�r:r�rEr	r;r�r�rJrbr]�tupler�r�r��
SIZEOF_INTr�r�)r3Znumfdsr6�maxcmsgs�ignoreflagsr�r�r_r�r��itemr�r�r�rrr�checkRecvmsgFDss$

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

	
  


	
r�c@seZdZdZdZdd�Zd^dd�Zeed	d
�dd��Z	e	j
d
d��Zeedd	d
�dd��Zej
dd��Z
eejd�eed	d
�dd���Zej
dd��Zd_dd�Zeed	d
dd�dd��Zej
dd ��Zeedd	d
dd�d!d"��Zej
d#d$��Zeejd�eedd	d
dd�d%d&���Zej
d'd(��Zeejd�eedd	d
dd�d)d*���Zej
d+d,��Zd`d-d.�Zeed	d
�d/d0��Zej
d1d2��Zeed	d
�d3d4��Zej
d5d6��Zeed	d
�d7d8��Zej
d9d:��Zeed	d
�d;d<��Z e j
d=d>��Z!eed	d
�d?d@��Z"e"j
dAdB��Z#eed	d
�dCdD��Z$e$j
dEdF��Z%dadGdH�Z&eedd	d
dd�dIdJ��Z'e'j
dKdL��Z(eedd	d
dd�dMdN��Z)e)j
dOdP��Z*eedd	d
dd�dQdR��Z+e+j
dSdT��Z,eedd	d
dd�dUdV��Z-e-j
dWdX��Z.eedd	d
dd�dYdZ��Z/e/j
d[d\��Z0d]S)b�RFC3542AncillaryTestr�rcCs8i}x.|D]&\}}}|�||f|�||||f<q
W|S)N)r�)r3r��dr�r�r�rrr�ancillaryMappingV
s
z%RFC3542AncillaryTest.ancillaryMappingr�rcCs|j�tjtjd�|j��|�|jtt	�|�\}}}}|�
|t	�|�||j�|j
|dtj|d�|�
t|�d�|�|dt�|d\}}	}
|�
|tj�|�
|	tj�|�|
t�|�
t|
�t�t�d�}|�|
�|�|dd�|�|d|�dS)Nr\T)rArCrDrr+)rQrMr	�IPPROTO_IPV6�IPV6_RECVHOPLIMITr0rZr7rbr�r�r:r�rEr;r�r��
IPV6_HOPLIMITr�r�r]r�rIrJ)r3�
ancbufsize�maxhopr�r�r�r_r�r�r�r�r8rrr�
checkHopLimit`
s(




z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS)Ni()r�)r�)r3rrr�testRecvHopLimit|
sz%RFC3542AncillaryTest.testRecvHopLimitcCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testRecvHopLimit�
sz&RFC3542AncillaryTest._testRecvHopLimitrfcCs|jt�t�d�dS)N)r�)r�r	rfr�)r3rrr�testRecvHopLimitCMSG_SPACE�
sz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testRecvHopLimitCMSG_SPACE�
sz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErcCs|jd|jd�dS)Ni()r�r�)r��	hop_limit)r3rrr�testSetHopLimit�
sz$RFC3542AncillaryTest.testSetHopLimitcCsL|�|jj|jd��|�|�tgtjtj	t
�
d|jg�fg�tt��dS)N)rvr+)
r�r0rmrFr�r4r�r	r�r�r]rrb)r3rrr�_testSetHopLimit�
sz%RFC3542AncillaryTest._testSetHopLimitcCsB|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|�|�}|tjtjf}	|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�|tjtjf}|�t	|�t�t�d�}
|
�|�|�|
dd�|�|
d|�dS)Nr\T)rArCrDr�r+rr�)rQrMr	r�r��IPV6_RECVTCLASSr0rZr7rbr�r�r:r�rEr;r��IPV6_TCLASSr�r]r�rIrJr�)r3r�r�r�r�r�r_r�ZancmapZtcdatar8Zhldatarrr�checkTrafficClassAndHopLimit�
s2









z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrrcCs|jdd�dS)Ni()r�)r)r3rrr�testRecvTrafficClassAndHopLimit�
sz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr� _testRecvTrafficClassAndHopLimit�
sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jt�t�dd�dS)Nr�)r�)rr	rfr�)r3rrr�)testRecvTrafficClassAndHopLimitCMSG_SPACE�
sz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�*_testRecvTrafficClassAndHopLimitCMSG_SPACE�
sz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jd�dS)Ni()r�r�)rr)r3rrr�testSetTrafficClassAndHopLimit�
sz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitcCsd|�|jj|jd��|�|�tgtjtj	t
�
d|jg�ftjtjt
�
d|j
g�fg�tt��dS)N)rvr+)r�r0rmrFr�r4r�r	r�rr]�
traffic_classr�rrb)r3rrr�_testSetTrafficClassAndHopLimit�
sz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jd�dS)Ni()r�r�)rr)r3rrr�testOddCmsgSize�
sz$RFC3542AncillaryTest.testOddCmsgSizec
Cs�|�|jj|jd��yJ|�tgtjtjt	�	d|j
g���dftjtjt	�	d|j
g�fg�}Wn~tk
r�}z`|�|jt�|�tgtjtjt	�	d|j
g�ftjtjt	�	d|j
g�fg�}|�|tt��Wdd}~XYnXdS)N)rvr+r�)r�r0rmrFr4r�r	r�rr]rr�r�rrr�rrr�rb)r3r�rwrrr�_testOddCmsgSizes"z%RFC3542AncillaryTest._testOddCmsgSizecCs�|j�tjtjd�|j��|dkr*dn|f}|j|jtt	�f|��\}}}}|�
|t	�|�||j�|�
|g�|j
|dtj|d�dS)Nr\rT)rArBrD)rQrMr	r�r�r0rZr7rbr�r�r:r�rEr;)r3r�r�r@r�r�r_r�rrr�checkHopLimitTruncatedHeaders


z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N)r�r�)rr	r;)r3rrrr�,sz+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrrr�7sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nr)r�r�)rr	r;)r3rrr�testSingleCmsgTrunc0<sz)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSingleCmsgTrunc0Csz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nr\)r�)r)r3rrr�testSingleCmsgTrunc1Ksz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSingleCmsgTrunc1Osz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dS)Nr�)r�)rr�)r3rrr�testSingleCmsgTrunc2IntTsz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSingleCmsgTrunc2IntXsz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jt�d�dd�dS)Nrr\)r�)rr	r�)r3rrr�testSingleCmsgTruncLen0Minus1]sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSingleCmsgTruncLen0Minus1asz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|j�tjtjd�|j��|�|jtt	�t�
t�d�\}}}}|�|t	�|�
||j�|j|dtjd�|�t|�d�|r�|d\}}}|�|tj�|�|tj�|�t|�t�dS)Nr\T)rArBr)rQrMr	r�r�r0rZr7rbr�r�r�r�r:r�rEr;rJr�r�)r3r�r�r_r�r�r�r�rrr�testSingleCmsgTruncInDatafs


"z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSingleCmsgTruncInData|sz/RFC3542AncillaryTest._testSingleCmsgTruncInDatacCs|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|d\}}}	|�|tj�|�|tjtjh�|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�dS)Nr\T)rArBrDrr+r�)rQrMr	r�r�rr0rZr7rbr�r�r:r�rEr;r�rr�r�r]r�rIrJ)r3r�r�r�r�r_r�r�r�r�r8rrr�checkTruncatedSecondHeader�s(






z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jt�t�tjd�dS)N)r�)rr	rfr�r;)r3rrr�testSecondCmsgTrunc0�sz)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSecondCmsgTrunc0�sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|�t�t�d�dS)Nr\)rr	rfr�)r3rrr�testSecondCmsgTrunc1�sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSecondCmsgTrunc1�sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|�t�t�dt�dS)Nr�)rr	rfr�)r3rrr�testSecondCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSecondCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|�t�t�t�d�d�dS)Nrr\)rr	rfr�r�)r3rrr�testSecondCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSecondCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
CsT|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�t�t�t�
t�d�\}}}}|�|t
�|�||j�|j|dtjd�tjtjh}|�d�\}}}|�|tj�|�|�|�t	|�t�t�d�}	|	�|�|�|	dd�|�|	dd�|�rD|�d�\}}}|�|tj�|�|�|�t	|�t�|�|g�dS)Nr\T)rArBrr+r�)rQrMr	r�r�rr0rZr7rbr�rfr�r�r�r:r�rEr;rr��pop�remover]r�rIrJr�)
r3r�r�r_r�Z
cmsg_typesr�r�r�r8rrr�testSecomdCmsgTruncInData�s4





"



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$|�|jj|jd��|�t�dS)N)rv)r�r0rmrFr2r�)r3rrr�_testSecomdCmsgTruncInData�sz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r�r)r�r)r)r)1r6r7r8rrr�r�r�r	r�r�r�r�r�rrrrrrr	r
rr
rrr�r�rrrrrrrrrrrrrrrrr r!r"r%r&rrrrr�E
sp



	
#






 




$r�c@seZdZdS)�SendrecvmsgUDPTestBaseN)r6r7r8rrrrr'�sr'rc@seZdZdS)�SendmsgUDPTestN)r6r7r8rrrrr(�sr(r�c@seZdZdS)�RecvmsgUDPTestN)r6r7r8rrrrr)sr)rHc@seZdZdS)�RecvmsgIntoUDPTestN)r6r7r8rrrrr*sr*c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs |�|dd�|dd��dS)Nr)r�)r3r8r9rrrr:sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)r6r7r8r:rrrrr+sr+zIPv6 required for this test.r�rc@seZdZdS)�SendmsgUDP6TestN)r6r7r8rrrrr,sr,c@seZdZdS)�RecvmsgUDP6TestN)r6r7r8rrrrr-sr-c@seZdZdS)�RecvmsgIntoUDP6TestN)r6r7r8rrrrr. sr.r�c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestN)r6r7r8rrrrr/&sr/c@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestN)r6r7r8rrrrr0.sr0c@seZdZdS)�SendrecvmsgTCPTestBaseN)r6r7r8rrrrr18sr1c@seZdZdS)�SendmsgTCPTestN)r6r7r8rrrrr2<sr2c@seZdZdS)�RecvmsgTCPTestN)r6r7r8rrrrr3@sr3c@seZdZdS)�RecvmsgIntoTCPTestN)r6r7r8rrrrr4Esr4c@seZdZdS)�SendrecvmsgSCTPStreamTestBaseN)r6r7r8rrrrr5Ksr5r-r.r�c@seZdZdS)�SendmsgSCTPStreamTestN)r6r7r8rrrrr6Psr6cseZdZ�fdd�Z�ZS)�RecvmsgSCTPStreamTestc
sRytt|���Wn:tk
rL}z|jtjkr2�|�d�Wdd}~XYnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r;r7r�rr�ENOTCONNrN)r3rw)rBrrr�Zsz$RecvmsgSCTPStreamTest.testRecvmsgEOF)r6r7r8r�rFrr)rBrr7Usr7cseZdZ�fdd�Z�ZS)�RecvmsgIntoSCTPStreamTestc
sRytt|���Wn:tk
rL}z|jtjkr2�|�d�Wdd}~XYnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r;r9r�rrr8rN)r3rw)rBrrr�gsz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOF)r6r7r8r�rFrr)rBrr9bsr9c@seZdZdS)�SendrecvmsgUnixStreamTestBaseN)r6r7r8rrrrr:psr:r�c@seZdZdS)�SendmsgUnixStreamTestN)r6r7r8rrrrr;tsr;c@seZdZdS)�RecvmsgUnixStreamTestN)r6r7r8rrrrr<ysr<c@seZdZdS)�RecvmsgIntoUnixStreamTestN)r6r7r8rrrrr=sr=r�r�c@seZdZdS)�RecvmsgSCMRightsStreamTestN)r6r7r8rrrrr>�sr>c@seZdZdS)�RecvmsgIntoSCMRightsStreamTestN)r6r7r8rrrrr?�sr?csDeZdZ�fdd�ZdZeed�r0dZdd�ZndZd	d�Z�Z	S)
�InterruptedTimeoutBasecs2t���t�tjdd��}|�tjtj|�dS)NcSsddS)Nr\rr)Zsignumr�rrrr��r�z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)r;r4rqrrrC)r3Zorig_alrm_handler)rBrrr4�s

zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCst�tj|�dS)N)rqrA�ITIMER_REAL)r3�secondsrrr�setAlarm�szInterruptedTimeoutBase.setAlarmr�cCst�|�dS)N)rqrk)r3rCrrrrD�s)
r6r7r8r4rvrrq�
alarm_timerDrFrr)rBrr@�s

r@�siginterruptrkrAz+Don't have signal.alarm or signal.setitimercsleZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	e
j
d
�dd��Ze	e
j
d�dd��Z�Z
S)�InterruptedRecvTimeoutTestcst���|j�|j�dS)N)r;r4r/rOrv)r3)rBrrr4�s
z InterruptedRecvTimeoutTest.setUpc	OsBz0|�|j�|�t��}|||�WdQRXWd|�d�XdS)Nr)rDrEr�rs)r3rr@rAr�rrr�checkInterruptedRecv�s
z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|�|jjd�dS)Ni)rHr/r�)r3rrr�testInterruptedRecvTimeout�sz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs|�|jjtd��dS)Ni)rHr/�	recv_intorD)r3rrr�testInterruptedRecvIntoTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|�|jjd�dS)Ni)rHr/r�)r3rrr�testInterruptedRecvfromTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs|�|jjtd��dS)Ni)rHr/�
recvfrom_intorD)r3rrr�"testInterruptedRecvfromIntoTimeout�sz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|�|jjd�dS)Ni)rHr/r�)r3rrr�testInterruptedRecvmsgTimeout�sz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrHcCs|�|jjtd�g�dS)Ni)rHr/rHrD)r3rrr�!testInterruptedRecvmsgIntoTimeout�sz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)r6r7r8r4rHrIrKrLrNr�r	rOrPrFrr)rBrrG�s
rGcsteZdZ�fdd�Zdd�Zdd�Ze�dd�d	d
��Ze�dd�dd��Z	e�dd�e
ejd
�dd���Z�Z
S)�InterruptedSendTimeoutTestcspt���|��|_|�|jj�tj|jd�}|�	�|j
��\|_}|�|jj�|�
�|j�|j�dS)N)�target)r;r4r�r�rCrr=ZThread�	doConnect�startr/r�r�r�rOrv)r3Z
cli_threadr�)rBrrr4�s

z InterruptedSendTimeoutTest.setUpcCs|j�|j�dS)N)r�r�r�)r3rrrrS�sz$InterruptedSendTimeoutTest.doConnectc	OsHz6|�t��"}x|�|j�|||�qWWdQRXWd|�d�XdS)Nr)r�rsrDrE)r3rr@rAr�rrr�checkInterruptedSend�sz/InterruptedSendTimeoutTest.checkInterruptedSendr/r�cCs|�|jjd�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rUr�r�)r3rrr�testInterruptedSendTimeout	sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|�|jjd|j�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rUr�r�r�)r3rrr�testInterruptedSendtoTimeout
sz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrcCs|�|jjdg�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)rUr�r)r3rrr�testInterruptedSendmsgTimeoutsz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)r6r7r8r4rSrUrZrequires_mac_verrVrWr�r	rXrFrr)rBrrQ�s	
	
rQc@seZdZdd�Zdd�ZdS)�
TCPCloserTestcCsh|j��\}}|��|j}t�|gggd�\}}}|�||g�|�|�d�d�|��|��dS)Ng�?r\r�)r/r�rr}rr�r�)r3r�r��sdrr�r�rrr�	testCloseszTCPCloserTest.testClosecCs |j�t|jf�t�d�dS)Ng�?)r}r�r�r1r�r�)r3rrr�
_testClose+szTCPCloserTest._testCloseN)r6r7r8r[r\rrrrrYs
rYc@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr{cCstj||d�dS)N)r|)r�r<)r3r|rrrr<2szBasicSocketPairTest.__init__cCs\|�|tj�ttd�r*|�|jtj�n|�|jtj�|�|jtj�|�|j	d�dS)Nr�r)
r�r	rr�r�r�r-r�r.r�)r3r)rrr�_check_defaults5s
z#BasicSocketPairTest._check_defaultscCs|�|j�dS)N)r^r})r3rrr�
_testDefaults>sz!BasicSocketPairTest._testDefaultscCs|�|j�dS)N)r^r/)r3rrr�testDefaultsAsz BasicSocketPairTest.testDefaultscCs|j�d�}|�|t�dS)Ni)r/r�r�r�)r3r�rrrrDszBasicSocketPairTest.testRecvcCs|j�t�dS)N)r}r�r�)r3rrrrHszBasicSocketPairTest._testRecvcCs|j�t�dS)N)r/r�r�)r3rrr�testSendKszBasicSocketPairTest.testSendcCs|j�d�}|�|t�dS)Ni)r}r�r�r�)r3r�rrr�	_testSendNszBasicSocketPairTest._testSendN)r{)r6r7r8r<r^r_r`rrrarbrrrrr]0s
	r]c@s�eZdZd$dd�Zdd�Zdd�Zejdd	��Ze�e�Z	e
�ee
d
�d�e�dd
d�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)%�NonBlockingTCPTestsr{cCst��|_tj||d�dS)N)r|)r=ra�eventrzr<)r3r|rrrr<Us
zNonBlockingTCPTests.__init__cCs�|j�d�|�|j���|�|j���tr@|�t|j��|j�d�|�|j��d�|�	|j���tr�|�	t|j��|j�
d�|�|j���tr�|�t|j��|j�
d�|�	|j���|�|j��d�tr�|�	t|j��|j�
d�|�|j���|�|j��d�t�r8|�	t|j��|j�
d�|�	|j���t�rj|�	t|j��t��}y|j��Wnt
k
�r�YnXt��}|�||dkd�dS)NTFgrr/g�?z Error setting non-blocking mode.)r/r�rjr1r��getblockingrr*r�rJrOr�r�r)r3rT�endrrr�testSetBlockingYsFz#NonBlockingTCPTests.testSetBlockingcCsdS)Nr)r3rrr�_testSetBlocking�sz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|�d�|j�d�|�|j��d�|j�|jd�|�|j���dS)Nrzneeds UINT_MAX < ULONG_MAXFgr\)	rr%Z	ULONG_MAXrNr/r�r�r1rj)r3rrrr�testSetBlocking_overflow�s
z,NonBlockingTCPTests.testSetBlocking_overflowr�ztest needs socket.SOCK_NONBLOCKr���cCs�|j��t�tjtjtjB�|_|�|j���|�|j�	�d�t
�|j�|_|j�
�t��}y|j��Wntk
r�YnXt��}|�||dkd�dS)Nrg�?z&Error creating with non-blocking mode.)r/rr	r-r.r�rJrer�r1rr0r1r2r�r�rr�)r3rTrfrrr�testInitNonBlocking�s

z'NonBlockingTCPTests.testInitNonBlockingcCsdS)Nr)r3rrr�_testInitNonBlocking�sz(NonBlockingTCPTests._testInitNonBlockingc	CsH|j�d�z |j��\}}|�tt��}Wd|��|j�d�XdS)Nr/)r/rOr�r�rbr�r)r3r�r��messagerrr�testInheritFlags�sz$NonBlockingTCPTests.testInheritFlagscCs6t�d�|j�t|jf�t�d�|j�t�dS)Ng�������?g�?)r�r�r}r�r�r1r�r�)r3rrr�_testInheritFlags�s

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


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

zNonBlockingTCPTests.testRecvcCs,|j�t|jf�|j��|j�t�dS)N)r}r�r�r1rdrmrtr�)r3rrrr�s
zNonBlockingTCPTests._testRecvN)r{)r6r7r8r<rgrhrr�riZ_testSetBlocking_overflowr�r�rr	�requires_linux_versionrlrmrorprsrtrurvrrrrrrrcSs"
2
rcc@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.
    rzutf-8�strictNrr�r{cCstj||d�dS)N)r|)r�r<)r3r|rrrr<sz FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_t�|�|jj|j	|j
|j|j|j
d�|_dS)NcSsg|]}t���qSr)r=ra)r�r+rrrr�!sz1FileObjectClassTestCase.setUp.<locals>.<listcomp>r�)�encoding�errors�newline)r��evt1�evt2�
serv_finished�cli_finishedr�r4r�r}�	read_moderOrzr{r|�	read_file)r3rrrr4s"
zFileObjectClassTestCase.setUpcCs6|j��|j��|�|jj�d|_t�|�dS)N)rrZr�rr��closedr�r5)r3rrrr5)s


z FileObjectClassTestCase.tearDowncCs0t�|�|jj|j|j|j|j|jd�|_	dS)N)rzr{r|)
r�rrr�r}�
write_moderOrzr{r|�
write_file)r3rrrrr0s
z#FileObjectClassTestCase.clientSetUpcCs6|j��|j��|�|jj�d|_t�|�dS)N)r�rZr�rr�r�r�ru)r3rrrru8s


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

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

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

z%FileObjectClassTestCase.testRealClosecCsdS)Nr)r3rrr�_testRealClose�sz&FileObjectClassTestCase._testRealClose)r{)&r6r7r8rErOrzr{r|r�r�r�r�r�r<r4r5rrrur�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrxsD



rxc@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)NsA. rrsB. )r�r�r�r�r�r})r3r�rrr�testUnbufferedReadline�s


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


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|j�|j�|j��dS)N)r�r�r�r�)r3rrr�_testMakefileClose�sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t�|j�}|j��t�|j�}|�|d|�dS)Nr\)rrr�r�rr�)r3Zrefcount_beforeZrefcount_afterrrr�testMakefileCloseSocketDestroy�s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdS)Nr)r3rrr�_testMakefileCloseSocketDestroy�szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|j�d�|�|j�td��d�|�|j�t|j�d�d�|j	�
�|j�d�|j�t|j�d�}|dkr�t
�d�|j�t|j�d�}td�}|j�|�}|�|d�||d|�}|�||j�|�|j�td��d�|�|j�d�d�dS)NFr/rg�?g�?rr\)r�r�r�r��readintorDrrbr�r}rZr~rmr�r�)r3r�rKr�r�rrr�testSmallReadNonBlocking�s 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|j�d�|j�|j�|j��|j��|j�d�dS)Ng�?g@)	r}rmr�r�r�r�r~rZr)r3rrr�_testSmallReadNonBlocking�s


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|j�d�|jr|�|j�dS)Ng@)r�rm�serv_skippedrN)r3rrr�testWriteNonBlocking�sz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCsvd|_|j�d�dtj}d}|j�|�}|�|d�x8t|�D]&}|j�|�}|dkr\P|�|d�qBWd|_dS)NFrpr/rz$failed to saturate the socket buffer)	r�r�r�rrur�r�rr�)r3ZBIGZLIMITr�r+rrr�_testWriteNonBlocking�s
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)r6r7r8rErOr�r�r�r�r�r�r�r�r�r�rrrrr��s		r�c@seZdZdZdS)�#LineBufferedFileObjectClassTestCaser\N)r6r7r8rOrrrrr�sr�c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�N)r6r7r8rOrrrrr�sr�c@s*eZdZdZdZe�d�ZdZeZ	dZ
dS)�"UnicodeReadFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)rzutf-8r�r�N)r6r7r8rEr�r�r�r�r�r�r|rrrrr�s
r�c@s*eZdZdZdZeZdZe�d�Z	dZ
dS)�#UnicodeWriteFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)rr�zutf-8r�N)r6r7r8rEr�r�r�r�r�r�r|rrrrr�)s
r�c@s0eZdZdZdZe�d�ZdZe�d�Z	dZ
dS)�'UnicodeReadWriteFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)rzutf-8r�r�N)r6r7r8rEr�r�r�r�r�r�r|rrrrr�3s

r�c@seZdZdZdd�ZdS)�NetworkConnectionTestzProve network connection.cCst�t|jf�|_|j|_dS)N)r	�create_connectionr�r1r}r�)r3rrrrr@sz!NetworkConnectionTest.clientSetUpN)r6r7r8rErrrrrrr�=sr�c@seZdZdZdS)�
BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)r6r7r8rErrrrr�Fsr�c@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGst�d��dS)Nz	timed out)r	rv)r3r@rrrr�Msz,NetworkConnectionNoServer.MockSocket.connectN)r6r7r8r�rrrr�
MockSocketLsr�ccs&tj}|jt_z
dVWd|t_XdS)z*Return a socket which times out on connectN)r	r�)r3Z
old_socketrrr�mocked_socket_modulePs

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

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

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

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

z"TestUnixDomain.testUnencodableAddrN)r6r7r8r4r5r�rLr�r�r�r�r�rrrrr�us	r�c@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�dS)N)r|)r�r<)r3r|rrrr<�szBufferIOTest.__init__cCsZt�ddgtt��}|j�|�}|�|tt��|��}|dtt��}|�|t�dS)Nr\r)r]rbr�r�rJr�r�)r3rKr�r�rrr�testRecvIntoArray�szBufferIOTest.testRecvIntoArraycCstt�}|j�|�dS)N)r�r�r�r�)r3rKrrr�_testRecvIntoArray�szBufferIOTest._testRecvIntoArraycCsDtd�}|j�|�}|�|tt��|dtt��}|�|t�dS)Ni)rDr�rJr�rbr�)r3rKr�r�rrr�testRecvIntoBytearray�s
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|j�t|��}|�|tt��|dtt��}|�|t�dS)Ni)rDr�rJr�r�rbr�)r3rKr�r�rrr�testRecvIntoMemoryview�s
z#BufferIOTest.testRecvIntoMemoryviewcCs^t�ddgtt��}|j�|�\}}|�|tt��|��}|dtt��}|�|t�dS)Nr\r)r]rbr�r�rMr�r�)r3rKr�r�r�rrr�testRecvFromIntoArray�sz"BufferIOTest.testRecvFromIntoArraycCstt�}|j�|�dS)N)r�r�r�r�)r3rKrrr�_testRecvFromIntoArray�sz#BufferIOTest._testRecvFromIntoArraycCsHtd�}|j�|�\}}|�|tt��|dtt��}|�|t�dS)Ni)rDr�rMr�rbr�)r3rKr�r�r�rrr�testRecvFromIntoBytearray�s
z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|j�t|��\}}|�|tt��|dtt��}|�|t�dS)Ni)rDr�rMr�r�rbr�)r3rKr�r�r�rrr�testRecvFromIntoMemoryview�s
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|�t|jj|d�dS)NrKi)rDr�r3r�rM)r3rKrrr�testRecvFromIntoSmallBuffer�sz(BufferIOTest.testRecvFromIntoSmallBuffercCs|j�t�dS)N)r�r�r�)r3rrr�_testRecvFromIntoSmallBuffersz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|j�|�|j�|d�dS)Nr)rDr�rM)r3rKrrr�testRecvFromIntoEmptyBuffersz(BufferIOTest.testRecvFromIntoEmptyBufferN)r{)r6r7r8rEr<r�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�rZ_testRecvFromIntoBytearrayrZ_testRecvFromIntoMemoryviewrrrZ_testRecvFromIntoEmptyBufferrrrrr��s$
r�i�����c
Csfttd�sdSytd�}Wntttfk
r4dSX|�"x|D]}|�d�rBdSqBWWdQRXdS)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 TN)rr	r
�FileNotFoundError�IsADirectoryError�PermissionErrorr,)rr�rrr�isTipcAvailables


rz6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZdd�ZdS)�TIPCTestcCs�t�tjtj�}t�tjtj�}|�|j�|�|j�|�tjtjd�tjt	t
tf}|�|�tj
t	t
ttt
d�df}|�t|�|�d�\}}|�|��|�|�|t�dS)Nr\r�ri)r	rr�rCrrMr�r��TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERrL�TIPC_ADDR_NAMErr�r�r�r�r�)r3r�r}�srvaddrZsendaddrr�Zrecvaddrrrr�testRDM)s
zTIPCTest.testRDMN)r6r7r8rrrrrr&src@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�TIPCThreadableTestr{cCstjj||d�t�|�dS)N)r|)r�r�r<rT)r3r|rrrr<AszTIPCThreadableTest.__init__cCs�t�tjtj�|_|�|jj�|j�tjtjd�tj	t
ttf}|j�
|�|j��|��|j��\|_|_|�|jj�dS)Nr\)r	rr.r�rCrrMr�r�r
rrrrLr2r[r�r�r�)r3rrrrr4Es
zTIPCThreadableTest.setUpcCsdt�d�t�tjtj�|_|�|jj�tjt	t
ttt
d�df}|j�
|�|j��|_dS)Ng�������?r�r)r�r�r	rr.r}rCrrrrrrr�r��cliaddr)r3r�rrrrrQs
zTIPCThreadableTest.clientSetUpcCs,|j�d�}|�|t�|�|j|j�dS)Ni)r�r�r�r�rr�)r3r�rrrr�]szTIPCThreadableTest.testStreamcCs|j�t�|j��dS)N)r}r�r�r)r3rrrr�bszTIPCThreadableTest._testStreamN)r{)r6r7r8r<r4rrr�r�rrrrr>s

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

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

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














z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr))r6r7r8r+rrwr-rrrrr(�s
r(rXzWindows specificzneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|��}|��}t�|�}|��\}}|�|�|��|��dS)N)ror	�	fromsharer�rtr)r��qZsdatarnrr�rwrrr�remoteProcessServers

z%TestSocketSharing.remoteProcessServerc	Cs�t��}tj|j|fd�}|��|j�|j�}|j��}|j�	�|�
|�d}|�
|�t�|�}g}x|�
d�}|s|P|�|�qlW|�	�d�|�}|�||�|��dS)N)rRr@s
slapmahfrorZr�)�multiprocessingreZProcessr1rTr/�share�pidr�rrtr	r�r�r�r�r�)	r3r0r�r�r�rnr�m�receivedrrr�	testShare's(






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

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


zTestSocketSharing.testTypesN)
r6r7r8r�r1r7r9r;r<r?rrrrr.s#r.c@seZdZdZdZdZdZdZedd��Z	edd	��Z
d
d�Zdd
�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Z d6d7�Z!d8d9�Z"d:d;�Z#d<S)=�SendfileUsingSendTestz>
    Test the send() implementation of socket.sendfile().
    i�i r�r�c	Cs�dd�}d�dd�t|j�D��}ttjd��(}x ||j|j�D]}|�|�q@WWdQRXttjd��$}|��|_	t
|j	�|jks�t�WdQRXdS)Ncss6||kst�x||kr&|V||8}qW|r2|VdS)N)r�)Ztotal�steprrr�chunks�s
z0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSsg|]}t�tj����qSr)�random�choice�stringZ
ascii_lettersr�)r�r+rrrr��sz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r�r)r�r��BUFSIZEr
rr��FILESIZEr�r�FILEDATArbr�)r�rB�chunkrZcsizerrr�
setUpClass�s

z SendfileUsingSendTest.setUpClasscCst�tj�dS)N)rr�r�)r�rrr�
tearDownClass�sz#SendfileUsingSendTest.tearDownClasscCs6|j�t�|j��\}}|�|j�|�|j�|S)N)r/rOrrr��TIMEOUTrCr)r3r�r�rrr�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs0g}x |�|j�}|sP|�|�qWd�|�S)Nr�)r�rFr�r�)r3r�r6rIrrr�	recv_data�szSendfileUsingSendTest.recv_datacCs
t|d�S)NZ_sendfile_use_send)ri)r3r)rrr�meth_from_sock�sz$SendfileUsingSendTest.meth_from_sockc
Csr|j��}ttjd�}t�|��H}|�8}|�|�}||�}|�||j	�|�|�
�|j	�WdQRXWdQRXdS)Nr)r/r�r
rr�r	r�rOr�rG�tell)r3r��filer)�meth�sentrrr�_testRegularFile�s

z&SendfileUsingSendTest._testRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dS)N)rMrNr�rbrGrH)r3r�r�rrr�testRegularFile�s
z%SendfileUsingSendTest.testRegularFilec
Cs||j��}t�|j�}t�|��R}|�B}|�|�}|�||j	�|�|�
�|j	�|�tj|j
|�WdQRXWdQRXdS)N)r/r��io�BytesIOrHr	r�r�r�rGrPr�r�r�)r3r�rQr)rSrrr�_testNonRegularFile�s

z)SendfileUsingSendTest._testNonRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dS)N)rMrNr�rbrGrH)r3r�r�rrr�testNonRegularFile�s
z(SendfileUsingSendTest.testNonRegularFilec
Cs�|j��}tjd}t|d��|�tj|�WdQRXt|d�}t�|��D}|�4}|�	|�}||�}|�
|d�|�
|��d�WdQRXWdQRXdS)N�2r�rr)r/r�rr�r
rCr�r	r�rOr�rP)r3r��filenamerQr)rRrSrrr�_testEmptyFileSend�s



z(SendfileUsingSendTest._testEmptyFileSendcCs"|��}|�|�}|�|d�dS)Nr�)rMrNr�)r3r�r�rrr�testEmptyFileSend�s
z'SendfileUsingSendTest.testEmptyFileSendc
Csz|j��}ttjd�}t�|��P}|�@}|�|�}||dd�}|�||j	d�|�|�
�|j	�WdQRXWdQRXdS)Nri�)�offset)r/r�r
rr�r	r�rOr�rGrP)r3r�rQr)rRrSrrr�_testOffset�s

z!SendfileUsingSendTest._testOffsetcCsB|��}|�|�}|�t|�|jd�|�||jdd��dS)Ni�)rMrNr�rbrGrH)r3r�r�rrr�
testOffset�s
z SendfileUsingSendTest.testOffsetc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�WdQRXWdQRXdS)Nrr�)rviGKL)rV)
r/r�r
rr�r	r�rOr�rP)r3r�rQr)rVrRrSrrr�
_testCount�s

z SendfileUsingSendTest._testCountcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)NiGKL)rMrNr�rbrH)r3rVr�r�rrr�	testCounts

zSendfileUsingSendTest.testCountc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�WdQRXWdQRXdS)Nrr�)rvr\)rV)
r/r�r
rr�r	r�rOr�rP)r3r�rQr)rVrRrSrrr�_testCountSmall
s

z%SendfileUsingSendTest._testCountSmallcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)Nr\)rMrNr�rbrH)r3rVr�r�rrr�testCountSmalls

z$SendfileUsingSendTest.testCountSmallc
Cs�|j��}ttjd�}tj|dd��R}|�B}d}|�|�}||d|d�}|�||�|�|�	�|d�WdQRXWdQRXdS)Nrr�)rvi��i�)r^rV)
r/r�r
rr�r	r�rOr�rP)r3r�rQr)rVrRrSrrr�_testCountWithOffset s

z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|��}|�|�}|�t|�|�|�||jd|d��dS)Ni��i�)rMrNr�rbrH)r3rVr�r�rrr�testCountWithOffset*s

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

z&SendfileUsingSendTest._testNonBlockingcCs |��}|�d�r|�d�dS)Ni z$was not supposed to receive any data)rMr�r�)r3r�rrr�testNonBlocking<s
z%SendfileUsingSendTest.testNonBlockingc
Csd|j��}ttjd�}tj|dd��6}|�&}|�|�}||�}|�||j	�WdQRXWdQRXdS)Nrr�)rv)
r/r�r
rr�r	r�rOr�rG)r3r�rQr)rRrSrrr�_testWithTimeoutCs

z&SendfileUsingSendTest._testWithTimeoutcCs6|��}|�|�}|�t|�|j�|�||j�dS)N)rMrNr�rbrGrH)r3r�r�rrr�testWithTimeoutKs
z%SendfileUsingSendTest.testWithTimeoutc
Cs`|j��}ttjd��@}t�|��*}|�d�|�|�}|�	tj
||�WdQRXWdQRXdS)Nrg{�G�z�?)r/r�r
rr�r	r�rOrOr�rv)r3r�rQr)rRrrr�_testWithTimeoutTriggeredSendSs


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|��}|�d�dS)Ni�X)rMr�)r3r�rrr�testWithTimeoutTriggeredSend[sz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdS)Nr)r3rrr�_test_errorsasz"SendfileUsingSendTest._test_errorsc
Csttjd��:}tjtjd�� }|�|�}|�td||�WdQRXWdQRXttjd��4}t��� }|�|�}|�td||�WdQRXWdQRXttjd��t}t���`}|�|�}|jtd||dd�|jtd||d	d�|jtd||d
d�|jtd||dd�WdQRXWdQRXdS)Nr)r�r.r�zbinary modezpositive integerrZ)rVg�������?rr)	r
rr�r	rrOr�r3rv)r3rQrrRrrr�test_errorsds*
 

 

z!SendfileUsingSendTest.test_errorsN)$r6r7r8rErGrFrHrLr�rJrKrMrNrOrTrUrXrYr\r]r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrrrrr@{s@		
	
	
	
		r@r�z%os.sendfile() required for this test.c@seZdZdZdd�ZdS)�SendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    cCs
t|d�S)Nr�)ri)r3r)rrrrO�sz(SendfileUsingSendfileTest.meth_from_sockN)r6r7r8rErOrrrrro|srozAF_ALG requiredc@s|eZdZdd�Ze�dd�dd��Zdd�Ze�dd	�d
d��Ze�dd�d
d��Z	e�dd	�dd��Z
dd�Zdd�ZdS)�LinuxKernelCryptoAPIc
Csjt�tjtjd�}y|�||f�Wn<tk
r`}z|��t�t|�||��Wdd}~XYnX|SdS)Nr)	r	r!rrLrrr�ZSkipTestr�)r3�typr�r)rwrrr�
create_alg�s$zLinuxKernelCryptoAPI.create_algr�rTc
Cs�t�d�}|�dd���}|��\}}|�"|�d�|�|�d�|�WdQRX|��\}}|�L|�dtj	�|�dtj	�|�dtj	�|�d	�|�|�d�|�WdQRXWdQRXdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabci�a�b�cr�)
r��fromhexrrr�rtr�r�r�r	�MSG_MORE)r3r��algo�opr^rrr�test_sha256�s


z LinuxKernelCryptoAPI.test_sha256c
Cspt�d�}|�dd��P}|�tjtjd�|��\}}|�"|�d�|�	|�
d�|�WdQRXWdQRXdS)NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79rsz
hmac(sha1)sJefeswhat do ya want for nothing?i)r�rwrrrMr	�SOL_ALG�ALG_SET_KEYr�rtr�r�)r3r�ryrzr^rrr�test_hmac_sha1�s

z#LinuxKernelCryptoAPI.test_hmac_sha1rc

Cs�t�d�}t�d�}d}t�d�}t|�}|�dd���z}|�tjtj|�|��\}}|�6|j	tj
|tjd�|�|�|�
|�|�|�WdQRX|��\}}|�,|j	|gtj|d�|�
|�|�|�WdQRXd	}	|g|	}
|��\}}|�&|j	|
tj
|d�|�||	�}WdQRX|�
t|�||	�|�
|d|�|�|��\}}|�(|j	|gtj|d�|�||	�}WdQRX|�
t|�||	�|�
|||	�WdQRXdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))rz�ivr_)rzri)r�rwrbrrrMr	r|r}r��
sendmsg_afalg�ALG_OP_ENCRYPTrxrtr�r��ALG_OP_DECRYPT)
r3�keyrr�Z
ciphertextZmsglenryrzr^Z
multiplierZlongmsg�encZdecrrr�test_aes_cbc�sD






z!LinuxKernelCryptoAPI.test_aes_cbcr�cCs�t�d�}t�d�}t�d�}t�d�}t�d�}t�d�}t|�}t|�}|�dd���N}	|	�tjtj|�|	�tjtjd|�|	�	�\}
}|
�v|
j
tj||tjd	�|
�
|tj�|
�
|�|
�|t|�|�}|�||||��|�|||d��WdQRX|	�	�\}
}|
�f||}
|
j
|
gtj||d
�|
�|t|�|�}|�||||��|�|||d��WdQRXt�d�j}|	�	�\}
}|
��||}
|
�|
gtjtj|tj�gtjtj|t|��|gtjtj||�gf�|
�t|
�|�}|�||||��|�|||d��WdQRX|	�	�\}
}|
�N|||}
|
j
|
gtj||d
�|
�t|
�|�}|�|||d��WdQRXWdQRXdS)NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))rzr�assoclenr_)rzrr�r)r�rwrbrrrMr	r|r}ZALG_SET_AEAD_AUTHSIZEr�r�r�rxrtr�r�r
�Structr�rZ
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENr�)r3r�rZplainZassocZexpected_ctZexpected_tagZtaglenr�ryrzr^Zresr�Zpack_uint32rrr�test_aead_aes_gcm�s`







   z&LinuxKernelCryptoAPI.test_aead_aes_gcmc
Csn|�dd��X}t�d�}|�tjtj|�|��\}}|� |�d�}|�	t
|�d�WdQRXWdQRXdS)N�rngZdrbg_pr_sha256r)rrr'�urandomrMr	r|r}r�r�r�rb)r3ryZ
extra_seedrzr^Zrnrrr�test_drbg_pr_sha256s

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c
Cs�t�tjtjd�}|��|�t��|��WdQRX|�t��|jdd�WdQRX|�t��|�d�WdQRX|�t��|jtjdd�WdQRX|�t��|jtjdd�WdQRXWdQRXdS)Nr)rzr\)rzr�r)r	r!rr�rvr�r�)r3r)rrr�test_sendmsg_afalg_args&sz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc	Cs�t�tjtjd�}|�|j�|�t��|�d�WdQRX|�t	d��|�d�WdQRX|�t��|�d�WdQRX|�t	d��|�d�WdQRXdS)Nr)Z
tttttttttttttr�z
type too long)Zttttttttttttttr�)r�Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz
name too long)r�Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r	r!rrCrr�rrLr�r3)r3r)rrr�test_length_restriction8sz,LinuxKernelCryptoAPI.test_length_restrictionN)
r6r7r8rrrrwr{r~r�r�r�r�r�rrrrrp�s
)?rp�winzrequires Windowsc@s$eZdZddddddhZdd�Zd	S)
�TestMSWindowsTCPFlagsZ
TCP_MAXSEGZTCP_NODELAYZTCP_FASTOPENZTCP_KEEPCNTZTCP_KEEPIDLEZ
TCP_KEEPINTVLcs6dd�tt�D�}�fdd�|D�}��g|d�dS)NcSsg|]}|�d�r|�qS)ZTCP)r,)r�rrrrr�Zsz<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]}|�jkr|�qSr)�
knownTCPFlags)r�r)r3rrr�[szANew TCP flags were discovered. See bpo-32394 for more information)r�r	r�)r3Zprovided�unknownr)r3r�test_new_tcp_flagsYsz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)r6r7r8r�r�rrrrr�Jsr�cCstttttttttg	}|�	t
ttt
ttttttttttg�|�t�|�t�|�t�|�	ttg�|�	ttg�|�	t t!g�|�t"�|�	t#t$g�|�	t%t&t't(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=g�|�t>�t?�@�}t?jA|�t?jB|�dS)N)Cr�rrYr�r�r�r�r*r��extendrcrxr�r�r�r�r�r�r�r�r�rrr(r�r]r�r�rrr�r�r�r�rpr	r�r�r(r)r*r,r-r/r0r.r2r3r4r6r7r9r;r<r=r>r?rGrQr.r@ror�rZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_main`sr





r��__main__)�r�ZtestrrrVrUr	rr�r�r�rdrr'r]r��weakrefrrqrlr�r
rCr�rE�_threadrjr=r2r?rr�r�r�rrr�r�rrrr r"r$r*ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_VSOCKr�r�r�r,r9r:rGrSrTrzr~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r	rr*r/rGrLrOrPrRrSrTrnrvryr�r�r�r�r�r�r'r(r)r*r+rcr,r-r.r/r0r1r2r3r4r5r6r7r9r:r;r<r=r>r?r@rrGrQrYr]rcrxr�r�r�r�r�r�rbr�r�r�r�r�r�r�r�r+r�r�r�rrrrrrrrr(r�r.r@rorpr,r�r�r6rrrr�<module>s:








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




















	 )5#4$l


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