403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.216.124
Web Server : Apache
System : Linux web0264.sh.tyo1 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
User : c9415830 ( 11735)
PHP Version : 8.4.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python36/lib64/python3.6/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python36/lib64/python3.6/test/__pycache__/test_socket.cpython-36.pyc
3

�w2_�I�+@s�
ddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZddlZddlZddlZddlZddlZddlZyddlZWnek
r�dZYnXyddlZWnek
�rdZYnXejZdjd�ZdZyddlZ ddl!Z!Wnek
�rLdZ dZ!YnXyddl"Z"Wnek
�rtdZ"YnXdd	�Z#d
d�Z$dd
�Z%e#�Z&e$�Z'e%�Z(ejd�j)Z*Gdd�dej+�Z,Gdd�dej+�Z-Gdd�dej+�Z.Gdd�dej+�Z/Gdd�dej+�Z0Gdd�d�Z1Gdd�de,e1�Z2Gdd�de-e1�Z3Gdd �d e/e1�Z4Gd!d"�d"e0e1�Z5Gd#d$�d$e2�Z6Gd%d&�d&ej+e1�Z7Gd'd(�d(ej+�Z8Gd)d*�d*e8�Z9Gd+d,�d,e.e8e1�Z:Gd-d.�d.e9e:�Z;Gd/d0�d0e8�Z<Gd1d2�d2e<�Z=Gd3d4�d4e8�Z>Gd5d6�d6e>�Z?Gd7d8�d8e>�Z@Gd9d:�d:e>�ZAGd;d<�d<e>�ZBGd=d>�d>eB�ZCd?d@�ZDdAdB�ZEdCdD�ZFGdEdF�dFej+�ZGejHe&dG�GdHdI�dIej+��ZIejHe&dG�ejHe dJ�GdKdL�dLe4���ZJejHe'dM�GdNdO�dOej+��ZKejHe'dM�ejHe dJ�GdPdQ�dQe5���ZLejHe dJ�GdRdS�dSe6��ZMejHe dJ�GdTdU�dUe3��ZNGdVdW�dWe.�ZOGdXdY�dYeO�ZPGdZd[�d[eO�ZQGd\d]�d]eO�ZRGd^d_�d_eO�ZSGd`da�daeO�ZTGdbdc�dceO�ZUGddde�deeU�ZVGdfdg�dgeV�ZWGdhdi�dieV�ZXGdjdk�dkeO�ZYGdldm�dmeY�ZZGdndo�doeY�Z[Gdpdq�dqePeY�Z\Gdrds�dsej+�Z]Gdtdu�dueU�Z^Gdvdw�dweU�Z_Gdxdy�dyeQeSe:e@�Z`eEejdz�ejHe dJ�Gd{d|�d|eXe`���ZaeEejd}�ejHe dJ�Gd~d�de[e`���ZbeEejd��ejHe dJ�Gd�d��d�e\e`���ZcGd�d��d�eQeSe:eC�ZdeEejdz�ejHejed��eFd�d��ejHe dJ�Gd�d��d�eXed�����ZfeEejd}�ejHejed��eFd�d��ejHe dJ�Gd�d��d�e[ed�����ZgeEejd��ejHejed��eFd�d��ejHe dJ�Gd�d��d�e\ed�����ZheEejd}�ejHejed��eEed��eFd�d��ejHe dJ�Gd�d��d�e_ed������ZieEejd��ejHejed��eEed��eFd�d��ejHe dJ�Gd�d��d�ePe_ed������ZjGd�d��d�eTe;e?�ZkeEejdz�ejHe dJ�Gd�d��d�eWek���ZleEejd}�ejHe dJ�Gd�d��d�e[eZek���ZmeEejd��ejHe dJ�Gd�d��d�e\eZek���ZnGd�d��d�eReTe;eA�ZoeEejdz�eFd�d�d��ejHe dJ�Gd�d��d�eWeo����ZpeEejd}�eFd�d�d��ejHe dJ�Gd�d��d�e[eZeo����ZqeEejd��eFd�d�d��ejHe dJ�Gd�d��d�e\eZeo����ZrGd�d��d�eTe;e=�ZseEejdz�eEed��ejHe dJ�Gd�d��d�eWes����ZteEejd}�eEed��ejHe dJ�Gd�d��d�e[eZes����ZueEejd��eEed��ejHe dJ�Gd�d��d�e\eZes����ZveEejdzd}�eEed�d�d��ejHe dJ�Gd�d��d�e^es����ZweEejdzd��eEed�d�d��ejHe dJ�Gd�d��d�ePe^es����ZxGd�d��d�ej+�ZyeEed��ejHezed���
pezed��d��Gd�d��d�eye@���Z{eEed��ejHezed���
p<ezed��d��ejHe dJ�Gd�d��d�eye.e9e?����Z|ejHe dJ�Gd�d��d�e2��Z}ejHe dJ�Gd�d„d�e7��Z~ejHe dJ�Gd�dĄd�e2��ZejHe dJ�Gd�dƄd�e6��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�eM�Z�Gd�d؄d�ej+�Z�ejHe dJ�Gd�dڄd�e,e1��Z�ejHe dJ�Gd�d܄d�e,e1��Z�Gd�dބd�e,�Z�Gd�d�d�e-�Z�Gd�d�d�ej+�Z�ejHej�d�kd�Gd�d�d�ej+��Z�ejHezed��d�Gd�d�d�ej+��Z�ejHe dJ�Gd�d�d�e6��Z�d�Z�d�Z�d�Z�d�d�Z�ejHe��d�Gd�d�d�ej+��Z�ejHe��d�Gd�d��d�ej+e1��Z�ejHe dJ�Gd�d��d�e2��Z�Gd�d��d�ej+�Z�ejHezed��d��Gd�d��d�ej+��Z�ejHe
j�d�kd��ejHe�d�G�d�d��de,���Z�ejHe dJ�G�d�d��de2��Z�ejHe dJ�ejHeze
�d��d�G�d�d��de����Z�ejHe(�d	�G�d
�d��dej+��Z�ejHej�j��d��d
�G�d�d��dej+��Z��d�d�Z�e��dk�
r�e��dS(�N)�support)�proxyFuMichael Gilfix was hereሴ
zutf-8gN@cCs>ytjtjtjtj�}Wnttfk
r0dSX|j�dS)z5Check whether CAN sockets are supported on this host.FT)�socket�PF_CAN�SOCK_RAW�CAN_RAW�AttributeError�OSError�close)�s�r�5/opt/alt/python36/lib64/python3.6/test/test_socket.py�_have_socket_can1srcCs<ytjtjtjd�}Wnttfk
r.dSX|j�dS)z5Check whether RDS sockets are supported on this host.rFT)r�PF_RDS�SOCK_SEQPACKETrr	r
)rrrr
�_have_socket_rds;srcCs<ytjtjtjd�}Wnttfk
r.dSX|j�dS)z8Check whether AF_ALG sockets are supported on this host.rFT)r�AF_ALGrrr	r
)rrrr
�_have_socket_algEsr�ic@seZdZdd�Zdd�ZdS)�
SocketTCPTestcCs.tjtjtj�|_tj|j�|_|jj�dS)N)r�AF_INET�SOCK_STREAM�servr�	bind_port�port�listen)�selfrrr
�setUpZszSocketTCPTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
�tearDown_s
zSocketTCPTest.tearDownN)�__name__�
__module__�__qualname__rrrrrr
rXsrc@seZdZdd�Zdd�ZdS)�
SocketUDPTestcCs$tjtjtj�|_tj|j�|_dS)N)rr�
SOCK_DGRAMrrrr)rrrr
reszSocketUDPTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
ris
zSocketUDPTest.tearDownN)rr r!rrrrrr
r"csr"cs<eZdZdZer4�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||�tj�|_dS)N)�super�__init__�	threading�RLock�
_cleanup_lock)r�args�kwargs)�	__class__rr
r&usz"ThreadSafeCleanupTestCase.__init__c
s |j�t�j||�SQRXdS)N)r)r%�
addCleanup)rr*r+)r,rr
r-ysz$ThreadSafeCleanupTestCase.addCleanupc
s |j�t�j||�SQRXdS)N)r)r%�
doCleanups)rr*r+)r,rr
r.}sz$ThreadSafeCleanupTestCase.doCleanups)	rr r!�__doc__r'r&r-r.�
__classcell__rr)r,r
r$ms
r$c@sHeZdZdZdZdZdZeje�Z	dZ
e
deje
�d7Z
dd	�Zd
S)�
SocketCANTestz�To be able to run this test, a `vcan0` CAN interface can be created with
    the following commands:
    # modprobe vcan
    # ip link add dev vcan0 type vcan
    # ifconfig vcan0 up
    Zvcan0�z=IB3x8sz@3I4l2I�x�cCsbtjtjtjtj�|_|j|jj�y|jj|jf�Wn$t	k
r\|j
d|j�YnXdS)Nz%network interface `%s` does not exist)rrrrrr-r
�bind�	interfacer	�skipTest)rrrr
r�szSocketCANTest.setUpN)rr r!r/r6�bufsize�
can_frame_fmt�structZcalcsizeZcan_frame_size�bcm_cmd_msg_fmtrrrrr
r1�s

r1c@seZdZdZdZdd�ZdS)�
SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
    i cCsXtjtjtjd�|_|j|jj�ytj|j�|_Wnt	k
rR|j
d�YnXdS)Nrzunable to bind RDS socket)rrrrr-r
rrrr	r7)rrrr
r�szSocketRDSTest.setUpN)rr r!r/r8rrrrr
r<�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|_dS)N)r�_ThreadableTest__setUpr�_ThreadableTest__tearDown�_setUp�	_tearDown)rrrr
r&�szThreadableTest.__init__cCs|jj�dS)z�This method allows the server to explicitly indicate that
        it wants the client thread to proceed. This is useful if the
        server is about to execute a blocking routine that is
        dependent upon the client thread during its setup routine.N)�server_ready�set)rrrr
�serverExplicitReady�sz"ThreadableTest.serverExplicitReadycCs�tj�|_|jj�tj�|_tj�|_tj�|_t	j
d�|_	d|_|j�}|j
d�}||dd�}t|d|�}tj|j|f�|_z&y|j�Wnd|_�YnXWd|jj�X|jj�dS)N�F�.�_T)rZwait_threads_exit�wait_threads�	__enter__r'�EventrB�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadr>rC�wait)rZ
methodnamerZtest_methodrrr
r@�s(





zThreadableTest._setUpcCs>|j�|jj�|jjddd�|jj�r:|jj�}|�dS)N)r?rLrVrH�__exit__rMZqsize�get)r�excrrr
rAs


zThreadableTest._tearDownc*Cs�|jj�zFy|j�Wn4tk
rL}z|jj|�|j�dSd}~XnXWd|jj�X|j	rp|j�dSt
|d�s�td��z>y
|�Wn.tk
r�}z|jj|�WYdd}~XnXWd|j�XdS)N�__call__z%test_func must be a callable function)rBrV�clientSetUp�
BaseExceptionrM�put�clientTearDownrKrCrO�hasattr�	TypeError)rZ	test_func�errr
rUs$


"zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedError)rrrr
r[2szThreadableTest.clientSetUpcCs|jj�tj�dS)N)rLrCrS�exit)rrrr
r^5s
zThreadableTest.clientTearDownN)rr r!r/r&rDr@rArUr[r^rrrr
r=�s$	r=c@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedTCPSocketTest�runTestcCstj||d�tj|�dS)N)�
methodName)rr&r=)rrfrrr
r&;szThreadedTCPSocketTest.__init__cCstjtjtj�|_dS)N)rrr�cli)rrrr
r[?sz!ThreadedTCPSocketTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^Bs
z$ThreadedTCPSocketTest.clientTearDownN)re)rr r!r&r[r^rrrr
rd9s
rdc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedUDPSocketTestrecCstj||d�tj|�dS)N)rf)r"r&r=)rrfrrr
r&IszThreadedUDPSocketTest.__init__cCstjtjtj�|_dS)N)rrr#rg)rrrr
r[Msz!ThreadedUDPSocketTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^Ps
z$ThreadedUDPSocketTest.clientTearDownN)re)rr r!r&r[r^rrrr
rhGs
rhc@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedCANSocketTestrecCstj||d�tj|�dS)N)rf)r1r&r=)rrfrrr
r&WszThreadedCANSocketTest.__init__cCsDtjtjtjtj�|_y|jj|jf�Wntk
r>YnXdS)N)rrrrrgr5r6r	)rrrr
r[[s
z!ThreadedCANSocketTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^ds
z$ThreadedCANSocketTest.clientTearDownN)re)rr r!r&r[r^rrrr
riUs
	ric@s&eZdZd	dd�Zdd�Zdd�ZdS)
�ThreadedRDSSocketTestrecCstj||d�tj|�dS)N)rf)r<r&r=)rrfrrr
r&kszThreadedRDSSocketTest.__init__cCsNtjtjtjd�|_y |jjtdf�|jj�|_Wntk
rHYnXdS)Nr)	rrrrgr5�HOST�getsockname�cli_addrr	)rrrr
r[osz!ThreadedRDSSocketTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^zs
z$ThreadedRDSSocketTest.clientTearDownN)re)rr r!r&r[r^rrrr
rjis
rjc@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.
    recCstj||d�dS)N)rf)rdr&)rrfrrr
r&�szSocketConnectedTest.__init__cCs*tj|�|j�|jj�\}}||_dS)N)rdrrDr�accept�cli_conn)r�conn�addrrrr
r�s
zSocketConnectedTest.setUpcCs|jj�d|_tj|�dS)N)rpr
rdr)rrrr
r�s
zSocketConnectedTest.tearDowncCs(tj|�|jjt|jf�|j|_dS)N)rdr[rg�connectrkr�	serv_conn)rrrr
r[�s
zSocketConnectedTest.clientSetUpcCs|jj�d|_tj|�dS)N)rtr
rdr^)rrrr
r^�s
z"SocketConnectedTest.clientTearDownN)re)	rr r!r/r&rrr[r^rrrr
rns
rnc@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�SocketPairTestrecCstjj||d�tj|�dS)N)rf)�unittest�TestCaser&r=)rrfrrr
r&�szSocketPairTest.__init__cCstj�\|_|_dS)N)r�
socketpairrrg)rrrr
r�szSocketPairTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
r�s
zSocketPairTest.tearDowncCsdS)Nr)rrrr
r[�szSocketPairTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^�s
zSocketPairTest.clientTearDownN)re)rr r!r&rrr[r^rrrr
ru�s

ruc@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|j�|_|j�dS)N)�	newSocketr�
bindServer)rrrr
r�s
zSocketTestBase.setUpcCs|j|j�|jj�|_dS)z9Bind server socket and set self.serv_addr to its address.N)�bindSockrrl�	serv_addr)rrrr
r{�szSocketTestBase.bindServercCs|jj�d|_dS)N)rr
)rrrr
r�s
zSocketTestBase.tearDownN)rr r!r/rr{rrrrr
ry�srycs eZdZdZ�fdd�Z�ZS)�SocketListeningTestMixinz%Mixin to listen on the server socket.cst�j�|jj�dS)N)r%rrr)r)r,rr
r�s
zSocketListeningTestMixin.setUp)rr r!r/rr0rr)r,r
r~�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||�tj|�dS)N)r%r&r=)rr*r+)r,rr
r&�sz ThreadedSocketTestMixin.__init__cCs|j�|_|j�dS)N)�newClientSocketrg�
bindClient)rrrr
r[�s
z#ThreadedSocketTestMixin.clientSetUpcCs|j�S)z&Return a new socket for use as client.)rz)rrrr
r��sz'ThreadedSocketTestMixin.newClientSocketcCs|j|j�|jj�|_dS)z8Bind client socket and set self.cli_addr to its address.N)r|rgrlrm)rrrr
r��sz"ThreadedSocketTestMixin.bindClientcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^�s
z&ThreadedSocketTestMixin.clientTearDown)
rr r!r/r&r[r�r�r^r0rr)r,r
r�srcsDeZdZdZ�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�|j�|jj�\}}||_dS)N)r%rrDrrorp)rrqrr)r,rr
rs
zConnectedStreamTestMixin.setUpcs|jj�d|_t�j�dS)N)rpr
r%r)r)r,rr
rs
z!ConnectedStreamTestMixin.tearDowncs$t�j�|jj|j�|j|_dS)N)r%r[rgrsr}rt)r)r,rr
r[s
z$ConnectedStreamTestMixin.clientSetUpcs8y|jj�d|_Wntk
r(YnXt�j�dS)N)rtr
rr%r^)r)r,rr
r^s

z'ConnectedStreamTestMixin.clientTearDown)	rr r!r/rrr[r^r0rr)r,r
r��s
r�cs(eZdZdZ�fdd�Zdd�Z�ZS)�UnixSocketTestBasez(Base class for Unix-domain socket tests.cs(tj�|_|jtj|j�t�j�dS)N)�tempfileZmkdtemp�dir_pathr-�os�rmdirr%r)r)r,rr
r&s
zUnixSocketTestBase.setUpcCs,tj|jd�}tj||�|jtj|�dS)N)�dir)r�Zmktempr�r�bind_unix_socketr-�unlink)r�sock�pathrrr
r|+szUnixSocketTestBase.bindSock)rr r!r/rr|r0rr)r,r
r�sr�c@seZdZdZdd�ZdS)�UnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.cCstjtjtj�S)N)r�AF_UNIXr)rrrr
rz3szUnixStreamBase.newSocketN)rr r!r/rzrrrr
r�0sr�cs,eZdZdZeZ�fdd�Zdd�Z�ZS)�InetTestBasez!Base class for IPv4 socket tests.cst�j�|jd|_dS)NrE)r%rr}r)r)r,rr
r<s
zInetTestBase.setUpcCstj||jd�dS)N)�host)rrr�)rr�rrr
r|@szInetTestBase.bindSock)	rr r!r/rkr�rr|r0rr)r,r
r�7sr�c@seZdZdZdd�ZdS)�TCPTestBasez#Base class for TCP-over-IPv4 tests.cCstjtjtj�S)N)rrr)rrrr
rzFszTCPTestBase.newSocketN)rr r!r/rzrrrr
r�Csr�c@seZdZdZdd�ZdS)�UDPTestBasez#Base class for UDP-over-IPv4 tests.cCstjtjtj�S)N)rrr#)rrrr
rzLszUDPTestBase.newSocketN)rr r!r/rzrrrr
r�Isr�c@seZdZdZdd�ZdS)�SCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.cCstjtjtjtj�S)N)rrr�IPPROTO_SCTP)rrrr
rzRszSCTPStreamBase.newSocketN)rr r!r/rzrrrr
r�Osr�c@seZdZdZejZdS)�
Inet6TestBasez!Base class for IPv6 socket tests.N)rr r!r/r�HOSTv6r�rrrr
r�Wsr�c@seZdZdZdd�ZdS)�UDP6TestBasez#Base class for UDP-over-IPv6 tests.cCstjtjtj�S)N)r�AF_INET6r#)rrrr
rz_szUDP6TestBase.newSocketN)rr r!r/rzrrrr
r�\sr�cs*dd����fdd�}dd�}|r&|S|S)aSkip decorated test if condition is true, add client_skip decorator.

    If the decorated object is not a class, sets its attribute
    "client_skip" to a decorator which will return an empty function
    if the test is to be skipped, or the original function if it is
    not.  This can be used to avoid running the client part of a
    skipped test when using ThreadableTest.
    c_sdS)Nr)r*r+rrr
�client_passnsz%skipWithClientIf.<locals>.client_passcs*tj��|�}t|t�s&�fdd�|_|S)Ncs�S)Nr)�f)r�rr
�<lambda>ssz3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)rv�skip�
isinstance�type�client_skip)�objZretval)r��reasonrr
�skipdecps
z!skipWithClientIf.<locals>.skipdeccSs"t|t�pt|d�sdd�|_|S)Nr�cSs|S)Nr)r�rrr
r�wsz5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�r_r�)r�rrr
�	noskipdecus
z#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�r)r�r�r
�skipWithClientIfes	r�cs0�fdd�|D�}t|ddjdd�|D���S)z�Skip decorated test if obj is missing any of the given attributes.

    Sets client_skip attribute as skipWithClientIf() does.
    csg|]}t�|�s|�qSr)r_)�.0�name)r�rr
�
<listcomp>�sz requireAttrs.<locals>.<listcomp>zdon't have z, css|]
}|VqdS)Nr)r�r�rrr
�	<genexpr>�szrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingr)r�r
�requireAttrs|sr�cGs�d}dd�|D�}|r0ddjdd�|D��}nPdd�|D�}ytj|�}Wn*tk
rv}zt|�}WYdd}~Xn
X|j�t|dk	d	jdjd
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|�r|�qSr)r��strr_r)r�r�rrr
r��sz!requireSocket.<locals>.<listcomp>zdon't have z, css|]
}|VqdS)Nr)r�r�rrr
r��sz requireSocket.<locals>.<genexpr>cSs$g|]}t|t�rtt|�n|�qSr)r�r�rRr)r�r�rrr
r��szcan't create socket({0}): {1}css|]}t|�VqdS)N)r�)r��orrr
r��s)r�rr	r�r
r��format)r*�errr�Zcallargsrrarrr
�
requireSocket�sr�c@s�eZdZdd�Zdd�Zejedk	d�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zejeed�d�ejeed�d�dd���Zejeed�d�dd ��Zejeed�d�d!d"��Zejeed#�d$�d%d&��Zd'd(�Zd)d*�Zejd+d,��Zd-d.�Zd/d0�Zejeed1�d2�d3d4��Zejeed5�d6�d7d8��Zejeed5�d6�d9d:��Z ejeed;�d<�d=d>��Z!ejeed;�d<�d?d@��Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMdN�Z)eje*j+dOkdP�dQdR��Z,eje*j+dOkdP�ejeedS�dT�dUdV���Z-dWdX�Z.dYdZ�Z/ejej0d[�d\�d]d^��Z1d_d`�Z2dadb�Z3dcdd�Z4dedf�Z5dgdh�Z6didj�Z7dkdl�Z8dmdn�Z9dodp�Z:dqdr�Z;ejdsdt��Z<ejej=du�dvdw��Z>dxdy�Z?ej@e*j+dOkdz�d{d|��ZAejee*d}�d~�dd���ZBdS)��GeneralModuleTestscCs<ddl}|jtj|jk�tj�}|j|tj�|j�dS)Nr)�_socket�
assertTruerZ
SocketType�assertIsInstancer
)rr�rrrr
�test_SocketType_is_socketobject�s
z2GeneralModuleTests.test_SocketType_is_socketobjectcCs�tjtjtj�}|��|jd|j�t|��|jdtjt|��|jdtjt|��|jdt|��|jdt|��|jd
�|jdt|��|jt|j	��t|��WdQRX|jd	t|��|jdt|��dS)Nzfd=%iz	family=%sztype=%szproto=0Zraddr�	127.0.0.1rZladdrz[closed])r�r)
rrr�assertIn�fileno�repr�assertNotInr5r�rl)rrrrr
�	test_repr�s
"zGeneralModuleTests.test_reprNzneed _socket modulecCsrtjtjtj�}z.d|j�|j|j|jf}|jt	|�|�Wd|j
�Xd|j|j|jf}|jt	|�|�dS)Nz4<socket object, fd=%s, family=%s, type=%s, proto=%s>z4<socket object, fd=-1, family=%s, type=%s, proto=%s>)r�rrrr��familyr��proto�assertEqualr�r
)rr�expectedrrr
�test_csocket_repr�s
z$GeneralModuleTests.test_csocket_reprcCshtjtjtj�}t|�}|j|j�|j��|j�d}y|j�Wntk
rXYnX|jd�dS)NzSocket proxy still exists)	rrrrr�r�r
�ReferenceError�fail)rr�prrr
�test_weakref�szGeneralModuleTests.test_weakrefcCsrd}|jt|dd��
t�WdQRX|jt|dd��tj�WdQRX|jt|dd��tj�WdQRXdS)Nz$Error raising socket exception (%s).r	)�msgz
socket.herrorzsocket.gaierror)�assertRaisesr	r�herror�gaierror)rr�rrr
�testSocketError�sz"GeneralModuleTests.testSocketErrorcKCsFtjtjtj�}|j|j�|jd�|j�}|jt��}|j	d|�WdQRX|j
t|j�d�|jt��}|j	d|�WdQRX|j
t|j�d�|jt��}|j	dd�WdQRX|j
dt|j��|jt��}|j	dd|�WdQRX|j
t|j�d�|jt��}|j	dd|�WdQRX|j
t|j�d�|jt��}|j	ddd�WdQRX|j
dt|j��|jt��}|j	dd	|�WdQRX|j
d
t|j��|jt��}|j	ddd�WdQRX|j
d
t|j��|jt��}|j	d�WdQRX|j
dt|j��|jt��}|j	dd|d�WdQRX|j
d
t|j��dS)N�ru☠z*a bytes-like object is required, not 'str'y@z.a bytes-like object is required, not 'complex'sfooznot NoneType�barzan integer is requiredz	(1 given)�z	(4 given))r�r)rrr#r-r
r5rlr�r`�sendtor�r��	exceptionr�)rrZsockname�cmrrr
�testSendtoErrors�sL
z#GeneralModuleTests.testSendtoErrorscCs4tjtjtjtjtjtjtjtjdS)N)	rrrr#r�SOCK_RDMr�
SOL_SOCKET�SO_REUSEADDR)rrrr
�testCrucialConstantssz'GeneralModuleTests.testCrucialConstantscCs�tj�}ytj|�}Wntk
r4|jd�YnX|j|jd�dkd�ytj|�\}}}Wntk
r~|jd�YnX||g|}tj|�}||kr�|j	d|t
|�f�dS)Nzname lookup failurerFrzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r�gethostname�
gethostbynamer	r7r��find�
gethostbyaddrZgetfqdnr�r�)rZhostnameZipZhname�aliasesZipaddrsZall_host_namesZfqhnrrr
�testHostnameRess
z"GeneralModuleTests.testHostnameRescCsTx&tjddgD]}|jtj|�|�qWx&tjgD]}|j|tj|�d�q2WdS)Nz10.0.0.1z255.255.255.255�)rrkr�rr�r�r�)rrrr�rrr
�test_host_resolution*sz'GeneralModuleTests.test_host_resolutioncCsZd}xPdD]H}|jt��tj|�WdQRX|jt|d��tj|�WdQRXq
WdS)	Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server�0.1.1.~1�1+.1.1.1�::1q�::1::2�1:1:1:1:1:1:1:1:1)r�)r�r�r�r�r�)r�r	rr�r�)rZexplanationrrrrr
� test_host_resolution_bad_address3sz3GeneralModuleTests.test_host_resolution_bad_address�sethostnameztest needs socket.sethostname()r�ztest needs socket.gethostname()cCs�tj�}ytjd�Wn<tk
rR}z |jtjkr@|jd�n�WYdd}~XnXz.|jtj�d�tjd�|jtj�d�Wdtj|�XdS)N�newztest should be run as rootsbarr�)rr�r�r	�errnoZEPERMr7r�)rZoldhnrarrr
�test_sethostnameBs
z#GeneralModuleTests.test_sethostname�if_nameindexz$socket.if_nameindex() not available.cCs�tj�}xx|D]p\}}|j|t�|j|t�|j|d�tj|�}|j|t�|j||�tj|�}|j|t�|j||�qWdS)Nr)	rr�r��intr��
assertGreater�if_nametoindexr��if_indextoname)rZ
interfaces�indexr�Z_index�_namerrr
�testInterfaceNameIndexVs

z)GeneralModuleTests.testInterfaceNameIndexcCsD|jttjd�|jttjd�|jttjd�|jttjd�dS)NrZ	_DEADBEEF)r�r	rr�r�r`)rrrr
�testInvalidInterfaceNameIndexfsz0GeneralModuleTests.testInvalidInterfaceNameIndex�getrefcountztest needs sys.getrefcount()cCsLytjt�}tjtd�Wn,tk
rFtjt�|krB|jd�YnXdS)Nrz$socket.getnameinfo loses a reference)�sysr�rr�getnameinfor`r�)rZorigrrr
�testRefCountGetNameInfops
z*GeneralModuleTests.testRefCountGetNameInfocCs*ytjdd�Wntk
r$YnXdS)Nr3r)r3rrr)rr�r	)rrrr
�testInterpreterCrash|sz'GeneralModuleTests.testInterpreterCrashcCs�tjdtjdtjdtjdi}xt|j�D]h\}}d|>d}x,dD]$}|j||@||||@��|@�q@W||�}|j||@|�|jt|d�q&WdS)
N� �rEr�r��gE#�2Tv�"���)rrEr�r�r�r�r�l)	r�htonl�ntohl�htons�ntohs�itemsr�r��
OverflowError)rZsizes�func�size�maskrZswappedrrr
�testNtoH�s
$zGeneralModuleTests.testNtoHcCs�ddddddg}dddddd	g}x4|D],}tj|�tj|�tj|�tj|�q&WxL|D]D}|jttj|�|jttj|�|jttj|�|jttj|�q\WdS)
NrEr�����������rrr	)rr�r�r�r�r�r)rZgood_valuesZ
bad_values�krrr
�testNtoHErrors�s




z!GeneralModuleTests.testNtoHErrorscCs|j}tjjd�stjdkr"d}nd}x8|D],}ytj|d
�}PWq,tk
rVYq,Xq,Wt�tj|�}|||�ytj|d�}Wntk
r�d}YnX|||�|tj|�|�|tj|d
�|�|dk	r�|tj|d�|�|jt	tjd�|jt	tjd
�dS)N�freebsd�netbsd�gnukfreebsd�linux�darwin�daytime�qotd�domain�echoZtcpZudprEi)rr
r)rr)rrr)rrrr)
r�r��platform�
startswithrZ
getservbynamer	Z
getservbyportr�r)r�eqZservicesZservicerZport2Zudpportrrr
�
testGetServBy�s2






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

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








z#GeneralModuleTests.testIPv4toStringcs�y&ddlm�m�m}|s$�jd�Wntk
rD�jd�YnXtjdkr�y��d�Wn6tk
r�}z|j	dkr��jd�WYdd}~XnX��fd	d
����fdd
�}�j
d2�d���j
d3�d���j
d5�d���j
d�d���j
d8�d���j
d:�d��|d�|d�|d�|d�|d�|d �|d!�|d"�|d#��j
d<�d%���j
d?�d)���j
d*�d+��|d,�|d-�|d.�|d/�|d0�|d1�dS)@Nr)r#r��has_ipv6zIPv6 not availablez+could not import needed symbols from socket�win32z::i&'zIPv6 might not be supportedcs
��|�S)Nr)r$)r�r#rr
r�sz5GeneralModuleTests.testIPv6toString.<locals>.<lambda>cs�jttf�|�S)N)r�r	r)r$)r�rrr
r�sr r�z0::0s�z1::sE�v�V���$��z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes�B
�r�s'Tzad42:abc::127:0:254:2s
�z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6:z1:2:3:4:5:6z1:2:3:4:5:6:7:8:z1:2:3:4:5:6:7:8:0s�*@z::254.42.23.64sBr4s���*@z42::a29b:254.42.23.64sB�������*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8ssssss�B
�s�B
�'Tss
ss�*@ss
BsB���*@)rr#r�r(r7�ImportErrorr�rr	�winerrorr�)rr(rar&r)r�r�r#rr
�testIPv6toStrings^






z#GeneralModuleTests.testIPv6toString�	inet_ntopztest needs socket.inet_ntop()csddlm}m�m���fdd�}�fdd�}�jd|d���jd|d	���jd
|d���jd|d
��||d�||d�||d��jd|td	����jd|d���jd|d	���jd
|d��||d�||d�||d��jd|td	���dS)Nr)�	inet_ntoar/rcs
��|�S)Nr)r$)rr/rr
r�Msz5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>cs�jttf||�S)N)r�r	r)rr$)rrr
r�Nsz1.0.1.0sz
170.85.170.85s�U�Uz255.255.255.255s����z1.2.3.4sr r�r�ssssss)rr0r/rr��	bytearray)rr�r%r&r)rr/rr
�testStringToIPv4Is$





z#GeneralModuleTests.testStringToIPv4csy&ddlm�m�m}|s$�jd�Wntk
rD�jd�YnXtjdkr�y��d�Wn6tk
r�}z|j	dkr��jd	�WYdd}~XnX��fd
d����fdd�}�j
d
�d���j
d�d���j
d�d���j
d�td���|d�|d�|d�dS)Nr)r/r�r(zIPv6 not availablez+could not import needed symbols from socketr)r r�i&'zIPv6 might not be supportedcs
��|�S)Nr)r$)r�r/rr
r�tsz5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>cs�jttf�|�S)N)r�r	r)r$)r�rrr
r�usz::z::1��z!aef:b01:506:1001:ffff:9997:55:170s
�����Up��r�sssssssss)rr/r�r(r7r,r�rr	r-r�r2)rr(rar&r)r�r�r/rr
�testStringToIPv6cs.


z#GeneralModuleTests.testStringToIPv6cCs�tj�}tjtjtj�}|j|j�|jd|f�|j�}ytj	tj
��}Wntk
rj|jd�YnX|j
|dd|fd|d�|j|d|�dS)Nz0.0.0.0zname lookup failurerz
%s invalidrE)r�find_unused_portrrrr-r
r5rlr�r�r	r7r�r�)rrr�r�Z
my_ip_addrrrr
�testSockName�szGeneralModuleTests.testSockNamecCs@tjtjtj�}|j|j�|jtjtj�}|j|dkd�dS)Nrzinitial mode is reuse)	rrrr-r
�
getsockoptr�r��assertFalse)rr��reuserrr
�testGetSockOpt�sz!GeneralModuleTests.testGetSockOptcCsRtjtjtj�}|j|j�|jtjtjd�|jtjtj�}|j	|dkd�dS)NrErzfailed to set reuse mode)
rrrr-r
�
setsockoptr�r�r;r<)rr�r=rrr
�testSetSockOpt�s
z!GeneralModuleTests.testSetSockOptcCs6tjtjtj�}|jd�|j�|jt|jd�dS)NrEsspam)rrr�
settimeoutr
r�r	�send)rr�rrr
�testSendAfterClose�s
z%GeneralModuleTests.testSendAfterClosecCsptj�}tj|j�d�j�y|j�Wn8tk
r`}z|j|jtjtjf�WYdd}~XnX|jd�dS)N)r�z#close() should raise EBADF/ENOTSOCK)	rr�r
r	r�r�ZEBADFZENOTSOCKr�)rr�r�rrr
�testCloseException�s(z%GeneralModuleTests.testCloseExceptioncCsrtjtjtj�}|j|jtj�ttd�rH|j|jtjtjBtjf�n|j|jtj�|j|j	d�|j
�dS)N�SOCK_CLOEXECr)rrrr�r�r_r�r�rEr�r
)rr�rrr
�testNewAttributes�s

z$GeneralModuleTests.testNewAttributescCs�tj�}|j|j�tj�}|d}|d}|jt|jt|f�|jt|jt|f�xft	j
�D]Z}tj�}y|jt|f�Wn8tk
r�}z|jtj
ks�|dkr��WYdd}~Xq^XPq^WdS)Nir1)rr-r
rr9r�rr5rk�	itertools�countr	r�Z
EADDRINUSE)rr�rZbig_portZneg_portrrarrr
�test_getsockaddrarg�sz&GeneralModuleTests.test_getsockaddrarg�ntzWindows specificcCs�|jttjd��|jttd��|jttd��|jttd��|jttd��tj�}|j|j�|jt|jdd�|jtjd	�dS)
N�ioctlZ
SIO_RCVALLZ	RCVALL_ONZ
RCVALL_OFF�SIO_KEEPALIVE_VALSrE�dr)rErMrM)	r�r_rr-r
r�rrKrL)rrrrr
�test_sock_ioctl�sz"GeneralModuleTests.test_sock_ioctl�SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testcCs|tj�}|j|j�y|jtjd�Wn<tk
rb}z d}|j|krP|jd��WYdd}~XnX|jt	|jtjd�dS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
rr-r
rKrOr	r-r7r�r`)rrrYZ
WSAEOPNOTSUPPrrr
�test_sio_loopback_fast_path�s

z.GeneralModuleTests.test_sio_loopback_fast_pathc
Cs6ytjdd�Wn<tjk
rL}z|jtjkr:|jd��WYdd}~XnXx$tjtd�D]}|jt|�d�q\Wtjdd�tjdd�tjdd�t	j
r�tjdd�tjtd�tjtd�tjtd�tjtdtjtj�}xR|D]J\}}}}}|j|tj�|jt
|�d�|j|tj�|jt
|�d	�q�Wtjtdd
tj�}x&|D]\}}}}}|j|tj��qNWtjtdd
d
tj�tjtdd
d
d
tj�tjdd
tjtjd
tj�tjtd�}tjtdd�}	|j||	�tjtdtj�}tjtdtjd�}	|j||	�tjtdd
tj�}tjtdtjd
�}	|j||	�tjtdd
d
tj�}tjtdtjd�}	|j||	�tjtdd
d
d
tj�}tjtdtjd�}	|j||	�tjdd
tjtjd
tj�}tjdd
tjtjd
tjd�}	|j||	�|jttjdd�ttd��r2ytjddd
d
d
tj�Wntjk
�r0YnXdS)NZ	localhost�Pzbuggy libc versionr1z	127.0.0.1z::1ZhttpzAddressFamily.AF_INETzSocketKind.SOCK_STREAMr)r�r)r�)r�)r�)�flags)r�rr�r�r�rRu��AI_NUMERICSERV)r�getaddrinfor�r�ZEAI_SERVICEr7rkr��lenr�IPV6_ENABLEDrrr�ZSOL_TCPZ
AI_PASSIVE�	AF_UNSPECr��UnicodeEncodeErrorr_rS)
rr��infoZinfosr�r�rGZsocktyper$�brrr
�testGetaddrinfo�sr

z"GeneralModuleTests.testGetaddrinfocCs|jttjdd�dS)N�mail.python.orgr)r\r)r�r	rr�)rrrr
�test_getnameinfoDsz#GeneralModuleTests.test_getnameinfoZnetworkznetwork is not enabledcCsPtjd��tjd�WdQRXd}tj|�tj|�tj|dtjtj�dS)Nz
python.orgu!испытание.pythontest.netr)rZtransient_internetrr�Zgethostbyname_exrTrWr)rrrrr
�	test_idnaHs

zGeneralModuleTests.test_idnacs�ttd�sttd�r"�jd��fdd�}�fdd�}tj�\}}tjtj|�}zv|rd|jd��jt�� tj	d	�|j
d
tj�WdQRX|r�tjtj|�tj	d	��jtj
|j
d
tj�Wdtj	d�tjtj|�|j�|j�XdS)N�alarmrxz9signal.alarm and socket.socketpair required for this testcs�jttjd�dS)Nr)r�r�math�acosh)r*)rrr
�
ok_handler_sz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handlercs�jttjd�dddS)NrrE)r�rr`ra)r*)rrr
�raising_handleraszEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handlerg�?rE�xr)r_�signalrr7rx�SIGALRMrAr��ZeroDivisionErrorr_�sendallr�
SOCK_MAX_SIZE�timeoutr
)rZwith_timeoutrbrc�cr�	old_alarmr)rr
�check_sendall_interruptedYs*




z,GeneralModuleTests.check_sendall_interruptedcCs|jd�dS)NF)rm)rrrr
�test_sendall_interruptedxsz+GeneralModuleTests.test_sendall_interruptedcCs|jd�dS)NT)rm)rrrr
�%test_sendall_interrupted_with_timeout{sz8GeneralModuleTests.test_sendall_interrupted_with_timeoutcCs�tjtjtj�}t|�}|jt��}d}tj�WdQRX|j|t	|j
jd��tjtjtj�}|jd�}t|�}d}tj�|jt��d}tj�WdQRXdS)Nr�rb)
rrrr�ZassertWarns�ResourceWarningrZ
gc_collectr�r�Zwarningr*�makefile)rr��rr�r�rrr
�test_dealloc_warn~s
z$GeneralModuleTests.test_dealloc_warnc
CsBtjtjtj��(}|jd�}|j�|jt|�d�WdQRXdS)Nrpz<_io.BufferedReader name=-1>)rrrrrr
r�r�)rr��fprrr
�test_name_closed_socketio�s
z,GeneralModuleTests.test_name_closed_socketiocCs�tj��p}|jddd�}|j|j��|j|j��|j|j��|j�|jt	|j�|jt	|j�|jt	|j�WdQRXdS)Nrpr)�	buffering)
rrrr��readabler<�writable�seekabler
r�r)rr�rurrr
�test_unusable_closed_socketio�s
z0GeneralModuleTests.test_unusable_closed_socketiocCsbx\dD]T}|j|d��>tj��*}|j|��}|j|j|�WdQRXWdQRXWdQRXqWdS)Nrsrp�rw�w�wb)�mode)rsrpr|r}r~)�subTestrrrr�r)rrr�rurrr
�test_makefile_mode�s


z%GeneralModuleTests.test_makefile_modecCs`xZdD]R}|j|d��<tj��(}|jtd��|j|�WdQRXWdQRXWdQRXqWdS)N�rtr3�+r$)rzinvalid mode)r�r3r�r$)r�r�assertRaisesRegexrrr)rrr�rrr
�test_makefile_invalid_mode�s


z-GeneralModuleTests.test_makefile_invalid_modec
Cs�tj�}|�0x(ttjd�D]}|jttj||�qWWdQRXxZttjd�D]H}tjtjtj|��}|j	|tj�tjtjtj
|��}|j	|tj
�qRWdS)NrE)r�range�pickleZHIGHEST_PROTOCOLr�r`�dumps�loadsrr�r)rr�Zprotocolr�r�rrr
�test_pickle�s zGeneralModuleTests.test_picklecCsxx@dD]8}tjtjtj��}|jtdf�|j|�WdQRXqWtjtjtj��}|jtdf�|j�WdQRXdS)NrrEr)rr)rrrr5rkr)rZbacklog�srvrrr
�test_listen_backlog�s
z&GeneralModuleTests.test_listen_backlogcCsHddl}tjtjtj�}|jtdf�|jt|j|j	d�|j
�dS)NrrE)�	_testcapirrrr5rkr�rr�INT_MAXr
)rr�r�rrr
�test_listen_backlog_overflow�s
z/GeneralModuleTests.test_listen_backlog_overflowzIPv6 required for this test.c
CsR|jttjtjddfd�tjtjtj��}|jt|jtjddf�WdQRXdS)Nrl��ri����)	r�rrr�rr�r�rr5)rrrrr
�
test_flowinfo�s
z GeneralModuleTests.test_flowinfoc
CsDtjtjtj��*}|jt|j�d�|jt|j�d�WdQRXdS)NzAddressFamily.AF_INETzSocketKind.SOCK_STREAM)rrrr�r�r�r�)rrrrr
�test_str_for_enums�sz%GeneralModuleTests.test_str_for_enumszWill not work on Windowsc
CsVtj�\}}|jtj|�tjdd|d��"}|j|jd�|j|jd�WdQRXdS)Ni��i4)r�r�r�)	r��mkstempr-r�r�rr�r�r�)r�fdr�rrrr
�test_uknown_socket_family_repr�s

z1GeneralModuleTests.test_uknown_socket_family_repr�sendfileztest needs os.sendfile()cCs�Gdd�d�}tj���}tjtjtj�}tj|�|jtj��|j||��WdQRX|jt	��|j|dd��WdQRX|jt
��|j|d��WdQRXWdQRXdS)Nc@seZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dS)N)r�)rr�rrr
r&�szEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jS)N)r�)rrrr
r��szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rr r!r&r�rrrr
�File�sr�r�i�)rr��open�curdir�O_RDONLYr
r��_GiveupOnSendfile�_sendfile_use_sendfilerr`)rr�r�r�rrr
�test__sendfile_use_sendfile�s

z.GeneralModuleTests.test__sendfile_use_sendfile)Crr r!r�r�rv�
skipUnlessr�r�r�r�r�r�r�r�r�r_rr�r�r�r�r�r�rr�cpython_onlyrrrr"r'r.r3r8r:r>r@rCrDrFrIr�r�rNrPr[r]Zis_resource_enabledr^rmrnrortrvr{r�r�r�r�r�rVr�r��skipIfr�r�rrrr
r��s~


,		'=#K
	r�z!SocketCan required for this test.c@s�eZdZdd�Zejeed�d�dd��Zdd�Z	ejeed�d�d	d
��Z
dd�Zd
d�Zejeed�d�dd��Z
ejeed�d�dd��ZdS)�BasicCANTestcCstjtjtjdS)N)r�AF_CANrr)rrrr
r�sz!BasicCANTest.testCrucialConstants�CAN_BCMz&socket.CAN_BCM required for this test.cCsRtjtjtjtjtjtjtjtjtj	tj
tjtjtj
dS)N)rr�ZCAN_BCM_TX_SETUPZCAN_BCM_TX_DELETEZCAN_BCM_TX_READ�CAN_BCM_TX_SENDZCAN_BCM_RX_SETUPZCAN_BCM_RX_DELETEZCAN_BCM_RX_READZCAN_BCM_TX_STATUSZCAN_BCM_TX_EXPIREDZCAN_BCM_RX_STATUSZCAN_BCM_RX_TIMEOUTZCAN_BCM_RX_CHANGED)rrrr
�testBCMConstantsszBasicCANTest.testBCMConstantsc	Cs$tjtjtjtj��}WdQRXdS)N)rrrr)rrrrr
�testCreateSocketszBasicCANTest.testCreateSocketc	Cs$tjtjtjtj��}WdQRXdS)N)rrr#r�)rrrrr
�testCreateBCMSocketsz BasicCANTest.testCreateBCMSocketc	Cs.tjtjtjtj��}|jd�WdQRXdS)Nr�)r�)rrrrr5)rrrrr
�testBindAny"szBasicCANTest.testBindAnyc
Cs<tjtjtjtj��}|jtd|jddf�WdQRXdS)Nzinterface name too longr3i)rrrrr�r	r5)rrrrr
�testTooLongInterfaceName&sz%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c
Cs\tjtjtjtj��>}x6dD].}|jtjtj|�|j||jtjtj��qWWdQRXdS)NrrE)rrE)	rrrrr?�SOL_CAN_RAWr�r�r;)rrZloopbackrrr
�testLoopback,s
zBasicCANTest.testLoopback�CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c
Cs|d\}}tjd||�}tjtjtjtj��H}|jtjtj|�|j	||j
tjtjd��|jtjtjt|��WdQRXdS)N��z=IIr4)r�r�)r:�packrrrrr?r�r�r�r;r2)r�can_idZcan_maskZ
can_filterrrrr
�
testFilter6szBasicCANTest.testFilterN)rr r!r�rvr�r_rr�r�r�r�r�r�r�rrrr
r��s	r�z!Threading required for this test.c@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
jeed�d�dd��Ze
jeed�d�dd��ZdS)�CANTestrecCstj||d�dS)N)rf)rir&)rrfrrr
r&FszCANTest.__init__cCs&t|�}|jdd�}tj|j|||�S)zBuild a CAN frame.r4r )rU�ljustr:r�r9)�clsr��data�can_dlcrrr
�build_can_frameIszCANTest.build_can_framecCs&tj|j|�\}}}|||d|�fS)zDissect a CAN frame.N)r:Zunpackr9)r��framer�r�r�rrr
�dissect_can_framePszCANTest.dissect_can_framecCsH|jj|j�\}}|j|j|�|j|d|j�|j|dtj�dS)NrrE)r�recvfromr8r��cfr6rr�)rr�rrrrr
�
testSendFrameVszCANTest.testSendFramecCs |jdd�|_|jj|j�dS)Nrs)r�r�rgrB)rrrr
�_testSendFrame\szCANTest._testSendFramecCs$|jj|j�\}}|j|j|�dS)N)rr�r8r�r�)rr�rrrrr
�testSendMaxFrame`szCANTest.testSendMaxFramecCs |jdd�|_|jj|j�dS)Nr�r4s)r�r�rgrB)rrrr
�_testSendMaxFramedszCANTest._testSendMaxFramecCsD|jj|j�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r8r��cf1�cf2)rr�rrrrr
�testSendMultiFrameshszCANTest.testSendMultiFramescCs<|jdd�|_|jj|j�|jdd�|_|jj|j�dS)N�sD3"�s�"3)r�r�rgrBr�)rrrr
�_testSendMultiFramesoszCANTest._testSendMultiFramesr�z&socket.CAN_BCM required for this test.cCsP|jj|j�\}}|j|j|�|j|�\}}}|j|j|�|j|j|�dS)N)rgr�r8r�r�r�r�r�)rr�rrr�r�r�rrr
�_testBCMvs
zCANTest._testBCMcCs�tjtjtjtj�}|j|j�|j|jf�d|_t	dddg�|_
|j|j|j
�|_tj
}d}d}d}}}}d}	d}
t|j�dks�t�tj|j||||||||	|
�
}||j}|j|�}
|j|
t|��dS)	Ni#����ri"rEr�)rrr#r�r-r
rsr6r��bytesr�r�r�r�rU�AssertionErrorr:r�r;rBr�)rZbcmZopcoderRrHZ
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr
�testBCMs4

zCANTest.testBCMN)re)rr r!r&�classmethodr�r�r�r�r�r�r�r�rvr�r_rr�r�rrrr
r�Bs
r�z#RDS sockets required for this test.c@s$eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdS)N)rZAF_RDSr)rrrr
r��sz!BasicRDSTest.testCrucialConstantsc	Cs"tjtjtjd��}WdQRXdS)Nr)rrr)rrrrr
r��szBasicRDSTest.testCreateSocketcCsJd}tjtjtjd��*}|jtjtj|�|jtjtj|�WdQRXdS)Ni@r)rrrr?r�Z	SO_RCVBUFZ	SO_SNDBUF)rr8rrrr
�testSocketBufferSize�sz!BasicRDSTest.testSocketBufferSizeN)rr r!r�r�r�rrrr
r��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)�RDSTestrecCstj||d�dS)N)rf)rjr&)rrfrrr
r&�szRDSTest.__init__cst�j�tj�|_dS)N)r%rr'rJZevt)r)r,rr
r�s
z
RDSTest.setUpcCs2|jj|j�\}}|j|j|�|j|j|�dS)N)rr�r8r�r�rm)rr�rrrrr
�testSendAndRecv�szRDSTest.testSendAndRecvcCs"d|_|jj|jdt|jf�dS)Nsspamr)r�rgr�rkr)rrrr
�_testSendAndRecv�szRDSTest._testSendAndRecvcCsH|jj|jtj�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r8r�MSG_PEEKr�r�)rr�rrrrr
�testPeek�szRDSTest.testPeekcCs"d|_|jj|jdt|jf�dS)Nsspamr)r�rgr�rkr)rrrr
�	_testPeek�szRDSTest._testPeek�recvmsgcCs(|jj|j�\}}}}|j|j|�dS)N)rr�r8r�r�)rr��ancdataZ	msg_flagsrrrrr
�testSendAndRecvMsg�szRDSTest.testSendAndRecvMsg�sendmsgcCs*dd|_|jj|jgfdt|jf�dS)Nshello rr)r�rgr�rkr)rrrr
�_testSendAndRecvMsg�s
zRDSTest._testSendAndRecvMsgcCsD|jj|j�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r8r��data1�data2)rr�rrrrr
�testSendAndRecvMulti�szRDSTest.testSendAndRecvMulticCs@d|_|jj|jdt|jf�d|_|jj|jdt|jf�dS)Nsbaconrsegg)r�rgr�rkrr�)rrrr
�_testSendAndRecvMulti�szRDSTest._testSendAndRecvMulticCsLtj|jgggd�\}}}|j|j|�|jj|j�\}}|j|j|�dS)Ng@)�selectrr�r�r8r�r�)rrsr}r3r�rrrrr
�
testSelect�szRDSTest.testSelectcCs"d|_|jj|jdt|jf�dS)Nsselectr)r�rgr�rkr)rrrr
�_testSelect�szRDSTest._testSelect)re)rr r!r&rr�r�r�r�r�rr�r�r�r�r�r�r0rr)r,r
r��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#�Zeje�Zejd$d%��Zd&d'�Zd(d)�Zd*S),�BasicTCPTestrecCstj||d�dS)N)rf)rnr&)rrfrrr
r&�szBasicTCPTest.__init__cCs|jjd�}|j|t�dS)Ni)rp�recvr��MSG)rr�rrr
�testRecv�szBasicTCPTest.testRecvcCs|jjt�dS)N)rtrBr�)rrrr
�	_testRecv�szBasicTCPTest._testRecvcCs8|jjtt�d�}|jjd�}||}|j|t�dS)Nri)rpr�rUr�r�)r�seg1�seg2r�rrr
�testOverFlowRecvszBasicTCPTest.testOverFlowRecvcCs|jjt�dS)N)rtrBr�)rrrr
�_testOverFlowRecvszBasicTCPTest._testOverFlowRecvcCs |jjd�\}}|j|t�dS)Ni)rpr�r�r�)rr�rrrrr
�testRecvFrom
szBasicTCPTest.testRecvFromcCs|jjt�dS)N)rtrBr�)rrrr
�
_testRecvFromszBasicTCPTest._testRecvFromcCs@|jjtt�d�\}}|jjd�\}}||}|j|t�dS)Nri)rpr�rUr�r�)rr�rrr�r�rrr
�testOverFlowRecvFromsz!BasicTCPTest.testOverFlowRecvFromcCs|jjt�dS)N)rtrBr�)rrrr
�_testOverFlowRecvFromsz"BasicTCPTest._testOverFlowRecvFromcCs8d}x|jjd�}|sP||7}qW|j|dd�dS)N�i�fi)rpr�r�)rr��readrrr
�testSendAllszBasicTCPTest.testSendAllcCsdd}|jj|�dS)Nr�i)rtrh)rZ	big_chunkrrr
�_testSendAll&szBasicTCPTest._testSendAllcCsP|jj�}tj|tjtj�}|j|j�|j|tj�|j	d�}|j
|t�dS)Ni)rpr�rZfromfdrrr-r
r�r�r�r�)rr�r�r�rrr
�
testFromFd*s

zBasicTCPTest.testFromFdcCs|jjt�dS)N)rtrBr�)rrrr
�_testFromFd3szBasicTCPTest._testFromFdcCs0|jj�}|j|j�|jd�}|j|t�dS)Ni)rp�dupr-r
r�r�r�)rr�r�rrr
�testDup6s

zBasicTCPTest.testDupcCs|jjt�dS)N)rtrBr�)rrrr
�_testDup=szBasicTCPTest._testDupcCs&|jjd�}|j|t�|jj�dS)Ni)rpr�r�r�rLrV)rr�rrr
�testShutdown@szBasicTCPTest.testShutdowncCs|jjt�|jjd�dS)Nr�)rtrBr��shutdown)rrrr
�
_testShutdownIszBasicTCPTest._testShutdowncCsXddl}|jjt�|jt|jj|jd�|jt|jjd|jd�|jjd�dS)NrrEr�)	r�rtrBr�r�rr�r��UINT_MAX)rr�rrr
�_testShutdown_overflowOsz#BasicTCPTest._testShutdown_overflowcCs�|jj�}|jj�}|j||�|j|jj�|jt|jjd�|jj	�t
j
t
jt
j|d�}|j
|j	�|jd�}|j|t�dS)Ni)r�)rpr��detachr�r��_closedr�r	r�r
rrrr-r�)rr�r�r�r�rrr
�
testDetachZs



zBasicTCPTest.testDetachcCs|jjt�dS)N)rtrBr�)rrrr
�_testDetachjszBasicTCPTest._testDetachN)re)rr r!r&r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�ZtestShutdown_overflowr�rrrrrr
r��s*

		
r�c@sFeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestrecCstj||d�dS)N)rf)rhr&)rrfrrr
r&pszBasicUDPTest.__init__cCs |jjtt��}|j|t�dS)N)rr�rUr�r�)rr�rrr
�testSendtoAndRecvsszBasicUDPTest.testSendtoAndRecvcCs|jjtdt|jf�dS)Nr)rgr�r�rkr)rrrr
�_testSendtoAndRecvxszBasicUDPTest._testSendtoAndRecvcCs$|jjtt��\}}|j|t�dS)N)rr�rUr�r�)rr�rrrrr
r�{szBasicUDPTest.testRecvFromcCs|jjtdt|jf�dS)Nr)rgr�r�rkr)rrrr
r��szBasicUDPTest._testRecvFromcCs|jt|jjd�dS)NrEr)r�rrr�)rrrr
�testRecvFromNegative�sz!BasicUDPTest.testRecvFromNegativecCs|jjtdt|jf�dS)Nr)rgr�r�rkr)rrrr
�_testRecvFromNegative�sz"BasicUDPTest._testRecvFromNegativeN)re)
rr r!r&rrr�r�rrrrrr
rms
rcs�eZdZdZ�fdd�Zdd�ZfZdd�Zdd	�Zd
d�Z	dd
�Z
dZxdD]Zee
eed�OZqNWdZdZdZddd�Z�ZS)�SendrecvmsgBaseg@cstj�|_t�j�dS)N)r'rJ�
misc_eventr%r)r)r,rr
r�s
zSendrecvmsgBase.setUpcCs|jj|�S)N)�cli_sockrB)rr�rrr
�sendToServer�szSendrecvmsgBase.sendToServercGs|jj||jt|�d��S)N)rr��sendmsg_to_server_defaultsrU)rr*rrr
�sendmsgToServer�szSendrecvmsgBase.sendmsgToServercGs|j|f|��}|j|�|S)N)r��registerRecvmsgResult)rr�r8r*�resultrrr
�	doRecvmsg�s
zSendrecvmsgBase.doRecvmsgcCsdS)Nr)rrrrr
r�sz%SendrecvmsgBase.registerRecvmsgResultcCs|j||�dS)N)r�)r�addr1�addr2rrr
�checkRecvmsgAddress�sz#SendrecvmsgBase.checkRecvmsgAddressr�
MSG_CTRUNC�MSG_OOBNc
Cs�|j}|j}|r&||jO}||jO}n|dk	rB||jO}||jO}||M}||M}||O}||O}||@|@}|r�tdj|���||B|@}	|j||	@||	@�dS)Nz6contradictory set, unset requirements for flags {0:#x})�msg_flags_common_set�msg_flags_common_unset�msg_flags_eor_indicator�msg_flags_non_eor_indicator�	Exceptionr�r�)
rrR�eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothrrrr
�
checkFlags�s$




zSendrecvmsgBase.checkFlags)rr)Nrrr)rr r!�fail_timeoutrrr
rrrrrr�rRrrrrr r0rr)r,r
r	�s

r	c@seZdZdd�ZdS)�RecvmsgIntoMixincGsft|�}|j|gf|��}|j|�|j|dd�|j|d|�t|d|d��f|dd�S)NrrE)r2�recvmsg_intor�assertGreaterEqual�assertLessEqualr�)rr�r8r*�bufrrrr
rs
zRecvmsgIntoMixin.doRecvmsgN)rr r!rrrrr
r"sr"cs eZdZe�fdd��Z�ZS)�SendrecvmsgDgramFlagsBasecst�jtjBS)N)r%rr�	MSG_TRUNC)r)r,rr
r+sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rr r!�propertyrr0rr)r,r
r'(sr'cs eZdZe�fdd��Z�ZS)�SendrecvmsgSCTPFlagsBasecst�jtjBS)N)r%rrZMSG_EOR)r)r,rr
r3sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rr r!r)rr0rr)r,r
r*0sr*c@s8eZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jS)N)r)rrrr
�	serv_sock=sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jS)N)rg)rrrr
rAsz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfS)Nr)r})rrrr
r
Esz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|jj||j�S)N)rr�r})rr�rrr
rIsz*SendrecvmsgConnectionlessBase.sendToServerN)rr r!r)r,rr
rrrrr
r+8sr+c@s,eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jS)N)rp)rrrr
r,Ssz"SendrecvmsgConnectedBase.serv_sockcCs|jS)N)rt)rrrr
rWsz!SendrecvmsgConnectedBase.cli_sockcCsdS)Nr)rrrrrr
r[sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rr r!r)r,rrrrrr
r-Msr-cseZdZ�fdd�Z�ZS)�SendrecvmsgServerTimeoutBasecst�j�|jj|j�dS)N)r%rr,rAr!)r)r,rr
rds
z"SendrecvmsgServerTimeoutBase.setUp)rr r!rr0rr)r,r
r.asr.c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeed�dd��Zejd d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SendmsgTestscCs|j|jjtt��t�dS)N)r�r,r�rUr�)rrrr
�testSendmsgmszSendmsgTests.testSendmsgcCs|j|jtg�tt��dS)N)r�rr�rU)rrrr
�_testSendmsgqszSendmsgTests._testSendmsgcCs|j|jjtt��t�dS)N)r�r,r�rUr�)rrrr
�testSendmsgDataGeneratortsz%SendmsgTests.testSendmsgDataGeneratorcCs&|j|jdd�tgD��tt��dS)Ncss|]
}|VqdS)Nr)r�r�rrr
r�ysz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>)r�rr�rU)rrrr
�_testSendmsgDataGeneratorxsz&SendmsgTests._testSendmsgDataGeneratorcCs|j|jjtt��t�dS)N)r�r,r�rUr�)rrrr
�testSendmsgAncillaryGenerator|sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(|j|jtgdd�gD��tt��dS)Ncss|]
}|VqdS)Nr)r�r�rrr
r��sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>)r�rr�rU)rrrr
�_testSendmsgAncillaryGenerator�sz+SendmsgTests._testSendmsgAncillaryGeneratorcCs|j|jjtt��t�dS)N)r�r,r�rUr�)rrrr
�testSendmsgArray�szSendmsgTests.testSendmsgArraycCs$|j|jtjdt�g�tt��dS)N�B)r�r�arrayr�rU)rrrr
�_testSendmsgArray�szSendmsgTests._testSendmsgArraycCs|j|jjtt��t�dS)N)r�r,r�rUr�)rrrr
�testSendmsgGather�szSendmsgTests.testSendmsgGathercCs.|j|jtdd�tdd�g�tt��dS)Nr)r�rr�rU)rrrr
�_testSendmsgGather�szSendmsgTests._testSendmsgGathercCs|j|jjd�d�dS)Ni�sdone)r�r,r�)rrrr
�testSendmsgBadArgs�szSendmsgTests.testSendmsgBadArgscCs�|jt|jj�|jt|jd�|jt|jt��|jt|jt�g�|jt|jtt�g�|jt|jtgt��|jt|jtggt��|jt|jtggdt��|jd�dS)Nsnot in an iterablersdone)r�r`rr�r�objectr�r)rrrr
�_testSendmsgBadArgs�s 







z SendmsgTests._testSendmsgBadArgscCs|j|jjd�d�dS)Ni�sdone)r�r,r�)rrrr
�testSendmsgBadCmsg�szSendmsgTests.testSendmsgBadCmsgcCs�|jt|jtgt�g�|jt|jtgt�ddfg�|jt|jtgdt�dfg�|jt|jtgddt�fg�|jt|jtgdg�|jt|jtgdg�|jd�dS)Nr�data�*sdone)rr)rrr@rA)r�r`rr�r=r)rrrr
�_testSendmsgBadCmsg�s





z SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs|j|jjd�d�dS)Ni�sdone)r�r,r�)rrrr
�testSendmsgBadMultiCmsg�sz$SendmsgTests.testSendmsgBadMultiCmsgcCsB|jt|jtgdddg�|jt|jtgdt�g�|jd�dS)Nrr�sdone)rrr�)r�r`rr�r=r)rrrr
�_testSendmsgBadMultiCmsg�s


z%SendmsgTests._testSendmsgBadMultiCmsgcCs|j|jjd�d�dS)Ni�sdone)r�r,r�)rrrr
�testSendmsgExcessCmsgReject�sz(SendmsgTests.testSendmsgExcessCmsgRejectc
CsNttd�s@|jt��}|jtgddg�WdQRX|j|jj�|j	d�dS)NrCrr�sdone)rrr�)rrr�)
r_rr�r	rr��assertIsNoner�r�r)rr�rrr
�_testSendmsgExcessCmsgReject�s

z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdS)Nr)rrrr
�testSendmsgAfterClose�sz"SendmsgTests.testSendmsgAfterClosecCs |jj�|jt|jtg�dS)N)rr
r�r	rr�)rrrr
�_testSendmsgAfterClose�s
z#SendmsgTests._testSendmsgAfterCloseN)rr r!r0r1r2r3r4r5r6r9r:r;r<r>r?rBr�rrDr�rErFrHrIrJrrrr
r/is(r/c@sReZdZdd�Zdd�Zdd�Zdd�Zeej	dkd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs|j|jjtt��t�dS)N)r�r,r�rUr�)rrrr
�testSendmsgExplicitNoneAddr�sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"|j|jtggdd�tt��dS)Nr)r�rr�rU)rrrr
�_testSendmsgExplicitNoneAddr�sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs2|j|jjd�dd�|j|jj|jd��dS)Ni�a)rj)r�r,r�r�r
rVr!)rrrr
�testSendmsgTimeout�sz%SendmsgStreamTests.testSendmsgTimeoutcCs�zz|jjd�yx|jddg�qWWnDtjk
r>Yn:tk
rl}z|jtjkr\�WYdd}~XnX|jd�Wd|j	j
�XdS)Ng���Q��?rNizsocket.timeout not raised)rrArrrjr	r��ENOMEMr�r
rC)rrYrrr
�_testSendmsgTimeout�sz&SendmsgStreamTests._testSendmsgTimeoutrz<MSG_DONTWAIT not known to work on this platform when sendingcCs2|j|jjd�dd�|j|jj|jd��dS)NirN)rj)r�r,r�r�r
rVr!)rrrr
�testSendmsgDontWait	sz&SendmsgStreamTests.testSendmsgDontWaitcCsdzR|jt��"}x|jddggtj�qWWdQRX|j|jjtjtj	tj
f�Wd|jj�XdS)NrNi)
r�r	rrZMSG_DONTWAITr�r�r�ZEAGAINZEWOULDBLOCKrPr
rC)rr�rrr
�_testSendmsgDontWait	s$
z'SendmsgStreamTests._testSendmsgDontWaitN>r)
rr r!rLrMrOrQr�r�rrRr�rSrrrr
rK�s
rKc@seZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdS)Nr)rrrr
�testSendmsgNoDestAddr"	sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCs2|jt|jjtg�|jt|jjtggdd�dS)Nr)r�r	rr�r�)rrrr
�_testSendmsgNoDestAddr'	sz1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rr r!rUrVrrrr
rT	srTc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
�dd��Ze	j
d
�dd��Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zeed"�d#d$��Zejd%d&��Zeejd'�d(d)��Zejd*d+��Zd,S)-�RecvmsgGenericTestscCsR|j|jtt��\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NT)r)rr,rUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsg2	s
zRecvmsgGenericTests.testRecvmsgcCs|jt�dS)N)rr�)rrrr
�_testRecvmsg:	sz RecvmsgGenericTests._testRecvmsgcCsV|j|jtt�dd�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrT)r)rr,rUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsgExplicitDefaults=	sz/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|jt�dS)N)rr�)rrrr
�_testRecvmsgExplicitDefaultsF	sz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsV|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrAT)r)rr,rUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsgShorterI	sz&RecvmsgGenericTests.testRecvmsgShortercCs|jt�dS)N)rr�)rrrr
�_testRecvmsgShorterR	sz'RecvmsgGenericTests._testRecvmsgShorterr4cCs^|j|jtt�d�\}}}}|j|tdd��|j||j�|j|g�|j|dd�dS)NrF)rr	)rr,rUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsgTruncW	sz$RecvmsgGenericTests.testRecvmsgTrunccCs|jt�dS)N)rr�)rrrr
�_testRecvmsgTrunca	sz%RecvmsgGenericTests._testRecvmsgTrunccCsT|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrET)r)rr,rUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsgShortAncillaryBufe	sz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgShortAncillaryBufn	sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCsT|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)Ni(T)r)rr,rUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsgLongAncillaryBufq	sz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgLongAncillaryBufz	sz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs"|jj�|jt|j|jd�dS)Ni)r,r
r�r	r)rrrr
�testRecvmsgAfterClose}	s
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdS)Nr)rrrr
�_testRecvmsgAfterClose�	sz*RecvmsgGenericTests._testRecvmsgAfterClosecCs<z*|jjd�|jtj|j|jtt��Wd|jj	�XdS)Ng���Q��?)
r,rAr�rrjrrUr�r
rC)rrrr
�testRecvmsgTimeout�	s
z&RecvmsgGenericTests.testRecvmsgTimeoutcCs|j|jj|jd��dS)N)rj)r�r
rVr!)rrrr
�_testRecvmsgTimeout�	sz'RecvmsgGenericTests._testRecvmsgTimeoutr�cCs|j|jtt�ddtj�\}}}}|j|tdd��|j||j�|j|g�|j	|dt
tdd�d�|j|jtt�dtj�\}}}}|j|t�|j||j�|j|g�|j	|dd�|j|jtt��\}}}}|j|t�|j||j�|j|g�|j	|dd�dS)	NrrFr()rrT)rr	)rr,rUr�rr�r�rrmr rR)rr�r�rRrrrrr
�testRecvmsgPeek�	s(z#RecvmsgGenericTests.testRecvmsgPeekcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgPeek�	sz$RecvmsgGenericTests._testRecvmsgPeekr�cCs`|jj|j�|j|jtt��\}}}}|j|t�|j||j�|j|g�|j	|dd�dS)NT)r)
r,rAr!rrUr�r�rrmr )rr�r�rRrrrrr
�testRecvmsgFromSendmsg�	sz*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs.|j|jtdd�tdd�g�tt��dS)Nr)r�rr�rU)rrrr
�_testRecvmsgFromSendmsg�	sz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rr r!rXrYrZr[r\r]rZrequires_freebsd_versionr^r_r`rarbrcrdrerfrgr�rrhr�rirjrkrrrr
rW.	s(		
			#rWc@s6eZdZejd�dd��Zdd�Zdd�Zdd	�Zd
S)�RecvmsgGenericStreamTestsz)fails intermittently when run within KojicCsN|j|jd�\}}}}|j|d�|j||j�|j|g�|j|dd�dS)Nir�)r)rr,r�rrmr )rr�r�rRrrrrr
�testRecvmsgEOF�	s
z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|jj�dS)N)rr
)rrrr
�_testRecvmsgEOF�	sz)RecvmsgGenericStreamTests._testRecvmsgEOFcCs�|j|jtt�d�\}}}}|j||j�|j|g�|j|dd�|j|jd�\}}}}|j||j�|j|g�|j|dd�||}|j|t�dS)NrF)riT)rr,rUr�rrmr�r )rr�r�rRrrr�r�rrr
�testRecvmsgOverflow�	sz-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgOverflow�	sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)	rr r!rvZ_skipInRpmBuildrmrnrorprrrr
rl�	s	rlc@seZdZdd�Zdd�ZdS)�RecvmsgTestscCs|jt|jj�|jt|jjddd�|jt|jjtt�dd�|jt|jjtd�gdd�|jt|jjt�dd�|jt|jjtt�t�d�|jt|jjtt�dt��|jjtt�dd�\}}}}|j	|t�|j
||j�|j	|g�|j|dd�dS)NrErrT)rrr)
r�r`r,r�rrUr�r2r=r�rrmr )rr�r�rRrrrrr
�testRecvmsgBadArgs�	s$
zRecvmsgTests.testRecvmsgBadArgscCs|jt�dS)N)rr�)rrrr
�_testRecvmsgBadArgs
sz RecvmsgTests._testRecvmsgBadArgsN)rr r!rrrsrrrr
rq�	srqc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�RecvmsgIntoTestscCsLttt��}|jt|jj�|jt|jjtt�dd�|jt|jj|dd�|jt|jjt�gdd�|jt|jjdgdd�|jt|jj|t�gdd�|jt|jj|gdd�|jt|jj|gt�d�|jt|jj|gdt��|jj|gdd�\}}}}|j	|tt��|j	|tt��|j
||j�|j	|g�|j|dd�dS)NrsI'm not writablerET)rr)
r2rUr�r�r`r,r#r=rr�rrmr )rr&�nbytesr�rRrrrrr
�testRecvmsgIntoBadArgs
s0
z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|jt�dS)N)rr�)rrrr
�_testRecvmsgIntoBadArgs(
sz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCsxttt��}|jjdd�|gD��\}}}}|j|tt��|j|tt��|j||j�|j|g�|j|dd�dS)Ncss|]
}|VqdS)Nr)r�r�rrr
r�/
sz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>T)r)	r2rUr�r,r#r�rrmr )rr&rur�rRrrrrr
�testRecvmsgIntoGenerator+
sz)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|jt�dS)N)rr�)rrrr
�_testRecvmsgIntoGenerator6
sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxtjddgtt��}|jj|g�\}}}}|j|tt��|j|j�t�|j||j�|j|g�|j	|dd�dS)Nr7rT)r)
r8rUr�r,r#r��tobytesrrmr )rr&rur�rRrrrrr
�testRecvmsgIntoArray9
sz%RecvmsgIntoTests.testRecvmsgIntoArraycCs|jt�dS)N)rr�)rrrr
�_testRecvmsgIntoArrayC
sz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|jj|t|�dd�|g�\}}}}|j|td��|j|td��|j|td��|j|td	��|j||j�|j|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	sMary had a little lambsMarys
01 had a 9slittle lamb---T)r)	r2r,r#�
memoryviewr�rUrrmr )rZb1Zb2Zb3rur�rRrrrrr
�testRecvmsgIntoScatterF
s z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|jd�dS)NsMary had a little lamb)r)rrrr
�_testRecvmsgIntoScatterU
sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)rr r!rvrwrxryr{r|rr�rrrr
rt	
s
rtc@sbeZdZyddlZWnek
r,dZYnXedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs�|jtjd�d}ttd��tt|d|��}|jtjd�tjd�jd�x:|D]2}tj|�}|j|tjd�|�|j	||j�qVW|j
ttjd�|j
ttj|�|j
ttjtj
�dS)NrrEirr�r)�socklen_t_limitrr��listr�r�r8�itemsizer�r%r�rr��maxsize)r�toobig�values�n�retrrr
�testCMSG_LENf
s

zCmsgMacroTests.testCMSG_LENrCcCs�|jtjd�d}ttd��tt|d|��}tjd�}|j|tjd�jd�x\|D]T}tj|�}|j||�|j|tj	|��|j||tj	d��|j
||j�|}qZW|jttjd�|jttj|�|jttjt
j�dS)NrEirrr�r)r�rrCr�r�r�r8r�r$r�r%r�rr�r�)rr�r�Zlastr�r�rrr
�testCMSG_SPACE{
s


zCmsgMacroTests.testCMSG_SPACE)rr r!r�r,r��minr�r�rr�r�rrrr
r�Y
s
r�c@sheZdZdeZdd�Zdd�Zdd�Zdd	�Zd
d�Zdfdd�Z	dd�Z
dd�Zdd�Zdd�Z
eed�dd��Zejdd��Zdd�Zdd �Zejejd!kd"�ejejjd#�d$�eed�d%d&����Zejejejd!kd"�ejejjd#�d$�d'd(����Zejejd!kd"�ejejjd#�d$�eed�d)d*����Zejejejd!kd"�ejejjd#�d$�d+d,����Zd-d.�Zejejd!kd/�d0d1��Zd2d3�Z d4d5�Z!d6d7�Z"eed�d8d9��Z#e#jd:d;��Z$dgd<d=�Z%d>d?�Z&d@dA�Z'dBdC�Z(dDdE�Z)dFdG�Z*dHdI�Z+dJdK�Z,dLdM�Z-dNdO�Z.dPdQ�Z/dhdRdS�Z0dTdU�Z1dVdW�Z2dXdY�Z3dZd[�Z4d\d]�Z5d^d_�Z6d`da�Z7dbdc�Z8ddS)i�
SCMRightsTestiUUcCs`g}xVt|�D]J}tj�\}}|jtj|�|jtj|�tj|t|�j	��|j
|�qW|S)N)r�r�r�r-r�r�r
�writer��encode�append)rr��fdsrr�r�rrr
�newFDs�
szSCMRightsTest.newFDscCsFx@t|�D]4\}}tj|dtj�|jtj|d�t|�j��q
WdS)Nri)�	enumerater��lseek�SEEK_SETr�r�r�r�)rr�r�r�rrr
�checkFDs�
szSCMRightsTest.checkFDscCs|j|j|�dS)N)r-�closeRecvmsgFDs)rrrrr
r�
sz#SCMRightsTest.registerRecvmsgResultcCsvxp|dD]d\}}}|tjkr
|tjkr
tjd�}|j|dt|�t|�|j��x|D]}tj|�q\Wq
WdS)NrEr)	rr��
SCM_RIGHTSr8�	frombytesrUr�r�r
)rZrecvmsg_result�
cmsg_level�	cmsg_type�	cmsg_datar�r�rrr
r��
s



zSCMRightsTest.closeRecvmsgFDsc	Cs8|j|jtgtjtjtjd|j|��fg�tt��dS)Nr)	r�rr�rr�r�r8r�rU)rr�rrr
�createAndSendFDs�
szSCMRightsTest.createAndSendFDsrErcCs�|\}}}}|j|t�|j||j�|j|dtj|d�|j|t�|j	t
|�|�tjd�}	xh|D]`}
|j|
t�|
\}}}
|j|tj
�|j|tj�|j|
t�|jt
|
�td�|	j|
�qfW|jt
|	�|�|j|	�dS)NT)rrrrr)r�r�rrmr rrr�r�r%rUr8�tupler�r�r��
SIZEOF_INTr�r�)rZnumfdsr�maxcmsgs�ignoreflagsr�r�rRrrr��itemr�r�r�rrr
�checkRecvmsgFDs�
s$


zSCMRightsTest.checkRecvmsgFDscCs |jd|j|jtt�d��dS)NrEi()r�rr,rUr�)rrrr
�testFDPassSimple�
szSCMRightsTest.testFDPassSimplec	Cs<|j|jtgtjtjtjd|jd��j�fg�t	t��dS)NrrE)
r�rr�rr�r�r8r�rzrU)rrrr
�_testFDPassSimple�
szSCMRightsTest._testFDPassSimplecCs |jd|j|jtt�d��dS)Nr�i()r�rr,rUr�)rrrr
�testMultipleFDPass�
sz SCMRightsTest.testMultipleFDPasscCs|jd�dS)Nr�)r�)rrrr
�_testMultipleFDPass�
sz!SCMRightsTest._testMultipleFDPassrCcCs*|jd|j|jtt�tjdt���dS)Nr�)r�rr,rUr�rrCr�)rrrr
�testFDPassCMSG_SPACE�
sz"SCMRightsTest.testFDPassCMSG_SPACEcCs|jd�dS)Nr�)r�)rrrr
�_testFDPassCMSG_SPACEsz#SCMRightsTest._testFDPassCMSG_SPACEcCs0|jd|j|jtt�tjdt��tjd�dS)NrEr�)r�)	r�rr,rUr�rr�r�r)rrrr
�testFDPassCMSG_LENsz SCMRightsTest.testFDPassCMSG_LENcCs|jd�dS)NrE)r�)rrrr
�_testFDPassCMSG_LENsz!SCMRightsTest._testFDPassCMSG_LENrzskipping, see issue #12958�aixzskipping, see issue #22397cCs$|jd|j|jtt�d�dd�dS)Nr�i()r�)r�rr,rUr�)rrrr
�testFDPassSeparatesz SCMRightsTest.testFDPassSeparatec	CsX|jd�\}}|j|jtgtjtjtjd|g�ftjtjtjd|g�fg�tt��dS)Nr�r)	r�r�rr�rr�r�r8rU)r�fd0�fd1rrr
�_testFDPassSeparatesz!SCMRightsTest._testFDPassSeparatec	Cs@d}|j||j|jtt�tjt�tjt|��dtj	d�dS)Nr�)r�r�)
r�rr,rUr�rrCr�r�r)rZnum_fdsrrr
�testFDPassSeparateMinSpace)sz(SCMRightsTest.testFDPassSeparateMinSpacec	CsX|jd�\}}|j|jtgtjtjtjd|g�ftjtjtjd|g�fg�tt��dS)Nr�r)	r�r�rr�rr�r�r8rU)rr�r�rrr
�_testFDPassSeparateMinSpace6sz)SCMRightsTest._testFDPassSeparateMinSpacecCsdy|j|g|�}Wn<tk
rN}z |j|jt�|j|g�}WYdd}~XnX|j|t|��dS)N)rr	r�r�r�r�rU)rr�r�rurarrr
�sendAncillaryIfPossibleDsz%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd|j|jtt�d�tjd�dS)Nri()r�)r�rr,rUr�rr)rrrr
�testFDPassEmptyOs
zSCMRightsTest.testFDPassEmptycCs|jttjtjdfg�dS)Nr�)r�r�rr�r�)rrrr
�_testFDPassEmptyWs
zSCMRightsTest._testFDPassEmptycCs�|j|jtt�d�\}}}}|j|t�|j||j�|j|dtj	d�|j
t|�d�x>|D]6\}}}|j|tj�|j|tj�|j
t|�t�q^WdS)Ni(T)rrrE)rr,rUr�r�rrmr rrr%r�r��
assertLessr�)rr�r�rRrrr�r�r�rrr
�testFDPassPartialInt\sz"SCMRightsTest.testFDPassPartialIntcCs4|jttjtjtjd|jg�j�dd�fg�dS)NrrEr)r�r�rr�r�r8�badfdrz)rrrr
�_testFDPassPartialIntis
z#SCMRightsTest._testFDPassPartialIntc	Cs�|j|jtt�d�\}}}}|j|t�|j||j�|j|dtj	d�|j
t|�d�tjd�}xR|D]J\}}}|j|tj�|j|tj
�|j|dt|�t|�|j��qhW|j
t|�d�|j|�dS)Ni(T)rrr�r)rr,rUr�r�rrmr rrr%r8r�r�r�r�r�)	rr�r�rRrrr�r�r�r�rrr
�testFDPassPartialIntInMiddleps
 z*SCMRightsTest.testFDPassPartialIntInMiddlecCsZ|jd�\}}|jttjtjtjd||jg�j�dd�ftjtjtjd|g�fg�dS)Nr�rrEr)	r�r�r�rr�r�r8r�rz)rr�r�rrr
�_testFDPassPartialIntInMiddle�sz+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}|j|t�|j||j�|j|g�|j|dtj|d�dS)NT)rrr)r�r�rrmr rr)rrr�r�r�rRrrrrr
�checkTruncatedHeader�sz"SCMRightsTest.checkTruncatedHeadercCs"|j|j|jtt��tjd�dS)N)r�)r�rr,rUr�rr)rrrr
�testCmsgTruncNoBufSize�sz$SCMRightsTest.testCmsgTruncNoBufSizecCs|jd�dS)NrE)r�)rrrr
�_testCmsgTruncNoBufSize�sz%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j|j|jtt�d�tjd�dS)Nr)r�)r�rr,rUr�rr)rrrr
�testCmsgTrunc0�szSCMRightsTest.testCmsgTrunc0cCs|jd�dS)NrE)r�)rrrr
�_testCmsgTrunc0�szSCMRightsTest._testCmsgTrunc0cCs|j|j|jtt�d��dS)NrE)r�rr,rUr�)rrrr
�testCmsgTrunc1�szSCMRightsTest.testCmsgTrunc1cCs|jd�dS)NrE)r�)rrrr
�_testCmsgTrunc1�szSCMRightsTest._testCmsgTrunc1cCs"|j|j|jtt�td��dS)Nr�)r�rr,rUr�r�)rrrr
�testCmsgTrunc2Int�szSCMRightsTest.testCmsgTrunc2IntcCs|jd�dS)NrE)r�)rrrr
�_testCmsgTrunc2Int�sz SCMRightsTest._testCmsgTrunc2IntcCs(|j|j|jtt�tjd�d��dS)NrrE)r�rr,rUr�rr�)rrrr
�testCmsgTruncLen0Minus1�sz%SCMRightsTest.testCmsgTruncLen0Minus1cCs|jd�dS)NrE)r�)rrrr
�_testCmsgTruncLen0Minus1�sz&SCMRightsTest._testCmsgTruncLen0Minus1cCs�|j|jtt�|�\}}}}|j|t�|j||j�|j|dtj	d�|dkr\|gkr\dS|jt|�d�|d\}}	}
|j|tj
�|j|	tj�|jt|
�|�|j
t|
�|�tjd�}|j|
dt|
�t|
�|j��|j|�dS)NT)rrrrEr)rr,rUr�r�rrmr rrr�r�r$r%r8r�r�r�)r�ancbuf�maxdataZmindatar�r�rRrrr�r�r�r�rrr
�checkTruncatedArray�s"
z!SCMRightsTest.checkTruncatedArraycCs|jtjd�dd�dS)Nr)r�r�)r�rr�)rrrr
�testCmsgTruncLen0�szSCMRightsTest.testCmsgTruncLen0cCs|jd�dS)NrE)r�)rrrr
�_testCmsgTruncLen0�sz SCMRightsTest._testCmsgTruncLen0cCs|jtjd�ddd�dS)NrrE)r�r�)r�rr�)rrrr
�testCmsgTruncLen0Plus1�sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|jd�dS)Nr�)r�)rrrr
�_testCmsgTruncLen0Plus1�sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jtjt�td�dS)N)r�r�)r�rr�r�)rrrr
�testCmsgTruncLen1�szSCMRightsTest.testCmsgTruncLen1cCs|jd�dS)Nr�)r�)rrrr
�_testCmsgTruncLen1�sz SCMRightsTest._testCmsgTruncLen1cCs(|jtjdt�ddtdd�dS)Nr�rE)r�r�)r�rr�r�)rrrr
�testCmsgTruncLen2Minus1�sz%SCMRightsTest.testCmsgTruncLen2Minus1cCs|jd�dS)Nr�)r�)rrrr
�_testCmsgTruncLen2Minus1�sz&SCMRightsTest._testCmsgTruncLen2Minus1Ni����)rEr)r)r)9rr r!r�r�r�rr�r�r�r�r�r�r�r�rr�r�r�r�r�rvr�r�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
r��
sl

	
  


	
r�c@seZdZdZd^Zdd�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,��Zdad-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%dbdGdH�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)c�RFC3542AncillaryTestr�rEcCs8i}x.|D]&\}}}|j||f|�||||f<q
W|S)N)r�)rr��dr�r�r�rrr
�ancillaryMappings
z%RFC3542AncillaryTest.ancillaryMappingr�rcCs|jjtjtjd�|jj�|j|jtt	�|�\}}}}|j
|t	�|j||j�|j
|dtj|d�|j
t|�d�|j|dt�|d\}}	}
|j
|tj�|j
|	tj�|j|
t�|j
t|
�t�tjd�}|j|
�|j|dd�|j|d|�dS)NrET)rrrrr)r,r?r�IPPROTO_IPV6�IPV6_RECVHOPLIMITr
rCrrUr�r�rrmr rr�r��
IPV6_HOPLIMITr�r�r8r�r$r%)r�
ancbufsize�maxhopr�r�r�rRrrr�r�r�r$rrr
�
checkHopLimits(




z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS)Ni()r�)r�)rrrr
�testRecvHopLimit4sz%RFC3542AncillaryTest.testRecvHopLimitcCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testRecvHopLimit9sz&RFC3542AncillaryTest._testRecvHopLimitrCcCs|jtjt�d�dS)N)r�)r�rrCr�)rrrr
�testRecvHopLimitCMSG_SPACEAsz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testRecvHopLimitCMSG_SPACEFsz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cCs|jd|jd�dS)Ni()r�r�)r��	hop_limit)rrrr
�testSetHopLimitPsz$RFC3542AncillaryTest.testSetHopLimitcCsL|j|jj|jd��|j|jtgtjtj	t
j
d|jg�fg�tt��dS)N)rjr)
r�r
rVr!r�rr�rr�r�r8r�rU)rrrr
�_testSetHopLimitWsz%RFC3542AncillaryTest._testSetHopLimitcCsB|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�|�\}}}}|j|t
�|j||j
�|j|dtj|d�|jt	|�d�|j|�}|tjtjf}	|jt	|	�t�tjd�}
|
j|	�|j|
dd�|j|
dd�|tjtjf}|jt	|�t�tjd�}
|
j|�|j|
dd�|j|
d|�dS)NrET)rrrr�rrr�)r,r?rr�r��IPV6_RECVTCLASSr
rCrrUr�r�rrmr rr��IPV6_TCLASSr�r8r�r$r%r�)rr�r�r�r�r�rRrrZancmapZtcdatar$Zhldatarrr
�checkTrafficClassAndHopLimit`s2









z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr�r�cCs|jdd�dS)Ni()r�)r�)rrrr
�testRecvTrafficClassAndHopLimit�sz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
� _testRecvTrafficClassAndHopLimit�sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jtjt�dd�dS)Nr�)r�)r�rrCr�)rrrr
�)testRecvTrafficClassAndHopLimitCMSG_SPACE�sz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�*_testRecvTrafficClassAndHopLimitCMSG_SPACE�sz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jd�dS)Ni()r�r�)r�r�)rrrr
�testSetTrafficClassAndHopLimit�sz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc	Csd|j|jj|jd��|j|jtgtjtj	t
j
d|jg�ftjtjt
j
d|j
g�fg�tt��dS)N)rjr)r�r
rVr!r�rr�rr�r�r8�
traffic_classr�r�rU)rrrr
�_testSetTrafficClassAndHopLimit�sz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jd�dS)Ni()r�r�)r�r�)rrrr
�testOddCmsgSize�sz$RFC3542AncillaryTest.testOddCmsgSizecCs�|j|jj|jd��yJ|jtgtjtjt	j	d|j
g�j�dftjtjt	j	d|j
g�fg�}Wn~tk
r�}zb|j|jt�|jtgtjtjt	j	d|j
g�ftjtjt	j	d|j
g�fg�}|j|tt��WYdd}~XnXdS)N)rjrr )r�r
rVr!rr�rr�r�r8r�rzr�r�r	r�r�r�r�rU)rrurarrr
�_testOddCmsgSize�s"z%RFC3542AncillaryTest._testOddCmsgSizecCs�|jjtjtjd�|jj�|dkr*fn|f}|j|jtt	�f|��\}}}}|j
|t	�|j||j�|j
|g�|j
|dtj|d�dS)NrET)rrr)r,r?rr�r�r
rCrrUr�r�rrmr r)rr�r�r*r�r�rRrrrrr
�checkHopLimitTruncatedHeader�s


z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjd�dS)N)r�r�)r�rr)rrrr
r��sz+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
r��sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjd�dS)Nr)r�r�)r�rr)rrrr
�testSingleCmsgTrunc0�sz)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSingleCmsgTrunc0�sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)NrE)r�)r�)rrrr
�testSingleCmsgTrunc1
sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSingleCmsgTrunc1
sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtd�dS)Nr�)r�)r�r�)rrrr
�testSingleCmsgTrunc2Int
sz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSingleCmsgTrunc2Int
sz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jtjd�dd�dS)NrrE)r�)r�rr�)rrrr
�testSingleCmsgTruncLen0Minus1
sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSingleCmsgTruncLen0Minus1
sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs�|jjtjtjd�|jj�|j|jtt	�tj
t�d�\}}}}|j|t	�|j
||j�|j|dtjd�|jt|�d�|r�|d\}}}|j|tj�|j|tj�|jt|�t�dS)NrET)rrr)r,r?rr�r�r
rCrrUr�r�r�r�rrmr rr%r�r�)rr�r�rRrrr�r�r�rrr
�testSingleCmsgTruncInData
s


"z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSingleCmsgTruncInData4
sz/RFC3542AncillaryTest._testSingleCmsgTruncInDatacCs|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�|�\}}}}|j|t
�|j||j
�|j|dtj|d�|jt	|�d�|d\}}}	|j|tj�|j|tjtjh�|jt	|	�t�tjd�}
|
j|	�|j|
dd�|j|
dd�dS)NrET)rrrrrr�)r,r?rr�r�r�r
rCrrUr�r�rrmr rr�r�r�r�r8r�r$r%)rr�r�r�r�rRrrr�r�r�r$rrr
�checkTruncatedSecondHeader9
s(






z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jtjt�tjd�dS)N)r�)r�rrCr�r)rrrr
�testSecondCmsgTrunc0Y
sz)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSecondCmsgTrunc0_
sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|jtjt�d�dS)NrE)r�rrCr�)rrrr
�testSecondCmsgTrunc1d
sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSecondCmsgTrunc1i
sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|jtjt�dt�dS)Nr�)r�rrCr�)rrrr
�testSecondCmsgTrunc2Intn
sz,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSecondCmsgTrunc2Intt
sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|jtjt�tjd�d�dS)NrrE)r�rrCr�r�)rrrr
�testSecondCmsgTruncLen0Minus1y
sz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSecondCmsgTruncLen0Minus1
sz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
CsT|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�tjt�tj
t�d�\}}}}|j|t
�|j||j�|j|dtjd�tjtjh}|jd�\}}}|j|tj�|j|�|jt	|�t�tjd�}	|	j|�|j|	dd�|j|	dd�|�rD|jd�\}}}|j|tj�|j|�|jt	|�t�|j|g�dS)NrET)rrrrr�)r,r?rr�r�r�r
rCrrUr�rCr�r�r�rrmr rr�r��pop�remover8r�r$r%r�)
rr�r�rRrrZ
cmsg_typesr�r�r�r$rrr
�testSecomdCmsgTruncInData�
s4





"



z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$|j|jj|jd��|jt�dS)N)rj)r�r
rVr!rr�)rrrr
�_testSecomdCmsgTruncInData�
sz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataNr)r�r)r�r)r)r)1rr r!r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr
r��sp



	
#






 




$r�c@seZdZdS)�SendrecvmsgUDPTestBaseN)rr r!rrrr
r�
srr�c@seZdZdS)�SendmsgUDPTestN)rr r!rrrr
r�
srr�c@seZdZdS)�RecvmsgUDPTestN)rr r!rrrr
r	�
sr	r#c@seZdZdS)�RecvmsgIntoUDPTestN)rr r!rrrr
r
�
sr
c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs |j|dd�|dd��dS)NrErr)r�)rrrrrr
r�
sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)rr r!rrrrr
r�
srzIPv6 required for this test.r�r#c@seZdZdS)�SendmsgUDP6TestN)rr r!rrrr
r�
src@seZdZdS)�RecvmsgUDP6TestN)rr r!rrrr
r
�
sr
c@seZdZdS)�RecvmsgIntoUDP6TestN)rr r!rrrr
r�
srr�c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestN)rr r!rrrr
r�
src@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestN)rr r!rrrr
r�
src@seZdZdS)�SendrecvmsgTCPTestBaseN)rr r!rrrr
r�
src@seZdZdS)�SendmsgTCPTestN)rr r!rrrr
r�
src@seZdZdS)�RecvmsgTCPTestN)rr r!rrrr
rsrc@seZdZdS)�RecvmsgIntoTCPTestN)rr r!rrrr
rsrc@seZdZdS)�SendrecvmsgSCTPStreamTestBaseN)rr r!rrrr
rsrrrr�c@seZdZdS)�SendmsgSCTPStreamTestN)rr r!rrrr
rsrcseZdZ�fdd�Z�ZS)�RecvmsgSCTPStreamTestcsRytt|�j�Wn:tk
rL}z|jtjkr2�|jd�WYdd}~XnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r%rrmr	r��ENOTCONNr7)rra)r,rr
rmsz$RecvmsgSCTPStreamTest.testRecvmsgEOF)rr r!rmr0rr)r,r
rsrcseZdZ�fdd�Z�ZS)�RecvmsgIntoSCTPStreamTestcsRytt|�j�Wn:tk
rL}z|jtjkr2�|jd�WYdd}~XnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r%rrmr	r�rr7)rra)r,rr
rm-sz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOF)rr r!rmr0rr)r,r
r'src@seZdZdS)�SendrecvmsgUnixStreamTestBaseN)rr r!rrrr
r6srr�c@seZdZdS)�SendmsgUnixStreamTestN)rr r!rrrr
r:src@seZdZdS)�RecvmsgUnixStreamTestN)rr r!rrrr
r@src@seZdZdS)�RecvmsgIntoUnixStreamTestN)rr r!rrrr
rGsrr�r�c@seZdZdS)�RecvmsgSCMRightsStreamTestN)rr r!rrrr
rNsrc@seZdZdS)�RecvmsgIntoSCMRightsStreamTestN)rr r!rrrr
rTsrcsDeZdZ�fdd�ZdZeed�r0dZdd�ZndZd	d�Z�Z	S)
�InterruptedTimeoutBasecs2t�j�tjtjdd��}|jtjtj|�dS)NcSsddS)NrErr)Zsignumr�rrr
r�isz.InterruptedTimeoutBase.setUp.<locals>.<lambda>)r%rrerfr-)rZorig_alrm_handler)r,rr
rfs

zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCstjtj|�dS)N)rer!�ITIMER_REAL)r�secondsrrr
�setAlarmuszInterruptedTimeoutBase.setAlarmr�cCstj|�dS)N)rer_)rr#rrr
r${s)
rr r!rrjr_re�
alarm_timer$r0rr)r,r
r as

r �siginterruptr_r!z+Don't have signal.alarm or signal.setitimercsleZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	e
j
d
�dd��Ze	e
j
d�dd��Z�Z
S)�InterruptedRecvTimeoutTestcst�j�|jj|j�dS)N)r%rrrArj)r)r,rr
r�s
z InterruptedRecvTimeoutTest.setUpcOsBz0|j|j�|jt��}|||�WdQRXWd|jd�XdS)Nr)r$r%r�rg)rrr*r+r�rrr
�checkInterruptedRecv�s
z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|j|jjd�dS)Ni)r(rr�)rrrr
�testInterruptedRecvTimeout�sz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs|j|jjtd��dS)Ni)r(r�	recv_intor2)rrrr
�testInterruptedRecvIntoTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|j|jjd�dS)Ni)r(rr�)rrrr
�testInterruptedRecvfromTimeout�sz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs|j|jjtd��dS)Ni)r(r�
recvfrom_intor2)rrrr
�"testInterruptedRecvfromIntoTimeout�sz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|j|jjd�dS)Ni)r(rr�)rrrr
�testInterruptedRecvmsgTimeout�sz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutr#cCs|j|jjtd�g�dS)Ni)r(rr#r2)rrrr
�!testInterruptedRecvmsgIntoTimeout�sz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)rr r!rr(r)r+r,r.r�rr/r0r0rr)r,r
r'�s
r'csteZdZ�fdd�Zdd�Zdd�Zejdd�d	d
��Zejdd�dd��Z	ejdd�e
ejd
�dd���Z�Z
S)�InterruptedSendTimeoutTestcspt�j�|j�|_|j|jj�tj|jd�}|j	�|j
j�\|_}|j|jj�|j
�|jj|j�dS)N)�target)r%rrzrtr-r
r'ZThread�	doConnect�startrrorpr�rArj)rZ
cli_threadrr)r,rr
r�s

z InterruptedSendTimeoutTest.setUpcCs|jj|j�dS)N)rtrsr})rrrr
r3�sz$InterruptedSendTimeoutTest.doConnectcOsHz6|jt��"}x|j|j�|||�qWWdQRXWd|jd�XdS)Nr)r�rgr$r%)rrr*r+r�rrr
�checkInterruptedSend�sz/InterruptedSendTimeoutTest.checkInterruptedSendrr�cCs|j|jjdd�dS)NrNi)r5rtrB)rrrr
�testInterruptedSendTimeout�sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs|j|jjdd|j�dS)NrNi)r5rtr�r})rrrr
�testInterruptedSendtoTimeout�sz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs|j|jjddg�dS)NrNi)r5rtr�)rrrr
�testInterruptedSendmsgTimeout�sz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rr r!rr3r5rZrequires_mac_verr6r7r�rr8r0rr)r,r
r1�s

	
r1c@seZdZdd�Zdd�ZdS)�
TCPCloserTestcCsh|jj�\}}|j�|j}tj|gggd�\}}}|j||g�|j|jd�d�|j�|j�dS)Ng�?rEr�)rror
rgr�r�r�)rrqrrZsdr�r�r�rrr
�	testClose�szTCPCloserTest.testClosecCs |jjt|jf�tjd�dS)Ng�?)rgrsrkr�time�sleep)rrrr
�
_testClose�szTCPCloserTest._testCloseN)rr r!r:r=rrrr
r9�s
r9c@sNeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestrecCstj||d�dS)N)rf)rur&)rrfrrr
r&�szBasicSocketPairTest.__init__cCs\|j|tj�ttd�r*|j|jtj�n|j|jtj�|j|jtj�|j|j	d�dS)Nr�r)
r�rr_r�r�r�rr�rr�)rr�rrr
�_check_defaultss
z#BasicSocketPairTest._check_defaultscCs|j|j�dS)N)r?rg)rrrr
�
_testDefaultssz!BasicSocketPairTest._testDefaultscCs|j|j�dS)N)r?r)rrrr
�testDefaultssz BasicSocketPairTest.testDefaultscCs|jjd�}|j|t�dS)Ni)rr�r�r�)rr�rrr
r�szBasicSocketPairTest.testRecvcCs|jjt�dS)N)rgrBr�)rrrr
r�szBasicSocketPairTest._testRecvcCs|jjt�dS)N)rrBr�)rrrr
�testSendszBasicSocketPairTest.testSendcCs|jjd�}|j|t�dS)Ni)rgr�r�r�)rr�rrr
�	_testSendszBasicSocketPairTest._testSendN)re)rr r!r&r?r@rAr�r�rBrCrrrr
r>�s
	r>c@s�eZdZd$dd�Zdd�Zdd�Zejdd	��Zeje�Z	e
jee
d
�d�ejdd
d�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)%�NonBlockingTCPTestsrecCstj�|_tj||d�dS)N)rf)r'rJ�eventrdr&)rrfrrr
r&"s
zNonBlockingTCPTests.__init__cCs�|jjd�|j|jj��|jjd�|j|jj�d�tj�}y|jj�Wntk
rdYnXtj�}|j||dkd�dS)NTFgg�?z Error setting non-blocking mode.)	r�setblockingrGrr�r;ror	r�)rr4�endrrr
�testSetBlocking&sz#NonBlockingTCPTests.testSetBlockingcCsdS)Nr)rrrr
�_testSetBlocking4sz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|jd�|jjd�|j|jj�d�|jj|jd�|j|jj��dS)Nrzneeds UINT_MAX < ULONG_MAXFgrE)	r�r�Z	ULONG_MAXr7rrFr�rrG)rr�rrr
�testSetBlocking_overflow7s
z,NonBlockingTCPTests.testSetBlocking_overflow�
SOCK_NONBLOCKztest needs socket.SOCK_NONBLOCKr���cCs�|jj�tjtjtjtjB�|_tj|j�|_|jj	�t
j
�}y|jj�Wntk
rdYnXt
j
�}|j
||dkd�dS)Ng�?z&Error creating with non-blocking mode.)rr
rrrrKrrrrr;ror	r�)rr4rGrrr
�testInitNonBlockingDs

z'NonBlockingTCPTests.testInitNonBlockingcCsdS)Nr)rrrr
�_testInitNonBlockingWsz(NonBlockingTCPTests._testInitNonBlockingcCsH|jjd�z |jj�\}}|jtt��}Wd|j�|jjd�XdS)Nr)rrAror�rUr�r
)rrqrr�messagerrr
�testInheritFlagsZsz$NonBlockingTCPTests.testInheritFlagscCs6tjd�|jjt|jf�tjd�|jjt�dS)Ng�������?g�?)r;r<rgrsrkrrBr�)rrrr
�_testInheritFlagses

z%NonBlockingTCPTests._testInheritFlagscCs�|jjd�|jt��|jj�\}}WdQRX|jj�tj|jgggt�\}}}|j|krh|j	d�|jj�\}}|j
|j�|j|j
��dS)Nrz'Error trying to do accept after select.)rrFr��BlockingIOErrorrorErCr��MAIN_TIMEOUTr�r-r
rGr)rrqrrr�r�r�rrr
�
testAcceptks


zNonBlockingTCPTests.testAcceptcCs |jj�|jjt|jf�dS)N)rErVrgrsrkr)rrrr
�_testAccept~s
zNonBlockingTCPTests._testAcceptcCs|jj�\}}|j�dS)N)rror
)rrqrrrrr
�testConnect�szNonBlockingTCPTests.testConnectcCs"|jjd�|jjt|jf�dS)Nr)rgrArsrkr)rrrr
�_testConnect�sz NonBlockingTCPTests._testConnectcCs�|jj�\}}|j|j�|jd�|jt��|jtt	��}WdQRX|j
j�tj|gggt
�\}}}||kr||jd�|jtt	��}|j|t	�dS)Nrz0Error during select call to non-blocking socket.)rror-r
rFr�rSr�rUr�rErCr�rTr�r�)rrqrrr�r�r�r�rrr
r��s


zNonBlockingTCPTests.testRecvcCs,|jjt|jf�|jj�|jjt�dS)N)rgrsrkrrErVrhr�)rrrr
r��s
zNonBlockingTCPTests._testRecvN)re)rr r!r&rHrIrr�rJZ_testSetBlocking_overflowrvr�r_r�requires_linux_versionrNrOrQrRrUrVrWrXr�r�rrrr
rDs"

rDc@s�eZdZdZd;ZdZdZdZdZe	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.
    rEzutf-8�strictNrpr~recCstj||d�dS)N)rf)rnr&)rrfrrr
r&�sz FileObjectClassTestCase.__init__cCsRdd�td�D�\|_|_|_|_tj|�|jj|j	|j
|j|j|j
d�|_dS)NcSsg|]}tj��qSr)r'rJ)r�rrrr
r��sz1FileObjectClassTestCase.setUp.<locals>.<listcomp>r�)�encoding�errors�newline)r��evt1�evt2�
serv_finished�cli_finishedrnrrprr�	read_moder8r\r]r^�	read_file)rrrr
r�s"
zFileObjectClassTestCase.setUpcCs6|jj�|jj�|j|jj�d|_tj|�dS)N)rarCrdr
r��closedrnr)rrrr
r�s


z FileObjectClassTestCase.tearDowncCs0tj|�|jj|j|j|j|j|jd�|_	dS)N)r\r]r^)
rnr[rtrr�
write_moder8r\r]r^�
write_file)rrrr
r[�s
z#FileObjectClassTestCase.clientSetUpcCs6|jj�|jj�|j|jj�d|_tj|�dS)N)rbrCrgr
r�rernr^)rrrr
r^�s


z&FileObjectClassTestCase.clientTearDowncCsd|jjd�|jjd�|jtj|jjd�|jt��}|jjd�WdQRX|jdt	|j
��dS)NrErz!cannot read from timed out object)rprArdr�r�rrjr	r�r�r�)rZctxrrr
�testReadAfterTimeout�sz,FileObjectClassTestCase.testReadAfterTimeoutcCs.|jj|jdd��|jj�|jj�dS)Nrr)rgr��	write_msg�flushrarV)rrrr
�_testReadAfterTimeout�s
z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|jjt|j�d�}|jjd�}||}|j||j�dS)Nr)rdr�rU�read_msgr�)r�	first_segZ
second_segr�rrr
�
testSmallRead�sz%FileObjectClassTestCase.testSmallReadcCs|jj|j�|jj�dS)N)rgr�rirj)rrrr
�_testSmallRead�sz&FileObjectClassTestCase._testSmallReadcCs|jj�}|j||j�dS)N)rdr�r�rl)rr�rrr
�testFullReads
z$FileObjectClassTestCase.testFullReadcCs|jj|j�|jj�dS)N)rgr�rir
)rrrr
�
_testFullReadsz%FileObjectClassTestCase._testFullReadcCs>t|j��}x|jjd�}|s P||7}qW|j||j�dS)NrE)r�rlrdr�r�)rr&�charrrr
�testUnbufferedReadsz*FileObjectClassTestCase.testUnbufferedReadcCs|jj|j�|jj�dS)N)rgr�rirj)rrrr
�_testUnbufferedReadsz+FileObjectClassTestCase._testUnbufferedReadcCs|jj�}|j||j�dS)N)rd�readliner�rl)r�linerrr
�testReadlines
z$FileObjectClassTestCase.testReadlinecCs|jj|j�|jj�dS)N)rgr�rirj)rrrr
�
_testReadlinesz%FileObjectClassTestCase._testReadlinecCs&|jj�|jj�}|j||j�dS)N)rpr
rdr�r�rl)rr�rrr
�testCloseAfterMakefile"s

z.FileObjectClassTestCase.testCloseAfterMakefilecCs|jj|j�|jj�dS)N)rgr�rirj)rrrr
�_testCloseAfterMakefile)sz/FileObjectClassTestCase._testCloseAfterMakefilecCs@|jj�|jjtt��}t|jt�r.|j	�}|j
||j�dS)N)rdr
rpr�rUr�r�rlr��decoder�)rr�rrr
�testMakefileAfterMakefileClose-s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs|jj|j�|jj�dS)N)rgr�rirj)rrrr
�_testMakefileAfterMakefileClose4sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|j|jj�dS)N)r�rdre)rrrr
�testClosedAttr8sz&FileObjectClassTestCase.testClosedAttrcCs|j|jj�dS)N)r�rgre)rrrr
�_testClosedAttr;sz'FileObjectClassTestCase._testClosedAttrcCs,|j|jj|j�|j|jj|jj��dS)N)r�rdrrcr�rpr�)rrrr
�testAttributes>sz&FileObjectClassTestCase.testAttributescCs,|j|jj|j�|j|jj|jj��dS)N)r�rgrrfr�rtr�)rrrr
�_testAttributesBsz'FileObjectClassTestCase._testAttributescCs8|jj�|jt|jj�|jj�|jt|jj�dS)N)rdr
r�rr�rpr	rl)rrrr
�
testRealCloseFs

z%FileObjectClassTestCase.testRealClosecCsdS)Nr)rrrr
�_testRealCloseLsz&FileObjectClassTestCase._testRealCloser)re)&rr r!r/r8r\r]r^rcr�rlrfrir&rrr[r^rhrkrnrorprqrsrtrwrxryrzr|r}r~rr�r�r�r�rrrr
rZ�sD


rZc@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|jj�}|j|d|j�|jjdd�|_|jj�}|j|d|j�dS)NsA. rprsB. )rdrur�rirprr)rrvrrr
�testUnbufferedReadline\s


z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|jjd|j�|jjd|j�|jj�dS)NsA. sB. )rgr�rirj)rrrr
�_testUnbufferedReadlinedsz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|jj�|jjd�}|j||j�|jj�|jt|jjd�dS)Ni)rpr
r�r�rlrdr�r	)rr�rrr
�testMakefileCloseis


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|jj|j�|jj�dS)N)rgr�rirj)rrrr
�_testMakefileClosersz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6tj|j�}|jj�tj|j�}|j|d|�dS)NrE)r�r�rprdr
r�)rZrefcount_beforeZrefcount_afterrrr
�testMakefileCloseSocketDestroyvs
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdS)Nr)rrrr
�_testMakefileCloseSocketDestroy|szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|jjd�|j|jjtd��d�|j|jjt|j�d�d�|j	j
�|jjd�|jjt|j�d�}|dkr�t
jd�|jjt|j�d�}td�}|jj|�}|j|d�||d|�}|j||j�|j|jjtd��d�|j|jjd�d�dS)NFrrg�?g�?r�rE)rprFr�rd�readintor2r�rUrlr_rCr`rVr;r<)rrmr&r�r�rrr
�testSmallReadNonBlocking�s 

z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|jjd�|jj|j�|jj�|jj�|jjd�dS)Ng�?g@)	r_rVrgr�rirjr`rCra)rrrr
�_testSmallReadNonBlocking�s


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|jjd�|jr|j|j�dS)Ng@)rbrV�serv_skippedr7)rrrr
�testWriteNonBlocking�sz6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCsvd|_|jjd�dtj}d}|jj|�}|j|d�x8t|�D]&}|jj|�}|dkr\P|j|d�qBWd|_dS)NFrdrrz$failed to saturate the socket buffer)	r�rtrFrrirgr�r�r�)rZBIGZLIMITr�rrrr
�_testWriteNonBlocking�s
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rr r!r/r8r�r�r�r�r�r�r�r�r�r�rrrr
r�Ps		r�c@seZdZdZdS)�#LineBufferedFileObjectClassTestCaserEN)rr r!r8rrrr
r��sr�c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�N)rr r!r8rrrr
r��sr�c@s*eZdZdZdZejd�ZdZeZ	dZ
dS)�"UnicodeReadFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)rszutf-8r~r�N)rr r!r/rcr�r{rlrfrir^rrrr
r��s
r�c@s*eZdZdZdZeZdZejd�Z	dZ
dS)�#UnicodeWriteFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)rpr}zutf-8r�N)rr r!r/rcr�rlrfr{rir^rrrr
r��s
r�c@s0eZdZdZdZejd�ZdZejd�Z	dZ
dS)�'UnicodeReadWriteFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)rszutf-8r}r�N)rr r!r/rcr�r{rlrfrir^rrrr
r��s

r�c@seZdZdZdd�ZdS)�NetworkConnectionTestzProve network connection.cCstjt|jf�|_|j|_dS)N)r�create_connectionrkrrgrt)rrrr
r[�sz!NetworkConnectionTest.clientSetUpN)rr r!r/r[rrrr
r��sr�c@seZdZdZdS)�
BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)rr r!r/rrrr
r��sr�c@sDeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGstjd��dS)Nz	timed out)rrj)rr*rrr
rs�sz,NetworkConnectionNoServer.MockSocket.connectN)rr r!rsrrrr
�
MockSocket�sr�ccs&tj}|jt_z
dVWd|t_XdS)z*Return a socket which times out on connectN)rr�)rZ
old_socketrrr
�mocked_socket_module�s

z.NetworkConnectionNoServer.mocked_socket_modulec
Cs^tj�}tjtjtj�}|j|j�|jt��}|j	t
|f�WdQRX|j|jj
t
j�dS)N)rr9rrrr-r
r�r	rsrkr�r�r��ECONNREFUSED)rrrgr�rrr
�test_connectsz&NetworkConnectionNoServer.test_connectc
Csttj�}|jt��}tjt|f�WdQRXtjg}t	td�rJ|j
tj�t	td�r`|j
tj�|j
|jj|�dS)N�ENETUNREACH�
EADDRNOTAVAIL)rr9r�r	rr�rkr�r�r_r�r�r�r�r�)rrr�Zexpected_errnosrrr
�test_create_connection	s

z0NetworkConnectionNoServer.test_create_connectioncCs>|j��,|jtj��tjtdf�WdQRXWdQRXdS)Ni�)r�r�rrjr�rk)rrrr
�test_create_connection_timeout(s
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rr r!rr��
contextlib�contextmanagerr�r�r�r�rrrr
r��s

r�c@sveZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestrecCstj||d�tj|�dS)N)rf)rr&r=)rrfrrr
r&3sz(NetworkConnectionAttributesTest.__init__cCstj�|_dS)N)rr9�source_port)rrrr
r[7sz+NetworkConnectionAttributesTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^:s
z.NetworkConnectionAttributesTest.clientTearDowncCs|jj�\}}|j�dS)N)rror
)rrqrrrrr
�_justAccept?sz+NetworkConnectionAttributesTest._justAcceptcCs8tjt|jfdd�|_|j|jj�|j|jjd�dS)N�)rjr�)	rr�rkrrgr-r
r�r�)rrrr
�_testFamilyDsz+NetworkConnectionAttributesTest._testFamilycCsHtjt|jfdd|jfd�|_|j|jj�|j|jj	�d|j�dS)Nr�r�)rjZsource_addressrE)
rr�rkrr�rgr-r
r�rl)rrrr
�_testSourceAddressJsz2NetworkConnectionAttributesTest._testSourceAddresscCsd|jtj�dk�tjd�z$tjt|jf�|_|j|jj	�Wdtjd�X|j
|jj�d�dS)NrA)r�rrrr�rkrrgr-r
r�r)rrrr
�_testTimeoutDefaultSs
z3NetworkConnectionAttributesTest._testTimeoutDefaultcCsh|jtj�dk�tjd�z(tjt|jfdd�|_|j|jj	�Wdtjd�X|j
|jj�d�dS)Nr�)rj)r�rrrr�rkrrgr-r
r�r)rrrr
�_testTimeoutNone_s
z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd�|_|j|jj�d�dS)Nr�)rj)rr�rkrrgr�r)rrrr
�_testTimeoutValueNamedksz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8tjt|jfd�|_|j|jj�|j|jj�d�dS)Nr�)	rr�rkrrgr-r
r�r)rrrr
�_testTimeoutValueNonamedpsz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)re)rr r!r&r[r^r�Z
testFamilyr�ZtestSourceAddressr�ZtestTimeoutDefaultr�ZtestTimeoutNoner�ZtestTimeoutValueNamedr�ZtestTimeoutValueNonamedr�rrrr
r�0s 
r�c@sBeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestrecCstj||d�tj|�dS)N)rf)rr&r=)rrfrrr
r&xsz'NetworkConnectionBehaviourTest.__init__cCsdS)Nr)rrrr
r[|sz*NetworkConnectionBehaviourTest.clientSetUpcCs|jj�d|_tj|�dS)N)rgr
r=r^)rrrr
r^s
z-NetworkConnectionBehaviourTest.clientTearDowncCs2|jj�\}}|j|j�tjd�|jd�dS)Nrsdone!)rror-r
r;r<rB)rrqrrrrr
�testInsideTimeout�s
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0tjt|jf�|_}|jd�}|j|d�dS)Nr1sdone!)rr�rkrrgr�r�)rr�r�rrr
�_testInsideTimeout�s
z1NetworkConnectionBehaviourTest._testInsideTimeoutcs4tjt|jfdd�|_�|jtj�fdd��dS)NrE)rjcs
�jd�S)Nr1)r�r)r�rr
r��szDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)rr�rkrrgr�rj)rr)r�r
�_testOutsideTimeout�sz2NetworkConnectionBehaviourTest._testOutsideTimeoutN)re)
rr r!r&r[r^r�ZtestOutsideTimeoutr�r�rrrr
r�us
r�c@s6eZdZdd�Zdd�Zejeed�d�dd��Z	d	S)
�TCPTimeoutTestcs �fdd�}�jtj|d�dS)Ncs�jjd��jj�dS)Ng�?)rrAro)r*r+)rrr
�
raise_timeout�sz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP))r�rrj)rr�r)rr
�testTCPTimeout�s
zTCPTimeoutTest.testTCPTimeoutcCs|d}y|jjd�|jj�}WnJtjk
r>|jd�Yn,tk
rTd}Yn|jd�YnX|sx|jd�dS)NFgz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rrArorrjr�r	)r�ok�foorrr
�testTimeoutZero�szTCPTimeoutTest.testTimeoutZeror_ztest needs signal.alarm()cs
|jjd�Gdd�dt���fdd�}tjtj|�}z�y�z�ytjd�|jj�}Wn`tjk
rt|j	d�YnL�k
r�Yn:|j	dt
j�dd�tj
�f�YnX|j	d	�Wdtjd
�XWn�k
r�|j	d�YnXWdtjtj|�XdS)Ng@c@seZdZdS)z4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmN)rr r!rrrr
�Alarm�sr�cs��dS)Nr)rer�)r�rr
�
alarm_handler�sz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlerr�zcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s):
%sznothing caughtrzgot Alarm in wrong place)rrArrerfr_rorrjr�r��exc_info�	traceback�
format_exc)rr�rlr�r)r�r
�testInterruptedTimeout�s(
$z%TCPTimeoutTest.testInterruptedTimeoutN)
rr r!r�r�rvr�r_rer�rrrr
r��sr�c@seZdZdd�Zdd�ZdS)�UDPTimeoutTestcs �fdd�}�jtj|d�dS)Ncs�jjd��jjd�dS)Ng�?i)rrAr�)r*r+)rrr
r��sz4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (UDP))r�rrj)rr�r)rr
�testUDPTimeout�s
zUDPTimeoutTest.testUDPTimeoutcCs~d}y|jjd�|jjd�}WnJtjk
r@|jd�Yn,tk
rVd}Yn|jd�YnX|sz|jd�dS)NFgiz%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)z1recv() returned success when we did not expect it)rrAr�rrjr�r	)rr�r�rrr
r��szUDPTimeoutTest.testTimeoutZeroN)rr r!r�r�rrrr
r��sr�c@seZdZdd�Zdd�ZdS)�TestExceptionscCsJ|jttt��|jttjt��|jttjt��|jttjt��dS)N)r��
issubclassr	rrr�r�rj)rrrr
�testExceptionTree�sz TestExceptions.testExceptionTreec	Csbtjtjtjd�}tjtjtjd|j��}|j�|j|j�|jt��|j	d�WdQRXdS)NrF)
rrrr�r
r-rr�r	rF)rZsock0r�rrr
�test_setblocking_invalidfd�sz)TestExceptions.test_setblocking_invalidfdN)rr r!r�r�rrrr
r��sr�rzLinux specific testc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TestLinuxAbstractNamespace�lcCs�d}tjtjtj��z}|j|�|j�tjtjtj��L}|j|j��|j�d�&}|j|j�|�|j|j	�|�WdQRXWdQRXWdQRXdS)Nspython-test-hello�r)
rr�rr5rrsrlror�Zgetpeername)r�address�s1�s2Zs3rrr
�testLinuxAbstractNamespace�s
z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec
CsLdd|jd}tjtjtj�� }|j|�|j|j�|�WdQRXdS)Nr �hrE)�
UNIX_PATH_MAXrr�rr5r�rl)rr�rrrr
�testMaxName
s
z&TestLinuxAbstractNamespace.testMaxNamecCs>dd|j}tjtjtj��}|jt|j|�WdQRXdS)N��h)r�rr�rr�r	r5)rr�rrrr
�testNameOverflowsz+TestLinuxAbstractNamespace.testNameOverflowc
Cs>tjtjtj�}z|jd�|j|j�d�Wd|j�XdS)Nz
pythontests
pythontest)rr�rr5r�rlr
)rrrrr
�testStrNames

z&TestLinuxAbstractNamespace.testStrNamec
Cs>tjtjtj��$}|jtd��|j|j�d�WdQRXdS)Ns
pythontest)rr�rr5r2r�rl)rrrrr
�testBytearrayNamesz,TestLinuxAbstractNamespace.testBytearrayNameN)	rr r!r�r�r�r�r�r�rrrr
r��s	r�ztest needs socket.AF_UNIXc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestUnixDomaincCstjtjtj�|_dS)N)rr�rr�)rrrr
r'szTestUnixDomain.setUpcCs|jj�dS)N)r�r
)rrrr
r*szTestUnixDomain.tearDowncCs:y
tj|�Stk
r4|jdj|tj���YnXdS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoderXr7r�r��getfilesystemencoding)rr�rrr
�encoded-s
zTestUnixDomain.encodedcCsXytj||�WnBtk
rR}z&t|�dkr@|jdj|��n�WYdd}~XnXdS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rr�r	r�r7r�)rr�r�rarrr
r58s
zTestUnixDomain.bindcCs|j|jj�d�dS)Nr�)r�N)r�r�rl)rrrr
�testUnboundDszTestUnixDomain.testUnboundcCs@tjjtj�}|j|j|�|jtj|�|j	|jj
�|�dS)N)r�r��abspathr�TESTFNr5r�r-r�r�rl)rr�rrr
�testStrAddrHszTestUnixDomain.testStrAddrcCsFtjjtj�}|j|j|j|��|jtj	|�|j
|jj�|�dS)N)r�r�r�rr�r5r�r�r-r�r�rl)rr�rrr
�
testBytesAddrOszTestUnixDomain.testBytesAddrcCsRtjjtj�}|j|�}|j|j|jdd��|j	tj
|�|j|jj�|�dS)N�ascii�surrogateescape)
r�r�r�rZTESTFN_UNICODEr�r5r�r{r-r�r�rl)rr�rZrrr
�testSurrogateescapeBindVs

z&TestUnixDomain.testSurrogateescapeBindcCsTtjdkr|jd�tjjtj�}|j|j|�|jtj	|�|j
|jj�|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLEr7r�r�r�r5r�r-r�r�rl)rr�rrr
�testUnencodableAddr_s

z"TestUnixDomain.testUnencodableAddrN)rr r!rrr�r5r�r�r�r�r�rrrr
r�$s	r�c@s�eZdZdZddd�Zdd�Zdd�Zd	d
�ZeZdd�Z	eZ
d
d�Zdd�Zdd�Z
eZdd�ZeZdd�Zdd�Zdd�ZeZdS)�BufferIOTestzF
    Test the buffer versions of socket.recv() and socket.send().
    recCstj||d�dS)N)rf)rnr&)rrfrrr
r&nszBufferIOTest.__init__cCsZtjddgtt��}|jj|�}|j|tt��|j�}|dtt��}|j|t�dS)Nr7r)r8rUr�rpr*r�rz)rr&rur�rrr
�testRecvIntoArrayqszBufferIOTest.testRecvIntoArraycCstt�}|jj|�dS)N)r�r�rtrB)rr&rrr
�_testRecvIntoArrayyszBufferIOTest._testRecvIntoArraycCsDtd�}|jj|�}|j|tt��|dtt��}|j|t�dS)Ni)r2rpr*r�rUr�)rr&rur�rrr
�testRecvIntoBytearray}s
z"BufferIOTest.testRecvIntoBytearraycCsHtd�}|jjt|��}|j|tt��|dtt��}|j|t�dS)Ni)r2rpr*r~r�rUr�)rr&rur�rrr
�testRecvIntoMemoryview�s
z#BufferIOTest.testRecvIntoMemoryviewcCs^tjddgtt��}|jj|�\}}|j|tt��|j�}|dtt��}|j|t�dS)Nr7r)r8rUr�rpr-r�rz)rr&rurrr�rrr
�testRecvFromIntoArray�sz"BufferIOTest.testRecvFromIntoArraycCstt�}|jj|�dS)N)r�r�rtrB)rr&rrr
�_testRecvFromIntoArray�sz#BufferIOTest._testRecvFromIntoArraycCsHtd�}|jj|�\}}|j|tt��|dtt��}|j|t�dS)Ni)r2rpr-r�rUr�)rr&rurrr�rrr
�testRecvFromIntoBytearray�s
z&BufferIOTest.testRecvFromIntoBytearraycCsLtd�}|jjt|��\}}|j|tt��|dtt��}|j|t�dS)Ni)r2rpr-r~r�rUr�)rr&rurrr�rrr
�testRecvFromIntoMemoryview�s
z'BufferIOTest.testRecvFromIntoMemoryviewcCs td�}|jt|jj|d�dS)Nr4i)r2r�rrpr-)rr&rrr
�testRecvFromIntoSmallBuffer�sz(BufferIOTest.testRecvFromIntoSmallBuffercCs|jjt�dS)N)rtrBr�)rrrr
�_testRecvFromIntoSmallBuffer�sz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t�}|jj|�|jj|d�dS)Nr)r2rpr-)rr&rrr
�testRecvFromIntoEmptyBuffer�sz(BufferIOTest.testRecvFromIntoEmptyBufferN)re)rr r!r/r&r�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�r�Z_testRecvFromIntoBytearrayr�Z_testRecvFromIntoMemoryviewr�r�r�Z_testRecvFromIntoEmptyBufferrrrr
r�is$
r�i�����cCsfttd�sdSytd�}Wntttfk
r4dSX|�"x|D]}|jd�rBdSqBWWdQRXdS)z�Check if the TIPC module is loaded

    The TIPC module is not loaded automatically on Ubuntu and probably
    other Linux distros.
    �AF_TIPCFz
/proc/modulesztipc TN)r_rr��FileNotFoundError�IsADirectoryError�PermissionErrorr)r�rvrrr
�isTipcAvailable�s


r�z6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZdd�ZdS)�TIPCTestcCs�tjtjtj�}tjtjtj�}|j|j�|j|j�|jtjtjd�tjt	t
tf}|j|�tj
t	t
ttt
d�df}|jt|�|jd�\}}|j|j�|�|j|t�dS)NrEr�ri)rr�r�r-r
r?r�r��TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERr5�TIPC_ADDR_NAMEr�r�r�r�r�rl)rr�rg�srvaddrZsendaddrr�Zrecvaddrrrr
�testRDM�s
zTIPCTest.testRDMN)rr r!r�rrrr
r��sr�c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�TIPCThreadableTestrecCstjj||d�tj|�dS)N)rf)rvrwr&r=)rrfrrr
r&�szTIPCThreadableTest.__init__cCs�tjtjtj�|_|j|jj�|jjtjtjd�tj	t
ttf}|jj
|�|jj�|j�|jj�\|_|_|j|jj�dS)NrE)rr�rr�r-r
r?r�r�r�r�r�r�r5rrDrorq�connaddr)rr�rrr
r�s
zTIPCThreadableTest.setUpcCsdtjd�tjtjtj�|_|j|jj�tjt	t
ttt
d�df}|jj
|�|jj�|_dS)Ng�������?r�r)r;r<rr�rrgr-r
r�r�r�r�r�rsrl�cliaddr)rrrrrr
r[s
zTIPCThreadableTest.clientSetUpcCs,|jjd�}|j|t�|j|j|j�dS)Ni)rqr�r�r�r�r�)rr�rrr
�
testStreamszTIPCThreadableTest.testStreamcCs|jjt�|jj�dS)N)rgrBr�r
)rrrr
�_testStreamszTIPCThreadableTest._testStreamN)re)rr r!r&rr[r�r�rrrr
r��s

r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestcCs�tj��}|j|j�WdQRX|j|j�tj��}|j�WdQRX|j|j�tj��}|jt|jd�WdQRX|j|j�dS)Nsfoo)rr<rr�r
r�r	rh)rr�rrr
�_testSocketClasss


z$ContextManagersTest._testSocketClasscCs2|jj�\}}|j|j�|jd�}|j|�dS)Ni)rror-r
r�rh)rrqrrr�rrr
�testCreateConnectionBase's
z,ContextManagersTest.testCreateConnectionBasec
CsX|jj�}tj|��.}|j|j�|jd�|j|jd�d�WdQRX|j	|j�dS)Nsfooi)
rrlrr�r<rrhr�r�r�)rr�r�rrr
�_testCreateConnectionBase-s

z-ContextManagersTest._testCreateConnectionBasecCs2|jj�\}}|j|j�|jd�}|j|�dS)Ni)rror-r
r�rh)rrqrrr�rrr
�testCreateConnectionClose5s
z-ContextManagersTest.testCreateConnectionClosecCsH|jj�}tj|��}|j�WdQRX|j|j�|jt|j	d�dS)Nsfoo)
rrlrr�r
r�rr�r	rh)rr�r�rrr
�_testCreateConnectionClose;s

z.ContextManagersTest._testCreateConnectionCloseN)rr r!rrrrrrrrr
r�s
r�c@s�eZdZejeed�d�ejddd�dd���Z	dd	�Z
d
d�Zdd
�Zej
edkd�dd��Zej
edkd�dd��Zejeed�d�dd��ZdS)�InheritanceTestrEzSOCK_CLOEXEC not definedr�rLrMc
CsFtjtjtjtjB��&}|j|jtj@�|j|j��WdQRXdS)N)rrrrEr�r�r<�get_inheritable)rrrrr
�test_SOCK_CLOEXECDsz!InheritanceTest.test_SOCK_CLOEXECc
Cs,tj�}|�|j|j�d�WdQRXdS)NF)rr�r)rr�rrr
�test_default_inheritableMsz(InheritanceTest.test_default_inheritablecCsLtj�}|�6|j�}|j�|�|j|j�d�WdQRXWdQRXdS)NF)rr�r
r�r)rr�Znewsockrrr
�test_dupRszInheritanceTest.test_dupc
CsPtj�}|�:|jd�|j|j�d�|jd�|j|j�d�WdQRXdS)NTF)r�set_inheritabler�r)rr�rrr
�test_set_inheritableZs

z$InheritanceTest.test_set_inheritableNz
need fcntlcCsntj�}|�X|j�}|j|j�d�tj|tj�}|tjM}tj|tj|�|j|j�d�WdQRXdS)NFT)rr�r�r�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)rr�r�rRrrr
�test_get_inheritable_cloexeccsz,InheritanceTest.test_get_inheritable_cloexeccCshtj�}|�R|j�}|jtj|tj�tj@tj�|jd�|jtj|tj�tj@d�WdQRXdS)NTr)rr�r�rr
rr
)rr�r�rrr
�test_set_inheritable_cloexecqs
z,InheritanceTest.test_set_inheritable_cloexecrxzneed socket.socketpair()cCsHtj�\}}|j|j�|j|j�|j|j�d�|j|j�d�dS)NF)rrxr-r
r�r)rr�r�rrr
�test_socketpair~s
zInheritanceTest.test_socketpair)rr r!rvr�r_rrrYrrr	rr�rrrrrrrr
rCs	
rrKzSOCK_NONBLOCK not definedc@s,eZdZddd�Zejddd�dd	��Zd
S)�NonblockConstantTestT�cCsN|r(|j|jtj@�|j|j�|�n"|j|jtj@�|j|j�d�dS)N)r�r�rrKr�rr<)rrZnonblockrjrrr
�
checkNonblock�s
z"NonblockConstantTest.checkNonblockr�rLrMc&CsXtjtjtjtjB��~}|j|�|jd�|j|d�|jd�|j|�|jd�|j|d�|jd�|j|dd�|jd�|j|d�WdQRXtj�}tjd�tj��}|j|�WdQRXtjd�tj��}|j|d�WdQRXtjd�tj��}|j|dd�WdQRXtjd�tj��}|j|d�WdQRXtj|�dS)NrEFrg@)rjg)	rrrrKrrFrArr)rr�trrr
�test_SOCK_NONBLOCK�s6














z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr)rr r!rrrYrrrrr
r�s
rrJzWindows specificzneed multiprocessingc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCsD|j�}|j�}tj|�}|j�\}}|j|�|j�|j�dS)N)rXr�	fromsharerorhr
)r��qZsdatarPrr�rkrrr
�remoteProcessServer�s

z%TestSocketSharing.remoteProcessServerc	Cs�tj�}tj|j|fd�}|j�|jj|j�}|jj�}|jj	�|j
|�d}|j
|�tj|�}g}x|j
d�}|s|P|j|�qlW|j	�dj|�}|j||�|j�dS)N)r2r*s
slapmahfrorMr�)�multiprocessingrNZProcessrr4r�share�pidrlr
r]rr�r�r�r�r�)	rrr�r�rrrPr�m�receivedrrr
�	testShare�s(






zTestSocketSharing.testSharecCs@|jjtj��}|jttj|dd��|jttj|d�dS)NrEsfoor)rrr��getpidr�rrr)rr�rrr
�testShareLength�sz!TestSocketSharing.testShareLengthcCsb|j|j�d�|j|j�|j��|j|j|j�|j|j|j�|jdkr^|j|j|j�dS)Nr)r�rr�r�r�)rZorg�otherrrr
�compareSockets�s
z TestSocketSharing.compareSocketsc
Cs<|jjtj��}tj|�}z|j|j|�Wd|j�XdS)N)rrr�r!rrr$r
)rr�rrrr
�testShareLocals

z TestSocketSharing.testShareLocalcCs�tjtjg}tjtjg}x�|D]~}xx|D]p}ytj||�}Wntk
rRw(YnXz8|jtj��}tj	|�}z|j
||�Wd|j�XWd|j�Xq(WqWdS)N)rrr�rr#r	rr�r!rr$r
)rZfamilies�typesr�r�sourcer�Zsharedrrr
�	testTypess


zTestSocketSharing.testTypesN)
rr r!r�rr r"r$r%r(rrrr
r�s#rc@seZdZdZd?ZdZdZdZedd��Z	ed	d
��Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"d;d<�Z#d=S)@�SendfileUsingSendTestz>
    Test the send() implementation of socket.sendfile().
    rii r�r�cCs�dd�}djdd�t|j�D��}ttjd��(}x ||j|j�D]}|j|�q@WWdQRXttjd��$}|j�|_	t
|j	�|jks�t�WdQRXdS)Ncss6||kst�x||kr&|V||8}qW|r2|VdS)N)r�)Ztotal�steprrr
�chunks)s
z0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSsg|]}tjtj�j��qSr)�randomZchoice�stringZ
ascii_lettersr�)r�rrrr
r�1sz4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>r~rp)r�r��BUFSIZEr�rr��FILESIZEr�r��FILEDATArUr�)r�r+�chunkr�Zcsizerrr
�
setUpClass's

z SendfileUsingSendTest.setUpClasscCstjtj�dS)N)rr�r�)r�rrr
�
tearDownClass:sz#SendfileUsingSendTest.tearDownClasscCs8|jj|j�|jj�\}}|j|j�|j|j�|S)N)rrA�TIMEOUTror-r
)rrqrrrrr
�accept_conn>s
z!SendfileUsingSendTest.accept_conncCs0g}x |j|j�}|sP|j|�qWdj|�S)Nr�)r�r.r�r�)rrqrr1rrr
�	recv_dataEszSendfileUsingSendTest.recv_datacCs
t|d�S)NZ_sendfile_use_send)rR)rr�rrr
�meth_from_sockNsz$SendfileUsingSendTest.meth_from_sockcCsr|jj�}ttjd�}tj|��H}|�8}|j|�}||�}|j||j	�|j|j
�|j	�WdQRXWdQRXdS)Nrp)rrlr�rr�rr�r7r�r/�tell)rr��filer��meth�sentrrr
�_testRegularFileUs

z&SendfileUsingSendTest._testRegularFilecCs6|j�}|j|�}|jt|�|j�|j||j�dS)N)r5r6r�rUr/r0)rrqr�rrr
�testRegularFile^s
z%SendfileUsingSendTest.testRegularFilecCs||jj�}tj|j�}tj|��R}|�B}|j|�}|j||j	�|j|j
�|j	�|jtj|j
|�WdQRXWdQRXdS)N)rrl�io�BytesIOr0rr�r�r�r/r8r�r�r�)rr�r9r�r;rrr
�_testNonRegularFilefs

z)SendfileUsingSendTest._testNonRegularFilecCs6|j�}|j|�}|jt|�|j�|j||j�dS)N)r5r6r�rUr/r0)rrqr�rrr
�testNonRegularFileps
z(SendfileUsingSendTest.testNonRegularFilecCs�|jj�}tjd}t|d��|jtj|�WdQRXt|d�}tj|��D}|�4}|j	|�}||�}|j
|d�|j
|j�d�WdQRXWdQRXdS)N�2r~rpr)rrlrr�r�r-r�rr�r7r�r8)rr��filenamer9r�r:r;rrr
�_testEmptyFileSendxs



z(SendfileUsingSendTest._testEmptyFileSendcCs"|j�}|j|�}|j|d�dS)Nr�)r5r6r�)rrqr�rrr
�testEmptyFileSend�s
z'SendfileUsingSendTest.testEmptyFileSendcCsz|jj�}ttjd�}tj|��P}|�@}|j|�}||dd�}|j||j	d�|j|j
�|j	�WdQRXWdQRXdS)Nrpi�)�offset)rrlr�rr�rr�r7r�r/r8)rr�r9r�r:r;rrr
�_testOffset�s

z!SendfileUsingSendTest._testOffsetcCsB|j�}|j|�}|jt|�|jd�|j||jdd��dS)Ni�)r5r6r�rUr/r0)rrqr�rrr
�
testOffset�s
z SendfileUsingSendTest.testOffsetcCsz|jj�}ttjd�}tj|dd��L}|�<}d}|j|�}|||d�}|j||�|j|j	�|�WdQRXWdQRXdS)Nrpr�)rjiGKL)rH)
rrlr�rr�rr�r7r�r8)rr�r9r�rHr:r;rrr
�
_testCount�s

z SendfileUsingSendTest._testCountcCs@d}|j�}|j|�}|jt|�|�|j||jd|��dS)NiGKL)r5r6r�rUr0)rrHrqr�rrr
�	testCount�s

zSendfileUsingSendTest.testCountcCsz|jj�}ttjd�}tj|dd��L}|�<}d}|j|�}|||d�}|j||�|j|j	�|�WdQRXWdQRXdS)Nrpr�)rjrE)rH)
rrlr�rr�rr�r7r�r8)rr�r9r�rHr:r;rrr
�_testCountSmall�s

z%SendfileUsingSendTest._testCountSmallcCs@d}|j�}|j|�}|jt|�|�|j||jd|��dS)NrE)r5r6r�rUr0)rrHrqr�rrr
�testCountSmall�s

z$SendfileUsingSendTest.testCountSmallcCs�|jj�}ttjd�}tj|dd��R}|�B}d}|j|�}||d|d�}|j||�|j|j	�|d�WdQRXWdQRXdS)Nrpr�)rji��i�)rFrH)
rrlr�rr�rr�r7r�r8)rr�r9r�rHr:r;rrr
�_testCountWithOffset�s

z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|j�}|j|�}|jt|�|�|j||jd|d��dS)Ni��i�)r5r6r�rUr0)rrHrqr�rrr
�testCountWithOffset�s

z)SendfileUsingSendTest.testCountWithOffsetcCsr|jj�}ttjd�}tj|��H}|�8}|jd�|j|�}|j	t
||�|j	t
|j|�WdQRXWdQRXdS)NrpF)rrlr�rr�rr�rFr7r�rr�)rr�r9r�r:rrr
�_testNonBlocking�s


z&SendfileUsingSendTest._testNonBlockingcCs |j�}|jd�r|jd�dS)Ni z$was not supposed to receive any data)r5r�r�)rrqrrr
�testNonBlocking�s
z%SendfileUsingSendTest.testNonBlockingcCsd|jj�}ttjd�}tj|dd��6}|�&}|j|�}||�}|j||j	�WdQRXWdQRXdS)Nrpr�)rj)
rrlr�rr�rr�r7r�r/)rr�r9r�r:r;rrr
�_testWithTimeout�s

z&SendfileUsingSendTest._testWithTimeoutcCs6|j�}|j|�}|jt|�|j�|j||j�dS)N)r5r6r�rUr/r0)rrqr�rrr
�testWithTimeout�s
z%SendfileUsingSendTest.testWithTimeoutcCsZ|jj�}ttjd��:}tj|dd�� }|j|�}|jtj	||�WdQRXWdQRXdS)Nrpg{�G�z�?)rj)
rrlr�rr�rr�r7r�rj)rr�r9r�r:rrr
�_testWithTimeoutTriggeredSend�s


z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|j�}|jd�dS)Ni�X)r5r�)rrqrrr
�testWithTimeoutTriggeredSend�sz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdS)Nr)rrrr
�_test_errorssz"SendfileUsingSendTest._test_errorsc1Csttjd��:}tjtjd�� }|j|�}|jtd||�WdQRXWdQRXttjd��4}tj�� }|j|�}|jtd||�WdQRXWdQRXttjd��t}tj��`}|j|�}|jtd||dd�|jtd||d	d�|jtd||d
d�|jtd||dd�WdQRXWdQRXdS)
Nrp)r�rr�zbinary modezpositive integerrB)rHg�������?rrEr)	r�rr�rr#r7r�rr`)rr9rr:rrr
�test_errorss*
 

 

z!SendfileUsingSendTest.test_errorsNi(i�)$rr r!r/r/r.r0r4r�r2r3r5r6r7r<r=r@rArDrErGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrrrr
r)s@		
	
	
	
		r)r�z%os.sendfile() required for this test.c@seZdZdZdd�ZdS)�SendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    cCs
t|d�S)Nr�)rR)rr�rrr
r7$sz(SendfileUsingSendfileTest.meth_from_sockN)rr r!r/r7rrrr
rWsrWzAF_ALG requiredc@s|eZdZdd�Zejdd�dd��Zdd�Zejdd	�d
d��Zejdd�d
d��Z	ejdd	�dd��Z
dd�Zdd�ZdS)�LinuxKernelCryptoAPIcCsjtjtjtjd�}y|j||f�Wn<tk
r`}z |j�tjt|�||��WYdd}~XnX|SdS)Nr)	rrrr5r�r
rvZSkipTestr�)r�typr�r�rarrr
�
create_alg+s$zLinuxKernelCryptoAPI.create_algr�r1cCs�tjd�}|jdd���}|j�\}}|�"|jd�|j|jd�|�WdQRX|j�\}}|�L|jdtj	�|jdtj	�|jdtj	�|jd	�|j|jd�|�WdQRXWdQRXdS)
NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad�hashZsha256sabcirN�b�cr�)
r��fromhexrZrorhr�r�rBr�MSG_MORE)rr��algo�oprGrrr
�test_sha2568s


z LinuxKernelCryptoAPI.test_sha256cCsptjd�}|jdd��P}|jtjtjd�|j�\}}|�"|jd�|j	|j
d�|�WdQRXWdQRXdS)NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79r[z
hmac(sha1)sJefeswhat do ya want for nothing?i)r�r^rZr?r�SOL_ALG�ALG_SET_KEYrorhr�r�)rr�r`rarGrrr
�test_hmac_sha1Js

z#LinuxKernelCryptoAPI.test_hmac_sha1rc
(Cs�tjd�}tjd�}d}tjd�}t|�}|jdd���z}|jtjtj|�|j�\}}|�6|j	tj
|tjd�|j|�|j
|j|�|�WdQRX|j�\}}|�,|j	|gtj|d�|j
|j|�|�WdQRXd	}	|g|	}
|j�\}}|�&|j	|
tj
|d�|j||	�}WdQRX|j
t|�||	�|j
|d|�|�|j�\}}|�(|j	|gtj|d�|j||	�}WdQRX|j
t|�||	�|j
|||	�WdQRXdS)
NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))ra�ivrR)rarfi)r�r^rUrZr?rrcrdro�
sendmsg_afalg�ALG_OP_ENCRYPTr_rhr�r��ALG_OP_DECRYPT)
r�keyrfr�Z
ciphertextZmsglenr`rarGZ
multiplierZlongmsg�encZdecrrr
�test_aes_cbcUsD






z!LinuxKernelCryptoAPI.test_aes_cbcr}c)Cs�tjd�}tjd�}tjd�}tjd�}tjd�}tjd�}t|�}t|�}|jdd���N}	|	jtjtj|�|	jtjtjd|�|	j	�\}
}|
�v|
j
tj||tjd	�|
j
|tj�|
j
|�|
j|t|�|�}|j||||��|j|||d��WdQRX|	j	�\}
}|
�f||}
|
j
|
gtj||d
�|
j|t|�|�}|j||||��|j|||d��WdQRXtjd�j}|	j	�\}
}|
��||}
|
j|
gtjtj|tj�gtjtj|t|��|gtjtj||�gf�|
jt|
�|�}|j||||��|j|||d��WdQRX|	j	�\}
}|
�N|||}
|
j
|
gtj||d
�|
jt|
�|�}|j|||d��WdQRXWdQRXdS)NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))rarf�assoclenrR)rarfrm�I)r�r^rUrZr?rrcrdZALG_SET_AEAD_AUTHSIZErorgrhr_rhr�r�r:ZStructr�r�Z
ALG_SET_OPZ
ALG_SET_IVZALG_SET_AEAD_ASSOCLENri)rrjrfZplainZassocZexpected_ctZexpected_tagZtaglenrmr`rarG�resr�Zpack_uint32rrr
�test_aead_aes_gcm~s`







   z&LinuxKernelCryptoAPI.test_aead_aes_gcmcCsn|jdd��X}tjd�}|jtjtj|�|j�\}}|� |jd�}|j	t
|�d�WdQRXWdQRXdS)N�rngZdrbg_pr_sha256r�)rZr��urandomr?rrcrdror�r�rU)rr`Z
extra_seedrarGZrnrrr
�test_drbg_pr_sha256�s

z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c.Cs�tjtjtjd�}|��|jt��|j�WdQRX|jt��|jdd�WdQRX|jt��|jd�WdQRX|jt��|jtjdd�WdQRX|jt��|jtjdd�WdQRXWdQRXdS)Nr)rarE)rarmr)rrrr�r`rgrh)rr�rrr
�test_sendmsg_afalg_args�sz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsc Cs�tjtjtjd�}|j|j�|jt��|jd
�WdQRX|jt	d��|jd�WdQRX|jt��|jddd	f�WdQRX|jt	d
��|jdddf�WdQRXdS)Nrr�
r�z
type too longr*r�r��?z
name too long�@�
ttttttttttttt)rxr��tttttttttttttt)ryr�)
rrrr-r
r�r�r5r�r)rr�rrr
�test_length_restriction�sz,LinuxKernelCryptoAPI.test_length_restrictionN)
rr r!rZrrYrbrerlrprsrtrzrrrr
rX(s
)?rX�winzrequires Windowsc@s eZdZddddhZdd�ZdS)�TestMSWindowsTCPFlagsZ
TCP_MAXSEGZTCP_NODELAYZTCP_FASTOPENZTCP_KEEPCNTcs6dd�tt�D�}�fdd�|D�}�jg|d�dS)NcSsg|]}|jd�r|�qS)ZTCP)r)r�rrrr
r��sz<TestMSWindowsTCPFlags.test_new_tcp_flags.<locals>.<listcomp>csg|]}|�jkr|�qSr)�
knownTCPFlags)r�r)rrr
r��szANew TCP flags were discovered. See bpo-32394 for more information)r�rr�)rZprovided�unknownr)rr
�test_new_tcp_flags�sz(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rr r!r}rrrrr
r|�s
r|cCs�tttttttttg	}|j	t
ttt
ttttttttttg�|jt�|jt�|jt�|j	ttg�|j	ttg�|j	t t!g�|jt"�|j	t#t$t%t&t't(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:t;g�|jt<�t=j>�}t=j?|�t=j@|�dS)N)Ar�r�r9r�r�r�r�rr��extendrDrZr�r�r�r�r�r�r�r�r�r�rrr�r>r�r�r�r�r�r�r�r�rXr�rr	r
rr
rrrrrrrrrrrrrrr'r1rr)rWr|rZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr
�	test_main�sl





r��__main__)�rvZtestrr�r>rGrr�r�r;r�rMr�r�r8r��weakrefrrer`r�r:r,r-rr,rrkr�r�rT�_threadrSr'r�rrrZHAVE_SOCKET_CANZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGr�r�rwrr"r$r1r<r=rdrhrirjrnruryr~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr	r"r'r*r+r-r.r/rKrTrWrlrqrtr�r�r�rrr	r
rrVrr
rrrrrrrrrrrrrrrrrr r_r'r1r9r>rDrZr�r�r�r�r�r�r=r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�rrr�rr)rWrXrr|r�rrrrr
�<module>sZ








3u!#	
^
D

[


?z7ww=$P;k7






















	 )5"
$l


	?
D
9
)
DS
',E
+
e


D&
=

Youez - 2016 - github.com/yon3zu
LinuXploit