Your IP : 216.73.217.129


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



��Yf��+@sddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZyddlZWnek
rFdZYnXyddlZWnek
rqdZYnXejZdjd�ZyddlZ ddl!Z!Wnek
r�dZ dZ!YnXyddl"Z"Wnek
r�dZ"YnXdd�Z#d	d
�Z$e#�Z%e$�Z&ejd�j'Z(Gdd
�d
ej)�Z*Gdd�dej)�Z+Gdd�dej)�Z,Gdd�dej)�Z-Gdd�dej)�Z.Gdd�d�Z/Gdd�de*e/�Z0Gdd�de+e/�Z1Gdd�de-e/�Z2Gdd�de.e/�Z3Gd d!�d!e0�Z4Gd"d#�d#ej)e/�Z5Gd$d%�d%ej)�Z6Gd&d'�d'e6�Z7Gd(d)�d)e,e6e/�Z8Gd*d+�d+e7e8�Z9Gd,d-�d-e6�Z:Gd.d/�d/e:�Z;Gd0d1�d1e6�Z<Gd2d3�d3e<�Z=Gd4d5�d5e<�Z>Gd6d7�d7e<�Z?Gd8d9�d9e<�Z@Gd:d;�d;e@�ZAd<d=�ZBd>d?�ZCd@dA�ZDGdBdC�dCej)�ZEejFe%dD�GdEdF�dFej)��ZGejFe%dD�ejFe dG�GdHdI�dIe2���ZHejFe&dJ�GdKdL�dLej)��ZIejFe&dJ�ejFe dG�GdMdN�dNe3���ZJejFe dG�GdOdP�dPe4��ZKejFe dG�GdQdR�dRe1��ZLGdSdT�dTe,�ZMGdUdV�dVeM�ZNGdWdX�dXeM�ZOGdYdZ�dZeM�ZPGd[d\�d\eM�ZQGd]d^�d^eM�ZRGd_d`�d`eM�ZSGdadb�dbeS�ZTGdcdd�ddeT�ZUGdedf�dfeT�ZVGdgdh�dheM�ZWGdidj�djeW�ZXGdkdl�dleW�ZYGdmdn�dneNeW�ZZGdodp�dpej)�Z[Gdqdr�dreS�Z\Gdsdt�dteS�Z]Gdudv�dveOeQe8e>�Z^eCejdw�ejFe dG�Gdxdy�dyeVe^���Z_eCejdz�ejFe dG�Gd{d|�d|eYe^���Z`eCejd}�ejFe dG�Gd~d�deZe^���ZaGd�d��d�eOeQe8eA�ZbeCejdw�ejFejcd��eDd�d��ejFe dG�Gd�d��d�eVeb�����ZdeCejdz�ejFejcd��eDd�d��ejFe dG�Gd�d��d�eYeb�����ZeeCejd}�ejFejcd��eDd�d��ejFe dG�Gd�d��d�eZeb�����ZfeCejdz�ejFejcd��eCed��eDd�d��ejFe dG�Gd�d��d�e]eb������ZgeCejd}�ejFejcd��eCed��eDd�d��ejFe dG�Gd�d��d�eNe]eb������ZhGd�d��d�eRe9e=�ZieCejdw�ejFe dG�Gd�d��d�eUei���ZjeCejdz�ejFe dG�Gd�d��d�eYeXei���ZkeCejd}�ejFe dG�Gd�d��d�eZeXei���ZlGd�d��d�ePeRe9e?�ZmeCejdw�eDd�d�d��ejFe dG�Gd�d��d�eUem����ZneCejdz�eDd�d�d��ejFe dG�Gd�d��d�eYeXem����ZoeCejd}�eDd�d�d��ejFe dG�Gd�d��d�eZeXem����ZpGd�d��d�eRe9e;�ZqeCejdw�eCed��ejFe dG�Gd�d��d�eUeq����ZreCejdz�eCed��ejFe dG�Gd�d��d�eYeXeq����ZseCejd}�eCed��ejFe dG�Gd�d��d�eZeXeq����ZteCejdwdz�eCed�d�d��ejFe dG�Gd�d��d�e\eq����ZueCejdwd}�eCed�d�d��ejFe dG�Gd�d��d�eNe\eq����ZvGd�d��d�ej)�ZweCed��ejFexed��pexed��d��Gd�d��d�ewe>���ZyeCed��ejFexed��plexed��d��ejFe dG�Gd�d��d�ewe,e7e=����ZzejFe dG�Gd�d��d�e0��Z{ejFe dG�Gd�d��d�e5��Z|ejFe dG�Gd�d��d�e0��Z}ejFe dG�Gd�d��d�e4��Z~Gd�d��d�e~�ZGd�d��d�e~�Z�Gd�d��d�e~�Z�Gd�d��d�e~�Z�Gd�d��d�e~�Z�Gd�d��d�e~�Z�Gd�d��d�e��Z�Gd�d��d�e�eK�Z�Gd�d��d�ej)�Z�ejFe dG�Gd�d��d�e*e/��Z�ejFe dG�Gd�d��d�e*e/��Z�Gd�d��d�e*�Z�Gd�d��d�e+�Z�Gd�d��d�ej)�Z�ejFejd�kd��Gd�d��d�ej)��Z�ejFexed��d��Gd�d��d�ej)��Z�ejFe dG�Gd�d��d�e4��Z�d�Z�d�Z�d�Z�d�d��Z�ejFe��d��Gd�d��d�ej)��Z�ejFe��d��Gd�d��d�ej)e/��Z�ejFe dG�Gd�d��d�e0��Z�Gd�d��d�ej)�Z�ejFexed��d��Gd�d��d�ej)��Z�ejFe
j�d�kd��ejFed��Gd�d��d�e*���Z�ejFe dG�Gdd�de0��Z�ejFe dG�ejFexe
d�d�Gdd�de����Z�dd�Z�e�dkr�e��dS(	�N)�support)�proxyFuMichael Gilfix was hereሴ
zutf-8cCsOy"tjtjtjtj�}Wnttfk
r@dSYnX|j�dS)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/python35/lib64/python3.5/test/test_socket.py�_have_socket_can1s"	
rcCsLytjtjtjd�}Wnttfk
r=dSYnX|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	
r�ic@s(eZdZdd�Zdd�ZdS)�
SocketTCPTestcCsAtjtjtj�|_tj|j�|_|jj�dS)N)r�AF_INET�SOCK_STREAM�servr�	bind_port�port�listen)�selfrrr
�setUpNszSocketTCPTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
�tearDownSs
zSocketTCPTest.tearDownN)�__name__�
__module__�__qualname__rrrrrr
rLsrc@s(eZdZdd�Zdd�ZdS)�
SocketUDPTestcCs4tjtjtj�|_tj|j�|_dS)N)rr�
SOCK_DGRAMrrrr)rrrr
rYszSocketUDPTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
r]s
zSocketUDPTest.tearDownN)rrrrrrrrr
r Wsr csReZdZdZerN�fdd�Z�fdd�Z�fdd�Z�S)�ThreadSafeCleanupTestCasez�Subclass of unittest.TestCase with thread-safe cleanup methods.

    This subclass protects the addCleanup() and doCleanups() methods
    with a recursive lock.
    cs&t�j||�tj�|_dS)N)�super�__init__�	threading�RLock�
_cleanup_lock)r�args�kwargs)�	__class__rr
r$isz"ThreadSafeCleanupTestCase.__init__c
s(|j�t�j||�SWdQRXdS)N)r'r#�
addCleanup)rr(r))r*rr
r+ms
z$ThreadSafeCleanupTestCase.addCleanupc
s(|j�t�j||�SWdQRXdS)N)r'r#�
doCleanups)rr(r))r*rr
r,qs
z$ThreadSafeCleanupTestCase.doCleanups)rrr�__doc__r%r$r+r,rr)r*r
r"as
r"c@sdeZdZdZdZdZdZeje�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�cCs{tjtjtjtj�|_|j|jj�y|jj|jf�Wn&t	k
rv|j
d|j�YnXdS)Nz%network interface `%s` does not exist)rrrrrr+r
�bind�	interfacer	�skipTest)rrrr
r�s!
	zSocketCANTest.setUpN)rrrr-r3�bufsize�
can_frame_fmt�structZcalcsizeZcan_frame_size�bcm_cmd_msg_fmtrrrrr
r.us
r.c@s(eZdZdZdZdd�ZdS)�
SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
    i cCsptjtjtjd�|_|j|jj�ytj|j�|_Wnt	k
rk|j
d�YnXdS)Nrzunable to bind RDS socket)rrrrr+r
rrrr	r4)rrrr
r�s
zSocketRDSTest.setUpN)rrrr-r5rrrrr
r9�sr9c@sjeZdZdZdd�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().
    cCs4|j|_|j|_|j|_|j|_dS)N)r�_ThreadableTest__setUpr�_ThreadableTest__tearDown�_setUp�	_tearDown)rrrr
r$�szThreadableTest.__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�|_tj�|_tj�|_tjd�|_d|_|j�}|j	d�}||dd�}t
|d|�}tj|j
|f�|_z)y|j�Wnd|_�YnXWd|jj�X|jj�dS)N�F�.�_T)r%�Eventr?�client_ready�done�queue�Queue�server_crashed�id�rfind�getattr�thread�start_new_thread�	clientRunZ
client_threadr;r@�wait)rZ
methodnamerZtest_methodrrr
r=�s$		zThreadableTest._setUpcCs?|j�|jj�|jj�r;|jj�}|�dS)N)r<rGrQrHZqsize�get)r�excrrr
r>s


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


	
'zThreadableTest.clientRuncCstd��dS)Nz clientSetUp must be implemented.)�NotImplementedError)rrrr
rUszThreadableTest.clientSetUpcCs|jj�tj�dS)N)rGr@rN�exit)rrrr
rVs
zThreadableTest.clientTearDownN)rrrr-r$rAr=r>rPrUrVrrrr
r:�s$r:c@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedTCPSocketTest�runTestcCs$tj|d|�tj|�dS)N�
methodName)rr$r:)rr`rrr
r$%szThreadedTCPSocketTest.__init__cCstjtjtj�|_dS)N)rrr�cli)rrrr
rU)sz!ThreadedTCPSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rV,s
	z$ThreadedTCPSocketTest.clientTearDownN)rrrr$rUrVrrrr
r^#sr^c@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedUDPSocketTestr_cCs$tj|d|�tj|�dS)Nr`)r r$r:)rr`rrr
r$3szThreadedUDPSocketTest.__init__cCstjtjtj�|_dS)N)rrr!ra)rrrr
rU7sz!ThreadedUDPSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rV:s
	z$ThreadedUDPSocketTest.clientTearDownN)rrrr$rUrVrrrr
rb1srbc@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedCANSocketTestr_cCs$tj|d|�tj|�dS)Nr`)r.r$r:)rr`rrr
r$AszThreadedCANSocketTest.__init__cCsTtjtjtjtj�|_y|jj|jf�Wntk
rOYnXdS)N)rrrrrar2r3r	)rrrr
rUEs
!
z!ThreadedCANSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rVNs
	z$ThreadedCANSocketTest.clientTearDownN)rrrr$rUrVrrrr
rc?s	rcc@s7eZdZddd�Zdd�Zdd�ZdS)	�ThreadedRDSSocketTestr_cCs$tj|d|�tj|�dS)Nr`)r9r$r:)rr`rrr
r$UszThreadedRDSSocketTest.__init__cCsctjtjtjd�|_y,|jjtdf�|jj�|_Wntk
r^YnXdS)Nr)	rrrrar2�HOST�getsockname�cli_addrr	)rrrr
rUYs
z!ThreadedRDSSocketTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rVds
	z$ThreadedRDSSocketTest.clientTearDownN)rrrr$rUrVrrrr
rdSsrdc@sUeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�SocketConnectedTestz�Socket tests for client-server connection.

    self.cli_conn is a client socket connected to the server.  The
    setUp() method guarantees that it is connected to the server.
    r_cCstj|d|�dS)Nr`)r^r$)rr`rrr
r$pszSocketConnectedTest.__init__cCs9tj|�|j�|jj�\}}||_dS)N)r^rrAr�accept�cli_conn)r�conn�addrrrr
rss

zSocketConnectedTest.setUpcCs'|jj�d|_tj|�dS)N)rjr
r^r)rrrr
r{s
	zSocketConnectedTest.tearDowncCs6tj|�|jjt|jf�|j|_dS)N)r^rUra�connectrer�	serv_conn)rrrr
rU�s
zSocketConnectedTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rnr
r^rV)rrrr
rV�s
	z"SocketConnectedTest.clientTearDownN)	rrrr-r$rrrUrVrrrr
rhisrhc@sOeZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�SocketPairTestr_cCs'tjj|d|�tj|�dS)Nr`)�unittest�TestCaser$r:)rr`rrr
r$�szSocketPairTest.__init__cCstj�\|_|_dS)N)r�
socketpairrra)rrrr
r�szSocketPairTest.setUpcCs|jj�d|_dS)N)rr
)rrrr
r�s
zSocketPairTest.tearDowncCsdS)Nr)rrrr
rU�szSocketPairTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rV�s
	zSocketPairTest.clientTearDownN)rrrr$rrrUrVrrrr
ro�s
roc@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�szSocketTestBase.setUpcCs&|j|j�|jj�|_dS)z9Bind server socket and set self.serv_addr to its address.N)�bindSockrrf�	serv_addr)rrrr
ru�szSocketTestBase.bindServercCs|jj�d|_dS)N)rr
)rrrr
r�s
zSocketTestBase.tearDownN)rrrr-rrurrrrr
rs�srscs(eZdZdZ�fdd�Z�S)�SocketListeningTestMixinz%Mixin to listen on the server socket.cst�j�|jj�dS)N)r#rrr)r)r*rr
r�s
zSocketListeningTestMixin.setUp)rrrr-rrr)r*r
rx�srxcsXeZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Z�S)�ThreadedSocketTestMixinz�Mixin to add client socket and allow client/server tests.

    Client socket is self.cli and its address is self.cli_addr.  See
    ThreadableTest for usage information.
    cs$t�j||�tj|�dS)N)r#r$r:)rr(r))r*rr
r$�sz ThreadedSocketTestMixin.__init__cCs|j�|_|j�dS)N)�newClientSocketra�
bindClient)rrrr
rU�sz#ThreadedSocketTestMixin.clientSetUpcCs
|j�S)z&Return a new socket for use as client.)rt)rrrr
rz�sz'ThreadedSocketTestMixin.newClientSocketcCs&|j|j�|jj�|_dS)z8Bind client socket and set self.cli_addr to its address.N)rvrarfrg)rrrr
r{�sz"ThreadedSocketTestMixin.bindClientcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rV�s
	z&ThreadedSocketTestMixin.clientTearDown)	rrrr-r$rUrzr{rVrr)r*r
ry�srycs^eZdZdZ�fdd�Z�fdd�Z�fdd�Z�fdd	�Z�S)
�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.)
    cs9t�j�|j�|jj�\}}||_dS)N)r#rrArrirj)rrkrl)r*rr
r�s

zConnectedStreamTestMixin.setUpcs'|jj�d|_t�j�dS)N)rjr
r#r)r)r*rr
r�s
	z!ConnectedStreamTestMixin.tearDowncs0t�j�|jj|j�|j|_dS)N)r#rUrarmrwrn)r)r*rr
rU�s
z$ConnectedStreamTestMixin.clientSetUpcs'|jj�d|_t�j�dS)N)rnr
r#rV)r)r*rr
rV�s
	z'ConnectedStreamTestMixin.clientTearDown)rrrr-rrrUrVrr)r*r
r|�s
r|cs4eZdZdZ�fdd�Zdd�Z�S)�UnixSocketTestBasez(Base class for Unix-domain socket tests.cs6tj�|_|jtj|j�t�j�dS)N)�tempfileZmkdtemp�dir_pathr+�os�rmdirr#r)r)r*rr
r
szUnixSocketTestBase.setUpcCs9tjd|j�}|j|�|jtj|�dS)N�dir)r~Zmktemprr2r+r�unlink)r�sock�pathrrr
rvs
zUnixSocketTestBase.bindSock)rrrr-rrvrr)r*r
r}sr}c@s"eZdZdZdd�ZdS)�UnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.cCstjtjtj�S)N)r�AF_UNIXr)rrrr
rtszUnixStreamBase.newSocketN)rrrr-rtrrrr
r�sr�cs:eZdZdZeZ�fdd�Zdd�Z�S)�InetTestBasez!Base class for IPv4 socket tests.cs!t�j�|jd|_dS)NrB)r#rrwr)r)r*rr
r#s
zInetTestBase.setUpcCstj|d|j�dS)N�host)rrr�)rr�rrr
rv'szInetTestBase.bindSock)rrrr-rer�rrvrr)r*r
r�sr�c@s"eZdZdZdd�ZdS)�TCPTestBasez#Base class for TCP-over-IPv4 tests.cCstjtjtj�S)N)rrr)rrrr
rt-szTCPTestBase.newSocketN)rrrr-rtrrrr
r�*sr�c@s"eZdZdZdd�ZdS)�UDPTestBasez#Base class for UDP-over-IPv4 tests.cCstjtjtj�S)N)rrr!)rrrr
rt3szUDPTestBase.newSocketN)rrrr-rtrrrr
r�0sr�c@s"eZdZdZdd�ZdS)�SCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.cCstjtjtjtj�S)N)rrr�IPPROTO_SCTP)rrrr
rt9szSCTPStreamBase.newSocketN)rrrr-rtrrrr
r�6sr�c@seZdZdZejZdS)�
Inet6TestBasez!Base class for IPv6 socket tests.N)rrrr-r�HOSTv6r�rrrr
r�>sr�c@s"eZdZdZdd�ZdS)�UDP6TestBasez#Base class for UDP-over-IPv6 tests.cCstjtjtj�S)N)r�AF_INET6r!)rrrr
rtFszUDP6TestBase.newSocketN)rrrr-rtrrrr
r�Csr�cs;dd����fdd�}dd�}|r7|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_passUsz%skipWithClientIf.<locals>.client_passcs=tj��|�}t|t�s9�fdd�|_|S)Ncs�S)Nr)�f)r�rr
�<lambda>Zsz3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>)rp�skip�
isinstance�type�client_skip)�objZretval)r��reasonrr
�skipdecWsz!skipWithClientIf.<locals>.skipdeccSs1t|t�pt|d�s-dd�|_|S)Nr�cSs|S)Nr)r�rrr
r�^sz5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>)r�r�rWr�)r�rrr
�	noskipdec\sz#skipWithClientIf.<locals>.noskipdecr)Z	conditionr�r�r�r)r�r�r
�skipWithClientIfLs	r�cs@�fdd�|D�}t|ddjdd�|D���S)z�Skip decorated test if obj is missing any of the given attributes.

    Sets client_skip attribute as skipWithClientIf() does.
    cs%g|]}t�|�s|�qSr)rW)�.0�name)r�rr
�
<listcomp>hs	z requireAttrs.<locals>.<listcomp>zdon't have z, css|]}|VqdS)Nr)r�r�rrr
�	<genexpr>jszrequireAttrs.<locals>.<genexpr>)r��join)r�Z
attributes�missingr)r�r
�requireAttrscsr�cGs�d}dd�|D�}|rBddjdd�|D��}nddd�|D�}ytj|�}Wn1tk
r�}zt|�}WYdd}~XnX|j�t|dk	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.
    NcSs5g|]+}t|t�rtt|�r|�qSr)r��strrWr)r�r�rrr
r�us	z!requireSocket.<locals>.<listcomp>zdon't have z, css|]}|VqdS)Nr)r�r�rrr
r�xsz requireSocket.<locals>.<genexpr>cSs4g|]*}t|t�r*tt|�n|�qSr)r�r�rMr)r�r�rrr
r�zs	zcan't create socket({0}): {1}css|]}t|�VqdS)N)r�)r��orrr
r��s)r�rr	r�r
r��format)r(�errr�Zcallargsrr[rrr
�
requireSocketms#	

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

zGeneralModuleTests.test_weakrefcCs�d}|jtd|d��t�WdQRX|jtd|d��tj�WdQRX|jtd|d��tj�WdQRXdS)Nz$Error raising socket exception (%s).�msgr	z
socket.herrorzsocket.gaierror)�assertRaisesr	r�herror�gaierror)rr�rrr
�testSocketError�s
z"GeneralModuleTests.testSocketErrorcKCs�tjtjtj�}|j|j�|jd�|j�}|jt��}|j	d|�WdQRX|j
t|j�d�|jt��}|j	d|�WdQRX|j
t|j�d�|jt��}|j	dd�WdQRX|j
dt|j��|jt��}|j	dd|�WdQRX|j
t|j�d�|jt��}|j	dd|�WdQRX|j
t|j�d�|jt��}|j	ddd�WdQRX|j
dt|j��|jt��}|j	dd	|�WdQRX|j
d
t|j��|jt��}|j	ddd�WdQRX|j
d
t|j��|jt��}|j	d�WdQRX|j
dt|j��|jt��}|j	dd|d�WdQRX|j
d
t|j��dS)N�ru☠z*a bytes-like object is required, not 'str'y@z.a bytes-like object is required, not 'complex'sfooznot NoneType�barzan integer is requiredz	(1 given)�z	(4 given))r�r)rrr!r+r
r2rfr�rX�sendtor�r��	exceptionr�)rrZsockname�cmrrr
�testSendtoErrors�sL
z#GeneralModuleTests.testSendtoErrorscCs<tjtjtjtjtjtjtjtjdS)N)	rrrr!r�SOCK_RDMr�
SOL_SOCKET�SO_REUSEADDR)rrrr
�testCrucialConstants�sz'GeneralModuleTests.testCrucialConstantscCs�tj�}ytj|�}Wntk
r@|jd�YnX|j|jd�dkd�ytj|�\}}}Wntk
r�|jd�YnX||g|}tj|�}||kr�|j	d|t
|�f�dS)Nzname lookup failurerCrzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s))r�gethostname�
gethostbynamer	r4r��find�
gethostbyaddrZgetfqdnr�r�)rZhostnameZipZhname�aliasesZipaddrsZall_host_namesZfqhnrrr
�testHostnameRes�s

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




z!GeneralModuleTests.testNtoHErrorscCsZ|j}tjjd�s*tjdkr3d}nd}x@|D]2}ytj|d
�}PWq@tk
rqYq@Xq@Wt�tj|�}|||�ytj|d�}Wntk
r�d}YnX|||�|tj|�|�|tj|d
�|�|dk	r*|tj|d�|�|jt	tjd�|jt	tjd
�dS)N�freebsd�netbsd�gnukfreebsd�linux�darwin�daytime�qotd�domain�echoZtcpZudprBi)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�
rBZspamr�)	r�r�getdefaulttimeout�
gettimeoutr
�setdefaulttimeoutr��
ValueErrorrX)rrrrr
�testDefaultTimeout�s 



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








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










	







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





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


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

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

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

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





z,GeneralModuleTests.check_sendall_interruptedcCs|jd�dS)NF)rX)rrrr
�test_sendall_interrupted:sz+GeneralModuleTests.test_sendall_interruptedcCs|jd�dS)NT)rX)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
CsUtjtjtj��6}|jd�}|j�|jt|�d�WdQRXdS)Nr[z<_io.BufferedReader name=-1>)rrrr]r
r�r�)rr��fprrr
�test_name_closed_socketioQs
z,GeneralModuleTests.test_name_closed_socketiocCs�tj���}|jddd�}|j|j��|j|j��|j|j��|j�|jt	|j�|jt	|j�|jt	|j�WdQRXdS)Nr[�	bufferingr)
rr]r��readabler*�writable�seekabler
r�r)rr�r`rrr
�test_unusable_closed_socketioWs
z0GeneralModuleTests.test_unusable_closed_socketiocCsqxjdD]b}|jd|��Gtj��3}|j|��}|j|j|�WdQRXWdQRXWdQRXqWdS)Nr^r[�rw�w�wb�mode)r^r[rgrhri)�subTestrr]r�rj)rrjr�r`rrr
�test_makefile_modebs

z%GeneralModuleTests.test_makefile_modecCslxedD]]}|jd|��Btj��.}|jtd��|j|�WdQRXWdQRXWdQRXqWdS)N�rtr0�+rrjzinvalid mode)rmr0rnr)rkr�assertRaisesRegexrr])rrjr�rrr
�test_makefile_invalid_modeis

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

!z1GeneralModuleTests.test_uknown_socket_family_repr�sendfileztest needs os.sendfile()cCs�Gdd�d�}tj���}tjtjtj�}tj|�|jtj��|j||��WdQRX|jt	��|j|d��WdQRX|jt
��|j|d��WdQRXWdQRXdS)Nc@s(eZdZdd�Zdd�ZdS)z<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.FilecSs
||_dS)N)r~)rr~rrr
r$�szEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__cSs|jS)N)r~)rrrr
r��szCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.filenoN)rrrr$r�rrrr
�File�sr�r�i�lC)rr��open�curdir�O_RDONLYr
r��_GiveupOnSendfile�_sendfile_use_sendfiler�rX)rr�r�r~rrr
�test__sendfile_use_sendfile�s
z.GeneralModuleTests.test__sendfile_use_sendfile)@rrrr�r�rp�
skipUnlessr�r�r�r�r�r�r�r�rWrr�r�r�r�r�r�r�r�cpython_onlyr�r
rrrrr#r&r(r,r.r1r3r6r�r�r;rFrHZis_resource_enabledrIrXrYrZr_rarfrlrprurwrzrAr{r|�skipIfrr�rrrr
r��st$


,*	'=#'K
	!'r�z!SocketCan required for this test.c@s�eZdZdd�Zejeed�d�dd��Zdd�Z	ejeed�d�d	d
��Z
dd�Zd
d�Zejeed�d�dd��Z
ejeed�d�dd��ZdS)�BasicCANTestcCstjtjtjdS)N)r�AF_CANrr)rrrr
r��sz!BasicCANTest.testCrucialConstants�CAN_BCMz&socket.CAN_BCM required for this test.cCs_tjtjtjtjtjtjtjtjtj	tj
tjtjtj
dS)N)rr�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
�testBCMConstants�szBasicCANTest.testBCMConstantsc	Cs,tjtjtjtj��}WdQRXdS)N)rrrr)rrrrr
�testCreateSocket�s!zBasicCANTest.testCreateSocketc	Cs,tjtjtjtj��}WdQRXdS)N)rrr!r�)rrrrr
�testCreateBCMSocket�s!z BasicCANTest.testCreateBCMSocketc	Cs9tjtjtjtj��}|jd�WdQRXdS)Nr�)r�)rrrrr2)rrrrr
�testBindAny�s!zBasicCANTest.testBindAnyc
CsLtjtjtjtj��'}|jtd|jddf�WdQRXdS)Nzinterface name too longr0i)rrrrror	r2)rrrrr
�testTooLongInterfaceName�s!z%BasicCANTest.testTooLongInterfaceName�CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c
Csxtjtjtjtj��S}xIdD]A}|jtjtj|�|j||jtjtj��q(WWdQRXdS)NrrB)rrB)	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��d}|jtjtj|�|j	||j
tjtjd��|jtjtjt|��WdQRXdS)N��z=IIr1)r�r�)r7�packrrrrr-r�r�r�r)r")r�can_idZcan_maskZ
can_filterrrrr
�
testFilter�s!	zBasicCANTest.testFilterN)rrrr�rpr�rWrr�r�r�r�r�r�r�rrrr
r��s	r�z!Threading required for this test.c@s�eZdZddd�Zedd��Zedd��Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
jeed�d�dd��Ze
jeed�d�dd��ZdS)�CANTestr_cCstj|d|�dS)Nr`)rcr$)rr`rrr
r$szCANTest.__init__cCs7t|�}|jdd�}tj|j|||�S)zBuild a CAN frame.r1s)r@�ljustr7r�r6)�clsr��data�can_dlcrrr
�build_can_frameszCANTest.build_can_framecCs5tj|j|�\}}}|||d|�fS)zDissect a CAN frame.N)r7Zunpackr6)r��framer�r�r�rrr
�dissect_can_frameszCANTest.dissect_can_framecCs`|jj|j�\}}|j|j|�|j|d|j�|j|dtj�dS)NrrB)r�recvfromr5r��cfr3rr�)rr�rlrrr
�
testSendFrameszCANTest.testSendFramecCs,|jdd�|_|jj|j�dS)Nrs)r�r�rar0)rrrr
�_testSendFrameszCANTest._testSendFramecCs2|jj|j�\}}|j|j|�dS)N)rr�r5r�r�)rr�rlrrr
�testSendMaxFrame"szCANTest.testSendMaxFramecCs,|jdd�|_|jj|j�dS)Nrsr1s)r�r�rar0)rrrr
�_testSendMaxFrame&szCANTest._testSendMaxFramecCs`|jj|j�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r5r��cf1�cf2)rr�rlrrr
�testSendMultiFrames*szCANTest.testSendMultiFramescCsT|jdd�|_|jj|j�|jdd�|_|jj|j�dS)N�sD3"�s�"3)r�r�rar0r�)rrrr
�_testSendMultiFrames1szCANTest._testSendMultiFramesr�z&socket.CAN_BCM required for this test.cCsp|jj|j�\}}|j|j|�|j|�\}}}|j|j|�|j|j|�dS)N)rar�r5r�r�r�r�r�)rr�rlr�r�r�rrr
�_testBCM8s
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"rBr�)rrr!r�r+r
rmr3r��bytesr�r�r�r�r@�AssertionErrorr7r�r8r0r�)rZbcmZopcoder=r5Z
ival1_secondsZ
ival1_usecZ
ival2_secondsZ
ival2_usecZ
bcm_can_idZnframes�headerZheader_plus_frameZ
bytes_sentrrr
�testBCMAs4			
zCANTest.testBCMN)rrrr$�classmethodr�r�r�r�r�r�r�r�rpr�rWrr�r�rrrr
r�sr�z#RDS sockets required for this test.c@s4eZdZdd�Zdd�Zdd�ZdS)�BasicRDSTestcCstjtjdS)N)rZAF_RDSr)rrrr
r�dsz!BasicRDSTest.testCrucialConstantsc	Cs)tjtjtjd��}WdQRXdS)Nr)rrr)rrrrr
r�hszBasicRDSTest.testCreateSocketcCsad}tjtjtjd��9}|jtjtj|�|jtjtj|�WdQRXdS)Ni@r)rrrr-r��	SO_RCVBUFZ	SO_SNDBUF)rr5rrrr
�testSocketBufferSizelsz!BasicRDSTest.testSocketBufferSizeN)rrrr�r�r�rrrr
r�asr�cs�eZdZddd�Z�fdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	e
j
d�dd��Ze	e
j
d�dd��Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Z�S) �RDSTestr_cCstj|d|�dS)Nr`)rdr$)rr`rrr
r$wszRDSTest.__init__cs t�j�tj�|_dS)N)r#rr%rE�evt)r)r*rr
rzs
z
RDSTest.setUpcCsE|jj|j�\}}|j|j|�|j|j|�dS)N)rr�r5r�r�rg)rr�rlrrr
�testSendAndRecv~szRDSTest.testSendAndRecvcCs/d|_|jj|jdt|jf�dS)Nsspamr)r�rar�rer)rrrr
�_testSendAndRecv�s	zRDSTest._testSendAndRecvcCsf|jj|jtj�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r5r�MSG_PEEKr�r�)rr�rlrrr
�testPeek�s!zRDSTest.testPeekcCs/d|_|jj|jdt|jf�dS)Nsspamr)r�rar�rer)rrrr
�	_testPeek�s	zRDSTest._testPeek�recvmsgcCs8|jj|j�\}}}}|j|j|�dS)N)rr�r5r�r�)rr��ancdataZ	msg_flagsrlrrr
�testSendAndRecvMsg�s!zRDSTest.testSendAndRecvMsg�sendmsgcCs9dd|_|jj|jgfdt|jf�dS)Nshello rr)r�rar�rer)rrrr
�_testSendAndRecvMsg�s
zRDSTest._testSendAndRecvMsgcCs`|jj|j�\}}|j|j|�|jj|j�\}}|j|j|�dS)N)rr�r5r��data1�data2)rr�rlrrr
�testSendAndRecvMulti�szRDSTest.testSendAndRecvMulticCsZd|_|jj|jdt|jf�d|_|jj|jdt|jf�dS)Nsbaconrsegg)r�rar�rerr�)rrrr
�_testSendAndRecvMulti�s	"	zRDSTest._testSendAndRecvMulticCsltj|jgggd�\}}}|j|j|�|jj|j�\}}|j|j|�dS)Ng@)�selectrr�r�r5r�r�)rr^rhr0r�rlrrr
�
testSelect�s'zRDSTest.testSelectcCs/d|_|jj|jdt|jf�dS)Nsselectr)r�rar�rer)rrrr
�_testSelect�s	zRDSTest._testSelectcCs|jj�dS)N)r�rQ)rrrr
�testCongestion�szRDSTest.testCongestioncCs�d|_|jjd�y |jjtjtjd�Wntk
rMYnX|jt��E}z-x&|jj	|jdt
|jf�qfWWd|jj
�XWdQRX|j|jjtj�tj|jgggd�\}}}|j|j|�dS)NsfillFi@rg@)r�ra�setblockingr-rr�r�r	r�r�rerr�r@r�r�r�ZENOBUFSr�rr�)rr�r^rhr0rrr
�_testCongestion�s	 
*'zRDSTest._testCongestion)rrrr$rr�r�r�r�r�rr�r�r�r�r�r�r�r�rr)r*r
r�ssr�c@seZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zeje�Zejd$d%��Zd&d'�Zd(d)�Zd*S)+�BasicTCPTestr_cCstj|d|�dS)Nr`)rhr$)rr`rrr
r$�szBasicTCPTest.__init__cCs&|jjd�}|j|t�dS)Ni)rj�recvr��MSG)rr�rrr
�testRecv�szBasicTCPTest.testRecvcCs|jjt�dS)N)rnr0r�)rrrr
�	_testRecv�szBasicTCPTest._testRecvcCsL|jjtt�d�}|jjd�}||}|j|t�dS)Nr�i)rjr�r@r�r�)r�seg1�seg2r�rrr
�testOverFlowRecv�s
zBasicTCPTest.testOverFlowRecvcCs|jjt�dS)N)rnr0r�)rrrr
�_testOverFlowRecv�szBasicTCPTest._testOverFlowRecvcCs,|jjd�\}}|j|t�dS)Ni)rjr�r�r�)rr�rlrrr
�testRecvFrom�szBasicTCPTest.testRecvFromcCs|jjt�dS)N)rnr0r�)rrrr
�
_testRecvFrom�szBasicTCPTest._testRecvFromcCsX|jjtt�d�\}}|jjd�\}}||}|j|t�dS)Nr�i)rjr�r@r�r�)rr�rlr�r�rrr
�testOverFlowRecvFrom�s"
z!BasicTCPTest.testOverFlowRecvFromcCs|jjt�dS)N)rnr0r�)rrrr
�_testOverFlowRecvFrom�sz"BasicTCPTest._testOverFlowRecvFromcCsHd}x'|jjd�}|s"P||7}q	W|j|dd�dS)N�i�fi)rjr�r�)rr��readrrr
�testSendAll�szBasicTCPTest.testSendAllcCsdd}|jj|�dS)Nr�i)rnrS)rZ	big_chunkrrr
�_testSendAlls
zBasicTCPTest._testSendAllcCsp|jj�}tj|tjtj�}|j|j�|j|tj�|j	d�}|j
|t�dS)Ni)rjr�rZfromfdrrr+r
r�r�r�r�)rr~r�r�rrr
�
testFromFdszBasicTCPTest.testFromFdcCs|jjt�dS)N)rnr0r�)rrrr
�_testFromFdszBasicTCPTest._testFromFdcCsB|jj�}|j|j�|jd�}|j|t�dS)Ni)rj�dupr+r
r�r�r�)rr�r�rrr
�testDupszBasicTCPTest.testDupcCs|jjt�dS)N)rnr0r�)rrrr
�_testDupszBasicTCPTest._testDupcCs3|jjd�}|j|t�|jj�dS)Ni)rjr�r�r�rGrQ)rr�rrr
�testShutdownszBasicTCPTest.testShutdowncCs$|jjt�|jjd�dS)Nr�)rnr0r��shutdown)rrrr
�
_testShutdown&szBasicTCPTest._testShutdowncCstddl}|jjt�|jt|jj|jd�|jt|jjd|jd�|jjd�dS)NrrBr�)	rxrnr0r�r�r�r�ry�UINT_MAX)rrxrrr
�_testShutdown_overflow,sz#BasicTCPTest._testShutdown_overflowcCs�|jj�}|jj�}|j||�|j|jj�|jt|jjd�|jj	�t
j
t
jt
jd|�}|j
|j	�|jd�}|j|t�dS)Nir�)rjr��detachr�r��_closedr�r	r�r
rrrr+r�)rr�r�r�r�rrr
�
testDetach7s
zBasicTCPTest.testDetachcCs|jjt�dS)N)rnr0r�)rrrr
�_testDetachGszBasicTCPTest._testDetachN)rrrr$r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�ZtestShutdown_overflowr�r�r�rrrr
r��s*
		r�c@sgeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dS)�BasicUDPTestr_cCstj|d|�dS)Nr`)rbr$)rr`rrr
r$MszBasicUDPTest.__init__cCs,|jjtt��}|j|t�dS)N)rr�r@r�r�)rr�rrr
�testSendtoAndRecvPszBasicUDPTest.testSendtoAndRecvcCs#|jjtdt|jf�dS)Nr)rar�r�rer)rrrr
�_testSendtoAndRecvUszBasicUDPTest._testSendtoAndRecvcCs2|jjtt��\}}|j|t�dS)N)rr�r@r�r�)rr�rlrrr
r�XszBasicUDPTest.testRecvFromcCs#|jjtdt|jf�dS)Nr)rar�r�rer)rrrr
r�]szBasicUDPTest._testRecvFromcCs|jt|jjd�dS)NrBr�)r�rrr�)rrrr
�testRecvFromNegative`sz!BasicUDPTest.testRecvFromNegativecCs#|jjtdt|jf�dS)Nr)rar�r�rer)rrrr
�_testRecvFromNegativedsz"BasicUDPTest._testRecvFromNegativeN)
rrrr$r�r�r�r�r�r�rrrr
r�Jsr�cs�eZdZdZ�fdd�Zdd�ZfZdd�Zdd	�Zd
d�Z	dd
�Z
dZx$dD]Zee
eed�OZqsWdZdZdZdddddd�Z�S)�SendrecvmsgBaseg@cs tj�|_t�j�dS)N)r%rE�
misc_eventr#r)r)r*rr
r�szSendrecvmsgBase.setUpcCs|jj|�S)N)�cli_sockr0)rr�rrr
�sendToServer�szSendrecvmsgBase.sendToServercGs'|jj||jt|�d��S)N)r�r��sendmsg_to_server_defaultsr@)rr(rrr
�sendmsgToServer�s	zSendrecvmsgBase.sendmsgToServercGs#|j||�}|j|�|S)N)r��registerRecvmsgResult)rr�r5r(�resultrrr
�	doRecvmsg�s
zSendrecvmsgBase.doRecvmsgcCsdS)Nr)rr�rrr
r��sz%SendrecvmsgBase.registerRecvmsgResultcCs|j||�dS)N)r�)r�addr1�addr2rrr
�checkRecvmsgAddress�sz#SendrecvmsgBase.checkRecvmsgAddressr�
MSG_CTRUNC�MSG_OOBNc
Cs�|j}|j}|r5||jO}||jO}n&|dk	r[||jO}||jO}||M}||M}||O}||O}||@|@}|r�tdj|���||B|@}	|j||	@||	@�dS)Nz6contradictory set, unset requirements for flags {0:#x})�msg_flags_common_set�msg_flags_common_unset�msg_flags_eor_indicator�msg_flags_non_eor_indicator�	Exceptionr�r�)
rr=�eor�checkset�
checkunset�ignoreZ
defaultsetZdefaultunsetZinbothr�rrr
�
checkFlags�s$		




	zSendrecvmsgBase.checkFlags)rr)rrr�fail_timeoutrr�r�r�rr�rrr�rMrrrr	rrr)r*r
r��s

r�c@seZdZdd�ZdS)�RecvmsgIntoMixincGst|�}|j|g|�}|j|�|j|dd�|j|d|�t|d|d��f|dd�S)NrrB)r"�recvmsg_intor��assertGreaterEqual�assertLessEqualr�)rr�r5r(�bufr�rrr
r�s
zRecvmsgIntoMixin.doRecvmsgN)rrrrrrrr
r�srcs(eZdZe�fdd��Z�S)�SendrecvmsgDgramFlagsBasecst�jtjBS)N)r#r	r�	MSG_TRUNC)r)r*rr
r	sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rrr�propertyr	rr)r*r
rsrcs(eZdZe�fdd��Z�S)�SendrecvmsgSCTPFlagsBasecst�jtjBS)N)r#rrZMSG_EOR)r)r*rr
rsz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rrrrrrr)r*r
r
src@sReZdZedd��Zedd��Zedd��Zdd�Zd	S)
�SendrecvmsgConnectionlessBasecCs|jS)N)r)rrrr
�	serv_socksz'SendrecvmsgConnectionlessBase.serv_sockcCs|jS)N)ra)rrrr
r�sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfS)Nr)rw)rrrr
r�"sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|jj||j�S)N)r�r�rw)rr�rrr
r�&sz*SendrecvmsgConnectionlessBase.sendToServerN)rrrrrr�r�r�rrrr
rsrc@s@eZdZedd��Zedd��Zdd�ZdS)�SendrecvmsgConnectedBasecCs|jS)N)rj)rrrr
r0sz"SendrecvmsgConnectedBase.serv_sockcCs|jS)N)rn)rrrr
r�4sz!SendrecvmsgConnectedBase.cli_sockcCsdS)Nr)rrrrrr
r8sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rrrrrr�rrrrr
r*srcs"eZdZ�fdd�Z�S)�SendrecvmsgServerTimeoutBasecs$t�j�|jj|j�dS)N)r#rrr/r)r)r*rr
rAs
z"SendrecvmsgServerTimeoutBase.setUp)rrrrrr)r*r
r>src@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zeed�dd��Zejd d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SendmsgTestscCs&|j|jjtt��t�dS)N)r�rr�r@r�)rrrr
�testSendmsgJszSendmsgTests.testSendmsgcCs&|j|jtg�tt��dS)N)r�r�r�r@)rrrr
�_testSendmsgNszSendmsgTests._testSendmsgcCs&|j|jjtt��t�dS)N)r�rr�r@r�)rrrr
�testSendmsgDataGeneratorQsz%SendmsgTests.testSendmsgDataGeneratorcCs3|j|jdd�tgD��tt��dS)Ncss|]}|VqdS)Nr)r�r�rrr
r�Vsz9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>)r�r�r�r@)rrrr
�_testSendmsgDataGeneratorUs"z&SendmsgTests._testSendmsgDataGeneratorcCs&|j|jjtt��t�dS)N)r�rr�r@r�)rrrr
�testSendmsgAncillaryGeneratorYsz*SendmsgTests.testSendmsgAncillaryGeneratorcCs6|j|jtgdd�gD��tt��dS)Ncss|]}|VqdS)Nr)r�r�rrr
r�^sz>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>)r�r�r�r@)rrrr
�_testSendmsgAncillaryGenerator]s%z+SendmsgTests._testSendmsgAncillaryGeneratorcCs&|j|jjtt��t�dS)N)r�rr�r@r�)rrrr
�testSendmsgArrayaszSendmsgTests.testSendmsgArraycCs2|j|jtjdt�g�tt��dS)N�B)r�r��arrayr�r@)rrrr
�_testSendmsgArrayes!zSendmsgTests._testSendmsgArraycCs&|j|jjtt��t�dS)N)r�rr�r@r�)rrrr
�testSendmsgGatheriszSendmsgTests.testSendmsgGathercCs=|j|jtdd�tdd�g�tt��dS)Nr�)r�r�r�r@)rrrr
�_testSendmsgGathermszSendmsgTests._testSendmsgGathercCs |j|jjd�d�dS)Ni�sdone)r�rr�)rrrr
�testSendmsgBadArgspszSendmsgTests.testSendmsgBadArgscCs�|jt|jj�|jt|jd�|jt|jt��|jt|jt�g�|jt|jtt�g�|jt|jtgt��|jt|jtggt��|jt|jtggdt��|jd�dS)Nsnot in an iterablersdone)r�rXr�r�r��objectr�r�)rrrr
�_testSendmsgBadArgsts 

z SendmsgTests._testSendmsgBadArgscCs |j|jjd�d�dS)Ni�sdone)r�rr�)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/r0)r�rXr�r�r,r�)rrrr
�_testSendmsgBadCmsg�sz SendmsgTests._testSendmsgBadCmsg�
CMSG_SPACEcCs |j|jjd�d�dS)Ni�sdone)r�rr�)rrrr
�testSendmsgBadMultiCmsg�sz$SendmsgTests.testSendmsgBadMultiCmsgcCs[|jt|jtgdddg�|jt|jtgdt�g�|jd�dS)Nrr�sdone)rrr�)r�rXr�r�r,r�)rrrr
�_testSendmsgBadMultiCmsg�s
z%SendmsgTests._testSendmsgBadMultiCmsgcCs |j|jjd�d�dS)Ni�sdone)r�rr�)rrrr
�testSendmsgExcessCmsgReject�sz(SendmsgTests.testSendmsgExcessCmsgRejectc
Csettd�sT|jt�� }|jtgddg�WdQRX|j|jj�|j	d�dS)Nr2rr�sdone)rrr�)rrr�)
rWrr�r	r�r��assertIsNoner�r�r�)rr�rrr
�_testSendmsgExcessCmsgReject�s
 z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdS)Nr)rrrr
�testSendmsgAfterClose�sz"SendmsgTests.testSendmsgAfterClosecCs*|jj�|jt|jtg�dS)N)r�r
r�r	r�r�)rrrr
�_testSendmsgAfterClose�s
z#SendmsgTests._testSendmsgAfterCloseN)rrrrr r!r"r#r$r%r(r)r*r+r-r.r1r�rr3r�r4r5r7r8r9rrrr
rFs(rc@syeZdZdd�Zdd�Zdd�Zdd�Zeej	dkd
�dd��Z
e
jd
d��ZdS)�SendmsgStreamTestscCs&|j|jjtt��t�dS)N)r�rr�r@r�)rrrr
�testSendmsgExplicitNoneAddr�sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs/|j|jtggdd�tt��dS)Nr)r�r�r�r@)rrrr
�_testSendmsgExplicitNoneAddr�sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCsC|j|jjd�dd�|j|jjd|j��dS)Ni�arU)r�rr�r�r�rQr)rrrr
�testSendmsgTimeout�s z%SendmsgStreamTests.testSendmsgTimeoutcCs^zI|jjd�|jtj�� x|jddg�q)WWdQRXWd|jj�XdS)Ng���Q��?r=i)r�r/r�rrUr�r�r@)rrrr
�_testSendmsgTimeout�s#z&SendmsgStreamTests._testSendmsgTimeoutrz<MSG_DONTWAIT not known to work on this platform when sendingcCsC|j|jjd�dd�|j|jjd|j��dS)Nir=rU)r�rr�r�r�rQr)rrrr
�testSendmsgDontWait�s z&SendmsgStreamTests.testSendmsgDontWaitcCsxzc|jt��+}x!|jddggtj�qWWdQRX|j|jjtjtj	f�Wd|j
j�XdS)Nr=i)r�r	r�rZMSG_DONTWAITr�r�r�ZEAGAINZEWOULDBLOCKr�r@)rr�rrr
�_testSendmsgDontWait�s(z'SendmsgStreamTests._testSendmsgDontWaitN>r)
rrrr;r<r>r?r�r�rr@r�rArrrr
r:�sr:c@s(eZdZdd�Zdd�ZdS)�SendmsgConnectionlessTestscCsdS)Nr)rrrr
�testSendmsgNoDestAddr�sz0SendmsgConnectionlessTests.testSendmsgNoDestAddrcCsE|jt|jjtg�|jt|jjtggdd�dS)Nr)r�r	r�r�r�)rrrr
�_testSendmsgNoDestAddr�s
z1SendmsgConnectionlessTests._testSendmsgNoDestAddrN)rrrrCrDrrrr
rB�srBc@sQeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
�dd��Ze	j
d
�dd��Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zeed"�d#d$��Zejd%d&��Zeejd'�d(d)��Zejd*d+��Zd,S)-�RecvmsgGenericTestscCsq|j|jtt��\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrT)rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsg	s
'zRecvmsgGenericTests.testRecvmsgcCs|jt�dS)N)r�r�)rrrr
�_testRecvmsg	sz RecvmsgGenericTests._testRecvmsgcCsw|j|jtt�dd�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrrT)rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsgExplicitDefaults	s!z/RecvmsgGenericTests.testRecvmsgExplicitDefaultscCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgExplicitDefaults	sz0RecvmsgGenericTests._testRecvmsgExplicitDefaultscCsu|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)Nr0rT)rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsgShorter	sz&RecvmsgGenericTests.testRecvmsgShortercCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgShorter$	sz'RecvmsgGenericTests._testRecvmsgShorterr1cCs|j|jtt�d�\}}}}|j|tdd��|j||j�|j|g�|j|dd�dS)Nr�rFr�)rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsgTrunc)	sz$RecvmsgGenericTests.testRecvmsgTrunccCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgTrunc3	sz%RecvmsgGenericTests._testRecvmsgTrunccCst|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)NrBrT)rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsgShortAncillaryBuf7	sz0RecvmsgGenericTests.testRecvmsgShortAncillaryBufcCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgShortAncillaryBuf@	sz1RecvmsgGenericTests._testRecvmsgShortAncillaryBufcCst|j|jtt�d�\}}}}|j|t�|j||j�|j|g�|j|dd�dS)Ni(rT)rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsgLongAncillaryBufC	sz/RecvmsgGenericTests.testRecvmsgLongAncillaryBufcCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgLongAncillaryBufL	sz0RecvmsgGenericTests._testRecvmsgLongAncillaryBufcCs-|jj�|jt|j|jd�dS)Ni)rr
r�r	r)rrrr
�testRecvmsgAfterCloseO	s
z)RecvmsgGenericTests.testRecvmsgAfterClosecCsdS)Nr)rrrr
�_testRecvmsgAfterCloseT	sz*RecvmsgGenericTests._testRecvmsgAfterClosecCsNz9|jjd�|jtj|j|jtt��Wd|jj	�XdS)Ng���Q��?)
rr/r�rrUrr@r�r�r@)rrrr
�testRecvmsgTimeoutW	s
z&RecvmsgGenericTests.testRecvmsgTimeoutcCs#|j|jjd|j��dS)NrU)r�r�rQr)rrrr
�_testRecvmsgTimeout`	sz'RecvmsgGenericTests._testRecvmsgTimeoutr�c	Cs}|j|jtt�ddtj�\}}}}|j|tdd��|j||j�|j|g�|j	|dddt
tdd��|j|jtt�dtj�\}}}}|j|t�|j||j�|j|g�|j	|dd�|j|jtt��\}}}}|j|t�|j||j�|j|g�|j	|dd�dS)	Nr�rrFrrTr�)rrr@r�rr�r�rrgrrM)rr�r�r=rlrrr
�testRecvmsgPeekc	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)NrT)
rr/rrr@r�r�rrgr)rr�r�r=rlrrr
�testRecvmsgFromSendmsg�	s'z*RecvmsgGenericTests.testRecvmsgFromSendmsgcCs=|j|jtdd�tdd�g�tt��dS)Nr�)r�r�r�r@)rrrr
�_testRecvmsgFromSendmsg�	sz+RecvmsgGenericTests._testRecvmsgFromSendmsgN)rrrrFrGrHrIrJrKrZrequires_freebsd_versionrLrMrNrOrPrQrRrSrTrUr�rrVr�rWrXrYrrrr
rE	s(		
			#rEc@sOeZdZejd�dd��Zdd�Zdd�Zdd	�Zd
S)�RecvmsgGenericStreamTestsz)fails intermittently when run within KojicCsk|j|jd�\}}}}|j|d�|j||j�|j|g�|j|dd�dS)Nir�r)rrr�rrgr)rr�r�r=rlrrr
�testRecvmsgEOF�	s
!z(RecvmsgGenericStreamTests.testRecvmsgEOFcCs|jj�dS)N)r�r
)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)Nr�rFiT)rrr@r�rrgr�r)rr�r�r=rlr�r�rrr
�testRecvmsgOverflow�	s!
z-RecvmsgGenericStreamTests.testRecvmsgOverflowcCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgOverflow�	sz.RecvmsgGenericStreamTests._testRecvmsgOverflowN)	rrrrpZ_skipInRpmBuildr[r\r]r^rrrr
rZ�	s	rZc@s(eZdZdd�Zdd�ZdS)�RecvmsgTestscCsh|jt|jj�|jt|jjddd�|jt|jjtt�dd�|jt|jjtd�gdd�|jt|jjt�dd�|jt|jjtt�t�d�|jt|jjtt�dt��|jjtt�dd�\}}}}|j	|t�|j
||j�|j	|g�|j|dd�dS)NrBrrrTr�r�)
r�rXrr�rr@r�r"r,r�rrgr)rr�r�r=rlrrr
�testRecvmsgBadArgs�	s$
*zRecvmsgTests.testRecvmsgBadArgscCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgBadArgs�	sz RecvmsgTests._testRecvmsgBadArgsN)rrrr`rarrrr
r_�	sr_c@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�RecvmsgIntoTestscCs�ttt��}|jt|jj�|jt|jjtt�dd�|jt|jj|dd�|jt|jjt�gdd�|jt|jjdgdd�|jt|jj|t�gdd�|jt|jj|gdd�|jt|jj|gt�d�|jt|jj|gdt��|jj|gdd�\}}}}|j	|tt��|j	|tt��|j
||j�|j	|g�|j|dd�dS)NrsI'm not writablerBrTr�)
r"r@r�r�rXrrr,rr�rrgr)rr�nbytesr�r=rlrrr
�testRecvmsgIntoBadArgs�	s0
'z'RecvmsgIntoTests.testRecvmsgIntoBadArgscCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgIntoBadArgs�	sz(RecvmsgIntoTests._testRecvmsgIntoBadArgscCs�ttt��}|jjdd�|gD��\}}}}|j|tt��|j|tt��|j||j�|j|g�|j|dd�dS)Ncss|]}|VqdS)Nr)r�r�rrr
r�
sz<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>rT)	r"r@r�rrr�rrgr)rrrcr�r=rlrrr
�testRecvmsgIntoGenerator�	s	%z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgIntoGenerator
sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCs�tjddgtt��}|jj|g�\}}}}|j|tt��|j|j�t�|j||j�|j|g�|j	|dd�dS)Nr&rrT)
r'r@r�rrr��tobytesrrgr)rrrcr�r=rlrrr
�testRecvmsgIntoArray
s!z%RecvmsgIntoTests.testRecvmsgIntoArraycCs|jt�dS)N)r�r�)rrrr
�_testRecvmsgIntoArray
sz&RecvmsgIntoTests._testRecvmsgIntoArraycCs�td�}td�}td�}|jj|t|�dd�|g�\}}}}|j|td��|j|td��|j|td��|j|td	��|j||j�|j|g�|j|d
d�dS)Ns----s
0123456789s--------------r��	sMary had a little lambsMarys
01 had a 9slittle lamb---rT)	r"rr�
memoryviewr�r@rrgr)rZb1Zb2Zb3rcr�r=rlrrr
�testRecvmsgIntoScatter
s	.z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|jd�dS)NsMary had a little lamb)r�)rrrr
�_testRecvmsgIntoScatter'
sz(RecvmsgIntoTests._testRecvmsgIntoScatterN)rrrrdrerfrgrirjrmrnrrrr
rb�	s
rbc@s�eZdZyddlZWnek
r6dZYnXedej�Zee	d�dd��Z
ee	d�dd	��ZdS)
�CmsgMacroTestsrNi����CMSG_LENcCs|jtjd�d}ttd��tt|d|��}|jtjd�tjd�jd�xM|D]E}tj|�}|j|tjd�|�|j	||j�qsW|j
ttjd�|j
ttj|�|j
ttjtj
�dS)NrrBirr�r�)�socklen_t_limitrrp�listrqr�r'�itemsizer�rr�r�r��maxsize)r�toobig�values�n�retrrr
�testCMSG_LEN8
s))
zCmsgMacroTests.testCMSG_LENr2cCs:|jtjd�d}ttd��tt|d|��}tjd�}|j|tjd�jd�x||D]t}tj|�}|j||�|j|tj	|��|j||tj	d��|j
||j�|}qyW|jttjd�|jttj|�|jttjt
j�dS)NrBirrr�r�)rqrr2rrrqr�r'rsrrprr�r�r�rt)rrurvZlastrwrxrrr
�testCMSG_SPACEM
s) 

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


z"RFC3542AncillaryTest.checkHopLimitr�r�cCs|jdd�dS)Nr�i()r�)rrrr
�testRecvHopLimitsz%RFC3542AncillaryTest.testRecvHopLimitcCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testRecvHopLimit
sz&RFC3542AncillaryTest._testRecvHopLimitr2cCs|jdtjt��dS)Nr�)r�rr2r�)rrrr
�testRecvHopLimitCMSG_SPACEsz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testRecvHopLimitCMSG_SPACEsz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACEr�cCs|jddd|j�dS)Nr�i(r�)r��	hop_limit)rrrr
�testSetHopLimit!sz$RFC3542AncillaryTest.testSetHopLimitcCsl|j|jjd|j��|j|jtgtjtj	t
j
d|jg�fg�tt��dS)NrUr)
r�r�rQrr�r�r�rr�r�r'r�r@)rrrr
�_testSetHopLimit(sz%RFC3542AncillaryTest._testSetHopLimitcCs�|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�|�\}}}}|j|t
�|j||j
�|j|dddtjd|�|jt	|�d�|j|�}|tjtjf}	|jt	|	�t�tjd�}
|
j|	�|j|
dd�|j|
dd	�|tjtjf}|jt	|�t�tjd�}
|
j|�|j|
dd�|j|
d|�dS)
NrBrTr
rr�rrr�)rr-rr�r��IPV6_RECVTCLASSr�r@rr@r�r�rrgrrr��IPV6_TCLASSr�r'r�rrr�)rr�r�r�r�r�r=rlZancmapZtcdatarZhldatarrr
�checkTrafficClassAndHopLimit1s2




z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitr�r�cCs|jdd�dS)Nr�i()r�)rrrr
�testRecvTrafficClassAndHopLimitUsz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
� _testRecvTrafficClassAndHopLimit[sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs!|jdtjt�d�dS)Nr�r�)r�rr2r�)rrrr
�)testRecvTrafficClassAndHopLimitCMSG_SPACE`s	z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�*_testRecvTrafficClassAndHopLimitCMSG_SPACEhsz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jddd|j�dS)Nr�i(r�)r�r�)rrrr
�testSetTrafficClassAndHopLimitmsz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc	Cs�|j|jjd|j��|j|jtgtjtj	t
j
d|jg�ftjtjt
j
d|j
g�fg�tt��dS)NrUr)r�r�rQrr�r�r�rr�r�r'�
traffic_classr�r�r@)rrrr
�_testSetTrafficClassAndHopLimitvsz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jddd|j�dS)Nr�i(r�)r�r�)rrrr
�testOddCmsgSize�sz$RFC3542AncillaryTest.testOddCmsgSizecCs<|j|jjd|j��yk|jtgtjtjt	j	d|j
g�j�dftjtjt	j	d|j
g�fg�}Wn�tk
r7}z�|j|jt�|jtgtjtjt	j	d|j
g�ftjtjt	j	d|j
g�fg�}|j|tt��WYdd}~XnXdS)NrUrs)r�r�rQrr�r�rr�r�r'r�rhr�r�r	r�r�r�r�r@)rrcr[rrr
�_testOddCmsgSize�s""%!z%RFC3542AncillaryTest._testOddCmsgSizecCs�|jjtjtjd�|jj�|dkr;fn|f}|j|jtt	�|�\}}}}|j
|t	�|j||j�|j
|g�|j
|dddtjd|�dS)NrBrTrr)rr-rr�r�r�r@rr@r�r�rrgrr)rr�r�r(r�r�r=rlrrr
�checkHopLimitTruncatedHeader�s

z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdddtj�dS)Nr�r�)r�rr)rrrr
r��sz+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
r��sz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdddtj�dS)Nr�rr�)r�rr)rrrr
�testSingleCmsgTrunc0�sz)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSingleCmsgTrunc0�sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdd�dS)Nr�rB)r�)rrrr
�testSingleCmsgTrunc1�sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSingleCmsgTrunc1�sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jddt�dS)Nr�r�)r�r�)rrrr
�testSingleCmsgTrunc2Int�sz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSingleCmsgTrunc2Int�sz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs!|jdtjd�d�dS)Nr�rrB)r�rrp)rrrr
�testSingleCmsgTruncLen0Minus1�sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSingleCmsgTruncLen0Minus1�sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs|jjtjtjd�|jj�|j|jtt	�tj
t�d�\}}}}|j|t	�|j
||j�|j|dddtj�|jt|�d�|r
|d\}}}|j|tj�|j|tj�|jt|�t�dS)NrBrTrr)rr-rr�r�r�r@rr@r�rpr�r�rrgrrrr�r�)rr�r�r=rlr�r�r�rrr
�testSingleCmsgTruncInData�s

1z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSingleCmsgTruncInData
sz/RFC3542AncillaryTest._testSingleCmsgTruncInDatacCsj|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�|�\}}}}|j|t
�|j||j
�|j|dddtjd|�|jt	|�d�|d\}}}	|j|tj�|j|tjtjh�|jt	|	�t�tjd�}
|
j|	�|j|
dd�|j|
dd�dS)	NrBrTrrrrr�)rr-rr�r�r�r�r@rr@r�r�rrgrrr�r�r�r�r'r�rr)rr�r�r�r�r=rlr�r�r�rrrr
�checkTruncatedSecondHeader

s(



z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs#|jtjt�dtj�dS)Nr�)r�rr2r�r)rrrr
�testSecondCmsgTrunc0*
sz)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSecondCmsgTrunc00
sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|jtjt�d�dS)NrB)r�rr2r�)rrrr
�testSecondCmsgTrunc15
sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSecondCmsgTrunc1:
sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs"|jtjt�dt�dS)Nr�)r�rr2r�)rrrr
�testSecondCmsgTrunc2Int?
sz,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSecondCmsgTrunc2IntE
sz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs+|jtjt�tjd�d�dS)NrrB)r�rr2r�rp)rrrr
�testSecondCmsgTruncLen0Minus1J
sz2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSecondCmsgTruncLen0Minus1P
sz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c
Cs�|jjtjtjd�|jjtjtjd�|jj�|j|jt	t
�tjt�tj
t�d�\}}}}|j|t
�|j||j�|j|dddtj�tjtjh}|jd�\}}}|j|tj�|j|�|jt	|�t�tjd�}	|	j|�|j|	dd�|j|	dd�|r�|jd�\}}}|j|tj�|j|�|jt	|�t�|j|g�dS)NrBrTrrrr�)rr-rr�r�r�r�r@rr@r�r2r�rpr�rrgrrr�r��pop�remover'r�rrr�)
rr�r�r=rlZ
cmsg_typesr�r�r�rrrr
�testSecomdCmsgTruncInDataU
s4


/


z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs0|j|jjd|j��|jt�dS)NrU)r�r�rQrr�r�)rrrr
�_testSecomdCmsgTruncInDataz
sz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataNr�)1rrrr�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�r�r�r�r�r�rrrr
r��sp
!
!	# $r�c@seZdZdS)�SendrecvmsgUDPTestBaseN)rrrrrrr
r��
sr�r�c@seZdZdS)�SendmsgUDPTestN)rrrrrrr
r��
sr�r�c@seZdZdS)�RecvmsgUDPTestN)rrrrrrr
r��
sr�rc@seZdZdS)�RecvmsgIntoUDPTestN)rrrrrrr
r��
sr�c@seZdZdd�ZdS)�SendrecvmsgUDP6TestBasecCs(|j|dd�|dd��dS)NrBr�r�)r�)rrrrrr
r�
sz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressN)rrrrrrrr
r��
sr�zIPv6 required for this test.r�r!c@seZdZdS)�SendmsgUDP6TestN)rrrrrrr
r��
sr�c@seZdZdS)�RecvmsgUDP6TestN)rrrrrrr
r��
sr�c@seZdZdS)�RecvmsgIntoUDP6TestN)rrrrrrr
r��
sr�r�c@seZdZdS)�RecvmsgRFC3542AncillaryUDP6TestN)rrrrrrr
r��
sr�c@seZdZdS)�#RecvmsgIntoRFC3542AncillaryUDP6TestN)rrrrrrr
r��
sr�c@seZdZdS)�SendrecvmsgTCPTestBaseN)rrrrrrr
r��
sr�c@seZdZdS)�SendmsgTCPTestN)rrrrrrr
r�
src@seZdZdS)�RecvmsgTCPTestN)rrrrrrr
r�
src@seZdZdS)�RecvmsgIntoTCPTestN)rrrrrrr
r�
src@seZdZdS)�SendrecvmsgSCTPStreamTestBaseN)rrrrrrr
r�
srrrr�c@seZdZdS)�SendmsgSCTPStreamTestN)rrrrrrr
r�
srcs"eZdZ�fdd�Z�S)�RecvmsgSCTPStreamTestcseytt|�j�WnGtk
r`}z'|jtjkrA�|jd�WYdd}~XnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r#rr[r	r��ENOTCONNr4)rr[)r*rr
r[�
sz$RecvmsgSCTPStreamTest.testRecvmsgEOF)rrrr[rr)r*r
r�
srcs"eZdZ�fdd�Z�S)�RecvmsgIntoSCTPStreamTestcseytt|�j�WnGtk
r`}z'|jtjkrA�|jd�WYdd}~XnXdS)Nz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r#rr[r	r�rr4)rr[)r*rr
r[�
sz(RecvmsgIntoSCTPStreamTest.testRecvmsgEOF)rrrr[rr)r*r
r�
src@seZdZdS)�SendrecvmsgUnixStreamTestBaseN)rrrrrrr
rsrr�c@seZdZdS)�SendmsgUnixStreamTestN)rrrrrrr
r	sr	c@seZdZdS)�RecvmsgUnixStreamTestN)rrrrrrr
r
sr
c@seZdZdS)�RecvmsgIntoUnixStreamTestN)rrrrrrr
rsrr�r�c@seZdZdS)�RecvmsgSCMRightsStreamTestN)rrrrrrr
rsrc@seZdZdS)�RecvmsgIntoSCMRightsStreamTestN)rrrrrrr
r
%sr
cs^eZdZ�fdd�ZdZeed�rHdZdd�ZndZd	d�Z�S)
�InterruptedTimeoutBasecsXt�j�tjtjdd��}|jtjtj|�|j|jd�dS)NcSsddS)NrBrr)Zsignumr�rrr
r�:sz.InterruptedTimeoutBase.setUp.<locals>.<lambda>r)r#rrPrQr+�setAlarm)rZorig_alrm_handler)r*rr
r7s

zInterruptedTimeoutBase.setUpg@�	setitimerg�������?cCstjtj|�dS)N)rPr�ITIMER_REAL)r�secondsrrr
rGszInterruptedTimeoutBase.setAlarmr�cCstj|�dS)N)rPrJ)rrrrr
rMs)	rrrrrUrWrP�
alarm_timerrr)r*r
r2sr�siginterruptrJrz+Don't have signal.alarm or signal.setitimercs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	e
j
d
�dd��Ze	e
j
d�dd��Z�S)�InterruptedRecvTimeoutTestcs$t�j�|jj|j�dS)N)r#rrr/rU)r)r*rr
rZs
z InterruptedRecvTimeoutTest.setUpc
Os:|j|j�|jt��}|||�WdQRXdS)N)rrr�rR)rr�r(r)r�rrr
�checkInterruptedRecv^sz/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs|j|jjd�dS)Ni)rrr�)rrrr
�testInterruptedRecvTimeoutesz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs |j|jjtd��dS)Ni)rr�	recv_intor")rrrr
�testInterruptedRecvIntoTimeouthsz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs|j|jjd�dS)Ni)rrr�)rrrr
�testInterruptedRecvfromTimeoutksz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs |j|jjtd��dS)Ni)rr�
recvfrom_intor")rrrr
�"testInterruptedRecvfromIntoTimeoutnsz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutr�cCs|j|jjd�dS)Ni)rrr�)rrrr
�testInterruptedRecvmsgTimeoutqsz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrcCs#|j|jjtd�g�dS)Ni)rrrr")rrrr
�!testInterruptedRecvmsgIntoTimeoutusz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout)
rrrrrrrrrr�rrrrr)r*r
rSsrcs�eZdZ�fdd�Zdd�Zdd�Zejdd�d	d
��Zejdd�dd��Z	ejdd�e
ejd
�dd���Z�S)�InterruptedSendTimeoutTestcs�t�j�|j�|_|j|jj�tjd|j�}|j	�|j
j�\|_}|j|jj�|j
�|jj|j�dS)N�target)r#rrtrnr+r
r%ZThread�	doConnect�startrrirjr�r/rU)rZ
cli_threadrl)r*rr
r�s


z InterruptedSendTimeoutTest.setUpcCs|jj|j�dS)N)rnrmrw)rrrr
r!�sz$InterruptedSendTimeoutTest.doConnectc
OsA|jt��+}x!|j|j�|||�qWWdQRXdS)N)r�rRrr)rr�r(r)r�rrr
�checkInterruptedSend�sz/InterruptedSendTimeoutTest.checkInterruptedSendrr�cCs|j|jjdd�dS)Nr=i)r#rnr0)rrrr
�testInterruptedSendTimeout�sz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs$|j|jjdd|j�dS)Nr=i)r#rnr�rw)rrrr
�testInterruptedSendtoTimeout�sz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutr�cCs!|j|jjddg�dS)Nr=i)r#rnr�)rrrr
�testInterruptedSendmsgTimeout�sz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)
rrrrr!r#rZrequires_mac_verr$r%r�rr&rr)r*r
r|s

	rc@s(eZdZdd�Zdd�ZdS)�
TCPCloserTestcCs�|jj�\}}|j�|j}tj|gggd�\}}}|j||g�|j|jd�d�|j�|j�dS)Ng�?rBr�)rrir
rar�r�r�)rrkrlZsdr�r}r�rrr
�	testClose�s
	$
zTCPCloserTest.testClosecCs*|jjt|jf�tjd�dS)Ng�?)rarmrer�time�sleep)rrrr
�
_testClose�szTCPCloserTest._testCloseN)rrrr(r+rrrr
r'�s
r'c@sseZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�BasicSocketPairTestr_cCstj|d|�dS)Nr`)ror$)rr`rrr
r$�szBasicSocketPairTest.__init__cCs~|j|tj�ttd�r;|j|jtj�n|j|jtj�|j|jtj�|j|j	d�dS)Nr�r)
r�rrWr�r�r�rr�rr�)rr�rrr
�_check_defaults�sz#BasicSocketPairTest._check_defaultscCs|j|j�dS)N)r-ra)rrrr
�
_testDefaults�sz!BasicSocketPairTest._testDefaultscCs|j|j�dS)N)r-r)rrrr
�testDefaults�sz BasicSocketPairTest.testDefaultscCs&|jjd�}|j|t�dS)Ni)rr�r�r�)rr�rrr
r��szBasicSocketPairTest.testRecvcCs|jjt�dS)N)rar0r�)rrrr
r��szBasicSocketPairTest._testRecvcCs|jjt�dS)N)rr0r�)rrrr
�testSend�szBasicSocketPairTest.testSendcCs&|jjd�}|j|t�dS)Ni)rar�r�r�)rr�rrr
�	_testSend�szBasicSocketPairTest._testSendN)rrrr$r-r.r/r�r�r0r1rrrr
r,�s	r,c@seZdZddd�Zdd�Zdd�Zejdd	��Zeje�Z	e
jee
d
�d�ejdd
d�dd���Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�NonBlockingTCPTestsr_cCstj|d|�dS)Nr`)r^r$)rr`rrr
r$�szNonBlockingTCPTests.__init__cCs�|jjd�|j|jj��|jjd�|j|jj�d�tj�}y|jj�Wntk
r�YnXtj�}|j||dkd�dS)NTFgg�?z Error setting non-blocking mode.)	rr�r6r
r�r)rir	r�)rr"�endrrr
�testSetBlocking�s
z#NonBlockingTCPTests.testSetBlockingcCsdS)Nr)rrrr
�_testSetBlocking�sz$NonBlockingTCPTests._testSetBlockingcCs�ddl}|j|jkr+|jd�|jjd�|j|jj�d�|jj|jd�|j|jj��dS)Nrzneeds UINT_MAX < ULONG_MAXFgrB)	rxr�Z	ULONG_MAXr4rr�r�r
r6)rrxrrr
�testSetBlocking_overflows
z,NonBlockingTCPTests.testSetBlocking_overflow�
SOCK_NONBLOCKztest needs socket.SOCK_NONBLOCKr���cCs�|jj�tjtjtjtjB�|_tj|j�|_|jj	�t
j
�}y|jj�Wntk
r�YnXt
j
�}|j
||dkd�dS)Ng�?z&Error creating with non-blocking mode.)rr
rrrr7rrrrr)rir	r�)rr"r3rrr
�testInitNonBlockings


z'NonBlockingTCPTests.testInitNonBlockingcCsdS)Nr)rrrr
�_testInitNonBlocking"sz(NonBlockingTCPTests._testInitNonBlockingcCs`|jjd�z.|jj�\}}|jtt��}Wd|j�|jjd�XdS)Nr)rr/rir�r@r�r
)rrkrl�messagerrr
�testInheritFlags%s
z$NonBlockingTCPTests.testInheritFlagscCsGtjd�|jjt|jf�tjd�|jjt�dS)Ng�������?g�?)r)r*rarmrerr0r�)rrrr
�_testInheritFlags0s

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

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


!
zNonBlockingTCPTests.testRecvcCs:|jjt|jf�tjd�|jjt�dS)Ng�������?)rarmrerr)r*r0r�)rrrr
r�fs
zNonBlockingTCPTests._testRecvN)rrrr$r4r5rr�r6Z_testSetBlocking_overflowrpr�rWr�requires_linux_versionr:r;r=r>r?r@rArBr�r�rrrr
r2�s"$r2c@sueZdZdZd;ZdZdZdZdZe	Z
dZe	Zdd	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.
    rBzutf-8�strictNr[rir_cCstj|d|�dS)Nr`)rhr$)rr`rrr
r$�sz FileObjectClassTestCase.__init__c	Cs{dd�td�D�\|_|_|_|_tj|�|jj|j	|j
d|jd|jd|j
�|_dS)NcSsg|]}tj��qSr)r%rE)r�rrrr
r��s	z1FileObjectClassTestCase.setUp.<locals>.<listcomp>r��encoding�errors�newline)rq�evt1�evt2�
serv_finished�cli_finishedrhrrjr]�	read_moder5rFrGrH�	read_file)rrrr
r�s1
			zFileObjectClassTestCase.setUpcCsG|jj�|jj�|j|jj�d|_tj|�dS)N)rKr@rNr
r��closedrhr)rrrr
r�s


	z FileObjectClassTestCase.tearDownc	CsJtj|�|jj|j|jd|jd|jd|j�|_	dS)NrFrGrH)
rhrUrnr]�
write_moder5rFrGrH�
write_file)rrrr
rU�s
			z#FileObjectClassTestCase.clientSetUpcCsG|jj�|jj�|j|jj�d|_tj|�dS)N)rLr@rQr
r�rOrhrV)rrrr
rV�s


	z&FileObjectClassTestCase.clientTearDowncCs�|jjd�|jjd�|jtj|jjd�|jt��}|jjd�WdQRX|jdt	|j
��dS)NrBr�z!cannot read from timed out object)rjr/rNr�r�rrUr	r�r�r�)rZctxrrr
�testReadAfterTimeout�sz,FileObjectClassTestCase.testReadAfterTimeoutcCs;|jj|jdd��|jj�|jj�dS)Nrr�)rQr}�	write_msg�flushrKrQ)rrrr
�_testReadAfterTimeout�s
z-FileObjectClassTestCase._testReadAfterTimeoutcCsR|jjt|j�d�}|jjd�}||}|j||j�dS)Nr�)rNr�r@�read_msgr�)r�	first_segZ
second_segr�rrr
�
testSmallRead�s
z%FileObjectClassTestCase.testSmallReadcCs$|jj|j�|jj�dS)N)rQr}rSrT)rrrr
�_testSmallRead�sz&FileObjectClassTestCase._testSmallReadcCs&|jj�}|j||j�dS)N)rNr�r�rV)rr�rrr
�testFullRead�sz$FileObjectClassTestCase.testFullReadcCs$|jj|j�|jj�dS)N)rQr}rSr
)rrrr
�
_testFullRead�sz%FileObjectClassTestCase._testFullReadcCsSt|j��}x'|jjd�}|s.P||7}qW|j||j�dS)NrB)r�rVrNr�r�)rr�charrrr
�testUnbufferedRead�sz*FileObjectClassTestCase.testUnbufferedReadcCs$|jj|j�|jj�dS)N)rQr}rSrT)rrrr
�_testUnbufferedRead�sz+FileObjectClassTestCase._testUnbufferedReadcCs&|jj�}|j||j�dS)N)rN�readliner�rV)r�linerrr
�testReadline�sz$FileObjectClassTestCase.testReadlinecCs$|jj|j�|jj�dS)N)rQr}rSrT)rrrr
�
_testReadline�sz%FileObjectClassTestCase._testReadlinecCs3|jj�|jj�}|j||j�dS)N)rjr
rNr�r�rV)rr�rrr
�testCloseAfterMakefile�s
z.FileObjectClassTestCase.testCloseAfterMakefilecCs$|jj|j�|jj�dS)N)rQr}rSrT)rrrr
�_testCloseAfterMakefile�sz/FileObjectClassTestCase._testCloseAfterMakefilecCsZ|jj�|jjtt��}t|jt�rC|j	�}|j
||j�dS)N)rNr
rjr�r@r�r�rVr��decoder�)rr�rrr
�testMakefileAfterMakefileClose�s

z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs$|jj|j�|jj�dS)N)rQr}rSrT)rrrr
�_testMakefileAfterMakefileClose�sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs|j|jj�dS)N)r�rNrO)rrrr
�testClosedAttr�sz&FileObjectClassTestCase.testClosedAttrcCs|j|jj�dS)N)r�rQrO)rrrr
�_testClosedAttr�sz'FileObjectClassTestCase._testClosedAttrcCs<|j|jj|j�|j|jj|jj��dS)N)r�rNrjrMr�rjr�)rrrr
�testAttributes�sz&FileObjectClassTestCase.testAttributescCs<|j|jj|j�|j|jj|jj��dS)N)r�rQrjrPr�rnr�)rrrr
�_testAttributessz'FileObjectClassTestCase._testAttributescCsJ|jj�|jt|jj�|jj�|jt|jj�dS)N)rNr
r�rr�rjr	rf)rrrr
�
testRealCloses

z%FileObjectClassTestCase.testRealClosecCsdS)Nr)rrrr
�_testRealClosesz&FileObjectClassTestCase._testRealCloser�)&rrrr-r5rFrGrHrMr�rVrPrSr$rrrUrVrRrUrXrYrZr[r]r^rarbrcrdrfrgrhrirjrkrlrmrrrr
rDksD

rDc@s�eZdZdZdZdd�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.rcCsh|jj�}|j|d|j�|jjdd�|_|jj�}|j|d|j�dS)NsA. r[rsB. )rNr_r�rSrjr])rr`rrr
�testUnbufferedReadlines
z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs?|jjd|j�|jjd|j�|jj�dS)NsA. sB. )rQr}rSrT)rrrr
�_testUnbufferedReadline#sz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCs\|jj�|jjd�}|j||j�|jj�|jt|jjd�dS)Ni)rjr
r�r�rVrNr�r	)rr�rrr
�testMakefileClose(s


z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs$|jj|j�|jj�dS)N)rQr}rSrT)rrrr
�_testMakefileClose1sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCsItj|j�}|jj�tj|j�}|j|d|�dS)NrB)r�r�rjrNr
r�)rZrefcount_beforeZrefcount_afterrrr
�testMakefileCloseSocketDestroy5s
z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdS)Nr)rrrr
�_testMakefileCloseSocketDestroy;szAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCsf|jjd�|j|jjtd��d�|j|jjt|j�d�d�|j	j
�|jjd�|jjt|j�d�}|dkr�t
jd�|jjt|j�d�}td�}|jj|�}|j|d�||d|�}|j||j�|j|jjtd��d�|j|jjd�d�dS)NFrr�g�?g�?r�rB)rjr�r�rN�readintor"r�r@rVrIr@rJrQr)r*)rrWrrwr�rrr
�testSmallReadNonBlockingBs ")

"z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCsQ|jjd�|jj|j�|jj�|jj�|jjd�dS)Ng�?g@)	rIrQrQr}rSrTrJr@rK)rrrr
�_testSmallReadNonBlockingUs


z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs-|jjd�|jr)|j|j�dS)Ng@)rLrQ�serv_skippedr4)rrrr
�testWriteNonBlocking^s	z6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCs�d|_|jjd�dtj}d}|jj|�}|j|d�xLt|�D]5}|jj|�}|dkr�P|j|d�q[Wd|_dS)NFrOrrz$failed to saturate the socket buffer)	rxrnr�rrTrQr}r�rq)rZBIGZLIMITrwrrrr
�_testWriteNonBlockinges	
z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rrrr-r5rorprqrrrsrtrvrwryrzrrrr
rns		rnc@seZdZdZdS)�#LineBufferedFileObjectClassTestCaserBN)rrrr5rrrr
r{{sr{c@seZdZdZdS)�$SmallBufferedFileObjectClassTestCaser�N)rrrr5rrrr
r|�sr|c@s=eZdZdZdZejd�ZdZeZ	dZ
dS)�"UnicodeReadFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)r^zutf-8rir�N)rrrr-rMr�rerVrPrSrHrrrr
r}�sr}c@s=eZdZdZdZeZdZejd�Z	dZ
dS)�#UnicodeWriteFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)r[rhzutf-8r�N)rrrr-rMr�rVrPrerSrHrrrr
r~�sr~c@sFeZdZdZdZejd�ZdZejd�Z	dZ
dS)�'UnicodeReadWriteFileObjectClassTestCasez=Tests for socket.makefile() in text mode (rather than binary)r^zutf-8rhr�N)rrrr-rMr�rerVrPrSrHrrrr
r�src@s"eZdZdZdd�ZdS)�NetworkConnectionTestzProve network connection.cCs+tjt|jf�|_|j|_dS)N)r�create_connectionrerrarn)rrrr
rU�sz!NetworkConnectionTest.clientSetUpN)rrrr-rUrrrr
r��sr�c@seZdZdZdS)�
BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)rrrr-rrrr
r��sr�c@sbeZdZGdd�dej�Zejdd��Zdd�Zdd�Z	d	d
�Z
dS)�NetworkConnectionNoServerc@seZdZdd�ZdS)z$NetworkConnectionNoServer.MockSocketcGstjd��dS)Nz	timed out)rrU)rr(rrr
rm�sz,NetworkConnectionNoServer.MockSocket.connectN)rrrrmrrrr
�
MockSocket�sr�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)rr'rrrr+r
r�r	rmrer�r�r��ECONNREFUSED)rrrar�rrr
�test_connect�sz&NetworkConnectionNoServer.test_connectc
Cs}tj�}|jt��}tjt|f�WdQRXtjg}t	td�rc|j
tj�|j|j
j|�dS)N�ENETUNREACH)rr'r�r	rr�rer�r�rWrr�r�r�)rrr�Zexpected_errnosrrr
�test_create_connection�sz0NetworkConnectionNoServer.test_create_connectioncCsE|j��2|jtj��tjtdf�WdQRXWdQRXdS)Ni�)r�r�rrUr�re)rrrr
�test_create_connection_timeout�s
z8NetworkConnectionNoServer.test_create_connection_timeoutN)rrrrr��
contextlib�contextmanagerr�r�r�r�rrrr
r��s

r�c@s�eZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�ZeZ	dd
�Z
eZdd�ZeZ
dd�ZeZdd�ZeZdd�ZdS)�NetworkConnectionAttributesTestr_cCs$tj|d|�tj|�dS)Nr`)rr$r:)rr`rrr
r$�sz(NetworkConnectionAttributesTest.__init__cCstj�|_dS)N)rr'�source_port)rrrr
rU�sz+NetworkConnectionAttributesTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rV�s
	z.NetworkConnectionAttributesTest.clientTearDowncCs#|jj�\}}|j�dS)N)rrir
)rrkrlrrr
�_justAccept�sz+NetworkConnectionAttributesTest._justAcceptcCsNtjt|jfdd�|_|j|jj�|j|jjd�dS)NrU�r�)	rr�rerrar+r
r�r�)rrrr
�_testFamily�s!z+NetworkConnectionAttributesTest._testFamilycCsgtjt|jfdddd|jf�|_|j|jj�|j|jj	�d|j�dS)NrUr�Zsource_addressr�rB)
rr�rerr�rar+r
r�rf)rrrr
�_testSourceAddresssz2NetworkConnectionAttributesTest._testSourceAddresscCs�|jtj�dk�tjd�z2tjt|jf�|_|j|jj	�Wdtjd�X|j
|jj�d�dS)Nr0)r�rrrr�rerrar+r
r�r
)rrrr
�_testTimeoutDefaults
z3NetworkConnectionAttributesTest._testTimeoutDefaultcCs�|jtj�dk�tjd�z8tjt|jfdd�|_|j|jj	�Wdtjd�X|j
|jj�d�dS)Nr�rU)r�rrrr�rerrar+r
r�r
)rrrr
�_testTimeoutNones
!z0NetworkConnectionAttributesTest._testTimeoutNonecCs>tjt|jfdd�|_|j|jj�d�dS)NrUr�)rr�rerrar�r
)rrrr
�_testTimeoutValueNamed&s!z6NetworkConnectionAttributesTest._testTimeoutValueNamedcCsNtjt|jfd�|_|j|jj�|j|jj�d�dS)Nr�)	rr�rerrar+r
r�r
)rrrr
�_testTimeoutValueNonamed+sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)rrrr$rUrVr�Z
testFamilyr�ZtestSourceAddressr�ZtestTimeoutDefaultr�ZtestTimeoutNoner�ZtestTimeoutValueNamedr�ZtestTimeoutValueNonamedr�rrrr
r��s r�c@saeZdZddd�Zdd�Zdd�Zdd	�ZeZd
d�Zdd
�Z	dS)�NetworkConnectionBehaviourTestr_cCs$tj|d|�tj|�dS)Nr`)rr$r:)rr`rrr
r$3sz'NetworkConnectionBehaviourTest.__init__cCsdS)Nr)rrrr
rU7sz*NetworkConnectionBehaviourTest.clientSetUpcCs'|jj�d|_tj|�dS)N)rar
r:rV)rrrr
rV:s
	z-NetworkConnectionBehaviourTest.clientTearDowncCsC|jj�\}}|j|j�tjd�|jd�dS)Nr�sdone!)rrir+r
r)r*r0)rrkrlrrr
�testInsideTimeout?s
z0NetworkConnectionBehaviourTest.testInsideTimeoutcCsBtjt|jf�|_}|jd�}|j|d�dS)Nr!sdone!)rr�rerrar�r�)rr�r�rrr
�_testInsideTimeoutFsz1NetworkConnectionBehaviourTest._testInsideTimeoutcsHtjt|jfdd�|_�|jtj�fdd��dS)NrUrBcs
�jd�S)Nr!)r�r)r�rr
r�MszDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>)rr�rerrar�rU)rr)r�r
�_testOutsideTimeoutKs%z2NetworkConnectionBehaviourTest._testOutsideTimeoutN)
rrrr$rUrVr�ZtestOutsideTimeoutr�r�rrrr
r�0sr�c@sOeZdZdd�Zdd�Zejeed�d�dd��Z	d	S)
�TCPTimeoutTestcs,�fdd�}�jtj|d�dS)Ncs!�jjd��jj�dS)Ng�?)rr/ri)r(r))rrr
�
raise_timeoutSsz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutz*Error generating a timeout exception (TCP))r�rrU)rr�r)rr
�testTCPTimeoutRszTCPTimeoutTest.testTCPTimeoutcCs�d}y#|jjd�|jj�}WnMtjk
rM|jd�Yn,tk
rdd}Yn|jd�YnX|s�|jd�dS)NFgz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rr/rirrUr�r	)r�ok�foorrr
�testTimeoutZeroYs

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

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

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

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

z&TestLinuxAbstractNamespace.testStrNamec
CsOtjtjtj��0}|jtd��|j|j�d�WdQRXdS)Ns
pythontest)rr�rr2r"r�rf)rrrrr
�testBytearrayName�sz,TestLinuxAbstractNamespace.testBytearrayNameN)	rrrr�r�r�r�r�r�rrrr
r��s	r�ztest needs socket.AF_UNIXc@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestUnixDomaincCstjtjtj�|_dS)N)rr�rr�)rrrr
r�szTestUnixDomain.setUpcCs|jj�dS)N)r�r
)rrrr
r�szTestUnixDomain.tearDowncCsIytj|�SWn1tk
rD|jdj|tj���YnXdS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r��fsencoderCr4r�r��getfilesystemencoding)rr�rrr
�encoded�s
zTestUnixDomain.encodedcCsky|j|�WnStk
rf}z3t|�dkrQ|jdj|��n�WYdd}~XnXdS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r2r	r�r4r�)rr�r�r[rrr
r2�s
zTestUnixDomain.bindcCs|j|jj�d�dS)Nr�)Nr�)r�r�rf)rrrr
�testUnbound�szTestUnixDomain.testUnboundcCsXtjjtj�}|j|j|�|jtj|�|j	|jj
�|�dS)N)r�r��abspathr�TESTFNr2r�r+r�r�rf)rr�rrr
�testStrAddr�szTestUnixDomain.testStrAddrcCsatjjtj�}|j|j|j|��|jtj	|�|j
|jj�|�dS)N)r�r�r�rr�r2r�r�r+r�r�rf)rr�rrr
�
testBytesAddr�szTestUnixDomain.testBytesAddrcCsstjjtj�}|j|�}|j|j|jdd��|j	tj
|�|j|jj�|�dS)N�ascii�surrogateescape)
r�r�r�rZTESTFN_UNICODEr�r2r�rer+r�r�rf)rr�rErrr
�testSurrogateescapeBinds
z&TestUnixDomain.testSurrogateescapeBindcCsttjdkr|jd�tjjtj�}|j|j|�|jtj	|�|j
|jj�|�dS)Nz!No unencodable filename available)rZTESTFN_UNENCODABLEr4r�r�r�r2r�r+r�r�rf)rr�rrr
�testUnencodableAddr
s
z"TestUnixDomain.testUnencodableAddrN)rrrrrr�r2r�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().
    r_cCstj|d|�dS)Nr`)rhr$)rr`rrr
r$szBufferIOTest.__init__cCs}tjddgtt��}|jj|�}|j|tt��|j�}|dtt��}|j|t�dS)Nr&r)r'r@r�rjrr�rh)rrrcr�rrr
�testRecvIntoArrayszBufferIOTest.testRecvIntoArraycCs tt�}|jj|�dS)N)r�r�rnr0)rrrrr
�_testRecvIntoArray'szBufferIOTest._testRecvIntoArraycCs^td�}|jj|�}|j|tt��|dtt��}|j|t�dS)Ni)r"rjrr�r@r�)rrrcr�rrr
�testRecvIntoBytearray+s
z"BufferIOTest.testRecvIntoBytearraycCsdtd�}|jjt|��}|j|tt��|dtt��}|j|t�dS)Ni)r"rjrrlr�r@r�)rrrcr�rrr
�testRecvIntoMemoryview4s
z#BufferIOTest.testRecvIntoMemoryviewcCs�tjddgtt��}|jj|�\}}|j|tt��|j�}|dtt��}|j|t�dS)Nr&r)r'r@r�rjrr�rh)rrrcrlr�rrr
�testRecvFromIntoArray=sz"BufferIOTest.testRecvFromIntoArraycCs tt�}|jj|�dS)N)r�r�rnr0)rrrrr
�_testRecvFromIntoArrayEsz#BufferIOTest._testRecvFromIntoArraycCsdtd�}|jj|�\}}|j|tt��|dtt��}|j|t�dS)Ni)r"rjrr�r@r�)rrrcrlr�rrr
�testRecvFromIntoBytearrayIs
z&BufferIOTest.testRecvFromIntoBytearraycCsjtd�}|jjt|��\}}|j|tt��|dtt��}|j|t�dS)Ni)r"rjrrlr�r@r�)rrrcrlr�rrr
�testRecvFromIntoMemoryviewRs
z'BufferIOTest.testRecvFromIntoMemoryviewcCs,td�}|jt|jj|d�dS)Nr1i)r"r�rrjr)rrrrr
�testRecvFromIntoSmallBuffer[sz(BufferIOTest.testRecvFromIntoSmallBuffercCs|jjt�dS)N)rnr0r�)rrrr
�_testRecvFromIntoSmallBuffer`sz)BufferIOTest._testRecvFromIntoSmallBuffercCs0t�}|jj|�|jj|d�dS)Nr)r"rjr)rrrrr
�testRecvFromIntoEmptyBuffercs	z(BufferIOTest.testRecvFromIntoEmptyBufferN)rrrr-r$r�r�r�Z_testRecvIntoBytearrayr�Z_testRecvIntoMemoryviewr�r�r�Z_testRecvFromIntoBytearrayr�Z_testRecvFromIntoMemoryviewr�r�r�Z_testRecvFromIntoEmptyBufferrrrr
r�s$r�i�����cCs{ttd�sdSytd�}Wntttfk
rDdSYnX|�)x!|D]}|jd�rSdSqSWWdQRXdS)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)rWrr��FileNotFoundError�IsADirectoryError�PermissionErrorr)r�r`rrr
�isTipcAvailableos	
r�z6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZdd�ZdS)�TIPCTestcCstjtjtj�}tjtjtj�}|j|j�|j|j�|jtjtjd�tjt	t
tf}|j|�tj
t	t
ttt
d�df}|jt|�|jd�\}}|j|j�|�|j|t�dS)NrBr�ri)rr�r�r+r
r-r�r��TIPC_ADDR_NAMESEQ�
TIPC_STYPE�
TIPC_LOWER�
TIPC_UPPERr2�TIPC_ADDR_NAMEr�r�r�r�r�rf)rrvra�srvaddrZsendaddrr�Zrecvaddrrrr
�testRDM�s	
	zTIPCTest.testRDMN)rrrr�rrrr
r��sr�c@sOeZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�TIPCThreadableTestr_cCs'tjj|d|�tj|�dS)Nr`)rprqr$r:)rr`rrr
r$�szTIPCThreadableTest.__init__cCs�tjtjtj�|_|j|jj�|jjtjtjd�tj	t
ttf}|jj
|�|jj�|j�|jj�\|_|_|j|jj�dS)NrB)rr�rrvr+r
r-r�r�r�r�r�r�r2rrArirk�connaddr)rr�rrr
r�s	

zTIPCThreadableTest.setUpcCs�tjd�tjtjtj�|_|j|jj�tjt	t
ttt
d�df}|jj
|�|jj�|_dS)Ng�������?r�r)r)r*rr�rrar+r
r�r�r�r�r�rmrf�cliaddr)rrlrrr
rU�s
	zTIPCThreadableTest.clientSetUpcCs<|jjd�}|j|t�|j|j|j�dS)Ni)rkr�r�r�r�r�)rr�rrr
�
testStream�szTIPCThreadableTest.testStreamcCs!|jjt�|jj�dS)N)rar0r�r
)rrrr
�_testStream�szTIPCThreadableTest._testStreamN)rrrr$rrUr�r�rrrr
r��s
r�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ContextManagersTestcCs�tj��}|j|j�WdQRX|j|j�tj��}|j�WdQRX|j|j�tj��}|jt|jd�WdQRX|j|j�dS)Nsfoo)rr*r�r�r
r�r	rS)rr�rrr
�_testSocketClass�sz$ContextManagersTest._testSocketClasscCsE|jj�\}}|j|j�|jd�}|j|�dS)Ni)rrir+r
r�rS)rrkrlr�rrr
�testCreateConnectionBase�sz,ContextManagersTest.testCreateConnectionBasec
Csr|jj�}tj|��=}|j|j�|jd�|j|jd�d�WdQRX|j	|j�dS)Nsfooi)
rrfrr�r*r�rSr�r�r�)rr�r�rrr
�_testCreateConnectionBase�s
 z-ContextManagersTest._testCreateConnectionBasecCsE|jj�\}}|j|j�|jd�}|j|�dS)Ni)rrir+r
r�rS)rrkrlr�rrr
�testCreateConnectionClose�sz-ContextManagersTest.testCreateConnectionClosecCs\|jj�}tj|��}|j�WdQRX|j|j�|jt|j	d�dS)Nsfoo)
rrfrr�r
r�r�r�r	rS)rr�r�rrr
�_testCreateConnectionClose�s
z.ContextManagersTest._testCreateConnectionCloseN)rrrr�r�r�r�r�r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)�InheritanceTestr2zSOCK_CLOEXEC not definedr�r8r9c
CsWtjtjtjtjB��1}|j|jtj@�|j|j��WdQRXdS)N)rrrr2r�r�r*�get_inheritable)rrrrr
�test_SOCK_CLOEXEC�sz!InheritanceTest.test_SOCK_CLOEXECc
Cs4tj�}|�|j|j�d�WdQRXdS)NF)rr�r�)rr�rrr
�test_default_inheritable�sz(InheritanceTest.test_default_inheritablecCsXtj�}|�?|j�}|j�|�|j|j�d�WdQRXWdQRXdS)NF)rr�r
r�r�)rr�Znewsockrrr
�test_dups
zInheritanceTest.test_dupc
Csdtj�}|�K|jd�|j|j�d�|jd�|j|j�d�WdQRXdS)NTF)r�set_inheritabler�r�)rr�rrr
�test_set_inheritables

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

z,InheritanceTest.test_set_inheritable_cloexecrrzneed socket.socketpair()cCsbtj�\}}|j|j�|j|j�|j|j�d�|j|j�d�dS)NF)rrrr+r
r�r�)rr�r�rrr
�test_socketpair,s
zInheritanceTest.test_socketpair)rrrrpr�rWrrrCr�r�r�r�r�r�r�r�r�rrrr
r��s$	$$
r�r7zSOCK_NONBLOCK not definedc@sCeZdZdddd�Zejddd�dd	��Zd
S)�NonblockConstantTestTgcCsg|r6|j|jtj@�|j|j�|�n-|j|jtj@�|j|j�d�dS)N)r�r�rr7r�r
r*)rrZnonblockrUrrr
�
checkNonblock9s
z"NonblockConstantTest.checkNonblockr�r8r9c&Cs�tjtjtjtjB���}|j|�|jd�|j|d�|jd�|j|�|jd�|j|d�|jd�|j|dd�|jd�|j|d�WdQRXtj�}tjd�tj��}|j|�WdQRXtjd�tj��}|j|d�WdQRXtjd�tj��}|j|dd�WdQRXtjd�tj��}|j|d�WdQRXtj|�dS)NrBFrg@rUg)	rrrr7r�r�r/rr)rr�trrr
�test_SOCK_NONBLOCKAs6










z'NonblockConstantTest.test_SOCK_NONBLOCKN)rrrr�rrCr�rrrr
r�6sr�r7zWindows specificzneed multiprocessingc@s^eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestSocketSharingcCs^|j�}|j�}tj|�}|j�\}}|j|�|j�|j�dS)N)rRr�	fromsharerirSr
)r��qZsdatar<rr�rVrrr
�remoteProcessServerhs

z%TestSocketSharing.remoteProcessServerc	Cs�tj�}tjd|jd|f�}|j�|jj|j�}|jj�}|jj	�|j
|�d}|j
|�tj|�}g}x'|j
d�}|s�P|j|�q�W|j	�dj|�}|j||�|j�dS)Nr r(s
slapmahfror:r�)�multiprocessingrIZProcessrr"r�share�pidrfr
rZrr�r�rr�r�)	rrr�r�rlr<r�m�receivedrrr
�	testSharevs(




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


zTestSocketSharing.testTypesN)
rrrr�rrr	rrrrrrr
r�cs#r�c@s~eZdZdZd?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��4}x*||j|j�D]}|j|�q\WWdQRXttjd��4}|j�|_	t
|j	�|jks�t�WdQRXdS)NcssC||kst�x||kr3|V||8}qW|r?|VdS)N)r�)Ztotal�steprrr
�chunks�sz0SendfileUsingSendTest.setUpClass.<locals>.chunksr�cSs(g|]}tjtj�j��qSr)�randomZchoice�stringZ
ascii_lettersr~)r�rrrr
r��s	z4SendfileUsingSendTest.setUpClass.<locals>.<listcomp>rir[)r�rq�BUFSIZEr�rr��FILESIZEr}r��FILEDATAr@r�)r�r�chunkr�Zcsizerrr
�
setUpClass�sz SendfileUsingSendTest.setUpClasscCstjtj�dS)N)rr�r�)r�rrr
�
tearDownClass�sz#SendfileUsingSendTest.tearDownClasscCsL|jj|j�|jj�\}}|j|j�|j|j�|S)N)rr/�TIMEOUTrir+r
)rrkrlrrr
�accept_conn�s
z!SendfileUsingSendTest.accept_conncCs@g}x*|j|j�}|s"P|j|�q	Wdj|�S)Nr�)r�rrr�)rrkrrrrr
�	recv_data�szSendfileUsingSendTest.recv_datacCs
t|d�S)NZ_sendfile_use_send)rM)rr�rrr
�meth_from_sock�sz$SendfileUsingSendTest.meth_from_sockcCs�|jj�}ttjd�}tj|��^}|�N}|j|�}||�}|j||j	�|j|j
�|j	�WdQRXWdQRXdS)Nr[)rrfr�rr�rr�rr�r�tell)rr��filer��meth�sentrrr
�_testRegularFilesz&SendfileUsingSendTest._testRegularFilecCsK|j�}|j|�}|jt|�|j�|j||j�dS)N)rrr�r@rr)rrkr�rrr
�testRegularFilesz%SendfileUsingSendTest.testRegularFilecCs�|jj�}tj|j�}tj|��k}|�[}|j|�}|j||j	�|j|j
�|j	�|jtj|j
|�WdQRXWdQRXdS)N)rrf�io�BytesIOrrr�r�r�rrr�r�r�)rr�r r�r"rrr
�_testNonRegularFilesz)SendfileUsingSendTest._testNonRegularFilecCsK|j�}|j|�}|jt|�|j�|j||j�dS)N)rrr�r@rr)rrkr�rrr
�testNonRegularFilesz(SendfileUsingSendTest.testNonRegularFilecCs�|jj�}tjd}t|d��|jtj|�WdQRXt|d�}tj|��X}|�H}|j	|�}||�}|j
|d�|j
|j�d�WdQRXWdQRXdS)N�2rir[r)rrfrr�r�r+r�rr�rr�r)rr��filenamer r�r!r"rrr
�_testEmptyFileSend&s
z(SendfileUsingSendTest._testEmptyFileSendcCs/|j�}|j|�}|j|d�dS)Nr�)rrr�)rrkr�rrr
�testEmptyFileSend2sz'SendfileUsingSendTest.testEmptyFileSendcCs�|jj�}ttjd�}tj|��h}|�X}|j|�}||dd�}|j||j	d�|j|j
�|j	�WdQRXWdQRXdS)Nr[�offseti�)rrfr�rr�rr�rr�rr)rr�r r�r!r"rrr
�_testOffset9sz!SendfileUsingSendTest._testOffsetcCsY|j�}|j|�}|jt|�|jd�|j||jdd��dS)Ni�)rrr�r@rr)rrkr�rrr
�
testOffsetBsz SendfileUsingSendTest.testOffsetcCs�|jj�}ttjd�}tj|dd��d}|�T}d}|j|�}||d|�}|j||�|j|j	�|�WdQRXWdQRXdS)Nr[rUr�iGKLr5)
rrfr�rr�rr�rr�r)rr�r r�r5r!r"rrr
�
_testCountJs!z SendfileUsingSendTest._testCountcCsXd}|j�}|j|�}|jt|�|�|j||jd|��dS)NiGKL)rrr�r@r)rr5rkr�rrr
�	testCountTs
zSendfileUsingSendTest.testCountcCs�|jj�}ttjd�}tj|dd��d}|�T}d}|j|�}||d|�}|j||�|j|j	�|�WdQRXWdQRXdS)Nr[rUr�rBr5)
rrfr�rr�rr�rr�r)rr�r r�r5r!r"rrr
�_testCountSmall]s!z%SendfileUsingSendTest._testCountSmallcCsXd}|j�}|j|�}|jt|�|�|j||jd|��dS)NrB)rrr�r@r)rr5rkr�rrr
�testCountSmallgs
z$SendfileUsingSendTest.testCountSmallcCs�|jj�}ttjd�}tj|dd��n}|�^}d}|j|�}||ddd|�}|j||�|j|j	�|d�WdQRXWdQRXdS)Nr[rUr�i��r-i�r5)
rrfr�rr�rr�rr�r)rr�r r�r5r!r"rrr
�_testCountWithOffsetps!z*SendfileUsingSendTest._testCountWithOffsetcCs\d}|j�}|j|�}|jt|�|�|j||jd|d��dS)Ni��i�)rrr�r@r)rr5rkr�rrr
�testCountWithOffsetzs
z)SendfileUsingSendTest.testCountWithOffsetcCs�|jj�}ttjd�}tj|��\}|�L}|jd�|j|�}|j	t
||�|j	t
|j|�WdQRXWdQRXdS)Nr[F)rrfr�rr�rr�r�rr�rr�)rr�r r�r!rrr
�_testNonBlocking�s
z&SendfileUsingSendTest._testNonBlockingcCs,|j�}|jd�r(|jd�dS)Ni z$was not supposed to receive any data)rr�r�)rrkrrr
�testNonBlocking�sz%SendfileUsingSendTest.testNonBlockingcCs�|jj�}ttjd�}tj|dd��E}|�5}|j|�}||�}|j||j	�WdQRXWdQRXdS)Nr[rUr�)
rrfr�rr�rr�rr�r)rr�r r�r!r"rrr
�_testWithTimeout�s!z&SendfileUsingSendTest._testWithTimeoutcCsK|j�}|j|�}|jt|�|j�|j||j�dS)N)rrr�r@rr)rrkr�rrr
�testWithTimeout�sz%SendfileUsingSendTest.testWithTimeoutcCsy|jj�}ttjd�}tj|dd��<}|�,}|j|�}|jtj	||�WdQRXWdQRXdS)Nr[rUg{�G�z�?)
rrfr�rr�rr�rr�rU)rr�r r�r!rrr
�_testWithTimeoutTriggeredSend�s	z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs|j�}|jd�dS)Ni�X)rr�)rrkrrr
�testWithTimeoutTriggeredSend�sz2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdS)Nr)rrrr
�_test_errors�sz"SendfileUsingSendTest._test_errorsc1Cslttjd��K}tjdtj��,}|j|�}|jtd||�WdQRXWdQRXttjd��B}tj��,}|j|�}|jtd||�WdQRXWdQRXttjd���}tj���}|j|�}|jtd||dd�|jtd||dd	�|jtd||dd
�|jtd||dd�WdQRXWdQRXdS)
Nr[r�rrmzbinary modezpositive integerr5r)g�������?rrBr�)	r�rr�rr!rrorrX)rr rr!rrr
�test_errors�s*z!SendfileUsingSendTest.test_errorsNi(i�)$rrrr-rrrrr�rrrrrr#r$r'r(r+r,r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=rrrr
r�s@		
	
	
	
		rr�z%os.sendfile() required for this test.c@s"eZdZdZdd�ZdS)�SendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    cCs
t|d�S)Nr�)rM)rr�rrr
r�sz(SendfileUsingSendfileTest.meth_from_sockN)rrrr-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�|j	t"t#t$t%t&t't(t)t*t+t,t-t.t/t0t1t2t3t4t5t6t7t8t9t:g�t;j<�}t;j=|�t;j>|�dS)N)?r�r�r'r�r�r�r�r�r��extendr2rDrnr{r|r}r~rr�r�r�r�r�r�rr,r�r�r�r�r�r�r�r�ror�r�r�r�r�r�r�r�rrrrrrr	r
rrr
rrr�rr>rZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr
�	test_main�sh





rA�__main__)�rpZtestrr�r%r4rr�r~r)r�rHr�r�r'rr��weakrefrrPrKrrr7rrrrr�rer~r��_threadrNr%r�rrZHAVE_SOCKET_CANZHAVE_SOCKET_RDSrsr�rqrr r"r.r9r:r^rbrcrdrhrorsrxryr|r}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr:rBrErZr_rbror|r�r�r�r�r�r�rAr�r�r�r�r�r�rrrrrrrrr	r
rrr
rrWrrr'r,r2rDrnr{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�rr>rArrrrr
�<module>s8

	

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


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