Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_socket.cpython-38.pyc
U

>��g|��
@s�
ddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZddlZddlZddlZzddlZWnek
r�dZYnXzddlZWnek
�r$dZYnXej Z d�!d�Z"dZ#dZ$e�%�d	kZ&zddl'Z'Wnek
�rpdZ'YnXd
d�Z(dd
�Z)dd�Z*dd�Z+dd�Z,dd�Z-dd�Z.ej/dd��Z0e)�Z1e*�Z2e+�Z3e,�Z4e-�Z5e.�Z6e�d�j7Z8Gdd�dej9�Z:Gdd�dej9�Z;Gdd �d ej9�Z<Gd!d"�d"ej9�Z=Gd#d$�d$ej9�Z>Gd%d&�d&�Z?Gd'd(�d(e:e?�Z@Gd)d*�d*e;e?�ZAGd+d,�d,e=e?�ZBGd-d.�d.e>e?�ZCe�Dedkd/�e�Ee6d0�e�Ee(�d1kd2�Gd3d4�d4ej9e?����ZFGd5d6�d6e@�ZGGd7d8�d8ej9e?�ZHGd9d:�d:ej9�ZIGd;d<�d<eI�ZJGd=d>�d>e<eIe?�ZKGd?d@�d@eJeK�ZLGdAdB�dBeI�ZMGdCdD�dDeM�ZNGdEdF�dFeI�ZOGdGdH�dHeO�ZPGdIdJ�dJeO�ZQGdKdL�dLeO�ZRGdMdN�dNeO�ZSGdOdP�dPeS�ZTdQdR�ZUdSdT�ZVdUdV�ZWGdWdX�dXej9�ZXe�Ee1dY�GdZd[�d[ej9��ZYe�Ee1dY�Gd\d]�d]eB��ZZe�Ee2d^�Gd_d`�d`ej9��Z[e�Ee3da�Gdbdc�dcej9��Z\e�Ee3da�Gddde�deeC��Z]e�Ee5df�Gdgdh�dhej9��Z^e�Dedkd/�e�Ee6d0�Gdidj�djej9���Z_Gdkdl�dleG�Z`Gdmdn�dneA�ZaGdodp�dpe<�ZbGdqdr�dreb�ZcGdsdt�dteb�ZdGdudv�dveb�ZeGdwdx�dxeb�ZfGdydz�dzeb�ZgGd{d|�d|eb�ZhGd}d~�d~eh�ZiGdd��d�ei�ZjGd�d��d�ei�ZkGd�d��d�eb�ZlGd�d��d�el�ZmGd�d��d�el�ZnGd�d��d�ecel�ZoGd�d��d�ej9�ZpGd�d��d�eh�ZqGd�d��d�eh�ZrGd�d��d�edefeKeQ�ZseVejd��Gd�d��d�ekes��ZteVejd��Gd�d��d�enes��ZueVejd��Gd�d��d�eoes��ZvGd�d��d�edefeKeT�ZweVejd��e�Eejxd��eWd�d��Gd�d��d�ekew����ZyeVejd��e�Eejxd��eWd�d��Gd�d��d�enew����ZzeVejd��e�Eejxd��eWd�d��Gd�d��d�eoew����Z{eVejd��e�Eejxd��eVed��eWd�d��Gd�d��d�erew�����Z|eVejd��e�Eejxd��eVed��eWd�d��Gd�d��d�ecerew�����Z}Gd�d��d�egeLeP�Z~eVejd��Gd�d��d�eje~��ZeVejd��Gd�d��d�eneme~��Z�eVejd��Gd�d��d�eoeme~��Z�Gd�d��d�eeegeLeR�Z�eVejd��e�De&d��eWd�d�d��Gd�d��d�eje�����Z�eVejd��e�De&d��eWd�d�d��Gd�d��d�eneme�����Z�eVejd��e�De&d��eWd�d�d��Gd�d��d�eoeme�����Z�Gd�d��d�egeLeN�Z�eVejd��eVedƒGd�dĄd�eje����Z�eVejd��eVedƒGd�dƄd�eneme����Z�eVejd��eVedƒGd�dȄd�eoeme����Z�eVejd�d��eVed�d�dʃGd�d̄d�eqe����Z�eVejd�d��eVed�d�dʃGd�d΄d�eceqe����Z�Gd�dЄd�ej9�Z�eVedуe�Ee�ed҃�	p�e�edӃdԡGd�dքd�e�eQ���Z�eVedуe�Ee�ed҃�
p4e�edӃdԡGd�d؄d�e�e<eJeP���Z�Gd�dڄd�e@�Z�Gd�d܄d�eH�Z�Gd�dބd�e@�Z�Gd�d�d�eG�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�e`�Z�Gd�d�d�ej9�Z�Gd�d�d�e:e?�Z�Gd�d��d�e:e?�Z�Gd�d��d�e:�Z�Gd�d��d�e;�Z�Gd�d��d�ej9�Z�e�Eejd�kd��Gd��d��dej9��Z�e�Ee�edƒ�d�G�d�d��dej9��Z�G�d�d��deG�Z��dZ��dZ��dZ��d	�d
�Z�e�Ee���d�G�d�d
��d
ej9��Z�e�Ee���d�G�d�d��dej9e?��Z�G�d�d��de@�Z�G�d�d��dej9�Z�e�Ee�e�d��d�G�d�d��dej9��Z�e�Ee
j��dk�d�e�Ee�d�G�d�d��de:���Z�G�d�d��de@�Z�e�Ee�e
�d��d �G�d!�d"��d"e���Z�e�Ee4�d#�G�d$�d%��d%ej9��Z�e�Eej���d&��d'�G�d(�d)��d)ej9��Z�G�d*�d+��d+ej9�Z�G�d,�d-��d-ej9�Z��d.�d/�Z�e��d0k�
r�e��dS(1�N)�support)�proxyFuMichael Gilfix was hereሴ
�utf-8gN@���AIXc	CsptdkrdSttd�sdSz*tdd��}t�|tjd�}W5QRXWntk
rZYdSXt�d|�dSdS)N�IOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsock�rbz    �Ir)	�fcntl�hasattr�socket�open�ioctlr�OSError�struct�unpack)�f�r�r�//opt/cppython/lib/python3.8/test/test_socket.py�get_cid2s
rc	Cs@zt�tjtjtj�}Wnttfk
r2YdSX|��dS)z5Check whether CAN sockets are supported on this host.FT)r�PF_CAN�SOCK_RAW�CAN_RAW�AttributeErrorr�close��srrr�_have_socket_can?src	Cs@zt�tjtjtj�}Wnttfk
r2YdSX|��dS)z;Check whether CAN ISOTP sockets are supported on this host.FT)rr�
SOCK_DGRAM�	CAN_ISOTPrrrrrrr�_have_socket_can_isotpIsr!c	Cs>zt�tjtjd�}Wnttfk
r0YdSX|��dS)z5Check whether RDS sockets are supported on this host.rFT)r�PF_RDS�SOCK_SEQPACKETrrrrrrr�_have_socket_rdsSsr$c	Cs>zt�tjtjd�}Wnttfk
r0YdSX|��dS)z8Check whether AF_ALG sockets are supported on this host.rFT)r�AF_ALGr#rrrrrrr�_have_socket_alg]sr&c	Cs>zt�tjtjd�}Wnttfk
r0YdSX|��dS)z<Check whether AF_QIPCRTR sockets are supported on this host.rFT)r�
AF_QIPCRTRrrrrrrrr�_have_socket_qipcrtrgsr(cCst�dk	}|S)z:Check whether AF_VSOCK sockets are supported on this host.N)r)�retrrr�_have_socket_vsockqs
r*c	cs.t��}zt�|�dVW5t�|�XdS�N)r�getdefaulttimeout�setdefaulttimeout)�timeoutZold_timeoutrrr�socket_setdefaulttimeoutws


r/�ic@seZdZdd�Zdd�ZdS)�
SocketTCPTestcCs.t�tjtj�|_t�|j�|_|j��dSr+)r�AF_INET�SOCK_STREAM�servr�	bind_port�port�listen��selfrrr�setUp�szSocketTCPTest.setUpcCs|j��d|_dSr+�r4rr8rrr�tearDown�s
zSocketTCPTest.tearDownN��__name__�
__module__�__qualname__r:r<rrrrr1�sr1c@seZdZdd�Zdd�ZdS)�
SocketUDPTestcCs$t�tjtj�|_t�|j�|_dSr+)rr2rr4rr5r6r8rrrr:�szSocketUDPTest.setUpcCs|j��d|_dSr+r;r8rrrr<�s
zSocketUDPTest.tearDownNr=rrrrrA�srAcs8eZdZdZ�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��|_dSr+)�super�__init__�	threading�RLock�
_cleanup_lock�r9�args�kwargs��	__class__rrrD�sz"ThreadSafeCleanupTestCase.__init__c
s,|j�t�j||�W5QR�SQRXdSr+)rGrC�
addCleanuprHrKrrrM�sz$ThreadSafeCleanupTestCase.addCleanupc
s,|j�t�j||�W5QR�SQRXdSr+)rGrC�
doCleanupsrHrKrrrN�sz$ThreadSafeCleanupTestCase.doCleanups)r>r?r@�__doc__rDrMrN�
__classcell__rrrKrrB�srBc@sHeZdZdZdZdZdZe�e�Z	dZ
e
de�e
�d7Z
dd	�Zd
S)�
SocketCANTestz�To be able to run this test, a `vcan0` CAN interface can be created with
    the following commands:
    # modprobe vcan
    # ip link add dev vcan0 type vcan
    # ip link set up vcan0
    �vcan0�z=IB3x8sz@3I4l2I�x�cCsbt�tjtjtj�|_|�|jj�z|j�|jf�Wn$t	k
r\|�
d|j�YnXdS)N�%network interface `%s` does not exist)rrrrrrMr�bind�	interfacer�skipTestr8rrrr:�s�zSocketCANTest.setUpN)r>r?r@rOrX�bufsize�
can_frame_fmtr�calcsizeZcan_frame_size�bcm_cmd_msg_fmtr:rrrrrQ�s

rQc@seZdZdZdZdd�ZdS)�
SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
    � cCsXt�tjtjd�|_|�|jj�zt�|j�|_Wnt	k
rR|�
d�YnXdS)Nrzunable to bind RDS socket)rr"r#r4rMrrr5r6rrYr8rrrr:�szSocketRDSTest.setUpN)r>r?r@rOrZr:rrrrr^�sr^c@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|_dSr+)r:�_ThreadableTest__setUpr<�_ThreadableTest__tearDown�_setUp�	_tearDownr8rrrrD!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�setr8rrr�serverExplicitReady(sz"ThreadableTest.serverExplicitReadycCs�t��|_|j��t��|_t��|_t��|_t	�
d�|_	d|_|��}|�
d�}||dd�}t|d|�}t�|j|f�|_z&z|��Wnd|_�YnXW5|j��X|j��dS)N�F�.�_T)rZwait_threads_exit�wait_threads�	__enter__rE�Eventre�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadrfra�wait)r9Z
methodnamer0Ztest_methodrrrrc/s,





�zThreadableTest._setUpcCs>|��|j��|j�ddd�|j��r:|j��}|�dSr+)rbroryrk�__exit__rp�qsize�get�r9�excrrrrdJs


zThreadableTest._tearDownc
Cs�|j��zRz|��Wn@tk
rX}z"|j�|�|��WY�W�dSd}~XYnXW5|j��X|j	r||��dSt
|d�s�td��z>z
|�Wn.tk
r�}z|j�|�W5d}~XYnXW5|��XdS)N�__call__z%test_func must be a callable function)reryrnrf�clientSetUp�
BaseExceptionrp�put�clientTearDownrrr�	TypeError)r9Z	test_func�errrrxSs$
 

"zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedErrorr8rrrr�iszThreadableTest.clientSetUpcCs|j��t��dSr+)rorfrv�exitr8rrrr�ls
zThreadableTest.clientTearDownN)r>r?r@rOrDrgrcrdrxr�r�rrrrr`�s%	r`c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcCstj||d�t�|�dS�N)�
methodName�r1rDr`�r9r�rrrrDrszThreadedTCPSocketTest.__init__cCst�tjtj�|_dSr+)rr2r3�clir8rrrr�vsz!ThreadedTCPSocketTest.clientSetUpcCs|j��d|_t�|�dSr+�r�rr`r�r8rrrr�ys
z$ThreadedTCPSocketTest.clientTearDownN)r��r>r?r@rDr�r�rrrrr�ps
r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPSocketTestr�cCstj||d�t�|�dSr�)rArDr`r�rrrrD�szThreadedUDPSocketTest.__init__cCst�tjtj�|_dSr+)rr2rr�r8rrrr��sz!ThreadedUDPSocketTest.clientSetUpcCs|j��d|_t�|�dSr+r�r8rrrr��s
z$ThreadedUDPSocketTest.clientTearDownN)r�r�rrrrr�~s
r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedCANSocketTestr�cCstj||d�t�|�dSr�)rQrDr`r�rrrrD�szThreadedCANSocketTest.__init__cCsDt�tjtjtj�|_z|j�|jf�Wntk
r>YnXdSr+)rrrrr�rWrXrr8rrrr��s
z!ThreadedCANSocketTest.clientSetUpcCs|j��d|_t�|�dSr+r�r8rrrr��s
z$ThreadedCANSocketTest.clientTearDownN)r�r�rrrrr��s
	r�c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedRDSSocketTestr�cCstj||d�t�|�dSr�)r^rDr`r�rrrrD�szThreadedRDSSocketTest.__init__cCsNt�tjtjd�|_z |j�tdf�|j��|_Wntk
rHYnXdS�Nr)	rr"r#r�rW�HOST�getsockname�cli_addrrr8rrrr��sz!ThreadedRDSSocketTest.clientSetUpcCs|j��d|_t�|�dSr+r�r8rrrr��s
z$ThreadedRDSSocketTest.clientTearDownN)r�r�rrrrr��s
r��
need fcntlz%VSOCK sockets required for this test.�z-This test can only be run on a virtual guest.c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�ThreadedVSOCKSocketStreamTestr�cCstjj||d�t�|�dSr���unittest�TestCaserDr`r�rrrrD�sz&ThreadedVSOCKSocketStreamTest.__init__cCsht�tjtj�|_|�|jj�|j�tjtf�|j�	�|�
�|j��\|_|_
|�|jj�dSr+)r�AF_VSOCKr3r4rMrrW�VMADDR_CID_ANY�	VSOCKPORTr7rg�accept�conn�connaddrr8rrrr:�s
z#ThreadedVSOCKSocketStreamTest.setUpcCsDt�d�t�tjtj�|_|�|jj�t�}|j�	|t
f�dS)N皙�����?)�time�sleeprr�r3r�rMrr�connectr�)r9Zcidrrrr��s

z)ThreadedVSOCKSocketStreamTest.clientSetUpcCs|j�d�}|�|t�dS�N�)r��recv�assertEqual�MSG�r9�msgrrr�
testStream�sz(ThreadedVSOCKSocketStreamTest.testStreamcCs|j�t�|j��dSr+�r��sendr�rr8rrr�_testStream�sz)ThreadedVSOCKSocketStreamTest._testStreamN)r��r>r?r@rDr:r�r�r�rrrrr��s

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

    self.cli_conn is a client socket connected to the server.  The
    setUp() method guarantees that it is connected to the server.
    r�cCstj||d�dSr�)r�rDr�rrrrD�szSocketConnectedTest.__init__cCs*t�|�|��|j��\}}||_dSr+)r�r:rgr4r��cli_conn�r9r��addrrrrr:�s
zSocketConnectedTest.setUpcCs|j��d|_t�|�dSr+)r�rr�r<r8rrrr<�s
zSocketConnectedTest.tearDowncCs(t�|�|j�t|jf�|j|_dSr+)r�r�r�r�r�r6�	serv_connr8rrrr��s
zSocketConnectedTest.clientSetUpcCs|j��d|_t�|�dSr+)r�rr�r�r8rrrr��s
z"SocketConnectedTest.clientTearDownN)r�)	r>r?r@rOrDr:r<r�r�rrrrr��s
r�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketPairTestr�cCstjj||d�t�|�dSr�r�r�rrrrD�szSocketPairTest.__init__cCst��\|_|_dSr+)r�
socketpairr4r�r8rrrr:szSocketPairTest.setUpcCs|j��d|_dSr+r;r8rrrr<s
zSocketPairTest.tearDowncCsdSr+rr8rrrr�szSocketPairTest.clientSetUpcCs|j��d|_t�|�dSr+r�r8rrrr�
s
zSocketPairTest.clientTearDownN)r�)r>r?r@rDr:r<r�r�rrrrr��s

r�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�SocketTestBasez�A base class for socket tests.

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

    Creates a socket self.serv and sets self.serv_addr to its address.
    cCs|��|_|��dSr+)�	newSocketr4�
bindServerr8rrrr:s
zSocketTestBase.setUpcCs|�|j�|j��|_dS)z9Bind server socket and set self.serv_addr to its address.N)�bindSockr4r��	serv_addrr8rrrr�#szSocketTestBase.bindServercCs|j��d|_dSr+r;r8rrrr<(s
zSocketTestBase.tearDownN)r>r?r@rOr:r�r<rrrrr�sr�cs eZdZdZ�fdd�Z�ZS)�SocketListeningTestMixinz%Mixin to listen on the server socket.cst���|j��dSr+)rCr:r4r7r8rKrrr:0s
zSocketListeningTestMixin.setUp)r>r?r@rOr:rPrrrKrr�-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�|�dSr+)rCrDr`rHrKrrrD=sz ThreadedSocketTestMixin.__init__cCs|��|_|��dSr+)�newClientSocketr��
bindClientr8rrrr�As
z#ThreadedSocketTestMixin.clientSetUpcCs|��S)z&Return a new socket for use as client.)r�r8rrrr�Esz'ThreadedSocketTestMixin.newClientSocketcCs|�|j�|j��|_dS)z8Bind client socket and set self.cli_addr to its address.N)r�r�r�r�r8rrrr�Isz"ThreadedSocketTestMixin.bindClientcCs|j��d|_t�|�dSr+r�r8rrrr�Ns
z&ThreadedSocketTestMixin.clientTearDown)
r>r?r@rOrDr�r�r�r�rPrrrKrr�5s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��\}}||_dSr+)rCr:rgr4r�r�r�rKrrr:]s
zConnectedStreamTestMixin.setUpcs|j��d|_t���dSr+)r�rrCr<r8rKrrr<es
z!ConnectedStreamTestMixin.tearDowncs$t���|j�|j�|j|_dSr+)rCr�r�r�r�r�r8rKrrr�js
z$ConnectedStreamTestMixin.clientSetUpcs8z|j��d|_Wntk
r(YnXt���dSr+)r�rrrCr�r8rKrrr�os

z'ConnectedStreamTestMixin.clientTearDown)	r>r?r@rOr:r<r�r�rPrrrKrr�Ts
r�cs(eZdZdZ�fdd�Zdd�Z�ZS)�UnixSocketTestBasez(Base class for Unix-domain socket tests.cs(t��|_|�tj|j�t���dSr+)�tempfile�mkdtemp�dir_pathrM�os�rmdirrCr:r8rKrrr:�s
zUnixSocketTestBase.setUpcCs,tj|jd�}t�||�|�tj|�dS)N)�dir)r��mktempr�r�bind_unix_socketrM�unlink)r9�sock�pathrrrr��szUnixSocketTestBase.bindSock)r>r?r@rOr:r�rPrrrKrr�xsr�c@seZdZdZdd�ZdS)�UnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.cCst�tjtj�Sr+)r�AF_UNIXr3r8rrrr��szUnixStreamBase.newSocketN�r>r?r@rOr�rrrrr��sr�cs,eZdZdZeZ�fdd�Zdd�Z�ZS)�InetTestBasez!Base class for IPv4 socket tests.cst���|jd|_dS�Nrh)rCr:r�r6r8rKrrr:�s
zInetTestBase.setUpcCstj||jd�dS)N��host)rr5r��r9r�rrrr��szInetTestBase.bindSock)	r>r?r@rOr�r�r:r�rPrrrKrr��sr�c@seZdZdZdd�ZdS)�TCPTestBasez#Base class for TCP-over-IPv4 tests.cCst�tjtj�Sr+)rr2r3r8rrrr��szTCPTestBase.newSocketNr�rrrrr��sr�c@seZdZdZdd�ZdS)�UDPTestBasez#Base class for UDP-over-IPv4 tests.cCst�tjtj�Sr+)rr2rr8rrrr��szUDPTestBase.newSocketNr�rrrrr��sr�c@seZdZdZdd�ZdS)�SCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.cCst�tjtjtj�Sr+)rr2r3�IPPROTO_SCTPr8rrrr��s�zSCTPStreamBase.newSocketNr�rrrrr��sr�c@seZdZdZejZdS)�
Inet6TestBasez!Base class for IPv6 socket tests.N)r>r?r@rOr�HOSTv6r�rrrrr��sr�c@seZdZdZdd�ZdS)�UDP6TestBasez#Base class for UDP-over-IPv6 tests.cCst�tjtj�Sr+)r�AF_INET6rr8rrrr��szUDP6TestBase.newSocketNr�rrrrr��sr�cs*dd����fdd�}dd�}|r&|S|S)aSkip decorated test if condition is true, add client_skip decorator.

    If the decorated object is not a class, sets its attribute
    "client_skip" to a decorator which will return an empty function
    if the test is to be skipped, or the original function if it is
    not.  This can be used to avoid running the client part of a
    skipped test when using ThreadableTest.
    c_sdSr+r�rIrJrrr�client_pass�sz%skipWithClientIf.<locals>.client_passcs*t���|�}t|t�s&�fdd�|_|S)Ncs�Sr+r�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|Sr+rr�rrrr��r�z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�rr��r�rrr�	noskipdec�s
z#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�rr�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�namer�rr�
<listcomp>�s
z requireAttrs.<locals>.<listcomp>�don't have �, css|]
}|VqdSr+rr�rrr�	<genexpr>�szrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingrr�r�requireAttrs�s
�r�c
Gs�d}dd�|D�}|r0dd�dd�|D��}nPdd�|D�}ztj|�}Wn*tk
rv}zt|�}W5d}~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��s

�z!requireSocket.<locals>.<listcomp>r�r�css|]
}|VqdSr+rr�rrrr��sz requireSocket.<locals>.<genexpr>cSs$g|]}t|t�rtt|�n|�qSr)r�r�rurr�rrrr��s�zcan't create socket({0}): {1}css|]}t|�VqdSr+)r��r��orrrr��s)r�rrr�rr��format)rI�errr�Zcallargsrr�rrr�
requireSocket�s&���rc@sHeZdZdd�Zdd�Ze�edk	d�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
e�ejdkd�dd��Zdd�Zdd�Zdd�Ze�eed�d�e�eed�d �d!d"���Ze�eed#�d$�d%d&��Ze�eed'�d(�d)d*��Ze�eed+�d,�d-d.��Ze�eed/�d0�d1d2��Zd3d4�Zd5d6�Zejd7d8��Z d9d:�Z!d;d<�Z"e�eed=�d>�d?d@��Z#e�eedA�dB�dCdD��Z$e�eedA�dB�dEdF��Z%e�eedG�dH�dIdJ��Z&e�eedG�dH�dKdL��Z'dMdN�Z(dOdP�Z)dQdR�Z*dSdT�Z+dUdV�Z,dWdX�Z-dYdZ�Z.e�ejdkd�d[d\��Z/e�ejdkd�e�eed]�d^�d_d`���Z0dadb�Z1dcdd�Z2e�e�3de�df�dgdh��Z4didj�Z5dkdl�Z6dmdn�Z7dodp�Z8dqdr�Z9dsdt�Z:dudv�Z;dwdx�Z<dydz�Z=d{d|�Z>d}d~�Z?ejdd���Z@e�ejAd��d�d���ZBe�ejAd��d�d���ZCe�ejAd��e�DejEd�kd��e�DeFd��d�d�����ZGe�ejAd��e�ejEd�kd��d�d����ZHe�ejAd��e�DejEd�kd��e�DeFd��d�d�����ZIe�ejAd��e�ejEd�kd��d�d����ZJd�d��ZKd�d��ZLd�d��ZMe�eed��d��d�d���ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSe�Dejdkd��d�d���ZTd�d��ZUd�d��ZVdS)��GeneralModuleTestscCs<ddl}|�tj|jk�t��}|�|tj�|��dSr�)�_socket�
assertTruer�
SocketType�assertIsInstancer)r9rrrrr�test_SocketType_is_socketobjects
z2GeneralModuleTests.test_SocketType_is_socketobjectc	Cs�t�tjtj�}|��|�d|��t|��|�dtjt|��|�dtjt|��|�dt|��|�dt|��|�d�|�dt|��|�t|�	��t|��W5QRX|�dt|��|�dt|��dS)	Nzfd=%iz	family=%sztype=%szproto=0�raddr��	127.0.0.1r�laddrz[closed])
rr2r3�assertIn�fileno�repr�assertNotInrWr�r��r9rrrr�	test_reprs
"zGeneralModuleTests.test_reprNzneed _socket modulecCsrt�tjtj�}z.d|��|j|j|jf}|�	t
|�|�W5|��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>)rrr2r3rr
�familyr��protor�r)r9r�expectedrrr�test_csocket_reprs�
�z$GeneralModuleTests.test_csocket_reprc	Cslt�tjtj��"}t|�}|�|��|���W5QRXd}z|��Wntk
r\YnX|�d�dS)NzSocket proxy still exists)rr2r3rr�r
�ReferenceError�fail)r9r�prrr�test_weakref#szGeneralModuleTests.test_weakrefc	Csrd}|jt|dd��
t�W5QRX|jt|dd��tj�W5QRX|jt|dd��tj�W5QRXdS)Nz$Error raising socket exception (%s).r�r�z
socket.herrorzsocket.gaierror)�assertRaisesrr�herror�gaierrorr�rrr�testSocketError/sz"GeneralModuleTests.testSocketErrorc	CsFt�tjtj�}|�|j�|�d�|��}|�t��}|�	d|�W5QRX|�
t|j�d�|�t��}|�	d|�W5QRX|�
t|j�d�|�t��}|�	dd�W5QRX|�
dt|j��|�t��}|�	dd|�W5QRX|�
t|j�d�|�t��}|�	dd|�W5QRX|�
t|j�d�|�t��}|�	ddd�W5QRX|�
dt|j��|�t��}|�	dd	|�W5QRX|�
d
t|j��|�t��}|�	ddd�W5QRX|�
d
t|j��|�t��}|�	d�W5QRX|�
dt|j��|�t��}|�	dd|d�W5QRX|�
d
t|j��dS)N)�ru☠z*a bytes-like object is required, not 'str'y@z.a bytes-like object is required, not 'complex'�fooznot NoneTyper�barzan integer is requiredz	(1 given)�z	(4 given))rr2rrMrrWr�rr��sendtor�r��	exceptionr)r9rZsockname�cmrrr�testSendtoErrors9sT
����z#GeneralModuleTests.testSendtoErrorscCs@tjtjrtjtjtjtjtjtjtj	tj
dSr+)rr2�has_ipv6r�r3rr�SOCK_RDMr#�
SOL_SOCKET�SO_REUSEADDRr8rrr�testCrucialConstantsesz'GeneralModuleTests.testCrucialConstantscCstjtjtjrtjdSr+)r�IPPROTO_TCP�IPPROTO_UDPr'�IPPROTO_IPV6r8rrr�testCrucialIpProtoConstantsrsz.GeneralModuleTests.testCrucialIpProtoConstants�nt�Windows specificcCs4tjtjtjtjtjtjtjtjdSr+)	rZIPPROTO_ICLFXBMZ
IPPROTO_STZIPPROTO_CBTZIPPROTO_IGPZIPPROTO_RDPZIPPROTO_PGMZIPPROTO_L2TPr�r8rrr�testWindowsSpecificConstantsxsz/GeneralModuleTests.testWindowsSpecificConstantscCs�t��}zt�|�}Wntk
r4|�d�YnX|�|�d�dkd�zt�|�\}}}Wntk
r~|�d�YnX||g|}t�|�}||kr�|�	d|t
|�f�dS)N�name lookup failurerirzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r�gethostname�
gethostbynamerrYr�find�
gethostbyaddr�getfqdnrr)r9�hostnameZipZhname�aliases�ipaddrsZall_host_namesZfqhnrrr�testHostnameRes�s
z"GeneralModuleTests.testHostnameRescCsLtjddfD]}|�t�|�|�qtjfD]}|�|t�|�d�q,dS)Nz10.0.0.1�255.255.255.255r�)rZHOSTv4r�rr5rr7)r9r�r�rrr�test_host_resolution�sz'GeneralModuleTests.test_host_resolutionc
CsZd}dD]L}|jt|d��t�|�W5QRX|jt|d��t�|�W5QRXqdS)Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r)rrrr5r7)r9Zexplanationr�rrr� test_host_resolution_bad_address�s�z3GeneralModuleTests.test_host_resolution_bad_address�sethostnameztest needs socket.sethostname()r4ztest needs socket.gethostname()c
Cs�t��}zt�d�Wn<tk
rR}z|jtjkr@|�d�n�W5d}~XYnXz.|�t��d�t�d�|�t��d�W5t�|�XdS)N�newztest should be run as rootsbarr!)rr4r@r�errno�EPERMrYr�)r9Zoldhnr�rrr�test_sethostname�s
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�t��}|D]p\}}|�|t�|�|t�|�|d�t�|�}|�|t�|�||�t�|�}|�|t�|�||�qdSr�)	rrEr�intr��
assertGreater�if_nametoindexr��if_indextoname)r9Z
interfaces�indexr�Z_index�_namerrr�testInterfaceNameIndex�s

z)GeneralModuleTests.testInterfaceNameIndexrIz&socket.if_indextoname() not available.c
Cs�|�ttjd�|�ttjd�|�ttjdd�|�ttjd�ttd�r�tt���}|D]8}|d}||kr^|�ttf��t�|�W5QRXq^dD]0}||kr�|�ttf��t�|�W5QRXq�dS)	Nr���r����	_DEADBEEFrE�)���l����)	rrrrI�
OverflowErrorr�r�dictrE)r9�indicesrJZindex2rrr�testInvalidInterfaceIndexToName�s
z2GeneralModuleTests.testInvalidInterfaceIndexToNamerHz&socket.if_nametoindex() not available.cCs$|�ttjd�|�ttjd�dS)NrrO)rr�rrHrr8rrr�testInvalidInterfaceNameToIndex�sz2GeneralModuleTests.testInvalidInterfaceNameToIndex�getrefcountztest needs sys.getrefcount()cCsLzt�t�}t�td�Wn,tk
rFt�t�|krB|�d�YnXdS)Nrz$socket.getnameinfo loses a reference)�sysrWr>r�getnameinfor�r)r9�origrrr�testRefCountGetNameInfo�s
z*GeneralModuleTests.testRefCountGetNameInfocCs*zt�dd�Wntk
r$YnXdS)N)rTrrrr)rrYrr8rrr�testInterpreterCrash�sz'GeneralModuleTests.testInterpreterCrashc	Cs�tjdtjdtjdtjdi}|��D]d\}}d|>d}dD]$}|�||@||||@��|@�q<||�}|�||@|�|�t|d�q$dS)N� �rh)rrh�i��r�igE#i2Tvl)	r�htonl�ntohl�htons�ntohs�itemsr�rrR)r9Zsizes�func�size�maskr0Zswappedrrr�testNtoH�s�"zGeneralModuleTests.testNtoHcCsddl}ddddg}|dg}ddddd	>g}||jd|jdg}d
|jg}|D]}t�|�t�|�qT|D]}t�|�t�|�qr|D]$}|�t	tj|�|�t	tj|�q�|D]$}|�t	tj|�|�t	tj|�q�|D]$}|�
ttj|�|�
ttj|�q�dS)Nrrhr�r_rQrM���rPrN�)�	_testcapiZINT_MIN�INT_MAXrrcrbrar`rrR�assertWarns�DeprecationWarning)r9rkZ
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}|D]0}zt�|d�}Wq`Wq*tk
rXYq*Xq*t�ttd�rvt��dkr�t�|�}|||�zt�|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)ZechorsrtZtcp�getandroidapilevel�ZudprMrj)r�rX�platform�
startswithr�
getservbynamerrrurZ
is_android�
getservbyportrrR)r9�eqZservicesZservicer6Zport2Zudpportrrr�
testGetServBy&s<�


�




z GeneralModuleTests.testGetServByc
Cs�|�t��d�t���}|�|��d�W5QRXtd��x|�t��d�t���}|�|��d�W5QRXt�d�|�t��d�t���}|�|��d�W5QRXW5QRX|�ttjd�|�ttjd�dS)N�
rMZspam)	r�rr,�
gettimeoutr/r-r�
ValueErrorr�)r9rr�rrr�testDefaultTimeoutRs




$z%GeneralModuleTests.testDefaultTimeout�	inet_atonztest needs socket.inet_aton()cCs(|�dt�d��|�dt�d��dS)N��0.0.0.0�����r=)r�rr�r8rrr�testIPv4_inet_aton_fourbytesksz/GeneralModuleTests.testIPv4_inet_aton_fourbytes�	inet_ptonztest needs socket.inet_pton()cs*ddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
����d|d��ts�||d�||d�||d�||d�||d���d|d����d|d	����d
|d����d|d��||d�||d�||d�||d�||d�dS)Nr)r�r�r2cs
��|�Sr+r��a)r2r�rrr�wr�z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>cs��ttf||�Sr+�rrr�rer�r8rrr�ys�r�r�s��z255.0.255.0s����z170.170.170.170��1.2.3.4r�r=z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5�::1)rr�r�r2r�r�r9r�g�
assertInvalidr)r2r�r9r�testIPv4toStringss.








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

�����z#GeneralModuleTests.testIPv6toString�	inet_ntopztest needs socket.inet_ntop()csddlm}m�m���fdd�}�fdd�}��d|d����d|d	����d
|d����d|d
��||d�||d�||d���d|td	�����d|d����d|d	����d
|d��||d�||d�||d���d|td	���dS)Nr)�	inet_ntoar�r2cs
��|�Sr+rr�)r2r�rrr��r�z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs��ttf||�Sr+r�r�r8rrr��s�z1.0.1.0sz
170.85.170.85s�U�Ur=r�r�r�ssr�)rr�r�r2r��	bytearrayr�r)r2r�r9r�testStringToIPv4�s$





z#GeneralModuleTests.testStringToIPv4c
sz&ddlm�m�m}|s$��d�Wntk
rD��d�YnXtjdkr�z��d�Wn6tk
r�}z|j	dkr���d�W5d}~XYnX��fd	d
����fdd
�}��
d�d����
d
�d����
d�d����
d
�td���|d�|d�|d�dS)Nr)r�r�r'r�r�r�r�r�r�cs
��|�Sr+rr�)r�r�rrr��r�z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs��ttf�|�Sr+r�r�r�rrr�s�r�r�sz!aef:b01:506:1001:ffff:9997:55:170s
�����Upsss)rr�r�r'rYr�rXrwrr�r�r�r�r)r�rr�r9r�testStringToIPv6�s0

�z#GeneralModuleTests.testStringToIPv6cCs�t��}t�tjtj�}|�|j�|�d|f�|��}zt�	t�
��}Wntk
rj|�d�YnX|�
|dd|fd|d�|�|d|�dS)Nr�r3rz
%s invalidrh)r�find_unused_portrr2r3rMrrWr�r5r4rrYrr�)r9r6r�r�Z
my_ip_addrrrr�testSockNameszGeneralModuleTests.testSockNamecCs@t�tjtj�}|�|j�|�tjtj�}|�|dkd�dS)Nrzinitial mode is reuse)	rr2r3rMr�
getsockoptr)r*�assertFalse�r9r�Zreuserrr�testGetSockOpt$sz!GeneralModuleTests.testGetSockOptcCsRt�tjtj�}|�|j�|�tjtjd�|�tjtj�}|�	|dkd�dS)Nrhrzfailed to set reuse mode)
rr2r3rMr�
setsockoptr)r*r�r�r�rrr�testSetSockOpt,s
z!GeneralModuleTests.testSetSockOptc	Cs:t�tjtj��}|�d�W5QRX|�t|jd�dS)Nrh�spam)rr2r3�
settimeoutrrr�r�rrr�testSendAfterClose4sz%GeneralModuleTests.testSendAfterClosec
Cs�t��}|�tjdf�tj|��d���z|��Wn8tk
rp}z|�|jtjtj	f�W5d}~XYnX|�
d�dS)Nr�r
z#close() should raise EBADF/ENOTSOCK)rrW�
_LOCALHOSTr
rrrrB�EBADF�ENOTSOCKr)r9r�rrrr�testCloseException:s(z%GeneralModuleTests.testCloseExceptionc	Csvt�tjtj��\}|�|jtj�ttd�rJ|�|jtjtjBtjf�n|�|jtj�|�|j	d�W5QRXdS)N�SOCK_CLOEXECr)
rr2r3r�rrrr�r�rr�rrr�testNewAttributesFs

��z$GeneralModuleTests.testNewAttributescCs�t��}|�|j�t��}|d}|d}|�t|jt|f�|�t|jt|f�t	�
�D]\}t��}z|�t|f�Wn8tk
r�}z|jtj
ks�|dkr��W5d}~XYq\Xq�q\dS)Nrj�)rrMrrr�rrRrWr��	itertools�countrrBZ
EADDRINUSE)r9r�r6Zbig_portZneg_portr0r�rrr�test_getsockaddrargSsz&GeneralModuleTests.test_getsockaddrargcCs�|�ttjd��|�ttd��|�ttd��|�ttd��|�ttd��t��}|�|j�|�t|jdd�|�tjd�dS)NrZ
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFF�SIO_KEEPALIVE_VALSrM)rh�dr�)	rrrrMrrrrr�rrrr�test_sock_ioctlgsz"GeneralModuleTests.test_sock_ioctl�SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc
Cs|t��}|�|j�z|�tjd�Wn<tk
rb}zd}|j|krP|�d��W5d}~XYnX|�t	|jtjd�dS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
rrMrrr�rr�rYrr�)r9rr~Z
WSAEOPNOTSUPPrrr�test_sio_loopback_fast_pathss

z.GeneralModuleTests.test_sio_loopback_fast_pathc

Cs@zt�dd�Wn<tjk
rL}z|jtjkr:|�d��W5d}~XYnXt�td�D]}|�t|�d�qZt�dd�t�dd�t�dd�t	j
r�t�dd�ttd�r�t�
�dkr�t�td	�t�td�t�td�t�tdtjtj�}|D]J\}}}}}|�|tj�|�t|�d
�|�|tj�|�t|�d�q�t�tddtj�}|D]\}}}}}|�|tj��qZt�tdddtj�t�tddddtj�t�ddtjtjdtj�t�td�}tjtdd
�}	|�||	�t�tdtj�}tjtdtjd�}	|�||	�t�tddtj�}tjtdtjd�}	|�||	�t�tdddtj�}tjtdtjd�}	|�||	�t�tddddtj�}tjtdtjd�}	|�||	�t�ddtjtjdtj�}tjddtjtjdtjd�}	|�||	�|�ttjdd�ttd��r<zt�dddddtj�Wntjk
�r:YnXdS)N�	localhost�Pzbuggy libc versionr�r
r�rurvZhttp�AddressFamily.AF_INET�SocketKind.SOCK_STREAMr)r�r6�r�r�)r)�flags)r�r6rr�rr�u��AI_NUMERICSERV)r�getaddrinforrB�EAI_SERVICErYr�r��lenr�IPV6_ENABLEDrrXrur2r3r��SOL_TCP�
AI_PASSIVE�	AF_UNSPECr�UnicodeEncodeErrorr�)
r9r�infoZinfosrr�rj�socktyper��brrr�testGetaddrinfo�s�


�����z"GeneralModuleTests.testGetaddrinfocCs|�ttjdd�dS)N)zmail.python.orgrr)rrrrYr8rrr�test_getnameinfo�sz#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledc	CsPt�d��t�d�W5QRXd}t�|�t�|�t�|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetrr5�gethostbyname_exr�r�r3)r9rtrrr�	test_idna�s

zGeneralModuleTests.test_idnac
s�ttd�rttd�s��d��fdd�}�fdd�}t��\}}t�tj|�}zv|r`|�d	���	t
�� t�d
�|�dtj
�W5QRX|r�t�tj|�t�d
���	tj|jdtj
�W5t�d�t�tj|�|��|��XdS)N�alarmr�z9signal.alarm and socket.socketpair required for this testcs��ttjd�dSr��rr�math�acosh�rIr8rr�
ok_handler�sz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs��ttjd�dddS�Nrrhr�r�r8rr�raising_handler�szEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerrg�?rh�x)r�signalrrYr��SIGALRMr�rr�r�ZeroDivisionError�sendallr�
SOCK_MAX_SIZEr.)r9Zwith_timeoutr�r��cr�	old_alarmrr8r�check_sendall_interrupted�s,



�
z,GeneralModuleTests.check_sendall_interruptedcCs|�d�dS�NF�r�r8rrr�test_sendall_interruptedsz+GeneralModuleTests.test_sendall_interruptedcCs|�d�dS)NTr�r8rrr�%test_sendall_interrupted_with_timeoutsz8GeneralModuleTests.test_sendall_interrupted_with_timeoutc	Cs�t�tjtj�}t|�}|�t��}d}t��W5QRX|�|t	|j
jd��t�tjtj�}|�d�}t|�}d}t��|�t��d}t��W5QRXdS)Nrr)
rr2r3rrm�ResourceWarningr�
gc_collectrr��warningrI�makefile)r9r�rr%rrrr�test_dealloc_warns
z$GeneralModuleTests.test_dealloc_warnc	CsBt�tjtj��(}|�d�}|��|�t|�d�W5QRXdS)Nrz<_io.BufferedReader name=-1>)rr2r3r�rr�r�r9r��fprrr�test_name_closed_socketios
z,GeneralModuleTests.test_name_closed_socketioc	Cs�t���p}|jddd�}|�|���|�|���|�|���|��|�t	|j�|�t	|j�|�t	|j�W5QRXdS)Nrr)�	buffering)
rr�r�readabler��writable�seekablerrrr�rrr�test_unusable_closed_socketio"s
z0GeneralModuleTests.test_unusable_closed_socketiocCs�t��}z@|�tdf�t�|���|�t��|�d�W5QRXW5|�t��|��W5QRXX|�t��t�d�W5QRX|�t��t�d�W5QRXdS)NrrhrM)	rrrrrWr�r
r7r�r�rrr�test_socket_close-sz$GeneralModuleTests.test_socket_closecCs^dD]T}|j|d��>t���*}|�|��}|�|j|�W5QRXW5QRXW5QRXqdS)N)rr�rw�w�wb��mode)�subTestrr�r�r�)r9r�r�r�rrr�test_makefile_mode=s

z%GeneralModuleTests.test_makefile_modecCs\dD]R}|j|d��<t���(}|�td��|�|�W5QRXW5QRXW5QRXqdS)N)�rtrT�+r�r�zinvalid mode)r�r�assertRaisesRegexrr�)r9r�r�rrr�test_makefile_invalid_modeDs

z-GeneralModuleTests.test_makefile_invalid_modec	Cs�t��}|�,ttjd�D]}|�ttj||�qW5QRXttjd�D]H}t�t�tj|��}|�	|tj�t�t�tj
|��}|�	|tj
�qLdSr�)r�range�pickle�HIGHEST_PROTOCOLrr��dumps�loadsr2r�r3)r9r��protocolrr�rrr�test_pickleKszGeneralModuleTests.test_picklec
CstdD]8}t�tjtj��}|�tdf�|�|�W5QRXqt�tjtj��}|�tdf�|��W5QRXdS)N)rrMr)rr2r3rWr�r7)r9�backlog�srvrrr�test_listen_backlogVsz&GeneralModuleTests.test_listen_backlogc	CsLddl}t�tjtj��*}|�tdf�|�t|j|j	d�W5QRXdSr�)
rkrr2r3rWr�rrRr7rl)r9rkrrrr�test_listen_backlog_overflow`sz/GeneralModuleTests.test_listen_backlog_overflow�IPv6 required for this test.c	CsR|�ttjtjddfd�t�tjtj��}|�t|jtjddf�W5QRXdS)NrrQi����)	rrRrrYrr�r�r3rWrrrr�
test_flowinfohs

�z GeneralModuleTests.test_flowinfocCs0t�ddtjtjtj�\�^}}|�|d�dS)N�ff02::1de:c0:face:8Dr)�ff02::1de:c0:face:8drrr)rr�r�rr-r�)r9rj�sockaddrrrr�test_getaddrinfo_ipv6_basicos�z.GeneralModuleTests.test_getaddrinfo_ipv6_basicr�zdoes not work on WindowszSymbolic scope id does not workcCsLt��d\}}t�d|dtjtjtj�\�^}}|�|ddd|f�dS)Nr�ff02::1de:c0:face:8D%rr)rrEr�r�rr-r�)r9�ifindex�test_interfacerjrrrr�&test_getaddrinfo_ipv6_scopeid_symbolicys�z9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicz.Numeric scope id does not work or undocumentedcCsDd}t�dt|�dtjtjtj�\�^}}|�|ddd|f�dS)N�*rrrr)rr�r�r�rr-r�)r9rrjrrrr�%test_getaddrinfo_ipv6_scopeid_numeric�s
�z8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericcCsHt��d\}}ddd|f}t�|tjtjB�}|�|d|df�dS)Nrrr�ff02::1de:c0:face:8d%�1234)rrErY�NI_NUMERICHOST�NI_NUMERICSERVr�)r9rrr�nameinforrr�&test_getnameinfo_ipv6_scopeid_symbolic�sz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symboliccCs@d}ddd|f}t�|tjtjB�}|�|dt|�df�dS)Nrrrrrr)rrYrrr�r�)r9rrrrrr�%test_getnameinfo_ipv6_scopeid_numeric�sz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericc	CsDt�tjtj��*}|�t|j�d�|�t|j�d�W5QRXdS)Nr�r�)rr2r3r�r�rr�rrrr�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�W5QRXdS)N�
SOCK_NONBLOCKrr�rhTF)rurr3r2r�r�r��setblocking)r9r"r�Z	sock_typerrrr� test_socket_consistent_sock_type�s



z3GeneralModuleTests.test_socket_consistent_sock_typec	Cs�t�tjtj�}|��}ttjj���d}tdd�tjj�	�D��d}tj||d|d��4}|�
|j|�|�
|j|�|�
|jddh�W5QRXdS)Nrhcss|]\}}|dkr|VqdS)>r"r�Nr)r�r��kindrrrr��s�zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>rv)rr�rr
r)rr2r3�detach�max�
AddressFamily�__members__�values�
SocketKindrdr�rr�rr)r9r��fdZunknown_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��|�||��W5QRX|�t	��|�|dd��W5QRX|�t
��|�|d��W5QRXW5QRXdS)Nc@seZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dSr+�r,)r9r,rrrrD�szEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jSr+r/r8rrrr
�szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)r>r?r@rDr
rrrr�File�sr0r�rN)rr�r
�curdir�O_RDONLYrr�_GiveupOnSendfile�_sendfile_use_sendfilerRr�)r9r0r�r,rrr�test__sendfile_use_sendfile�s

z.GeneralModuleTests.test__sendfile_use_sendfilecCst|�|j|�|�|j|�|��}tj|d�}|�|j�|��|�|j|�|�|j|�|�|��|�dS�Nr�)r�rr�r
rrMrr&)r9rr�styper,�s2rrr�_test_socket_fileno�sz&GeneralModuleTests._test_socket_filenocCsRt�tjtj�}|�|j�|�tjdf�|�|tjtj�t	td�r�t�tjtj
�}|�|j�|�tjdf�|�|tjtj
�tjr�t�tjtj�}|�|j�|�tj
dddf�|�|tjtj�t	td��rNt��}|�tj|�t�tjtj�}|�|j�z|�tj�|d��Wntk
�r:YnX|�|tjtj�dS)Nrrr�r)rr2r3rMrrWrr�r9rrr�r�r�r�r��shutil�rmtreer�r�r�r��PermissionError)r9rZtmpdirrrr�test_socket_fileno�s4

�z%GeneralModuleTests.test_socket_filenoc	Cs0|�td��tjtjtjdd�W5QRXdS)Nzinteger argument expectedg@E@r��rr�rr2r3r8rrr� test_socket_fileno_rejects_floatsz3GeneralModuleTests.test_socket_fileno_rejects_floatc	Cs0|�td��tjtjtjdd�W5QRXdS)Nzinteger is required�foor�r>r8rrr�&test_socket_fileno_rejects_other_types sz9GeneralModuleTests.test_socket_fileno_rejects_other_typesc	Cs0|�td��tjtjtjdd�W5QRXdS)N�negative file descriptorrMr��rrrr2r3r8rrr�)test_socket_fileno_rejects_invalid_socket$sz<GeneralModuleTests.test_socket_fileno_rejects_invalid_socketzWindows disallows -1 onlyc	Cs0|�td��tjtjtjdd�W5QRXdS)NrBi���r�rCr8rrr�#test_socket_fileno_rejects_negative(sz6GeneralModuleTests.test_socket_fileno_rejects_negativec	Cs�d}|�t��}tjt��d�W5QRX|�|jjtj|f�|�t��}tjtj	tj
t��d�W5QRX|�|jjtj|f�dS)Ni6'r�)rrrrZmake_bad_fdrr$rBr�r2r3)r9ZWSAENOTSOCKr%rrr�$test_socket_fileno_requires_valid_fd-s�z7GeneralModuleTests.test_socket_fileno_requires_valid_fdc
Cs~t���l}|�t��tj|��d�W5QRX|�t��}tjtjtj|��d�W5QRX|�|j	j
t
j�W5QRXdSr6)r��NamedTemporaryFilerrrr
r2r3r�r$rBr�)r9Zafiler%rrr�%test_socket_fileno_requires_socket_fd:s
�z8GeneralModuleTests.test_socket_fileno_requires_socket_fd)Wr>r?r@rrr��
skipUnlessrrrrr&r+r/r�r�r2r<r>r?rrrDrLrUrVrXr[r\rhr�cpython_onlyrpr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�Zis_resource_enabledr�r�r�r�r�r�r�r�r�rr	rr
r�rr�skipIfrwrrrrr r!r$r-r5r9r=r?rArDrErFrHrrrrr�s

,


	�
�
�
�


,�
�
�
>�
�
"

�
N�




	
�

�



rz!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)�BasicCANTestcCstjtjtjdSr+)r�AF_CANrrr8rrrr+Jsz!BasicCANTest.testCrucialConstants�CAN_BCM�&socket.CAN_BCM required for this test.cCs�tjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjtjtjtjtjtjtjtjtjtjdSr+)rrN�CAN_BCM_TX_SETUP�CAN_BCM_TX_DELETE�CAN_BCM_TX_READ�CAN_BCM_TX_SEND�CAN_BCM_RX_SETUP�CAN_BCM_RX_DELETE�CAN_BCM_RX_READ�CAN_BCM_TX_STATUS�CAN_BCM_TX_EXPIRED�CAN_BCM_RX_STATUS�CAN_BCM_RX_TIMEOUT�CAN_BCM_RX_CHANGED�CAN_BCM_SETTIMER�CAN_BCM_STARTTIMER�CAN_BCM_TX_COUNTEVT�CAN_BCM_TX_ANNOUNCE�CAN_BCM_TX_CP_CAN_ID�CAN_BCM_RX_FILTER_ID�CAN_BCM_RX_CHECK_DLC�CAN_BCM_RX_NO_AUTOTIMER�CAN_BCM_RX_ANNOUNCE_RESUME�CAN_BCM_TX_RESET_MULTI_IDX�CAN_BCM_RX_RTR_FRAMEr8rrr�testBCMConstantsOs0zBasicCANTest.testBCMConstantsc	Cs$t�tjtjtj��}W5QRXdSr+�rrrrrrrr�testCreateSocketoszBasicCANTest.testCreateSocketc	Cs$t�tjtjtj��}W5QRXdSr+)rrrrNrrrr�testCreateBCMSocketssz BasicCANTest.testCreateBCMSocketc	CsBt�tjtjtj��$}d}|�|�|�|��|�W5QRXdS)N)r)rrrrrWr�r�)r9r�addressrrr�testBindAnyys
zBasicCANTest.testBindAnyc	Cs6t�tjtjtj��}|�td|jd�W5QRXdS)N�interface name too long)�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rrrrrrrWrrrr�testTooLongInterfaceNames
�z%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c	CsXt�tjtjtj��:}dD].}|�tjtj|�|�||�tjtj��qW5QRXdS)N)rrh)	rrrrr��SOL_CAN_RAWrpr�r�)r9rZloopbackrrr�testLoopback�s��zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c	Cs|d\}}t�d||�}t�tjtjtj��H}|�tjtj|�|�	||�
tjtjd��|�tjtjt|��W5QRXdS)N)�iz=IIrU)r�packrrrrr�rqrsr�r�r�)r9�can_idZcan_maskZ
can_filterrrrr�
testFilter�s�zBasicCANTest.testFilterN)r>r?r@r+r�rIrrrgrirjrlrorrrwrrrrrLGs(�
�
�
�rLc@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
�eed�d�dd��Ze
�eed�d�dd��ZdS)�CANTestr�cCstj||d�dSr�)r�rDr�rrrrD�szCANTest.__init__cCs&t|�}|�dd�}t�|j|||�S)zBuild a CAN frame.rU�)r��ljustrrur[)�clsrv�data�can_dlcrrr�build_can_frame�szCANTest.build_can_framecCs&t�|j|�\}}}|||d|�fS)zDissect a CAN frame.N)rrr[)r{�framervr}r|rrr�dissect_can_frame�szCANTest.dissect_can_framecCs6|j�|j�\}}|�|j|�|�|d|j�dSr�)r�recvfromrZr��cfrX�r9r�r�rrr�
testSendFrame�szCANTest.testSendFramecCs |�dd�|_|j�|j�dS)Nrs�r~r�r�r�r8rrr�_testSendFrame�szCANTest._testSendFramecCs$|j�|j�\}}|�|j|�dSr+)rr�rZr�r�r�rrr�testSendMaxFrame�szCANTest.testSendMaxFramecCs |�dd�|_|j�|j�dS)Nrsr�r8rrr�_testSendMaxFrame�szCANTest._testSendMaxFramecCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr+)rr�rZr��cf1�cf2r�rrr�testSendMultiFrames�szCANTest.testSendMultiFramescCs<|�dd�|_|j�|j�|�dd�|_|j�|j�dS)N�sD3"�s�"3)r~r�r�r�r�r8rrr�_testSendMultiFrames�szCANTest._testSendMultiFramesrNrOcCsP|j�|j�\}}|�|j|�|�|�\}}}|�|j|�|�|j|�dSr+)r�r�rZr�r�r�rvr|)r9r�r�rvr}r|rrr�_testBCM�s
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)	N�#����ri"rhr^)rrrrNrMrr�rXrv�bytesr|r~r�rSr��AssertionErrorrrur]r�r�)r9ZbcmZopcoder�r�Z
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr�testBCM�s6�

zCANTest.testBCMN)r�)r>r?r@rD�classmethodr~r�r�r�r�r�r�r�r�rIrrr�r�rrrrrx�s&


�
�rxz!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)NrR)rCrDrXrHrKrrrD�szISOTPTest.__init__cCstjtjtjtjdSr+)rrMrr rr8rrrr+�szISOTPTest.testCrucialConstantsc	Cs$t�tjtjtj��}W5QRXdSr+rhrrrrriszISOTPTest.testCreateSocketr z(socket.CAN_ISOTP required for this test.c	Cs$t�tjtjtj��}W5QRXdSr+)rrrr rrrr�testCreateISOTPSocketszISOTPTest.testCreateISOTPSocketc
CsFt�tjtjtj��(}|�td��|�d�W5QRXW5QRXdS)Nrm)rnrhr�)rrrr rrrWrrrrro
sz"ISOTPTest.testTooLongInterfaceNamec
Cs�zJt�tjtjtj��,}|jddf}|�|�|�|��|�W5QRXWnBtk
r�}z$|j	t	j
krz|�d|j�n�W5d}~XYnXdS)Nr�iVrV)rrrr rXrWr�r�rrBZENODEVrY)r9rr�r�rrr�testBinds
�zISOTPTest.testBind)r>r?r@rDr+rir�rIrrr�ror�rPrrrKrr��s�
r�z#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdSr+)r�AF_RDSr"r8rrrr+$sz!BasicRDSTest.testCrucialConstantsc	Cs"t�tjtjd��}W5QRXdSr�)rr"r#rrrrri(szBasicRDSTest.testCreateSocketc	CsJd}t�tjtjd��*}|�tjtj|�|�tjtj|�W5QRXdS)Ni@r)rr"r#r�r)�	SO_RCVBUF�	SO_SNDBUF)r9rZrrrr�testSocketBufferSize,sz!BasicRDSTest.testSocketBufferSizeN)r>r?r@r+rir�rrrrr�!sr�cs�eZdZddd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	e
j
d�dd��Ze	e
j
d�dd��Zdd�Z
dd�Zdd�Zdd�Z�ZS)�RDSTestr�cCstj||d�dSr�)r�rDr�rrrrD6szRDSTest.__init__cst���t��|_dSr+)rCr:rErmZevtr8rKrrr:9s
z
RDSTest.setUpcCs2|j�|j�\}}|�|j|�|�|j|�dSr+)r4r�rZr�r|r��r9r|r�rrr�testSendAndRecv=szRDSTest.testSendAndRecvcCs"d|_|j�|jdt|jf�dS�Nr�r�r|r�r#r�r6r8rrr�_testSendAndRecvBszRDSTest._testSendAndRecvcCsH|j�|jtj�\}}|�|j|�|j�|j�\}}|�|j|�dSr+)r4r�rZr�MSG_PEEKr�r|r�rrr�testPeekFszRDSTest.testPeekcCs"d|_|j�|jdt|jf�dSr�r�r8rrr�	_testPeekLszRDSTest._testPeek�recvmsgcCs(|j�|j�\}}}}|�|j|�dSr+)r4r�rZr�r|)r9r|�ancdataZ	msg_flagsr�rrr�testSendAndRecvMsgPszRDSTest.testSendAndRecvMsg�sendmsgcCs&d|_|j�|jgddt|jf�dS)Ns<hello hello hello hello hello hello hello hello hello hello rr)r|r�r�r�r6r8rrr�_testSendAndRecvMsgUszRDSTest._testSendAndRecvMsgcCsD|j�|j�\}}|�|j|�|j�|j�\}}|�|j|�dSr+)r4r�rZr��data1�data2r�rrr�testSendAndRecvMultiZszRDSTest.testSendAndRecvMulticCs@d|_|j�|jdt|jf�d|_|j�|jdt|jf�dS)Nsbaconrsegg)r�r�r#r�r6r�r8rrr�_testSendAndRecvMultiaszRDSTest._testSendAndRecvMulticCsLt�|jgggd�\}}}|�|j|�|j�|j�\}}|�|j|�dS)N�@)�selectr4rr�rZr�r|)r9rr�rTr|r�rrr�
testSelecthszRDSTest.testSelectcCs"d|_|j�|jdt|jf�dS)Nsselectrr�r8rrr�_testSelectnszRDSTest._testSelect)r�)r>r?r@rDr:r�r�r�r�r�rr�r�r�r�r�r�rPrrrKrr�3s




r�z'QIPCRTR sockets required for this test.c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�BasicQIPCRTRTestcCs
tjdSr+)rr'r8rrrr+vsz%BasicQIPCRTRTest.testCrucialConstantsc	Cs t�tjtj��}W5QRXdSr+)rr'rrrrrriysz!BasicQIPCRTRTest.testCreateSocketc	Cs4t�tjtj��}|�|��dd�W5QRXdS�Nrhr)rr'rr�r�rrrr�testUnbound}szBasicQIPCRTRTest.testUnboundc	CsJt�tjtj��0}tj||��dd�|�|��dd�W5QRXdS)Nrr�rh)rr'rrr5r��assertNotEqualrrrr�testBindSock�szBasicQIPCRTRTest.testBindSockc	Cs4t�tjtj��}|jttj|dd�W5QRXdS)Nrir�)rr'rrrrr5rrrr�testInvalidBindSock�sz$BasicQIPCRTRTest.testInvalidBindSockc	Cs>t�tjtj��$}|�d�|�|��dd�W5QRXdS)N)�{r�rhr)rr'rr�r�r�rrrr�testAutoBindSock�s
z!BasicQIPCRTRTest.testAutoBindSockN)	r>r?r@r+rir�r�r�r�rrrrr�rsr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�BasicVSOCKTestcCs
tjdSr+)rr�r8rrrr+�sz#BasicVSOCKTest.testCrucialConstantscCs4tjtjtjtjtjtjtjtjdSr+)	r�SO_VM_SOCKETS_BUFFER_SIZE�SO_VM_SOCKETS_BUFFER_MIN_SIZE�SO_VM_SOCKETS_BUFFER_MAX_SIZEr��VMADDR_PORT_ANY�VMADDR_CID_HOST�VM_SOCKETS_INVALID_VERSIONrr8rrr�testVSOCKConstants�sz!BasicVSOCKTest.testVSOCKConstantsc	Cs t�tjtj��}W5QRXdSr+)rr�r3rrrrri�szBasicVSOCKTest.testCreateSocketc	Cs�t�tjtj���}|�tjtj�}|�tjtj�}|�tjtj�}|�tjtj|d�|�tjtj|d�|�tjtj|d�|�|d|�tjtj��|�|d|�tjtj��|�|d|�tjtj��W5QRXdS�Nr�)	rr�r3r�r�r�r�r�r�)r9rZorig_maxrZZorig_minrrrr��sJ������
��
��
��z#BasicVSOCKTest.testSocketBufferSizeN)r>r?r@r+r�rir�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�dSr��r�rDr�rrrrD�szBasicTCPTest.__init__cCs|j�d�}|�|t�dSr�)r�r�r�r�r�rrr�testRecv�szBasicTCPTest.testRecvcCs|j�t�dSr+�r�r�r�r8rrr�	_testRecv�szBasicTCPTest._testRecvcCs8|j�tt�d�}|j�d�}||}|�|t�dS�N�r�)r�r�r�r�r�)r9�seg1�seg2r�rrr�testOverFlowRecv�szBasicTCPTest.testOverFlowRecvcCs|j�t�dSr+r�r8rrr�_testOverFlowRecv�szBasicTCPTest._testOverFlowRecvcCs |j�d�\}}|�|t�dSr�)r�r�r�r��r9r�r�rrr�testRecvFrom�szBasicTCPTest.testRecvFromcCs|j�t�dSr+r�r8rrr�
_testRecvFrom�szBasicTCPTest._testRecvFromcCs@|j�tt�d�\}}|j�d�\}}||}|�|t�dSr�)r�r�r�r�r�)r9r�r�r�r�rrr�testOverFlowRecvFrom�sz!BasicTCPTest.testOverFlowRecvFromcCs|j�t�dSr+r�r8rrr�_testOverFlowRecvFrom�sz"BasicTCPTest._testOverFlowRecvFromcCs0d}|j�d�}|sq ||7}q|�|d�dS)Nr�r��ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r�r�r�)r9r��readrrr�testSendAll�s
zBasicTCPTest.testSendAllcCsd}|j�|�dS)Nr�)r�r�)r9Z	big_chunkrrr�_testSendAll�szBasicTCPTest._testSendAllcCsP|j��}t�|tjtj�}|�|j�|�|tj�|�	d�}|�
|t�dSr�)r�r
r�fromfdr2r3rMrrr�r�r�)r9r,r�r�rrr�
testFromFd�s

zBasicTCPTest.testFromFdcCs|j�t�dSr+r�r8rrr�_testFromFd	szBasicTCPTest._testFromFdcCs0|j��}|�|j�|�d�}|�|t�dSr�)r��duprMrr�r�r�)r9r�r�rrr�testDup	s

zBasicTCPTest.testDupcCs|j�t�dSr+r�r8rrr�_testDup
	szBasicTCPTest._testDupcCs&|j�d�}|�|t�|j��dSr�)r�r�r�r�roryr�rrr�testShutdown
	szBasicTCPTest.testShutdowncCs|j�t�|j�d�dSr�)r�r�r��shutdownr8rrr�
_testShutdown	szBasicTCPTest._testShutdowncCsXddl}|j�t�|�t|jj|jd�|�t|jjd|jd�|j�d�dS)Nrrhr�)	rkr�r�r�rrRr�rl�UINT_MAX�r9rkrrr�_testShutdown_overflow	s��z#BasicTCPTest._testShutdown_overflowcCs�|j��}|j��}|�||�|�|jj�|�t|jjd�|j�	�t
j
t
jt
j|d�}|�
|j	�|�d�}|�|t�dS)Nr�r�)r�r
r&r�r�_closedrrr�rrr2r3rMr�)r9r
rr�r�rrr�
testDetach'	s



zBasicTCPTest.testDetachcCs|j�t�dSr+r�r8rrr�_testDetach7	szBasicTCPTest._testDetachN)r�)r>r?r@rDr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrJZtestShutdown_overflowr�r�r�rrrrr��s,

		


r�c@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestr�cCstj||d�dSr�)r�rDr�rrrrD=	szBasicUDPTest.__init__cCs |j�tt��}|�|t�dSr+)r4r�r�r�r�r�rrr�testSendtoAndRecv@	szBasicUDPTest.testSendtoAndRecvcCs|j�tdt|jf�dSr��r�r#r�r�r6r8rrr�_testSendtoAndRecvE	szBasicUDPTest._testSendtoAndRecvcCs$|j�tt��\}}|�|t�dSr+)r4r�r�r�r�r�rrrr�H	szBasicUDPTest.testRecvFromcCs|j�tdt|jf�dSr�r�r8rrrr�M	szBasicUDPTest._testRecvFromcCs|�t|jjd�dS�NrM)rrr4r�r8rrr�testRecvFromNegativeP	sz!BasicUDPTest.testRecvFromNegativecCs|j�tdt|jf�dSr�r�r8rrr�_testRecvFromNegativeT	sz"BasicUDPTest._testRecvFromNegativeN)r�)
r>r?r@rDr�r�r�r�r�r�rrrrr�;	s
r�cs�eZdZdZ�fdd�Zdd�ZdZdd�Zd	d
�Zdd�Z	d
d�Z
dZdD]Zee
eed�OZqLdZdZdZddd�Z�ZS)�SendrecvmsgBaser�cst��|_t���dSr+)rErm�
misc_eventrCr:r8rKrrr:y	s
zSendrecvmsgBase.setUpcCs|j�|�Sr+)�cli_sockr�r�rrr�sendToServer}	szSendrecvmsgBase.sendToServerrcGs|jj||jt|�d��Sr+)r�r��sendmsg_to_server_defaultsr��r9rIrrr�sendmsgToServer�	s�zSendrecvmsgBase.sendmsgToServercGs|j|f|��}|�|�|Sr+)r��registerRecvmsgResult)r9r�rZrI�resultrrr�	doRecvmsg�	s
zSendrecvmsgBase.doRecvmsgcCsdSr+r�r9r�rrrr��	sz%SendrecvmsgBase.registerRecvmsgResultcCs|�||�dSr+�r��r9Zaddr1Zaddr2rrr�checkRecvmsgAddress�	sz#SendrecvmsgBase.checkRecvmsgAddressr)�
MSG_CTRUNC�MSG_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�)
r9r��eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothrgrrr�
checkFlags�	s&




�zSendrecvmsgBase.checkFlags)Nrrr)r>r?r@�fail_timeoutr:r�r�r�r�r�r�rr�rurrrrrrPrrrKrr�r	s
r�c@seZdZdd�ZdS)�RecvmsgIntoMixincGsft|�}|j|gf|��}|�|�|�|dd�|�|d|�t|d|d��f|dd�Sr�)r��recvmsg_intor��assertGreaterEqual�assertLessEqualr�)r9r�rZrI�bufr�rrrr��	s
zRecvmsgIntoMixin.doRecvmsgN)r>r?r@r�rrrrr
�	sr
cs eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasecst�jtjBSr+)rCrr�	MSG_TRUNCr8rKrrr�	sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)r>r?r@�propertyrrPrrrKrr�	srcs eZdZe�fdd��Z�ZS)�SendrecvmsgSCTPFlagsBasecst�jtjBSr+)rCrr�MSG_EORr8rKrrr
sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)r>r?r@rrrPrrrKrr�	src@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jSr+)r4r8rrr�	serv_sock

sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jSr+)r�r8rrrr�
sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfSr�)r�r8rrrr�
sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j�||j�Sr+)r�r#r�r�rrrr�
sz*SendrecvmsgConnectionlessBase.sendToServerN)r>r?r@rrr�r�r�rrrrr
s


rc@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jSr+)r�r8rrrr 
sz"SendrecvmsgConnectedBase.serv_sockcCs|jSr+)r�r8rrrr�$
sz!SendrecvmsgConnectedBase.cli_sockcCsdSr+rr�rrrr�(
sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)r>r?r@rrr�r�rrrrr
s


rcseZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasecst���|j�|j�dSr+)rCr:rr�rr8rKrrr:1
s
z"SendrecvmsgServerTimeoutBase.setUp)r>r?r@r:rPrrrKrr.
src@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�dSr+�r�rr�r�r�r8rrr�testSendmsg:
szSendmsgTests.testSendmsgcCs|�|�tg�tt��dSr+�r�r�r�r�r8rrr�_testSendmsg>
szSendmsgTests._testSendmsgcCs|�|j�tt��t�dSr+rr8rrr�testSendmsgDataGeneratorA
sz%SendmsgTests.testSendmsgDataGeneratorcCs&|�|�dd�tfD��tt��dS)Ncss|]
}|VqdSr+rr�rrrr�F
sz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>rr8rrr�_testSendmsgDataGeneratorE
s�z&SendmsgTests._testSendmsgDataGeneratorcCs|�|j�tt��t�dSr+rr8rrr�testSendmsgAncillaryGeneratorI
sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|�|�tgdd�dD��tt��dS)Ncss|]
}|VqdSr+rr�rrrr�N
sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>rrr8rrr�_testSendmsgAncillaryGeneratorM
s�z+SendmsgTests._testSendmsgAncillaryGeneratorcCs|�|j�tt��t�dSr+rr8rrr�testSendmsgArrayQ
szSendmsgTests.testSendmsgArraycCs$|�|�t�dt�g�tt��dS)N�B)r�r��arrayr�r�r8rrr�_testSendmsgArrayU
s�zSendmsgTests._testSendmsgArraycCs|�|j�tt��t�dSr+rr8rrr�testSendmsgGatherY
szSendmsgTests.testSendmsgGathercCs.|�|�tdd�tdd�g�tt��dS�Nr�rr8rrr�_testSendmsgGather]
szSendmsgTests._testSendmsgGathercCs|�|j�d�d�dS�NrN�done�r�rr�r8rrr�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 iterablerr,)rr�r�r�r��objectr�r�r8rrr�_testSendmsgBadArgsd
s:
�
�
�
�
�
�
�z SendmsgTests._testSendmsgBadArgscCs|�|j�d�d�dSr+r-r8rrr�testSendmsgBadCmsgv
szSendmsgTests.testSendmsgBadCmsgcCs�|�t|jtgt�g�|�t|jtgt�ddfg�|�t|jtgdt�dfg�|�t|jtgddt�fg�|�t|jtgdg�|�t|jtgdg�|�d�dS)Nr�data)rr)rrr2rr,�rr�r�r�r/r�r8rrr�_testSendmsgBadCmsgz
s2
�
�
�
�
�
�z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs|�|j�d�d�dSr+r-r8rrr�testSendmsgBadMultiCmsg�
sz$SendmsgTests.testSendmsgBadMultiCmsgcCsB|�t|jtgdddg�|�t|jtgdt�g�|�d�dS)Nrr��rrr�r,r3r8rrr�_testSendmsgBadMultiCmsg�
s
�
�z%SendmsgTests._testSendmsgBadMultiCmsgcCs|�|j�d�d�dSr+r-r8rrr�testSendmsgExcessCmsgReject�
sz(SendmsgTests.testSendmsgExcessCmsgRejectc	CsNttd�s@|�t��}|�tgddg�W5QRX|�|jj�|�	d�dS)Nr5r7r,)
rrrrr�r��assertIsNoner$rBr��r9r%rrr�_testSendmsgExcessCmsgReject�
s

z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdSr+rr8rrr�testSendmsgAfterClose�
sz"SendmsgTests.testSendmsgAfterClosecCs |j��|�t|jtg�dSr+)r�rrrr�r�r8rrr�_testSendmsgAfterClose�
s
z#SendmsgTests._testSendmsgAfterCloseN)r>r?r@rrr r!r"r#r$r'r(r*r.r0r1r4r�rr6r�r8r9r<r=r>rrrrr6
s,

rc@sReZdZdd�Zdd�Zdd�Zdd�Zeej	d	kd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs|�|j�tt��t�dSr+rr8rrr�testSendmsgExplicitNoneAddr�
sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|�|�tggdd�tt��dSr�rr8rrr�_testSendmsgExplicitNoneAddr�
sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs.|�|j�d�d�|�|jj|jd��dS�Nrt�aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�r.�r�rr�rr�ryrr8rrr�testSendmsgTimeout�
sz%SendmsgStreamTests.testSendmsgTimeoutc
Cs�zr|j�d�z|�dg�qWnDtjk
r6Yn:tk
rd}z|jtj	krT�W5d}~XYnX|�
d�W5|j��XdS)N���Q��?rC�socket.timeout not raised)r�rfr�r�r�rr.rrB�ENOMEMrr}rrr�_testSendmsgTimeout�
sz&SendmsgStreamTests._testSendmsgTimeout>rqz<MSG_DONTWAIT not known to work on this platform when sendingcCs.|�|j�d�d�|�|jj|jd��dSrBrEr8rrr�testSendmsgDontWait�
sz&SendmsgStreamTests.testSendmsgDontWaitc	Cs\zJ|�t��}|�dggtj�qW5QRX|�|jj	t	j
t	jt	jf�W5|j��XdS�NrC)
r�rfrrr�r�MSG_DONTWAITrr$rB�EAGAIN�EWOULDBLOCKrIr;rrr�_testSendmsgDontWait�
s
�z'SendmsgStreamTests._testSendmsgDontWaitN)
r>r?r@r@rArFrJr�rXrwrKr�rPrrrrr?�
s
�
r?c@seZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdSr+rr8rrr�testSendmsgNoDestAddr�
sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|�t|jjtg�|�t|jjtggdd�dSr�)rrr�r�r�r8rrr�_testSendmsgNoDestAddr�
s��z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)r>r?r@rRrSrrrrrQ�
srQc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zeed!�d"d#��Zejd$d%��Zeejd&�d'd(��Zejd)d*��Zd+S),�RecvmsgGenericTestscCsR|�|jtt��\}}}}|�|t�|�||j�|�|g�|j|dd�dS�NT�r�r�rr�r�r�r�r�r�r9r�r�r�r�rrr�testRecvmsg�
s
zRecvmsgGenericTests.testRecvmsgcCs|�t�dSr+�r�r�r8rrr�_testRecvmsgsz RecvmsgGenericTests._testRecvmsgcCsV|�|jtt�dd�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTrVrWrXrrr�testRecvmsgExplicitDefaults
s�z/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|�t�dSr+rZr8rrr�_testRecvmsgExplicitDefaultssz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrTrVrWrXrrr�testRecvmsgShorters
�z&RecvmsgGenericTests.testRecvmsgShortercCs|�t�dSr+rZr8rrr�_testRecvmsgShortersz'RecvmsgGenericTests._testRecvmsgShortercCs^|�|jtt�d�\}}}}|�|tdd��|�||j�|�|g�|j|dd�dS)Nr����FrVrWrXrrr�testRecvmsgTrunc"s
�z$RecvmsgGenericTests.testRecvmsgTrunccCs|�t�dSr+rZr8rrr�_testRecvmsgTrunc+sz%RecvmsgGenericTests._testRecvmsgTrunccCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)NrhTrVrWrXrrr�testRecvmsgShortAncillaryBuf.s�z0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|�t�dSr+rZr8rrr�_testRecvmsgShortAncillaryBuf7sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCsT|�|jtt�d�\}}}}|�|t�|�||j�|�|g�|j|dd�dS)N�(TrVrWrXrrr�testRecvmsgLongAncillaryBuf:s�z/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|�t�dSr+rZr8rrr�_testRecvmsgLongAncillaryBufCsz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|j��|�t|j|jd�dSr�)rrrrr�r8rrr�testRecvmsgAfterCloseFs
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdSr+rr8rrr�_testRecvmsgAfterCloseKsz*RecvmsgGenericTests._testRecvmsgAfterClosecCs<z*|j�d�|�tj|j|jtt	��W5|j��XdS)NrG)
r�rfrr�rrr.r�r�r�r8rrr�testRecvmsgTimeoutNs�z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|�|jj|jd��dS�NrD)rr�ryrr8rrr�_testRecvmsgTimeoutWsz'RecvmsgGenericTests._testRecvmsgTimeoutr�cCs|�|jtt�ddtj�\}}}}|�|tdd��|�||j�|�|g�|j	|dt
tdd�d�|�|jtt�dtj�\}}}}|�|t�|�||j�|�|g�|j	|dd�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dS)	Nr�rr`Fr�rr
TrV)r�rr�r�rr�r�r�r�rrurXrrr�testRecvmsgPeekZs2
�
��z#RecvmsgGenericTests.testRecvmsgPeekcCs|�t�dSr+rZr8rrr�_testRecvmsgPeek}sz$RecvmsgGenericTests._testRecvmsgPeekr�cCs`|j�|j�|�|jtt��\}}}}|�|t�|�||j�|�|g�|j	|dd�dSrU)
rr�rr�r�r�r�r�r�rrXrrr�testRecvmsgFromSendmsg�sz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs.|�|�tdd�tdd�g�tt��dSr)rr8rrr�_testRecvmsgFromSendmsg�sz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)r>r?r@rYr[r\r]r^r_rarbrcrdrfrgrhrirjrlr�rrnr�rorprqrrrrrT�
s0						
"



rTc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�RecvmsgGenericStreamTestscCsN|�|jd�\}}}}|�|d�|�||j�|�|g�|j|dd�dS)Nr�r�rV)r�rr�r�r�rrXrrr�testRecvmsgEOF�s
z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|j��dSr+)r�rr8rrr�_testRecvmsgEOF�sz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|�|jtt�d�\}}}}|�||j�|�|g�|j|dd�|�|jd�\}}}}|�||j�|�|g�|j|dd�||}|�|t�dS)Nr�FrVr�T)r�rr�r�r�r�r�r)r9r�r�r�r�r�r�rrr�testRecvmsgOverflow�s
�z-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|�t�dSr+rZr8rrr�_testRecvmsgOverflow�sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)r>r?r@rsrtrurvrrrrrr�srrc@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)NrMrr}TrV)
rr�rr�rr�r�r�r/r�r�r�rrXrrr�testRecvmsgBadArgs�sH������zRecvmsgTests.testRecvmsgBadArgscCs|�t�dSr+rZr8rrr�_testRecvmsgBadArgs�sz RecvmsgTests._testRecvmsgBadArgsN)r>r?r@rxryrrrrrw�srwc@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 writablerMTrV)
r�r�r�rr�rrr/rr�r�r�r�r9r�nbytesr�r�r�rrr�testRecvmsgIntoBadArgs�s`��������z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|�t�dSr+rZr8rrr�_testRecvmsgIntoBadArgs�sz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|j�dd�|fD��\}}}}|�|tt��|�|tt��|�||j�|�|g�|j|dd�dS)Ncss|]
}|VqdSr+rr�rrrr��sz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>TrV)	r�r�r�rrr�r�r�rr{rrr�testRecvmsgIntoGenerator�s�z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|�t�dSr+rZr8rrr�_testRecvmsgIntoGenerator�sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxt�ddgtt��}|j�|g�\}}}}|�|tt��|�|��t�|�||j�|�|g�|j	|dd�dS)Nr%rTrV)
r&r�r�rrr��tobytesr�r�rr{rrr�testRecvmsgIntoArraysz%RecvmsgIntoTests.testRecvmsgIntoArraycCs|�t�dSr+rZr8rrr�_testRecvmsgIntoArraysz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|j�|t|�dd�|g�\}}}}|�|td��|�|td��|�|td��|�|td	��|�||j�|�|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	�Mary had a little lambsMarys
01 had a 9slittle lamb---TrV)	r�rr�
memoryviewr�r�r�r�r)r9Zb1Zb2Zb3r|r�r�r�rrr�testRecvmsgIntoScatters�z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|�d�dS)Nr�)r�r8rrr�_testRecvmsgIntoScattersz(RecvmsgIntoTests._testRecvmsgIntoScatterN)r>r?r@r}r~rr�r�r�r�r�rrrrrz�s
rzc@sbeZdZz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�|D]2}t�|�}|�|t�d�|�|�	||j�qT|�
ttjd�|�
ttj|�|�
ttjtj
�dS)Nrrh�r0r�rM)�socklen_t_limitrr��listrrGr&�itemsizer�rrrRrX�maxsize)r9�toobigr*�nr)rrr�testCMSG_LEN.s
zCmsgMacroTests.testCMSG_LENr5cCs�|jt�d�d}ttd��tt|d|��}t�d�}|�|t�d�jd�|D]T}t�|�}|�||�|�|t�	|��|�||t�	d��|�
||j�|}qX|�ttjd�|�ttj|�|�ttjt
j�dS)Nrhr�rr0r�rM)r�rr5r�rrGr&r�rr�rrrRrXr�)r9r�r*Zlastr�r)rrr�testCMSG_SPACECs

zCmsgMacroTests.testCMSG_SPACE)r>r?r@rkr�r��minrlr�rr�r�rrrrr�!s

r�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdddd�Z	dd�Z
dd�Zdd�Zdd�Z
eed�dd��Zejdd��Zdd�Zdd �Ze�ejd!kd"�e�ed#�eed�d$d%����Zeje�ejd!kd"�e�ed#�d&d'����Ze�ejd!kd"�e�ed#�eed�d(d)����Zeje�ejd!kd"�e�ed#�d*d+����Zd,d-�Ze�ejd!kd.�d/d0��Zd1d2�Z d3d4�Z!d5d6�Z"eed�d7d8��Z#e#jd9d:��Z$ded;d<�Z%d=d>�Z&d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*dGdH�Z+dIdJ�Z,dKdL�Z-dMdN�Z.dOdP�Z/dfdQdR�Z0dSdT�Z1dUdV�Z2dWdX�Z3dYdZ�Z4d[d\�Z5d]d^�Z6d_d`�Z7dadb�Z8dcS)g�
SCMRightsTesti����cCs\g}t|�D]J}t��\}}|�tj|�|�tj|�t�|t|��	��|�
|�q|Sr+)rr��mkstemprMr�r�r�writer��encode�append)r9r��fdsr0r,r�rrr�newFDsdszSCMRightsTest.newFDscCsBt|�D]4\}}t�|dtj�|�t�|d�t|����qdS)Nrr�)�	enumerater��lseek�SEEK_SETr�r�r�r�)r9r�r�r,rrr�checkFDspszSCMRightsTest.checkFDscCs|�|j|�dSr+)rM�closeRecvmsgFDsr�rrrr�wsz#SCMRightsTest.registerRecvmsgResultcCsn|dD]`\}}}|tjkr|tjkrt�d�}|�|dt|�t|�|j��|D]}t�|�qXqdS)Nrhr0)	rr)�
SCM_RIGHTSr&�	frombytesr�r�r�r)r9Zrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datar�r,rrrr�zs
�
�zSCMRightsTest.closeRecvmsgFDsc
Cs8|�|�tgtjtjt�d|�|��fg�tt��dS)Nr0)	r�r�r�rr)r�r&r�r�)r9r�rrr�createAndSendFDs�s���zSCMRightsTest.createAndSendFDsrhrcCs�|\}}}}|�|t�|�||j�|j|dtj|d�|�|t�|�	t
|�|�t�d�}	|D]`}
|�|
t�|
\}}}
|�|tj
�|�|tj�|�|
t�|�t
|
�td�|	�|
�qd|�t
|	�|�|�|	�dS)NT�rr	r
r0r)r�r�r�r�rrrrr�rr�r&�tupler)r�r��
SIZEOF_INTr�r�)r9Znumfdsr��maxcmsgs�ignoreflagsr�r�r�r�r��itemr�r�r�rrr�checkRecvmsgFDs�s&�

zSCMRightsTest.checkRecvmsgFDscCs |�d|�|jtt�d��dS)Nrhre�r�r�rr�r�r8rrr�testFDPassSimple�s�zSCMRightsTest.testFDPassSimplec
Cs<|�|�tgtjtjt�d|�d����fg�t	t��dS)Nr0rh)
r�r�r�rr)r�r&r�r�r�r8rrr�_testFDPassSimple�s���zSCMRightsTest._testFDPassSimplecCs |�d|�|jtt�d��dS)Nr"rer�r8rrr�testMultipleFDPass�s�z SCMRightsTest.testMultipleFDPasscCs|�d�dS�Nr"�r�r8rrr�_testMultipleFDPass�sz!SCMRightsTest._testMultipleFDPassr5cCs*|�d|�|jtt�t�dt���dSr�)r�r�rr�r�rr5r�r8rrr�testFDPassCMSG_SPACE�s��z"SCMRightsTest.testFDPassCMSG_SPACEcCs|�d�dSr�r�r8rrr�_testFDPassCMSG_SPACE�sz#SCMRightsTest._testFDPassCMSG_SPACEc
Cs0|jd|�|jtt�t�dt��tjd�dS)Nrhr"�r�)	r�r�rr�r�rr�r�rr8rrr�testFDPassCMSG_LEN�s��z SCMRightsTest.testFDPassCMSG_LENcCs|�d�dSr�r�r8rrr�_testFDPassCMSG_LEN�sz!SCMRightsTest._testFDPassCMSG_LENrrzskipping, see issue #12958zskipping, see issue #22397cCs$|jd|�|jtt�d�dd�dS)Nr�re)r�r�r8rrr�testFDPassSeparate�s�z SCMRightsTest.testFDPassSeparatecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dS�Nr�r0�	r�r�r�r�rr)r�r&r��r9Zfd0�fd1rrr�_testFDPassSeparate�s����z!SCMRightsTest._testFDPassSeparatecCs@d}|j||�|jtt�t�t�t�t|��dtj	d�dS)Nr�)r�r�)
r�r�rr�r�rr5r�r�r)r9Znum_fdsrrr�testFDPassSeparateMinSpace�s���z(SCMRightsTest.testFDPassSeparateMinSpacecCsX|�d�\}}|�|�tgtjtjt�d|g�ftjtjt�d|g�fg�tt��dSr�r�r�rrr�_testFDPassSeparateMinSpace�s����z)SCMRightsTest._testFDPassSeparateMinSpacec
Csdz|�|g|�}Wn<tk
rN}z|�|jt�|�|g�}W5d}~XYnX|�|t|��dSr+)r�rrrBrFr�r�)r9r�r�r|r�rrr�sendAncillaryIfPossible
sz%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd|�|jtt�d�tjd�dS)Nrrer�)r�r�rr�r�rrr8rrr�testFDPassEmpty
s��zSCMRightsTest.testFDPassEmptycCs|�ttjtjdfg�dS�Nr�)r�r�rr)r�r8rrr�_testFDPassEmpty
s
�zSCMRightsTest._testFDPassEmptycCs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�|D]6\}}}|�|tj�|�|tj�|�
t|�t�q\dS)NreTrmrh)r�rr�r�r�r�r�rrrrr)r��
assertLessr��r9r�r�r�r�r�r�r�rrr�testFDPassPartialInt$
s�z"SCMRightsTest.testFDPassPartialIntc	Cs4|�ttjtjt�d|jg���dd�fg�dS)Nr0rM)r�r�rr)r�r&�badfdr�r8rrr�_testFDPassPartialInt1
s��z#SCMRightsTest._testFDPassPartialIntc	Cs�|�|jtt�d�\}}}}|�|t�|�||j�|j|dtj	d�|�
t|�d�t�d�}|D]J\}}}|�|tj�|�|tj
�|�|dt|�t|�|j��qf|�
t|�d�|�|�dS)NreTrmr�r0)r�rr�r�r�r�r�rrrrr&r)r�r�r�r�)	r9r�r�r�r�r�r�r�r�rrr�testFDPassPartialIntInMiddle8
s"�
�
z*SCMRightsTest.testFDPassPartialIntInMiddlec
CsZ|�d�\}}|�ttjtjt�d||jg���dd�ftjtjt�d|g�fg�dS)Nr�r0rM)	r�r�r�rr)r�r&r�r�r�rrr�_testFDPassPartialIntInMiddleK
s����z+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}|�|t�|�||j�|�|g�|j|dtj|d�dS)NT�rrr
)r�r�r�r�rrr)r9r�r�r�r�r�r�rrr�checkTruncatedHeaderW
s�z"SCMRightsTest.checkTruncatedHeadercCs"|j|�|jtt��tjd�dS�Nr��r�r�rr�r�rrr8rrr�testCmsgTruncNoBufSizea
s�z$SCMRightsTest.testCmsgTruncNoBufSizecCs|�d�dSr�r�r8rrr�_testCmsgTruncNoBufSizej
sz%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j|�|jtt�d�tjd�dS)Nrr�r�r8rrr�testCmsgTrunc0m
s�zSCMRightsTest.testCmsgTrunc0cCs|�d�dSr�r�r8rrr�_testCmsgTrunc0r
szSCMRightsTest._testCmsgTrunc0cCs|�|�|jtt�d��dSr�)r�r�rr�r�r8rrr�testCmsgTrunc1x
szSCMRightsTest.testCmsgTrunc1cCs|�d�dSr�r�r8rrr�_testCmsgTrunc1{
szSCMRightsTest._testCmsgTrunc1cCs"|�|�|jtt�td��dSr�)r�r�rr�r�r�r8rrr�testCmsgTrunc2Int~
s�zSCMRightsTest.testCmsgTrunc2IntcCs|�d�dSr�r�r8rrr�_testCmsgTrunc2Int�
sz SCMRightsTest._testCmsgTrunc2Intc	Cs(|�|�|jtt�t�d�d��dSr�)r�r�rr�r�rr�r8rrr�testCmsgTruncLen0Minus1�
s�z%SCMRightsTest.testCmsgTruncLen0Minus1cCs|�d�dSr�r�r8rrr�_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�rrrrhr0)r�rr�r�r�r�r�rrrr)r�rrr&r�r�r�)r9�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�r8rrr�testCmsgTruncLen0�
szSCMRightsTest.testCmsgTruncLen0cCs|�d�dSr�r�r8rrr�_testCmsgTruncLen0�
sz SCMRightsTest._testCmsgTruncLen0cCs|jt�d�ddd�dS)Nrrhr�r�r8rrr�testCmsgTruncLen0Plus1�
sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|�d�dSr�r�r8rrr�_testCmsgTruncLen0Plus1�
sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jt�t�td�dS)Nr��r�rr�r�r8rrr�testCmsgTruncLen1�
s�zSCMRightsTest.testCmsgTruncLen1cCs|�d�dSr�r�r8rrr�_testCmsgTruncLen1�
sz SCMRightsTest._testCmsgTruncLen1cCs(|jt�dt�ddtdd�dS)Nr�rhr�r�r8rrr�testCmsgTruncLen2Minus1�
s
�z%SCMRightsTest.testCmsgTruncLen2Minus1cCs|�d�dSr�r�r8rrr�_testCmsgTruncLen2Minus1�
sz&SCMRightsTest._testCmsgTruncLen2Minus1N)rhr)r)r)9r>r?r@r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�rKrXrwrr�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�\s~

	













	
r�c@seZdZdZdZdd�Zd^dd�Zeed	d
�dd��Z	e	j
d
d��Zeedd	d
�dd��Zej
dd��Z
eejd�eed	d
�dd���Zej
dd��Zd_dd�Zeed	d
dd�dd��Zej
dd ��Zeedd	d
dd�d!d"��Zej
d#d$��Zeejd�eedd	d
dd�d%d&���Zej
d'd(��Zeejd�eedd	d
dd�d)d*���Zej
d+d,��Zd`d-d.�Zeed	d
�d/d0��Zej
d1d2��Zeed	d
�d3d4��Zej
d5d6��Zeed	d
�d7d8��Zej
d9d:��Zeed	d
�d;d<��Z e j
d=d>��Z!eed	d
�d?d@��Z"e"j
dAdB��Z#eed	d
�dCdD��Z$e$j
dEdF��Z%dadGdH�Z&eedd	d
dd�dIdJ��Z'e'j
dKdL��Z(eedd	d
dd�dMdN��Z)e)j
dOdP��Z*eedd	d
dd�dQdR��Z+e+j
dSdT��Z,eedd	d
dd�dUdV��Z-e-j
dWdX��Z.eedd	d
dd�dYdZ��Z/e/j
d[d\��Z0d]S)b�RFC3542AncillaryTestr�rMcCs4i}|D]&\}}}|�||f|�||||f<q|Sr+)r)r9r��dr�r�r�rrr�ancillaryMapping�
s
z%RFC3542AncillaryTest.ancillaryMappingr�rcCs|j�tjtjd�|j��|�|jtt	�|�\}}}}|�
|t	�|�||j�|j
|dtj|d�|�
t|�d�|�|dt�|d\}}	}
|�
|tj�|�
|	tj�|�|
t�|�
t|
�t�t�d�}|�|
�|�|dd�|�|d|�dS)NrhTr�rr0)rr�rr.�IPV6_RECVHOPLIMITr�rfr�r�r�r�r�r�rrrr��
IPV6_HOPLIMITr�r�r&r�rr)r9�
ancbufsize�maxhopr�r�r�r�r�r�r�r�r�rrr�
checkHopLimit�
s2
�
��

z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS�Nre�r�)r�r8rrr�testRecvHopLimit�
sz%RFC3542AncillaryTest.testRecvHopLimitcCs$|�|jj|jd��|�t�dSrk�rr�ryrr�r�r8rrr�_testRecvHopLimitsz&RFC3542AncillaryTest._testRecvHopLimitr5cCs|jt�t�d�dS)Nr�)r�rr5r�r8rrr�testRecvHopLimitCMSG_SPACE	sz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testRecvHopLimitCMSG_SPACEsz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cCs|jd|jd�dS�Nre)r�r�)r��	hop_limitr8rrr�testSetHopLimitsz$RFC3542AncillaryTest.testSetHopLimitcCsL|�|jj|jd��|�|�tgtjtj	t
�
d|jg�fg�tt��dS�NrDr0)
rr�ryrr�r�r�rr.r�r&r�r�r8rrr�_testSetHopLimits���z%RFC3542AncillaryTest._testSetHopLimitcCsB|j�tjtjd�|j�tjtjd�|j��|�|jt	t
�|�\}}}}|�|t
�|�||j
�|j|dtj|d�|�t	|�d�|�|�}|tjtjf}	|�t	|	�t�t�d�}
|
�|	�|�|
dd�|�|
dd�|tjtjf}|�t	|�t�t�d�}
|
�|�|�|
dd�|�|
d|�dS)NrhTr�r�r0rr�)rr�rr.r��IPV6_RECVTCLASSr�rfr�r�r�r�r�r�rrr��IPV6_TCLASSr�r&r�rrr�)r9r�r�r�r�r�r�r�ZancmapZtcdatar�Zhldatarrr�checkTrafficClassAndHopLimit(s@
�
�
��




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr�r�cCs|jdd�dSr�)rr8rrr�testRecvTrafficClassAndHopLimitLsz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$|�|jj|jd��|�t�dSrkr�r8rrr� _testRecvTrafficClassAndHopLimitRsz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jt�t�dd�dS�Nr�r�)rrr5r�r8rrr�)testRecvTrafficClassAndHopLimitCMSG_SPACEWs�z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$|�|jj|jd��|�t�dSrkr�r8rrr�*_testRecvTrafficClassAndHopLimitCMSG_SPACE_sz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jd�dSr��rr�r8rrr�testSetTrafficClassAndHopLimitds�z3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitcCsd|�|jj|jd��|�|�tgtjtj	t
�
d|jg�ftjtjt
�
d|j
g�fg�tt��dSr�)rr�ryrr�r�r�rr.r�r&�
traffic_classr�r�r�r8rrr�_testSetTrafficClassAndHopLimitms�����z4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jd�dSr�rr8rrr�testOddCmsgSizexs�z$RFC3542AncillaryTest.testOddCmsgSizec
Cs�|�|jj|jd��zJ|�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��W5d}~XYnXdS)NrDr0ry)rr�ryrr�r�rr.r�r&rr�r�r�rrrBrFr�r�)r9r|r�rrr�_testOddCmsgSize�s2��������z%RFC3542AncillaryTest._testOddCmsgSizecCs�|j�tjtjd�|j��|dkr*dn|f}|j|jtt	�f|��\}}}}|�
|t	�|�||j�|�
|g�|j
|dtj|d�dS)NrhrTr�)rr�rr.r�r�rfr�r�r�r�r�r�rr)r9r�r�rIr�r�r�r�rrr�checkHopLimitTruncatedHeader�s"
�
���z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N�r�r��rrrr8rrrr��s�z+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$|�|jj|jd��|�t�dSrkr�r8rrrr��sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nrr
rr8rrr�testSingleCmsgTrunc0�s�z)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSingleCmsgTrunc0�sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nrhr�)rr8rrr�testSingleCmsgTrunc1�sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSingleCmsgTrunc1�sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dSr)rr�r8rrr�testSingleCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSingleCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jt�d�dd�dS)Nrrhr�)rrr�r8rrr�testSingleCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSingleCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|j�tjtjd�|j��|�|jtt	�t�
t�d�\}}}}|�|t	�|�
||j�|j|dtjd�|�t|�d�|r�|d\}}}|�|tj�|�|tj�|�t|�t�dS)NrhTr�r)rr�rr.r�r�rfr�r�r�r�r�r�r�r�rrrr�r�r�rrr�testSingleCmsgTruncInData�s&
�
�z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$|�|jj|jd��|�t�dSrkr�r8rrr�_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)NrhTr�rr0r�)rr�rr.r�r�r�rfr�r�r�r�r�r�rrrr�r�r�r&r�rr)r9r�r�r�r�r�r�r�r�r�r�rrr�checkTruncatedSecondHeaders6
�
�
��

z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jt�t�tjd�dSr�)rrr5r�rr8rrr�testSecondCmsgTrunc0!s�z)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSecondCmsgTrunc0'sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|�t�t�d�dSr��rrr5r�r8rrr�testSecondCmsgTrunc1,sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSecondCmsgTrunc11sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|�t�t�dt�dSr�rr8rrr�testSecondCmsgTrunc2Int6s�z,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSecondCmsgTrunc2Int<sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|�t�t�t�d�d�dSr�)rrr5r�r�r8rrr�testSecondCmsgTruncLen0Minus1As
��z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSecondCmsgTruncLen0Minus1Gsz3RFC3542AncillaryTest._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)NrhTr�rr0r�)rr�rr.r�r�r�rfr�r�r�r5r�r�r�r�r�rrr�r��pop�remover&r�rrr�)
r9r�r�r�r�Z
cmsg_typesr�r�r�r�rrr�testSecomdCmsgTruncInDataLs@
�
�
�



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$|�|jj|jd��|�t�dSrkr�r8rrr�_testSecomdCmsgTruncInDataqsz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)r�r)r�r)r)r)1r>r?r@r�rr�r�r�rr�r�r�r�r�r�r�rrrrrrr	r
rrr�r�rrrrrrrrrrrrrrrrr r!r"r%r&rrrrr��
s�






	


�
$�


�



�



�





















 
�


�


�


�


�
#r�c@seZdZdS)�SendrecvmsgUDPTestBaseN�r>r?r@rrrrr'ysr'r�c@seZdZdS)�SendmsgUDPTestNr(rrrrr)~sr)r�c@seZdZdS)�RecvmsgUDPTestNr(rrrrr*�sr*rc@seZdZdS)�RecvmsgIntoUDPTestNr(rrrrr+�sr+c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs |�|dd�|dd��dSr�r�r�rrrr��sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)r>r?r@r�rrrrr,�sr,rr�rc@seZdZdS)�SendmsgUDP6TestNr(rrrrr-�sr-c@seZdZdS)�RecvmsgUDP6TestNr(rrrrr.�sr.c@seZdZdS)�RecvmsgIntoUDP6TestNr(rrrrr/�sr/r.c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestNr(rrrrr0�sr0c@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestNr(rrrrr1�sr1c@seZdZdS)�SendrecvmsgTCPTestBaseNr(rrrrr2�sr2c@seZdZdS)�SendmsgTCPTestNr(rrrrr3�sr3c@seZdZdS)�RecvmsgTCPTestNr(rrrrr4�sr4c@seZdZdS)�RecvmsgIntoTCPTestNr(rrrrr5�sr5c@seZdZdS)�SendrecvmsgSCTPStreamTestBaseNr(rrrrr6�sr6z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr2r3r�c@seZdZdS)�SendmsgSCTPStreamTestNr(rrrrr7�sr7cseZdZ�fdd�Z�ZS)�RecvmsgSCTPStreamTestc
sRztt|���Wn:tk
rL}z|jtjkr2�|�d�W5d}~XYnXdS�Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rCr8rsrrB�ENOTCONNrY�r9r�rKrrrs�sz$RecvmsgSCTPStreamTest.testRecvmsgEOF�r>r?r@rsrPrrrKrr8�sr8cseZdZ�fdd�Z�ZS)�RecvmsgIntoSCTPStreamTestc
sRztt|���Wn:tk
rL}z|jtjkr2�|�d�W5d}~XYnXdSr9)rCr=rsrrBr:rYr;rKrrrs�sz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFr<rrrKrr=�sr=c@seZdZdS)�SendrecvmsgUnixStreamTestBaseNr(rrrrr>�sr>r�c@seZdZdS)�SendmsgUnixStreamTestNr(rrrrr?�sr?c@seZdZdS)�RecvmsgUnixStreamTestNr(rrrrr@�sr@c@seZdZdS)�RecvmsgIntoUnixStreamTestNr(rrrrrAsrAr)r�c@seZdZdS)�RecvmsgSCMRightsStreamTestNr(rrrrrBsrBc@seZdZdS)�RecvmsgIntoSCMRightsStreamTestNr(rrrrrC
srCcsDeZdZ�fdd�ZdZeed�r0dZdd�ZndZd	d�Z�Z	S)
�InterruptedTimeoutBasecs2t���t�tjdd��}|�tjtj|�dS)NcSsddSr�r)�signumrrrrr�!r�z.InterruptedTimeoutBase.setUp.<locals>.<lambda>)rCr:r�r�rM)r9Zorig_alrm_handlerrKrrr:s

�zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCst�tj|�dSr+)r�rF�ITIMER_REAL�r9Zsecondsrrr�setAlarm-szInterruptedTimeoutBase.setAlarmr�cCst�|�dSr+)r�r�rHrrrrI3s)
r>r?r@r:r.rr��
alarm_timerIrPrrrKrrDs

rD�siginterruptr�rFz+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�dSr+)rCr:r4r�r.r8rKrrr:@s
z InterruptedRecvTimeoutTest.setUpc	OsBz0|�|j�|�t��}|||�W5QRXW5|�d�XdSr�)rIrJrr��r9rerIrJr%rrr�checkInterruptedRecvDs
z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|�|jjd�dSr�)rNr4r�r8rrr�testInterruptedRecvTimeoutNsz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs|�|jjtd��dSr�)rNr4�	recv_intor�r8rrr�testInterruptedRecvIntoTimeoutQsz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|�|jjd�dSr�)rNr4r�r8rrr�testInterruptedRecvfromTimeoutTsz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs|�|jjtd��dSr�)rNr4�
recvfrom_intor�r8rrr�"testInterruptedRecvfromIntoTimeoutWsz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|�|jjd�dSr�)rNr4r�r8rrr�testInterruptedRecvmsgTimeoutZsz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrcCs|�|jjtd�g�dSr�)rNr4rr�r8rrr�!testInterruptedRecvmsgIntoTimeout^sz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)r>r?r@r:rNrOrQrRrTr�rrUrVrPrrrKrrL9s



rLcsteZdZ�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)rCr:r�r�rMrrE�Thread�	doConnect�startr4r�r�r�r�r.)r9Z
cli_threadr�rKrrr:ns

z InterruptedSendTimeoutTest.setUpcCs|j�|j�dSr+)r�r�r�r8rrrrZ|sz$InterruptedSendTimeoutTest.doConnectc	OsDz2|�t��}|�|j�|||�qW5QRXW5|�d�XdSr�)rIrr�rJrMrrr�checkInterruptedSends
z/InterruptedSendTimeoutTest.checkInterruptedSendr}r�cCs|�|jjd�dSrL)r\r�r�r8rrr�testInterruptedSendTimeout�sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|�|jjd|j�dSrL)r\r�r#r�r8rrr�testInterruptedSendtoTimeout�s�z7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs|�|jjdg�dSrL)r\r�r�r8rrr�testInterruptedSendmsgTimeout�sz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)r>r?r@r:rZr\rZrequires_mac_verr]r^r�rr_rPrrrKrrWes	





rWc@seZdZdd�Zdd�ZdS)�
TCPCloserTestcCsh|j��\}}|��|j}t�|gggd�\}}}|�||g�|�|�d�d�|��|��dS)N��?rhr�)r4r�rr�r�r�r�)r9r�r��sdr�r�rrrr�	testClose�szTCPCloserTest.testClosecCs |j�t|jf�t�d�dS�Nra)r�r�r�r6r�r�r8rrr�
_testClose�szTCPCloserTest._testCloseN)r>r?r@rcrerrrrr`�s
r`c@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr�cCstj||d�dSr�)r�rDr�rrrrD�szBasicSocketPairTest.__init__cCs\|�|tj�ttd�r*|�|jtj�n|�|jtj�|�|jtj�|�|j	d�dS)Nr�r)
rrrr�rr�r2r�r3rr�rrr�_check_defaults�s
z#BasicSocketPairTest._check_defaultscCs|�|j�dSr+)rgr�r8rrr�
_testDefaults�sz!BasicSocketPairTest._testDefaultscCs|�|j�dSr+)rgr4r8rrr�testDefaults�sz BasicSocketPairTest.testDefaultscCs|j�d�}|�|t�dSr�)r4r�r�r�r�rrrr��szBasicSocketPairTest.testRecvcCs|j�t�dSr+)r�r�r�r8rrrr��szBasicSocketPairTest._testRecvcCs|j�t�dSr+)r4r�r�r8rrr�testSend�szBasicSocketPairTest.testSendcCs|j�d�}|�|t�dSr�)r�r�r�r�r�rrr�	_testSend�szBasicSocketPairTest._testSendN)r�)r>r?r@rDrgrhrir�r�rjrkrrrrrf�s
	rfc@s�eZdZd&dd�Zdd�Zdd�Zdd	�Zejd
d��Z	e�e�Z
e�e
ed�d
�e�ddd�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%S)'�NonBlockingTCPTestsr�cCst��|_tj||d�dSr�)rErm�eventr�rDr�rrrrD�s
zNonBlockingTCPTests.__init__cCsh|�|j��|�|dk}|�|��|�tdk	rd|dk}t�|tjtj�}|�t|tj@�|�dS)N�)	r�r4r~�getblockingr
�F_GETFLr��
O_NONBLOCK�bool)r9r�r.�blockingZfd_blocking�flagrrr�assert_sock_timeout�sz'NonBlockingTCPTests.assert_sock_timeoutcCs�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�|j�d�|�|jd�dS)NTFrnrr})r4r#rur�r8rrr�testSetBlocking�sz#NonBlockingTCPTests.testSetBlockingcCsdSr+rr8rrr�_testSetBlockingsz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|�d�|j�d�|�|j��d�|j�|jd�|�|j���dS)Nrzneeds UINT_MAX < ULONG_MAXFrnrh)	rkr�Z	ULONG_MAXrYr4r#r�r~r:r�rrr�testSetBlocking_overflows
z,NonBlockingTCPTests.testSetBlocking_overflowr"ztest needs socket.SOCK_NONBLOCKr���cCs4|j��t�tjtjtjB�|_|�|jd�dSr�)r4rrr2r3r"rur8rrr�testInitNonBlockings


�z'NonBlockingTCPTests.testInitNonBlockingcCsdSr+rr8rrr�_testInitNonBlockingsz(NonBlockingTCPTests._testInitNonBlockingc	CsLtd��:|j�d�|j��\}}|�|j�|�|���W5QRXdS)Nr})r/r4r�r�rMrr:r~r�rrr�testInheritFlagsBlocking s

z,NonBlockingTCPTests.testInheritFlagsBlockingcCs|j�t|jf�dSr+�r�r�r�r6r8rrr�_testInheritFlagsBlocking)sz-NonBlockingTCPTests._testInheritFlagsBlockingc	CsRd}t|��<|j�d�|j��\}}|�|j�|�|��|�W5QRXdS)Ng4@r})r/r4r�r�rMrr�r~)r9Zdefault_timeoutr�r�rrr�testInheritFlagsTimeout,s
z+NonBlockingTCPTests.testInheritFlagsTimeoutcCs|j�t|jf�dSr+r~r8rrr�_testInheritFlagsTimeout7sz,NonBlockingTCPTests._testInheritFlagsTimeoutc	Cs�|j�d�t��}|�t��|j��\}}W5QRXt��|}|�|d�|j�	�t
�
|jgggt�\}}}|j|kr�|�d�|j��\}}|�
|j�|�|���dS)Nrraz'Error trying to do accept after select.)r4r#r��	monotonicr�BlockingIOErrorr�r�rmrfr��MAIN_TIMEOUTrrMrr:r~)r9Z
start_timer�r�Zdtr�r�rrrr�
testAccept:s


zNonBlockingTCPTests.testAcceptcCs |j��|j�t|jf�dSr+)rmryr�r�r�r6r8rrr�_testAcceptPs
zNonBlockingTCPTests._testAcceptc	Cs�|j��\}}|�|j�|�d�|�t��|�tt	��}W5QRX|j
��t�|gggt
�\}}}||kr||�d�|�tt	��}|�|t	�dS)Nrz0Error during select call to non-blocking socket.)r4r�rMrr#rr�r�r�r�rmrfr�r�rr�)r9r�r�r�r�r�rrrrr�Ws


zNonBlockingTCPTests.testRecvcCs,|j�t|jf�|j��|j�t�dSr+)r�r�r�r6rmryr�r�r8rrrr�ks
zNonBlockingTCPTests._testRecvN)r�)r>r?r@rDrurvrwrrJrxZ_testSetBlocking_overflowr�rIrr�requires_linux_versionr{r|r}rr�r�r�r�r�r�rrrrrl�s*


�	rlc@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.
    rMr�strictNrr�r�cCstj||d�dSr�r�r�rrrrD�sz FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_t�|�|jj|j	|j
|j|j|j
d�|_dS)NcSsg|]}t���qSr)rErm�r�r0rrrr��sz1FileObjectClassTestCase.setUp.<locals>.<listcomp>r"��encoding�errors�newline)r�evt1�evt2�
serv_finished�cli_finishedr�r:r�r��	read_moderZr�r�r��	read_filer8rrrr:�s�
�zFileObjectClassTestCase.setUpcCs6|j��|j��|�|jj�d|_t�|�dSr+)r�rfr�rr�closedr�r<r8rrrr<�s


z FileObjectClassTestCase.tearDowncCs0t�|�|jj|j|j|j|j|jd�|_	dS)Nr�)
r�r�r�r��
write_moderZr�r�r��
write_filer8rrrr��s
�z#FileObjectClassTestCase.clientSetUpcCs6|j��|j��|�|jj�d|_t�|�dSr+)r�rfr�rrr�r�r�r8rrrr��s


z&FileObjectClassTestCase.clientTearDownc	Csd|j�d�|j�d�|�tj|jjd�|�t��}|j�d�W5QRX|�dt	|j
��dS)Nrhr�z!cannot read from timed out object)r�r�r�r�rrr.rrr�r$)r9�ctxrrr�testReadAfterTimeout�sz,FileObjectClassTestCase.testReadAfterTimeoutcCs.|j�|jdd��|j��|j��dS)Nrr�)r�r��	write_msg�flushr�ryr8rrr�_testReadAfterTimeout�s
z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|j�t|j�d�}|j�d�}||}|�||j�dSr))r�r�r��read_msgr�)r9�	first_segZ
second_segr�rrr�
testSmallRead�sz%FileObjectClassTestCase.testSmallReadcCs|j�|j�|j��dSr+�r�r�r�r�r8rrr�_testSmallRead�sz&FileObjectClassTestCase._testSmallReadcCs|j��}|�||j�dSr+)r�r�r�r�r�rrr�testFullRead�s
z$FileObjectClassTestCase.testFullReadcCs|j�|j�|j��dSr+)r�r�r�rr8rrr�
_testFullRead�sz%FileObjectClassTestCase._testFullReadcCs:t|j��}|j�d�}|sq(||7}q|�||j�dSr�)r�r�r�r�r�)r9r�charrrr�testUnbufferedRead�s
z*FileObjectClassTestCase.testUnbufferedReadcCs|j�|j�|j��dSr+r�r8rrr�_testUnbufferedRead�sz+FileObjectClassTestCase._testUnbufferedReadcCs|j��}|�||j�dSr+)r��readliner�r��r9�linerrr�testReadline�s
z$FileObjectClassTestCase.testReadlinecCs|j�|j�|j��dSr+r�r8rrr�
_testReadline�sz%FileObjectClassTestCase._testReadlinecCs&|j��|j��}|�||j�dSr+)r�rr�r�r�r�r�rrr�testCloseAfterMakefile�s

z.FileObjectClassTestCase.testCloseAfterMakefilecCs|j�|j�|j��dSr+r�r8rrr�_testCloseAfterMakefile�sz/FileObjectClassTestCase._testCloseAfterMakefilecCs@|j��|j�tt��}t|jt�r.|�	�}|�
||j�dSr+)r�rr�r�r�r�r�r�r��decoder�r�rrr�testMakefileAfterMakefileClose�s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs|j�|j�|j��dSr+r�r8rrr�_testMakefileAfterMakefileClose�sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|�|jj�dSr+)rr�r�r8rrr�testClosedAttrsz&FileObjectClassTestCase.testClosedAttrcCs|�|jj�dSr+)rr�r�r8rrr�_testClosedAttrsz'FileObjectClassTestCase._testClosedAttrcCs,|�|jj|j�|�|jj|j���dSr+)r�r�r�r�r�r�r
r8rrr�testAttributessz&FileObjectClassTestCase.testAttributescCs,|�|jj|j�|�|jj|j���dSr+)r�r�r�r�r�r�r
r8rrr�_testAttributessz'FileObjectClassTestCase._testAttributescCs8|j��|�t|jj�|j��|�t|jj�dSr+)r�rrrr
r�rr�r8rrr�
testRealCloses

z%FileObjectClassTestCase.testRealClosecCsdSr+rr8rrr�_testRealClosesz&FileObjectClassTestCase._testRealClose)r�)&r>r?r@rOrZr�r�r�r�r�r�r�r�rDr:r<r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�vsD

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

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


z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|j�d|j�|j�d|j�|j��dS)Nr�r�r�r8rrr�_testUnbufferedReadline-sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|j��|j�d�}|�||j�|j��|�t|jjd�dSr�)r�rr�r�r�r�rrr�rrr�testMakefileClose2s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|j�|j�|j��dSr+r�r8rrr�_testMakefileClose;sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t�|j�}|j��t�|j�}|�|d|�dSr�)rXrWr�r�rr�)r9Zrefcount_beforeZrefcount_afterrrr�testMakefileCloseSocketDestroy?s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdSr+rr8rrr�_testMakefileCloseSocketDestroyEszAUnbufferedFileObjectClassTestCase._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}r�rag�?r^rh)r�r#r�r��readintor�r�r�r�r�rfr�ryr�r�)r9r�rr�r�rrr�testSmallReadNonBlockingLs 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|j�d�|j�|j�|j��|j��|j�d�dS)Nra�@)	r�ryr�r�r�r�r�rfr�r8rrr�_testSmallReadNonBlocking_s


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|j�d�|jr|�|j�dS)Nr�)r�ry�serv_skippedrYr8rrr�testWriteNonBlockinghsz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCstd|_|j�d�dtj}d}|j�|�}|�|d�t|�D](}|j�|�}|dkr\qp|�|d�q@d|_dS)NFr�r}rz$failed to saturate the socket buffer)	r�r�r#rr�r�r�rGr)r9ZBIGZLIMITr�r0rrr�_testWriteNonBlockingos
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)r>r?r@rOrZr�r�r�r�r�r�r�r�r�r�rrrrr�s		r�c@seZdZdZdS)�#LineBufferedFileObjectClassTestCaserhN�r>r?r@rZrrrrr��sr�c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�Nr�rrrrr��sr�c@s*eZdZdZdZe�d�ZdZeZ	dZ
dS)�"UnicodeReadFileObjectClassTestCase�=Tests for socket.makefile() in text mode (rather than binary)rrr�rN�r>r?r@rOr�r�r�r�r�r�r�rrrrr��s
r�c@s*eZdZdZdZeZdZe�d�Z	dZ
dS)�#UnicodeWriteFileObjectClassTestCaser�rr�rrN)r>r?r@rOr�r�r�r�r�r�r�rrrrr��s
r�c@s0eZdZdZdZe�d�ZdZe�d�Z	dZ
dS)�'UnicodeReadWriteFileObjectClassTestCaser�rrr�rNr�rrrrr��s

r�c@seZdZdZdd�ZdS)�NetworkConnectionTestzProve network connection.cCst�t|jf�|_|j|_dSr+)r�create_connectionr�r6r�r�r8rrrr��sz!NetworkConnectionTest.clientSetUpN)r>r?r@rOr�rrrrr��sr�c@seZdZdZdS)�
BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)r>r?r@rOrrrrr��sr�c@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGst�d��dS)Nz	timed out)rr.r�rrrr��sz,NetworkConnectionNoServer.MockSocket.connectN)r>r?r@r�rrrr�
MockSocket�sr�ccs&tj}|jt_z
dVW5|t_XdS)z*Return a socket which times out on connectN)rr�)r9Z
old_socketrrr�mocked_socket_module�s

z.NetworkConnectionNoServer.mocked_socket_modulec	Cs^t��}t�tjtj�}|�|j�|�t��}|�	t
|f�W5QRX|�|jj
t
j�dSr+)rr�rr2r3rMrrrr�r�r�r$rBZECONNREFUSED)r9r6r�r%rrr�test_connect�sz&NetworkConnectionNoServer.test_connectc	CsHt��}|�t��}t�t|f�W5QRXt��}|�|j	j
|�dSr+)rr�rrrr�r�Zget_socket_conn_refused_errsrr$rB)r9r6r%Zexpected_errnosrrr�test_create_connection�s
z0NetworkConnectionNoServer.test_create_connectioncCs�|���nzt�tdf�WnJtjk
r2Yn@tk
rf}ztjsT|jtj	krV�W5d}~XYnX|�
d�W5QRXdS)NrrH)r�rr�r�r.rrr�rBZEAFNOSUPPORTrr}rrr�test_create_connection_timeout�s
z8NetworkConnectionNoServer.test_create_connection_timeoutN)r>r?r@rr��
contextlib�contextmanagerr�r�r�r�rrrrr��s
	r�c@sveZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestr�cCstj||d�t�|�dSr�r�r�rrrrD�sz(NetworkConnectionAttributesTest.__init__cCst��|_dSr+)rr��source_portr8rrrr��sz+NetworkConnectionAttributesTest.clientSetUpcCs|j��d|_t�|�dSr+r�r8rrrr�s
z.NetworkConnectionAttributesTest.clientTearDowncCs|j��\}}|��dSr+)r4r�rr�rrr�_justAcceptsz+NetworkConnectionAttributesTest._justAcceptcCs8tjt|jfdd�|_|�|jj�|�|jjd�dS)N�rDr�)	rr�r�r6r�rMrr�rr8rrr�_testFamilysz+NetworkConnectionAttributesTest._testFamilycCsHtjt|jfdd|jfd�|_|�|jj�|�|j�	�d|j�dS)Nr�r)r.�source_addressrh)
rr�r�r6r�r�rMrr�r�r8rrr�_testSourceAddresss
�z2NetworkConnectionAttributesTest._testSourceAddressc	Csd|�t��dk�t�d�z$t�t|jf�|_|�|jj	�W5t�d�X|�
|j��d�dS)Nr�rrr,r-r�r�r6r�rMrr�r~r8rrr�_testTimeoutDefaults
z3NetworkConnectionAttributesTest._testTimeoutDefaultc	Csh|�t��dk�t�d�z(tjt|jfdd�|_|�|jj	�W5t�d�X|�
|j��d�dS�Nr�rDr�r8rrr�_testTimeoutNone's
z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd�|_|�|j��d�dSr�)rr�r�r6r�r�r~r8rrr�_testTimeoutValueNamed3sz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8t�t|jfd�|_|�|jj�|�|j��d�dS)Nr�)	rr�r�r6r�rMrr�r~r8rrr�_testTimeoutValueNonamed8sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r�)r>r?r@rDr�r�r�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�|�dSr�r�r�rrrrD@sz'NetworkConnectionBehaviourTest.__init__cCsdSr+rr8rrrr�Dsz*NetworkConnectionBehaviourTest.clientSetUpcCs|j��d|_t�|�dSr+r�r8rrrr�Gs
z-NetworkConnectionBehaviourTest.clientTearDowncCs2|j��\}}|�|j�t�d�|�d�dS)Nr��done!)r4r�rMrr�r�r�r�rrr�testInsideTimeoutLs
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0t�t|jf�|_}|�d�}|�|d�dS)Nr�r�)rr�r�r6r�r�r�)r9r�r|rrr�_testInsideTimeoutSs
z1NetworkConnectionBehaviourTest._testInsideTimeoutcs4tjt|jfdd�|_�|�tj�fdd��dS)NrhrDcs
��d�S)Nr�)r�r�r�rrr�Zr�zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)rr�r�r6r�rr.r8rr�r�_testOutsideTimeoutXsz2NetworkConnectionBehaviourTest._testOutsideTimeoutN)r�)
r>r?r@rDr�r�r�ZtestOutsideTimeoutr�r�rrrrr�>s
r�c@s6eZdZdd�Zdd�Ze�eed�d�dd��Z	d	S)
�TCPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j��dSrd)r4r�r�r�r8rr�
raise_timeout`sz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP)�rrr.�r9r�rr8r�testTCPTimeout_s
�zTCPTimeoutTest.testTCPTimeoutcCs|d}z|j�d�|j��}WnJtjk
r>|�d�Yn,tk
rTd}Yn|�d�YnX|sx|�d�dS)NFrnz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r4r�r�rr.rr�r9�okr@rrr�testTimeoutZerofszTCPTimeoutTest.testTimeoutZeror�ztest needs signal.alarm()c
s
|j�d�Gdd�dt���fdd�}t�tj|�}z�z�z�zt�d�|j��}Wn`tjk
rt|�	d�YnL�k
r�Yn:|�	d	t
��dd�t�
�f�YnX|�	d
�W5t�d�XWn�k
r�|�	d�YnXW5t�tj|�XdS)Nr�c@seZdZdS)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNr(rrrr�Alarm{sr�cs��dSr+r)r�r�r�rr�
alarm_handler}sz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerrr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtzgot Alarm in wrong place)r4r�rr�r�r�r�rr.rrX�exc_info�	traceback�
format_exc)r9r�r�r@rr�r�testInterruptedTimeoutts*
�z%TCPTimeoutTest.testInterruptedTimeoutN)
r>r?r@r�r�r�rIrr�r�rrrrr�]s�r�c@seZdZdd�Zdd�ZdS)�UDPTimeoutTestcs �fdd�}��tj|d�dS)Ncs�j�d��j�d�dS)Nrar�)r4r�r�r�r8rrr��sz4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP)r�r�rr8r�testUDPTimeout�s
�zUDPTimeoutTest.testUDPTimeoutcCs~d}z|j�d�|j�d�}WnJtjk
r@|�d�Yn,tk
rVd}Yn|�d�YnX|sz|�d�dS)NFrnr�z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)z1recv() returned success when we did not expect it)r4r�r�rr.rrr�rrrr��szUDPTimeoutTest.testTimeoutZeroN)r>r?r@r�r�rrrrr��sr�c@seZdZdd�Zdd�ZdS)�TestExceptionscCsJ|�ttt��|�ttjt��|�ttjt��|�ttjt��dSr+)r�
issubclassrrrrrr.r8rrr�testExceptionTree�sz TestExceptions.testExceptionTreec	Csbt�tjtjd�}t�tjtjd|���}|��|�|j�|�t��|�	d�W5QRXdS)NrF)
rr2r3r
rrMr&rrr#)r9Zsock0r�rrr�test_setblocking_invalidfd�s�z)TestExceptions.test_setblocking_invalidfdN)r>r?r@rrrrrrr��sr�rqzLinux specific testc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TestLinuxAbstractNamespace�lcCs�d}t�tjtj��z}|�|�|��t�tjtj��L}|�|���|��d�&}|�|��|�|�|�	�|�W5QRXW5QRXW5QRXdS)Nspython-test-hello�r)
rr�r3rWr7r�r�r�r��getpeername)r9rk�s1r8Zs3rrr�testLinuxAbstractNamespace�s
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec	CsLdd|jd}t�tjtj�� }|�|�|�|��|�W5QRXdS)Nry�hrh)�
UNIX_PATH_MAXrr�r3rWr�r��r9rkrrrr�testMaxName�s
z&TestLinuxAbstractNamespace.testMaxNamec	Cs>dd|j}t�tjtj��}|�t|j|�W5QRXdS)N��h)rrr�r3rrrWr	rrr�testNameOverflow�sz+TestLinuxAbstractNamespace.testNameOverflowcCs>t�tjtj�}z|�d�|�|��d�W5|��XdS)Nz
pythontest�
pythontest)rr�r3rrWr�r�rrrr�testStrName�s

z&TestLinuxAbstractNamespace.testStrNamec	Cs>t�tjtj��$}|�td��|�|��d�W5QRXdS)Nr)rr�r3rWr�r�r�rrrr�testBytearrayName�sz,TestLinuxAbstractNamespace.testBytearrayNameN)	r>r?r@rrr
r
rrrrrrr�s	rztest needs socket.AF_UNIXc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestUnixDomaincCst�tjtj�|_dSr+)rr�r3r�r8rrrr:�szTestUnixDomain.setUpcCs|j��dSr+)r�rr8rrrr<�szTestUnixDomain.tearDownc
Cs<zt�|�WStk
r6|�d�|t����YnXdS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoder�rYr�rX�getfilesystemencoding�r9r�rrr�encoded�s��zTestUnixDomain.encodedc
CsXzt�||�WnBtk
rR}z$t|�dkr@|�d�|��n�W5d}~XYnXdS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rr�rr�rYr�)r9r�r�r�rrrrWs��zTestUnixDomain.bindcCs|�|j��d�dS)N)rN)rr�r�r8rrrr�szTestUnixDomain.testUnboundcCs@tj�tj�}|�|j|�|�tj|�|�	|j�
�|�dSr+)r�r��abspathr�TESTFNrWr�rMr�r�r�rrrr�testStrAddrszTestUnixDomain.testStrAddrcCsFtj�tj�}|�|j|�|��|�tj	|�|�
|j��|�dSr+)r�r�rrrrWr�rrMr�r�r�rrrr�
testBytesAddrszTestUnixDomain.testBytesAddrcCsRtj�tj�}|�|�}|�|j|�dd��|�	tj
|�|�|j��|�dS)N�ascii�surrogateescape)
r�r�rrZTESTFN_UNICODErrWr�r�rMr�r�r�)r9r�r�rrr�testSurrogateescapeBinds

z&TestUnixDomain.testSurrogateescapeBindcCsTtjdkr|�d�tj�tj�}|�|j|�|�tj	|�|�
|j��|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLErYr�r�rrWr�rMr�r�r�rrrr�testUnencodableAddr's

z"TestUnixDomain.testUnencodableAddrN)r>r?r@r:r<rrWr�rrrrrrrrr�s	rc@s�eZdZdZddd�Zdd�Zdd�Zd	d
�ZeZdd�Z	eZ
d
d�Zdd�Zdd�Z
eZdd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestzF
    Test the buffer versions of socket.recv() and socket.send().
    r�cCstj||d�dSr�r�r�rrrrD6szBufferIOTest.__init__cCsZt�ddgtt��}|j�|�}|�|tt��|��}|dtt��}|�|t�dS�Nr%r)r&r�r�r�rPr�r��r9rr|r�rrr�testRecvIntoArray9szBufferIOTest.testRecvIntoArraycCstt�}|j�|�dSr+�r�r�r�r��r9rrrr�_testRecvIntoArrayAszBufferIOTest._testRecvIntoArraycCsDtd�}|j�|�}|�|tt��|dtt��}|�|t�dSr�)r�r�rPr�r�r�r rrr�testRecvIntoBytearrayEs
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|j�t|��}|�|tt��|dtt��}|�|t�dSr�)r�r�rPr�r�r�r�r rrr�testRecvIntoMemoryviewNs
z#BufferIOTest.testRecvIntoMemoryviewcCs^t�ddgtt��}|j�|�\}}|�|tt��|��}|dtt��}|�|t�dSr)r&r�r�r�rSr�r��r9rr|r�r�rrr�testRecvFromIntoArrayWsz"BufferIOTest.testRecvFromIntoArraycCstt�}|j�|�dSr+r"r#rrr�_testRecvFromIntoArray_sz#BufferIOTest._testRecvFromIntoArraycCsHtd�}|j�|�\}}|�|tt��|dtt��}|�|t�dSr�)r�r�rSr�r�r�r'rrr�testRecvFromIntoBytearraycs
z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|j�t|��\}}|�|tt��|dtt��}|�|t�dSr�)r�r�rSr�r�r�r�r'rrr�testRecvFromIntoMemoryviewls
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|�t|jj|d�dS)NrUr�)r�rrr�rSr#rrr�testRecvFromIntoSmallBufferusz(BufferIOTest.testRecvFromIntoSmallBuffercCs|j�t�dSr+r�r8rrr�_testRecvFromIntoSmallBufferzsz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|j�|�|j�|d�dSr�)r�r�rSr#rrr�testRecvFromIntoEmptyBuffer}sz(BufferIOTest.testRecvFromIntoEmptyBufferN)r�)r>r?r@rOrDr!r$r%Z_testRecvIntoBytearrayr&Z_testRecvIntoMemoryviewr(r)r*Z_testRecvFromIntoBytearrayr+Z_testRecvFromIntoMemoryviewr,r-r.Z_testRecvFromIntoEmptyBufferrrrrr2s$
ri�����c
Cspttd�sdSztd�}Wntttfk
r6YdSX|�*|D]}|�d�rBW5QR�dSqBW5QRXdS)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 T)rrr
�FileNotFoundError�IsADirectoryErrorr<rx)rr�rrr�isTipcAvailable�s

r4z6TIPC 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)Nrhr�rr�)rr1r(rMrr�r)r*�TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERrW�TIPC_ADDR_NAMErFr#r�r�r�r�)r9rr��srvaddrZsendaddrr�Zrecvaddrrrr�testRDM�s$�
�zTIPCTest.testRDMN)r>r?r@r<rrrrr5�sr5c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�TIPCThreadableTestr�cCstjj||d�t�|�dSr�r�r�rrrrD�szTIPCThreadableTest.__init__cCs�t�tjtj�|_|�|jj�|j�tjtjd�tj	t
ttf}|j�
|�|j��|��|j��\|_|_|�|jj�dSr�)rr1r3rrMrr�r)r*r6r7r8r9rWr7rgr�r�r�)r9r;rrrr:�s�
zTIPCThreadableTest.setUpcCsdt�d�t�tjtj�|_|�|jj�tjt	t
ttt
d�df}|j�
|�|j��|_dS)Nr�r�r)r�r�rr1r3r�rMrr:r7r8rFr9r�r��cliaddr)r9r�rrrr��s
�zTIPCThreadableTest.clientSetUpcCs,|j�d�}|�|t�|�|j|j�dSr�)r�r�r�r�r>r�r�rrrr��szTIPCThreadableTest.testStreamcCs|j�t�|j��dSr+r�r8rrrr��szTIPCThreadableTest._testStreamN)r�r�rrrrr=�s

r=c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestc	Cs�t���}|�|j�W5QRX|�|j�t���}|��W5QRX|�|j�t���}|�t|jd�W5QRX|�|j�dS�Nr )rr�r�rrrrr�r�rrr�_testSocketClass�s


z$ContextManagersTest._testSocketClasscCs2|j��\}}|�|j�|�d�}|�|�dSr��r4r�rMrr�r��r9r�r�r|rrr�testCreateConnectionBase�s
z,ContextManagersTest.testCreateConnectionBasec	CsX|j��}t�|��.}|�|j�|�d�|�|�d�d�W5QRX|�	|j�dS)Nr r�)
r4r�rr�r�r�r�r�r�r�r9rkr�rrr�_testCreateConnectionBase�s

z-ContextManagersTest._testCreateConnectionBasecCs2|j��\}}|�|j�|�d�}|�|�dSr�rBrCrrr�testCreateConnectionClose�s
z-ContextManagersTest.testCreateConnectionClosec	CsH|j��}t�|��}|��W5QRX|�|j�|�t|j	d�dSr@)
r4r�rr�rrr�rrr�rErrr�_testCreateConnectionCloses

z.ContextManagersTest._testCreateConnectionCloseN)r>r?r@rArDrFrGrHrrrrr?�s
r?c@s�eZdZe�eed�d�e�ddd�dd���Z	dd	�Z
d
d�Zdd
�Ze�
edkd�dd��Ze�
edkd�dd��Zdd�ZdS)�InheritanceTestr�zSOCK_CLOEXEC not definedr�ryrzc	CsDt�tjtjtjB��$}|�|jtj�|�|���W5QRXdSr+)rr2r3r�r�r�r��get_inheritablerrrr�test_SOCK_CLOEXECs
�z!InheritanceTest.test_SOCK_CLOEXECc	Cs,t��}|�|�|��d�W5QRXdSr�)rr�rJr�rrr�test_default_inheritablesz(InheritanceTest.test_default_inheritablec
CsLt��}|�6|��}|��|�|�|��d�W5QRXW5QRXdSr�)rr�rr�rJ)r9r�Znewsockrrr�test_dupszInheritanceTest.test_dupc	CsPt��}|�:|�d�|�|��d�|�d�|�|��d�W5QRXdS)NTF)r�set_inheritabler�rJr�rrr�test_set_inheritable!s

z$InheritanceTest.test_set_inheritableNr�c	Csnt��}|�X|��}|�|��d�t�|tj�}|tjM}t�|tj|�|�|��d�W5QRXdS)NFT)rr
r�rJr
�F_GETFD�
FD_CLOEXECZF_SETFD)r9r�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�W5QRXdS)NTr)rr
r�r
rPrQrN)r9r�r,rrr�test_set_inheritable_cloexec8s�
�z,InheritanceTest.test_set_inheritable_cloexeccCsHt��\}}|�|j�|�|j�|�|��d�|�|��d�dSr�)rr�rMrr�rJ)r9rr8rrr�test_socketpairEs
zInheritanceTest.test_socketpair)r>r?r@r�rIrrrr�rKrLrMrOrKr
rRrSrTrrrrrI
s�	


rIr"zSOCK_NONBLOCK not definedc@s,eZdZddd�Ze�ddd�dd	��Zd
S)�NonblockConstantTestTrncCs�|rj|�|jtj�|�|��|�|�t�|tjtj	�tj	@�|dkrZ|�
|���q�|�|���nL|�|jtj�|�|��d�|�
t�|tjtj	�tj	@�|�|���dSr�)r�r�rr3r~rr
rpr�rqr�ro)r9r�nonblockr.rrr�
checkNonblockPs�	�z"NonblockConstantTest.checkNonblockr�ryrzc	Cs^t�tjtjtjB���}|�|�|�d�|j|dd�|�d�|�|�|�d�|j|dd�|�d�|j|dd�|�d�|j|dd�W5QRXt��}t�d�t���}|�|�W5QRXt�d�t���}|�|d�W5QRXt�d�t���}|j|dd�W5QRXt�d�t���}|�|d�W5QRXt�|�dS)NrhF)rVrg@rDrn)	rr2r3r"rWr#r�r,r-)r9r�trrr�test_SOCK_NONBLOCKis:
�














z'NonblockConstantTest.test_SOCK_NONBLOCKN)Trn)r>r?r@rWrr�rYrrrrrUMs
rUr0r1zneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|��}|��}t�|�}|��\}}|�|�|��|��dSr+)r|r�	fromsharer�r�r)r{�qZsdata�messagerr8r�rrr�remoteProcessServer�s

z%TestSocketSharing.remoteProcessServerc	Cs�t��}tj|j|fd�}|��|j�|j�}|j��}|j�	�|�
|�d}|�
|�t�|�}g}|�
d�}|szq�|�|�qj|�	�d�|�}|�||�|��dS)N�rXrIs
slapmahfror�r�)�multiprocessingrq�Processr^r[r4�share�pidr�rr�rr�r�r�r�r�)	r9r\rr|r�r]r�m�receivedrrr�	testShare�s&






zTestSocketSharing.testSharecCs@|j�t���}|�ttj|dd��|�ttj|d�dS)NrMr )r4rbr��getpidrrrr[)r9r|rrr�testShareLength�sz!TestSocketSharing.testShareLengthcCsb|�|��d�|�|��|���|�|j|j�|�|j|j�|jdkr^|�|j|j�dSr�)r�r~rr�r)r9Zorg�otherrrr�compareSockets�s
z TestSocketSharing.compareSocketscCs<|j�t���}t�|�}z|�|j|�W5|��XdSr+)r4rbr�rgrr[rrj)r9r|rrrr�testShareLocal�s

z TestSocketSharing.testShareLocalc
Cs�tjtjg}tjtjg}|D]|}|D]r}zt�||�}Wntk
rPYq$YnXz8|�t�	��}t�
|�}z|�||�W5|��XW5|��Xq$qdSr+)rr2r�r3rrrrbr�rgr[rj)r9�families�typesrrX�sourcer|Zsharedrrr�	testTypes�s

zTestSocketSharing.testTypesN)
r>r?r@r�r^rfrhrjrkrorrrrrZ�s

#rZc@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�r_r�r�c	Cs�dd�}d�dd�t|j�D��}ttjd��$}||j|j�D]}|�|�q>W5QRXttjd��$}|��|_	t
|j	�|jks�t�W5QRXdS)Ncss2||kst�||kr$|V||8}q|r.|VdSr+)r�)�total�steprrr�chunks�s
z0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSsg|]}t�tj����qSr)�random�choice�string�
ascii_lettersr�r�rrrr�s�z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r�r)r�r�BUFSIZEr
rr�FILESIZEr�r��FILEDATAr�r�)r{rs�chunkrZcsizerrr�
setUpClass�s
�
z SendfileUsingSendTest.setUpClasscCst�tj�dSr+)rr�r)r{rrr�
tearDownClasssz#SendfileUsingSendTest.tearDownClasscCs6|j�t�|j��\}}|�|j�|�|j�|Sr+)r4r�r�r��TIMEOUTrMrr�rrr�accept_conns
z!SendfileUsingSendTest.accept_conncCs,g}|�|j�}|sq"|�|�qd�|�Sr�)r�rxr�r�)r9r�rer{rrr�	recv_dataszSendfileUsingSendTest.recv_datacCs
t|d�S)N�_sendfile_use_send�rur�rrr�meth_from_sock#sz$SendfileUsingSendTest.meth_from_sockc
Csr|j��}ttjd�}t�|��H}|�8}|�|�}||�}|�||j	�|�|�
�|j	�W5QRXW5QRXdS)Nr�r4r�r
rrrr�r�r�ry�tell�r9rk�filer��meth�sentrrr�_testRegularFile*s

z&SendfileUsingSendTest._testRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dSr+�rr�r�r�ryrz�r9r�r|rrr�testRegularFile3s
z%SendfileUsingSendTest.testRegularFilec
Cs||j��}t�|j�}t�|��R}|�B}|�|�}|�||j	�|�|�
�|j	�|�tj|j
|�W5QRXW5QRXdSr+)r4r��io�BytesIOrzrr�r.r�ryr�rr3r4)r9rkr�r�r�rrr�_testNonRegularFile;s

�z)SendfileUsingSendTest._testNonRegularFilecCs6|��}|�|�}|�t|�|j�|�||j�dSr+r�r�rrr�testNonRegularFileEs
z(SendfileUsingSendTest.testNonRegularFilec
Cs�|j��}tjd}t|d��|�tj|�W5QRXt|d�}t�|��D}|�4}|�	|�}||�}|�
|d�|�
|��d�W5QRXW5QRXdS)N�2r�rr)r4r�rrr
rMr�rr�r�r�r�)r9rk�filenamer�r�r�r�rrr�_testEmptyFileSendMs



z(SendfileUsingSendTest._testEmptyFileSendcCs"|��}|�|�}|�|d�dSr�)rr�r�r�rrr�testEmptyFileSendYs
z'SendfileUsingSendTest.testEmptyFileSendc
Csz|j��}ttjd�}t�|��P}|�@}|�|�}||dd�}|�||j	d�|�|�
�|j	�W5QRXW5QRXdS)Nr�)�offsetr�r�rrr�_testOffset`s

z!SendfileUsingSendTest._testOffsetcCsB|��}|�|�}|�t|�|jd�|�||jdd��dS)Nr�r�r�rrr�
testOffsetis
z SendfileUsingSendTest.testOffsetc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�W5QRXW5QRXdS)Nrr�rD�GKL�r��
r4r�r
rrrr�r�r�r��r9rkr�r�r�r�r�rrr�
_testCountqs

z SendfileUsingSendTest._testCountcCs@d}|��}|�|�}|�t|�|�|�||jd|��dS)Nr��rr�r�r�rz�r9r�r�r|rrr�	testCount{s

zSendfileUsingSendTest.testCountc
Csz|j��}ttjd�}tj|dd��L}|�<}d}|�|�}|||d�}|�||�|�|�	�|�W5QRXW5QRXdS)Nrr�rDrhr�r�r�rrr�_testCountSmall�s

z%SendfileUsingSendTest._testCountSmallcCs@d}|��}|�|�}|�t|�|�|�||jd|��dSr�r�r�rrr�testCountSmall�s

z$SendfileUsingSendTest.testCountSmallc
Cs�|j��}ttjd�}tj|dd��R}|�B}d}|�|�}||d|d�}|�||�|�|�	�|d�W5QRXW5QRXdS)Nrr�rD駆��)r�r�r�r�rrr�_testCountWithOffset�s

z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|��}|�|�}|�t|�|�|�||jd|d��dS)Nr�r�r�r�rrr�testCountWithOffset�s

z)SendfileUsingSendTest.testCountWithOffsetc
Csr|j��}ttjd�}t�|��H}|�8}|�d�|�|�}|�	t
||�|�	t
|j|�W5QRXW5QRXdS)NrF)r4r�r
rrrr�r#r�rrr.�r9rkr�r�r�rrr�_testNonBlocking�s


z&SendfileUsingSendTest._testNonBlockingcCs |��}|�d�r|�d�dS)Nr_z$was not supposed to receive any data)rr�r�r9r�rrr�testNonBlocking�s
z%SendfileUsingSendTest.testNonBlockingc
Csd|j��}ttjd�}tj|dd��6}|�&}|�|�}||�}|�||j	�W5QRXW5QRXdS)Nrr�rD)
r4r�r
rrrr�r�r�ryr�rrr�_testWithTimeout�s

z&SendfileUsingSendTest._testWithTimeoutcCs6|��}|�|�}|�t|�|j�|�||j�dSr+r�r�rrr�testWithTimeout�s
z%SendfileUsingSendTest.testWithTimeoutc
Cs`|j��}ttjd��@}t�|��*}|�d�|�|�}|�	tj
||�W5QRXW5QRXdS)Nrg{�G�z�?)r4r�r
rrrr�r�r�rr.r�rrr�_testWithTimeoutTriggeredSend�s


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|��}|�d�dS)Ni�X)rr�r�rrr�testWithTimeoutTriggeredSend�sz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdSr+rr8rrr�_test_errors�sz"SendfileUsingSendTest._test_errorsc
Csttjd��:}tjtjd�� }|�|�}|�td||�W5QRXW5QRXttjd��4}t��� }|�|�}|�td||�W5QRXW5QRXttjd��t}t���`}|�|�}|jtd||dd�|jtd||d	d�|jtd||d
d�|jtd||dd�W5QRXW5QRXdS)Nrr�r3r�zbinary modezpositive integerr�r�r�rrM)	r
rrrrr�rrr�)r9r�rr�rrr�test_errors�sR
�

�

����z!SendfileUsingSendTest.test_errorsN)$r>r?r@rOryrxrzr~r�r|r}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrp�sD

		
	
	
	
		rpr.z%os.sendfile() required for this test.c@seZdZdZdd�ZdS)�SendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    cCs
t|d�S)Nr4r�r�rrrr��sz(SendfileUsingSendfileTest.meth_from_sockN)r>r?r@rOr�rrrrr��sr�zAF_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�}z|�||f�Wn<tk
r`}z|��t�t|�||��W5d}~XYnX|SdSr�)	rr%r#rWr2rr�ZSkipTestr�)r9�typr�r�r�rrr�
create_algs$zLinuxKernelCryptoAPI.create_algr"r�c
Cs�t�d�}|�dd���}|��\}}|�"|�d�|�|�d�|�W5QRX|��\}}|�L|�dtj	�|�dtj	�|�dtj	�|�d	�|�|�d�|�W5QRXW5QRXdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabcrt�a�b�cr�)
r��fromhexr�r�r�r�r�r�r�MSG_MORE�r9r�algo�oprjrrr�test_sha256
s


z LinuxKernelCryptoAPI.test_sha256c
Cspt�d�}|�dd��P}|�tjtjd�|��\}}|�"|�d�|�	|�
d�|�W5QRXW5QRXdS)NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79r�z
hmac(sha1)sJefeswhat do ya want for nothing?rt)r�r�r�r�r�SOL_ALG�ALG_SET_KEYr�r�r�r�r�rrr�test_hmac_sha1s

z#LinuxKernelCryptoAPI.test_hmac_sha1r�c

Cs�t�d�}t�d�}d}t�d�}t|�}|�dd���z}|�tjtj|�|��\}}|�6|j	tj
|tjd�|�|�|�
|�|�|�W5QRX|��\}}|�,|j	|gtj|d�|�
|�|�|�W5QRXd	}	|g|	}
|��\}}|�&|j	|
tj
|d�|�||	�}W5QRX|�
t|�||	�|�
|d|�|�|��\}}|�(|j	|gtj|d�|�||	�}W5QRX|�
t|�||	�|�
|||	�W5QRXdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))r��ivr�)r�r�r�)r�r�r�r�r�rr�r�r��
sendmsg_afalg�ALG_OP_ENCRYPTr�r�r�r��ALG_OP_DECRYPT)
r9�keyr�r�Z
ciphertextZmsglenr�r�rjZ
multiplierZlongmsg�encZdecrrr�test_aes_cbc*sR



�
�
��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��W5QRX|	�	�\}
}|
�f||}
|
j
|
gtj||d
�|
�|t|�|�}|�||||��|�|||d��W5QRXt�d�j}|	�	�\}
}|
��||}
|
�|
gtjtj|tj�gtjtj|t|��|gtjtj||�gf�|
�t|
�|�}|�||||��|�|||d��W5QRX|	�	�\}
}|
�N|||}
|
j
|
gtj||d
�|
�t|
�|�}|�|||d��W5QRXW5QRXdS)NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))r�r��assoclenr�)r�r�r�r	)r�r�r�r�r�rr�r��ALG_SET_AEAD_AUTHSIZEr�r�r�r�r�r�r�r�Structrur��
ALG_SET_OP�
ALG_SET_IV�ALG_SET_AEAD_ASSOCLENr�)r9r�r�ZplainZassocZexpected_ctZexpected_tagZtaglenr�r�r�rj�resr�Zpack_uint32rrr�test_aead_aes_gcmSsp





�
�
 � �� �z&LinuxKernelCryptoAPI.test_aead_aes_gcmc
Csn|�dd��X}t�d�}|�tjtj|�|��\}}|� |�d�}|�	t
|�d�W5QRXW5QRXdS)N�rngZdrbg_pr_sha256r])r�r��urandomr�rr�r�r�r�r�r�)r9r�Z
extra_seedr�rjZrnrrr�test_drbg_pr_sha256�s

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c
Cs�t�tjtjd�}|��|�t��|��W5QRX|�t��|jdd�W5QRX|�t��|�d�W5QRX|�t��|jtjdd�W5QRX|�t��|jtjdd�W5QRXW5QRXdS)Nr)r�rh)r�r�rM)rr%r#rr�r�r�r�rrr�test_sendmsg_afalg_args�sz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc	Cs�t�tjtjd�}|�|j�|�t��|�d�W5QRX|�t	d��|�d�W5QRX|�t��|�d�W5QRX|�t	d��|�d�W5QRXdS)Nr)Z
tttttttttttttr�z
type too long)Zttttttttttttttr�)r�Z?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz
name too long)r�Z@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
rr%r#rMrrr2rWrrr�rrr�test_length_restriction�sz,LinuxKernelCryptoAPI.test_length_restrictionN)
r>r?r@r�rr�r�r�r�r�r�r�r�rrrrr��s



(

>


r��winzrequires Windowsc@s$eZdZddddddhZdd�Zd	S)
�TestMSWindowsTCPFlags�
TCP_MAXSEG�TCP_NODELAY�TCP_FASTOPEN�TCP_KEEPCNT�TCP_KEEPIDLE�
TCP_KEEPINTVLcs6dd�tt�D�}�fdd�|D�}��g|d�dS)NcSsg|]}|�d�r|�qS)ZTCP)rx�r�rrrrr��s
z<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]}|�jkr|�qSr)�
knownTCPFlagsr�r8rrr��s
zANew TCP flags were discovered. See bpo-32394 for more information)r�rr�)r9Zprovided�unknownrr8r�test_new_tcp_flags�s
�z(TestMSWindowsTCPFlags.test_new_tcp_flagsN)r>r?r@r�r�rrrrr��s�
r�c@s�eZdZdd�Zdd�Zdd�Ze�ee	d�p:ee	d�d	�e�
ejd
�dd���Z
e�e��d
�e�
ejd
�dd���ZdS)�CreateServerTestc	Cs�t��}t�d|f��.}|�|��dd�|�|��d|�W5QRXtjr�tjd|ftjd��.}|�|��dd�|�|��d|�W5QRXdS)Nr
rrhr�r�)rr�r�
create_serverr�r�r�r��r9r6r�rrr�test_address�s
�zCreateServerTest.test_addressc	Cs|t�d��&}|�|jtj�|�|jtj�W5QRXtjrxtjdtj	d��&}|�|jtj	�|�|jtj�W5QRXdS)Nr	�r�rr�)
rr�r�rr2r�r3rr�r�)r9r�rrrr�test_family_and_type�sz%CreateServerTest.test_family_and_typec	Cs�ttd�s0|�t��tjddd�W5QRXnht�d��"}|�tjtj�}|�|d�W5QRXtjddd��"}|�tjtj�}|�	|d�W5QRXdS)N�SO_REUSEPORT)r�rT)�
reuse_portr)
rrrrr�r�r)r�r�r�)r9r��optrrr�test_reuse_port�s
z CreateServerTest.test_reuse_portr.�IPV6_V6ONLYz IPV6_V6ONLY option not supported�IPv6 required for this testc	Cs4tjdtjd��}|�tjtj�s&t�W5QRXdS)Nr�r�)rr�r�r�r.r�r�r�rrr�test_ipv6_only_default�sz'CreateServerTest.test_ipv6_only_default�dualstack_ipv6 not supportedc	Cs2tjdtjdd��}|�|jtj�W5QRXdS)Nr�T�r�dualstack_ipv6)rr�r�r�rr�rrr�test_dualstack_ipv6_familys

�z+CreateServerTest.test_dualstack_ipv6_familyN)r>r?r@r�r�r�r�rKrrrIrr�r�r�has_dualstack_ipv6r�rrrrr��s	
��r�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Ze	�
ejd�d
d��Z
e	�e��d�e	�
ejd�dd���Ze	�e��d�e	�
ejd�dd���ZdS)�CreateServerFunctionalTestr�cCs
d|_dSr+)rvr8rrrr:sz CreateServerFunctionalTest.setUpcCs|jdk	r|j�|j�dSr+)rvr�r.r8rrrr<s
z#CreateServerFunctionalTest.tearDowncsJ��fdd�}t���|��j�tj||fd��_�j�����dS)Nc
sl|�^|��\}}|�B���j�|�d�}|sJW5QR�W5QR�dS|�|�W5QRXW5QRXdSr�)r�ryr.r�r�)r�r�rjr��rmr9rr�runs
z3CreateServerFunctionalTest.echo_server.<locals>.runr_)rErmr�r.rYrvr[rf)r9r�r�rr�r�echo_servers

z&CreateServerFunctionalTest.echo_serverc	CsNtj|d��8}|�|j�|�|�|�d�|�|�d�d�W5QRXdS)Nr�r r�)rr�r.r�r�r�r�)r9r�rr�rrr�echo_client&s


z&CreateServerFunctionalTest.echo_clientc	CsBt��}t�d|f��"}|�|�|�d|ftj�W5QRXdS)Nrr
)rr�rr�r�r�r2r�rrr�	test_tcp4-s
z$CreateServerFunctionalTest.test_tcp4r�c	CsHt��}tjd|ftjd��"}|�|�|�d|ftj�W5QRXdS)Nrr�r��rr�rr�r�r�r�r�rrr�	test_tcp63s
�
z$CreateServerFunctionalTest.test_tcp6r�c	CsJt��}tjd|ftjdd��"}|�|�|�d|ftj�W5QRXdS)NrTr�r
)rr�rr�r�r�r�r2r�rrr�test_dual_stack_client_v4=s�
z4CreateServerFunctionalTest.test_dual_stack_client_v4c	CsJt��}tjd|ftjdd��"}|�|�|�d|ftj�W5QRXdS)NrTr�r�r�r�rrr�test_dual_stack_client_v6Gs�
z4CreateServerFunctionalTest.test_dual_stack_client_v6N)r>r?r@r.r:r<r�r�r�r�rIrr�r�rKrr�r�r�rrrrr�s$
	��r�cCstttttttttt	t
g}|�tt
ttttttttttttg�|�t�|�t�|�t�|�ttg�|�t t!g�|�t"t#g�|�t$�|�t%�|�t&t'g�|�t(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=t>t?t@g�|�tA�tB�C�}tBjD|�tBjE|�dSr+)Frr�r`r�r�rr�r�r�r�r��extendrlr�r�r�r�r�r�r�r�r�r�r?rIrUr�rfrrr5r=rLrxr�r�r�r�r�r�r�r)r*r+r-r.r0r1r/r3r4r5r7r8r=r?r@rArBrCrLrWrZrpr�r�rZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_mainRs���




��

r�__main__)�r��testrrBr�r�rr�r�r�r�rprXr�rwr&r��weakrefrr�r�rrrtr:rv�_threadrvrEr`r�r
r�r�r�r�r��systemrrrrr!r$r&r(r*r�r/ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKr�r�r�r1rArBrQr^r`r�r�r�r�rKrIr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrLrxr�r�r�r�r�r�r�r�r
rrrrrrr?rQrTrrrwrzr�r�r�r'r)r*r+r,r�r-r.r/r0r1r2r3r4r5r6r7r8r=r>r?r@rArBrCrDrrLrWr`rfrlr�r�r�r�r�r�r�r/r�r�r�r�r�r�r�r�rrrr7r8r9r4r5r=r?rIrUr�rZrpr�r�rxr�r�r�rr>rrrr�<module>s�










	
3u��!��$	
P
S
Z
*

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


�	



�
��

�
��





�



�
�

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


	?E9)ES��',C�<e�D3GC

F1le Man4ger