
    7bhN                    ^%   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl m!Z! 	 d dl"Z"	 d dl$Z$ ejJ                  d	       ejL                  Z&d
jO                  d      Z(dZ)dZ* ejV                         dk(  Z,d ejZ                         v Z.	 d dl/Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9e
jt                  d        Z; e1       Z< e2       Z= e3       Z> e4       Z? e5       Z@ e6       ZA e7       ZB eCed      ZD e8       ZE e9       ZF e	j                  d      j                  ZH G d de j                        ZJ G d d e j                        ZK G d! d"eK      ZL G d# d$e j                        ZM G d% d&e j                        ZN G d' d(      ZO G d) d*eJeO      ZP G d+ d,eKeO      ZQ e j                  eDd-       G d. d/eLeO             ZS G d0 d1eMeO      ZT G d2 d3eNeO      ZU e j                  e$du d4       e j                  e.d5       e j                  eBd6       e j                   e0       d7k7  d8       G d9 d:e j                  eO                                  ZW G d; d<eP      ZX G d= d>e j                  eO      ZY G d? d@e j                        ZZ G dA dBeZ      Z[ G dC dDeZeO      Z\ G dE dFe[e\      Z] G dG dHeZ      Z^ G dI dJe^      Z_ G dK dLeZ      Z` G dM dNe`      Za G dO dPe`      Zb G dQ dRe`      Zc G dS dTe`      Zd G dU dVe`      Ze G dW dXee      Zf G dY dZee      Zgd[ Zhd\ Zid] Zj G d^ d_e j                        Zk e j                  e<d`       G da dbe j                               Zl e j                  e<d`       G dc ddeT             Zm e j                  e=de       G df dge j                               Zn e j                  e>dh       G di dje j                               Zo e j                  e?dk       G dl dme j                               Zp e j                  e?dk       G dn doeU             Zq e j                  eAdp       G dq dre j                               Zr e j                  e$du d4       e j                  eBd6       G ds dte j                                      Zs e j                  eEdu       G dv dwe j                               Zt e j                  eFdx       G dy dze j                               Zu G d{ d|eX      Zv G d} d~eQ      Zw e j                  eDd-       G d deS             Zx G d d      Zy G d dey      Zz G d dey      Z{ G d dey      Z| G d dey      Z} G d dey      Z~ G d dey      Z G d de      Z G d de      Z G d de      Z G d dey      Z G d de      Z G d de      Z G d deze      Z G d de j                        Z G d de      Z G d de      Z G d de{e}e\eb      Z eiej0                  d       G d dee             Z eiej0                  d       G d dee             Z eiej0                  d       G d dee             Z G d de{e}e\ef      Z eiej0                  d       e j                  ej                  d       ejdd       G d dee                           Z eiej0                  d       e j                  ej                  d       ejdd       G d dee                           Z eiej0                  d       e j                  ej                  d       ejdd       G d dee                           Z eiej0                  d       e j                  ej                  d       eied       ejdd       G d dee                                  Z eiej0                  d       e j                  ej                  d       eied       ejdd       G d dezee                                  Z e j                  eDd-       G d de{e}e\ec             Z e j                  eDd-       eiej0                  d       G d dee                    Z e j                  eDd-       eiej0                  d       G d dee                    Z e j                  eDd-       eiej0                  d       G dĄ dee                    Z e j                  eDd-       G dƄ de{e}e\eg             Z eiej0                  d       e j                  ej                  d       e j                  eDd-       ejdd       G dȄ dee                                  Z eiej0                  d       e j                  ej                  d       e j                  eDd-       ejdd       G dʄ dee                                  Z eiej0                  d       e j                  ej                  d       e j                  eDd-       ejdd       G d̄ dee                                  Z eiej0                  d       e j                  ej                  d       e j                  eDd-       eied       ejdd       G d΄ dee                                         Z eiej0                  d       e j                  ej                  d       e j                  eDd-       eied       ejdd       G dЄ dezee                                         Z G d҄ de~e]ea      Z eiej0                  d       G dԄ dee             Z eiej0                  d       G dք deee             Z eiej0                  d       G d؄ deee             Z G dڄ de|e~e]ed      Z eiej0                  d       e j                  e,dܫ       ejddd߫       G d dee                           Z eiej0                  d       e j                  e,dܫ       ejddd߫       G d deee                           Z eiej0                  d       e j                  e,dܫ       ejddd߫       G d deee                           Z G d de~e]e_      Z eiej0                  d       eied       G d dee                    Z eiej0                  d       eied       G d deee                    Z eiej0                  d       eied       G d deee                    Z eiej0                  dd       eieddd       G d dee                    Z eiej0                  dd       eieddd       G d dezee                    Z G d d      Z eied       e j                   eCed      xs	  eCed      d       G d deeb                    Z eied       e j                   eCed      xs	  eCed      d       G d dee[ea                    Z G d d eP      Z G d deY      Z G d deY      Z G d deP      Z G d deX      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d deev      Z G d de j                        Z G d deJeO      Z G d deJeO      Z G d d eJ      Z G d! d"eK      Z e j                  eDd-       G d# d$eL             Z G d% d&e j                        Z e j                  ej$                  d'k(  d(       G d) d*e j                               Z e j                   eCed      d+       G d, d-e j                               Z G d. d/eX      Zǐd0ZȐd1Zɐd2Zʐd3 Z e j                   e˫       d4       G d5 d6e j                               Z e j                   e˫       d4       G d7 d8e j                  eO             Z G d9 d:eP      Z G d; d<e j                        Z e j                   eCed=      d>       G d? d@e j                               Z e j                  ej                  dAk(  dB       e j                  e"dC       G dD dEeJ                    Z G dF dGeP      Z e j                   eCedH      dI       G dJ dKeӫ             Z e j                  e@dL       G dM dNe j                               Z e j                  ej$                  dOk(  dP       G dQ dRe j                               Z e j                  ej$                  j                  dS      dT       G dU dVe j                               Z G dW dXe j                        Z G dY dZe j                        Z eied[       eied\       eied       G d] d^e j                                             Zېd_ Zeݐd`k(  r e j                          yy# e#$ r dZ"Y w xY w# e#$ r dZ$Y w xY w# e#$ r dZ/Y w xY w(a      N)support)	os_helper)socket_helper)threading_helper)proxyFT)moduleu   Michael Gilfix was hereሴ
utf-8     AIXzmicrosoft-standard-WSLc                     t         y t        t        d      sy 	 t        dd      5 } t        j                  | t        j
                  d      }d d d        t        j                  d      d   S # 1 sw Y   "xY w# t        $ r Y y w xY w)NIOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsockrbz    Ir   )	fcntlhasattrsocketopenioctlr   structunpackOSError)frs     :/opt/python-3.12.12/usr/lib/python3.12/test/test_socket.pyget_cidr   9   sx    }6;<(,%AvDDfMA &
 }}S!$Q'' &% s(   A9 &A-A9 -A62A9 9	BBc                      	 t        j                   t         j                  t         j                  t         j                        } | j	                          y# t
        t        f$ r Y yw xY w)z5Check whether CAN sockets are supported on this host.FT)r   PF_CANSOCK_RAWCAN_RAWcloseAttributeErrorr   ss    r   _have_socket_canr%   F   sL    MM&--&..I 	
		 G$    AA A&%A&c                      	 t        j                   t         j                  t         j                  t         j                        } | j	                          y# t
        t        f$ r Y yw xY w)z;Check whether CAN ISOTP sockets are supported on this host.FT)r   r   
SOCK_DGRAM	CAN_ISOTPr!   r"   r   r#   s    r   _have_socket_can_isotpr*   P   P    MM&--):):F<L<LM 	
		 G$ r&   c                      	 t        j                   t         j                  t         j                  t         j                        } | j	                          y# t
        t        f$ r Y yw xY w)z;Check whether CAN J1939 sockets are supported on this host.FT)r   r   r(   	CAN_J1939r!   r"   r   r#   s    r   _have_socket_can_j1939r.   Z   r+   r&   c                      	 t        j                   t         j                  t         j                  d      } | j                          y# t        t
        f$ r Y yw xY w)z5Check whether RDS sockets are supported on this host.r   FT)r   PF_RDSSOCK_SEQPACKETr!   r"   r   r#   s    r   _have_socket_rdsr2   d   J    MM&--)>)>B 	
		 G$    3A AAc                      	 t        j                   t         j                  t         j                  d      } | j                          y# t        t
        f$ r Y yw xY w)z8Check whether AF_ALG sockets are supported on this host.r   FT)r   AF_ALGr1   r!   r"   r   r#   s    r   _have_socket_algr7   n   r3   r4   c                      	 t        j                   t         j                  t         j                  d      } | j                          y# t        t
        f$ r Y yw xY w)z<Check whether AF_QIPCRTR sockets are supported on this host.r   FT)r   
AF_QIPCRTRr(   r!   r"   r   r#   s    r   _have_socket_qipcrtrr:   x   sL    MM&++V->->B 	
		 G$ r4   c                      t               } | duS )z:Check whether AF_VSOCK sockets are supported on this host.N)r   )cids    r   _have_socket_vsockr=      s    
)CtO    c                      	 t        j                   t         j                  t         j                  t         j                        } | j	                          y# t
        t        f$ r Y yw xY w)z>Check whether AF_BLUETOOTH sockets are supported on this host.FT)r   AF_BLUETOOTHSOCK_STREAMBTPROTO_RFCOMMr!   r"   r   r#   s    r   _have_socket_bluetoothrC      sT     MM&--v/A/A6CXCXY 	
		 G$ r&   c                      	 t        j                   t         j                  t         j                  t         j                        } | j	                          y# t
        t        f$ r Y yw xY w)z;Check whether AF_HYPERV sockets are supported on this host.FT)r   	AF_HYPERVrA   HV_PROTOCOL_RAWr!   r"   r   r#   s    r   _have_socket_hypervrG      sR    MM&**F,>,>@V@VW 	
		 G$ r&   c              #      K   t        j                         }	 t        j                  |        d  t        j                  |       y # t        j                  |       w xY wwN)r   getdefaulttimeoutsetdefaulttimeout)timeoutold_timeouts     r   socket_setdefaulttimeoutrN      sF     **,K.  )  -  -s   A!A A!AA!IPPROTO_UDPLITEic                       e Zd Zd Zd Zy)SocketTCPTestc                     t        j                   t         j                  t         j                        | _        t	        j
                  | j                        | _        | j                  j                          y rI   )r   AF_INETrA   servr   	bind_portportlistenselfs    r   setUpzSocketTCPTest.setUp   sD    MM&..&2D2DE	!++DII6			r>   c                 F    | j                   j                          d | _         y rI   rU   r!   rY   s    r   tearDownzSocketTCPTest.tearDown       			r>   N__name__
__module____qualname__r[   r^    r>   r   rR   rR      s    
r>   rR   c                       e Zd Zd Zd Zy)SocketUDPTestc                     t        j                   t         j                  t         j                        | _        t	        j
                  | j                        | _        y rI   )r   rT   r(   rU   r   rV   rW   rY   s    r   r[   zSocketUDPTest.setUp   s4    MM&..&2C2CD	!++DII6	r>   c                 F    | j                   j                          d | _         y rI   r]   rY   s    r   r^   zSocketUDPTest.tearDown   r_   r>   Nr`   rd   r>   r   rf   rf      s    7r>   rf   c                       e Zd Zd Zy)SocketUDPLITETestc                     t        j                   t         j                  t         j                  t         j                        | _        t        j                  | j                        | _        y rI   )r   rT   r(   rO   rU   r   rV   rW   rY   s    r   r[   zSocketUDPLITETest.setUp   s<    MM&..&2C2CVE[E[\	!++DII6	r>   N)ra   rb   rc   r[   rd   r>   r   rj   rj      s    7r>   rj   c                       e Zd ZdZdZdZ	 dZ ej                  e      Z		 dZ
e
d ej                  e
      dz  z  z  Z
d Zy	)
SocketCANTestzTo be able to run this test, a `vcan0` CAN interface can be created with
    the following commands:
    # modprobe vcan
    # ip link add dev vcan0 type vcan
    # ip link set up vcan0
    vcan0   z=IB3x8sz@3I4l2Ix   c                    t        j                   t         j                  t         j                  t         j                        | _        | j                  | j                  j                         	 | j                  j                  | j                  f       y # t        $ r! | j                  d| j                  z         Y y w xY wN%network interface `%s` does not exist)r   r   r   r    r$   
addCleanupr!   bind	interfacer   skipTestrY   s    r   r[   zSocketCANTest.setUp  s|    v}}foov~~N%	+FFKK)* 	+MMA>>* +	+s   -&B 'B>=B>N)ra   rb   rc   __doc__rw   bufsizecan_frame_fmtr   calcsizecan_frame_sizebcm_cmd_msg_fmtr[   rd   r>   r   rm   rm      s_     IG M$V__]3N   Osofooo>BCCO+r>   rm   c                       e Zd ZdZdZd Zy)SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded:
    # modprobe rds
        c                 H   t        j                   t         j                  t         j                  d      | _        | j	                  | j                  j
                         	 t        j                  | j                        | _        y # t        $ r | j                  d       Y y w xY w)Nr   zunable to bind RDS socket)r   r0   r1   rU   ru   r!   r   rV   rW   r   rx   rY   s    r   r[   zSocketRDSTest.setUp  sk    MM&--1F1FJ			(	7%//		:DI 	7MM56	7s   $B B! B!N)ra   rb   rc   ry   rz   r[   rd   r>   r   r   r     s     G7r>   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	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().
    c                 H    | j                   | _        | j                  | _         y rI   )r[   _ThreadableTest__setUp_setUprY   s    r   __init__zThreadableTest.__init__F  s    zz[[
r>   c                 8    | j                   j                          y)zThis 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setrY   s    r   serverExplicitReadyz"ThreadableTest.serverExplicitReadyK  s    
 	r>   c                 :     j                  t        j                                t        j                          _        t        j                          _        t        j                          _        t        j                  d       _        d _
         fd} j                  |        j                         }|j                  d      }||dz   d  }t         d|z         }t        j                    j"                  |f       _        	  j'                          	  j
                  j)                           j                  j+                           j                   j                  j*                         y #  d _
         xY w#  j
                  j)                          w xY w)Nr
   Fc                  n     j                   j                         r j                   j                         y rI   )queueqsizegetrY   s   r   raise_queued_exceptionz5ThreadableTest._setUp.<locals>.raise_queued_exception[  s)    zz!jjnn&& "r>   ._T)enterContextr   wait_threads_exit	threadingEventr   client_readydoner   Queueserver_crashedru   idrfindgetattrthreadstart_new_thread	clientRunclient_threadr   r   wait)rZ   r   
methodnamerP   test_methods   `    r   r   zThreadableTest._setUpR  s;   *<<>?%OO-%OO-OO%	[[^
#	' 	./ WWY
S!!%
dC*$45#44NN[N,	$LLN
 !!# 		'	"&D!!#s   E1 1
E;;E> >Fc                    | j                   j                          	 | j                          	 | j                  j                          | j                  r| j                          y t        |d      st        d      	  |        | j                          y # t        $ rO}| j                  j                  |       | j                          Y d }~| j                  j                          y d }~ww xY w# | j                  j                          w xY w# t        $ r%}| j                  j                  |       Y d }~d }~ww xY w# | j                          w xY w)N__call__z%test_func must be a callable function)r   r   clientSetUpBaseExceptionr   putclientTearDownr   r   r   r   	TypeError)rZ   	test_funces      r   r   zThreadableTest.clientRunr  s
    	$ !!#!y*-CDD	"K !!  	JJNN1!!!#	
 !!#  	JJNN1	 !sS   B <D 	C,+C'C/ 'C,,C/ /D	D<D72D? 7D<<D? ?Ec                     t        d      )Nz clientSetUp must be implemented.)NotImplementedErrorrY   s    r   r   zThreadableTest.clientSetUp  s    !"DEEr>   c                 `    | j                   j                          t        j                          y rI   )r   r   r   exitrY   s    r   r   zThreadableTest.clientTearDown  s    		r>   N)
ra   rb   rc   ry   r   r   r   r   r   r   rd   r>   r   r   r      s(    #J!
 (@",Fr>   r   c                        e Zd ZddZd Zd Zy)ThreadedTCPSocketTestc                 \    t         j                  | |       t        j                  |        y N)
methodNamerR   r   r   rZ   r   s     r   r   zThreadedTCPSocketTest.__init__  #    t
;%r>   c                 r    t        j                   t         j                  t         j                        | _        y rI   )r   rT   rA   clirY   s    r   r   z!ThreadedTCPSocketTest.clientSetUp  s    ==1C1CDr>   c                 p    | j                   j                          d | _         t        j                  |        y rI   r   r!   r   r   rY   s    r   r   z$ThreadedTCPSocketTest.clientTearDown  %    %%d+r>   NrunTestra   rb   rc   r   r   r   rd   r>   r   r   r     s    &E,r>   r   c                        e Zd ZddZd Zd Zy)ThreadedUDPSocketTestc                 \    t         j                  | |       t        j                  |        y r   )rf   r   r   r   s     r   r   zThreadedUDPSocketTest.__init__  r   r>   c                 r    t        j                   t         j                  t         j                        | _        y rI   )r   rT   r(   r   rY   s    r   r   z!ThreadedUDPSocketTest.clientSetUp  s    ==1B1BCr>   c                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z$ThreadedUDPSocketTest.clientTearDown  r   r>   Nr   r   rd   r>   r   r   r     s    &D,r>   r   z'UDPLITE sockets required for this test.c                        e Zd ZddZd Zd Zy)ThreadedUDPLITESocketTestc                 \    t         j                  | |       t        j                  |        y r   )rj   r   r   r   s     r   r   z"ThreadedUDPLITESocketTest.__init__  s#    ""4J"?%r>   c                     t        j                   t         j                  t         j                  t         j                        | _        y rI   )r   rT   r(   rO   r   rY   s    r   r   z%ThreadedUDPLITESocketTest.clientSetUp  s&    ==1B1BFDZDZ[r>   c                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z(ThreadedUDPLITESocketTest.clientTearDown  r   r>   Nr   r   rd   r>   r   r   r     s    &\,r>   r   c                        e Zd ZddZd Zd Zy)ThreadedCANSocketTestc                 \    t         j                  | |       t        j                  |        y r   )rm   r   r   r   s     r   r   zThreadedCANSocketTest.__init__  r   r>   c                     t        j                   t         j                  t         j                  t         j                        | _        	 | j                  j                  | j                  f       y # t        $ r Y y w xY wrI   )r   r   r   r    r   rv   rw   r   rY   s    r   r   z!ThreadedCANSocketTest.clientSetUp  sR    ==P	HHMM4>>+, 	 	s   &A/ /	A;:A;c                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z$ThreadedCANSocketTest.clientTearDown  r   r>   Nr   r   rd   r>   r   r   r     s    &,r>   r   c                        e Zd ZddZd Zd Zy)ThreadedRDSSocketTestc                 \    t         j                  | |       t        j                  |        y r   )r   r   r   r   s     r   r   zThreadedRDSSocketTest.__init__  r   r>   c                    t        j                   t         j                  t         j                  d      | _        	 | j                  j	                  t
        df       | j                  j                         | _        y # t        $ r Y y w xY wNr   )	r   r0   r1   r   rv   HOSTgetsocknamecli_addrr   rY   s    r   r   z!ThreadedRDSSocketTest.clientSetUp  sa    ==0E0EqI	HHMM4)$ HH002DM 	 	s   A A; ;	BBc                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z$ThreadedRDSSocketTest.clientTearDown  r   r>   Nr   r   rd   r>   r   r   r     s    &	,r>   r   
need fcntlz$VSOCK does not work on Microsoft WSLz%VSOCK sockets required for this test.   z-This test can only be run on a virtual guest.c                   ,    e Zd ZddZd Zd Zd Zd Zy)ThreadedVSOCKSocketStreamTestc                 p    t         j                  j                  | |       t        j                  |        y r   unittestTestCaser   r   r   s     r   r   z&ThreadedVSOCKSocketStreamTest.__init__  s)    ""4J"?%r>   c                 X   t        j                   t         j                  t         j                        | _        | j	                  | j                  j
                         | j                  j                  t         j                  t        f       | j                  j                          | j                          | j                  j                  t        j                         | j                  j                         \  | _        | _        | j	                  | j                  j
                         y rI   )r   AF_VSOCKrA   rU   ru   r!   rv   VMADDR_CID_ANY	VSOCKPORTrX   r   
settimeoutr   LOOPBACK_TIMEOUTacceptconnconnaddrrY   s    r   r[   z#ThreadedVSOCKSocketStreamTest.setUp  s    MM&//63E3EF			(		--y9:		  "		W556#'99#3#3#5 	4=		(r>   c                    t        j                  d       t        j                  t        j                  t        j                        | _        | j                  | j
                  j                         t               }|t        j                  t        j                  fv rt        }| j
                  j                  |t        f       y )N皙?)timesleepr   r   rA   r   ru   r!   r   VMADDR_CID_HOSTr   VMADDR_CID_LOCALconnectr   )rZ   r<   s     r   r   z)ThreadedVSOCKSocketStreamTest.clientSetUp  sy    

3==&2D2DE'i6))6+@+@AA"C#y)*r>   c                     	 | j                   j                  d      }| j                  t               y # t        $ r$}| j                  t	        |             Y d }~?d }~ww xY wN   )r   recvPermissionErrorrx   reprassertEqualMSG)rZ   msgexcs      r   
testStreamz(ThreadedVSOCKSocketStreamTest.testStream  sP    	%))..&C 	c"  	%MM$s)$$	%s   4 	A!AA!c                 v    | j                   j                  t               | j                   j                          y rI   r   sendr   r!   rY   s    r   _testStreamz)ThreadedVSOCKSocketStreamTest._testStream       cr>   Nr   ra   rb   rc   r   r[   r   r   r  rd   r>   r   r   r     s    &)+#r>   r   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	SocketConnectedTestzSocket 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.
    c                 2    t         j                  | |       y r   )r   r   r   s     r   r   zSocketConnectedTest.__init__      &&t
&Cr>   c                     t         j                  |        | j                          | j                  j	                         \  }}|| _        y rI   )r   r[   r   rU   r   cli_connrZ   r   addrs      r   r[   zSocketConnectedTest.setUp  s;    ##D) 	  "YY%%'
dr>   c                 p    | j                   j                          d | _         t        j                  |        y rI   )r
  r!   r   r^   rY   s    r   r^   zSocketConnectedTest.tearDown"  s'    &&t,r>   c                     t         j                  |        | j                  j                  t        | j
                  f       | j                  | _        y rI   )r   r   r   r   r   rW   	serv_connrY   s    r   r   zSocketConnectedTest.clientSetUp'  s6    ))$/$		*+r>   c                 p    | j                   j                          d | _         t        j                  |        y rI   )r  r!   r   r   rY   s    r   r   z"SocketConnectedTest.clientTearDown,  s'    ,,T2r>   Nr   )	ra   rb   rc   ry   r   r[   r^   r   r   rd   r>   r   r  r    s!    D-
"
3r>   r  c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	SocketPairTestc                     t         j                  j                  | |       t        j                  |        d | _        d | _        y r   )r   r   r   r   r   rU   r   s     r   r   zSocketPairTest.__init__3  s7    ""4J"?%	r>   c                 *    t        j                         S rI   )r   
socketpairrY   s    r   r  zSocketPairTest.socketpair9  s      ""r>   c                 >    | j                         \  | _        | _        y rI   )r  rU   r   rY   s    r   r[   zSocketPairTest.setUp=  s    "oo/	48r>   c                 ^    | j                   r| j                   j                          d | _         y rI   r]   rY   s    r   r^   zSocketPairTest.tearDown@  s    99IIOO	r>   c                      y rI   rd   rY   s    r   r   zSocketPairTest.clientSetUpE      r>   c                     | j                   r| j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   zSocketPairTest.clientTearDownH  s,    88HHNN%%d+r>   Nr   )	ra   rb   rc   r   r  r[   r^   r   r   rd   r>   r   r  r  1  s     #0
,r>   r  c                   "    e Zd ZdZd Zd Zd Zy)SocketTestBasezA 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.
    c                     | j                         | _        | j                  | j                         | j	                          y rI   )	newSocketrU   ru   close_server
bindServerrY   s    r   r[   zSocketTestBase.setUp^  s,    NN$	))*r>   c                 F    | j                   j                          d | _         y rI   r]   rY   s    r   r  zSocketTestBase.close_serverc  r_   r>   c                 x    | j                  | j                         | j                  j                         | _        y)z9Bind server socket and set self.serv_addr to its address.N)bindSockrU   r   	serv_addrrY   s    r   r   zSocketTestBase.bindServerg  s&    dii ..0r>   N)ra   rb   rc   ry   r[   r  r   rd   r>   r   r  r  U  s    
1r>   r  c                   "     e Zd ZdZ fdZ xZS )SocketListeningTestMixinz%Mixin to listen on the server socket.c                 V    t         |           | j                  j                          y rI   )superr[   rU   rX   rZ   	__class__s    r   r[   zSocketListeningTestMixin.setUpp  s    		r>   )ra   rb   rc   ry   r[   __classcell__r*  s   @r   r&  r&  m  s    / r>   r&  c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )ThreadedSocketTestMixinzMixin 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.
    c                 N    t        |   |i | t        j                  |        y rI   )r(  r   r   rZ   argskwargsr*  s      r   r   z ThreadedSocketTestMixin.__init__|  s#    $)&)%r>   c                 N    | j                         | _        | j                          y rI   )newClientSocketr   
bindClientrY   s    r   r   z#ThreadedSocketTestMixin.clientSetUp  s    '')r>   c                 "    | j                         S )z&Return a new socket for use as client.)r  rY   s    r   r4  z'ThreadedSocketTestMixin.newClientSocket  s    ~~r>   c                 x    | j                  | j                         | j                  j                         | _        y)z8Bind client socket and set self.cli_addr to its address.N)r#  r   r   r   rY   s    r   r5  z"ThreadedSocketTestMixin.bindClient  s&    dhh,,.r>   c                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z&ThreadedSocketTestMixin.clientTearDown  r   r>   )
ra   rb   rc   ry   r   r   r4  r5  r   r+  r,  s   @r   r.  r.  u  s!    & /
,r>   r.  c                   @     e Zd ZdZ fdZ fdZ fdZ fdZ xZS )ConnectedStreamTestMixinzMixin 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.)
    c                     t         |           | j                          | j                  j	                         \  }}|| _        y rI   )r(  r[   r   rU   r   r
  )rZ   r   r  r*  s      r   r[   zConnectedStreamTestMixin.setUp  s7     	  "YY%%'
dr>   c                 d    | j                   j                          d | _         t        |           y rI   )r
  r!   r(  r^   r)  s    r   r^   z!ConnectedStreamTestMixin.tearDown  s%    r>   c                     t         |           | j                  j                  | j                         | j                  | _        y rI   )r(  r   r   r   r$  r  r)  s    r   r   z$ConnectedStreamTestMixin.clientSetUp  s/    (r>   c                     	 | j                   j                          d | _         t        |           y # t        $ r Y w xY wrI   )r  r!   r"   r(  r   r)  s    r   r   z'ConnectedStreamTestMixin.clientTearDown  s@    	NN  "!DN 	   		s   !3 	??)	ra   rb   rc   ry   r[   r^   r   r   r+  r,  s   @r   r:  r:    s!    
"
! !r>   r:  c                       e Zd ZdZd Zy)UnixSocketTestBasez(Base class for Unix-domain socket tests.c                     t        j                         }| j                  t        j                  |       t        j
                  ||       y rI   )r   create_unix_domain_nameru   r   unlinkbind_unix_socket)rZ   sockpaths      r   r#  zUnixSocketTestBase.bindSock  s4    446	(($/&&tT2r>   N)ra   rb   rc   ry   r#  rd   r>   r   r@  r@    s
    23r>   r@  c                       e Zd ZdZd Zy)UnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.c                 f    t        j                   t         j                  t         j                        S rI   )r   AF_UNIXrA   rY   s    r   r  zUnixStreamBase.newSocket      }}V^^V-?-?@@r>   Nra   rb   rc   ry   r  rd   r>   r   rH  rH    s    7Ar>   rH  c                   ,     e Zd ZdZeZ fdZd Z xZS )InetTestBasez!Base class for IPv4 socket tests.c                 J    t         |           | j                  d   | _        y Nr
   )r(  r[   r$  rW   r)  s    r   r[   zInetTestBase.setUp  s    NN1%	r>   c                 F    t        j                  || j                         y )Nhost)r   rV   rS  rZ   rE  s     r   r#  zInetTestBase.bindSock  s    4995r>   )	ra   rb   rc   ry   r   rS  r[   r#  r+  r,  s   @r   rN  rN    s    +D&6r>   rN  c                       e Zd ZdZd Zy)TCPTestBasez#Base class for TCP-over-IPv4 tests.c                 f    t        j                   t         j                  t         j                        S rI   )r   rT   rA   rY   s    r   r  zTCPTestBase.newSocket  rK  r>   NrL  rd   r>   r   rV  rV        -Ar>   rV  c                       e Zd ZdZd Zy)UDPTestBasez#Base class for UDP-over-IPv4 tests.c                 f    t        j                   t         j                  t         j                        S rI   )r   rT   r(   rY   s    r   r  zUDPTestBase.newSocket  s    }}V^^V->->??r>   NrL  rd   r>   r   rZ  rZ    s    -@r>   rZ  c                       e Zd ZdZd Zy)UDPLITETestBasez'Base class for UDPLITE-over-IPv4 tests.c                     t        j                   t         j                  t         j                  t         j                        S rI   )r   rT   r(   rO   rY   s    r   r  zUDPLITETestBase.newSocket  s%    }}V^^V->->@V@VWWr>   NrL  rd   r>   r   r]  r]    s    1Xr>   r]  c                       e Zd ZdZd Zy)SCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.c                     t        j                   t         j                  t         j                  t         j                        S rI   )r   rT   rA   IPPROTO_SCTPrY   s    r   r  zSCTPStreamBase.newSocket  s*    }}V^^V-?-?#002 	2r>   NrL  rd   r>   r   r`  r`    s
    E2r>   r`  c                   (    e Zd ZdZej
                  Zy)Inet6TestBasez!Base class for IPv6 socket tests.N)ra   rb   rc   ry   r   HOSTv6rS  rd   r>   r   rd  rd    s    +Dr>   rd  c                       e Zd ZdZd Zy)UDP6TestBasez#Base class for UDP-over-IPv6 tests.c                 f    t        j                   t         j                  t         j                        S rI   )r   AF_INET6r(   rY   s    r   r  zUDP6TestBase.newSocket  s    }}V__f.?.?@@r>   NrL  rd   r>   r   rg  rg    rX  r>   rg  c                       e Zd ZdZd Zy)UDPLITE6TestBasez'Base class for UDPLITE-over-IPv6 tests.c                     t        j                   t         j                  t         j                  t         j                        S rI   )r   ri  r(   rO   rY   s    r   r  zUDPLITE6TestBase.newSocket  s%    }}V__f.?.?AWAWXXr>   NrL  rd   r>   r   rk  rk    s    1Yr>   rk  c                 *    d fd}d }| r|S |S )a  Skip 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                       y rI   rd   )r1  r2  s     r   client_passz%skipWithClientIf.<locals>.client_pass  r  r>   c                 r     t        j                        |       }t        | t              s
fd|_        |S )Nc                     S rI   rd   )r   ro  s    r   <lambda>z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>  s    ;r>   )r   skip
isinstancetypeclient_skip)objretvalro  reasons     r   skipdecz!skipWithClientIf.<locals>.skipdec  s/    &v&s+#t$!6Fr>   c                 N    t        | t              st        | d      sd | _        | S )Nrv  c                     | S rI   rd   )r   s    r   rr  z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>  s    r>   )rt  ru  r   rv  )rw  s    r   	noskipdecz#skipWithClientIf.<locals>.noskipdec  s!    3%m)D)CO
r>   rd   )	conditionry  rz  r}  ro  s    `  @r   skipWithClientIfr    s!    
  7.Y.r>   c                     |D cg c]  }t        | |      r| }}t        |ddj                  d |D              z         S c c}w )zSkip decorated test if obj is missing any of the given attributes.

    Sets client_skip attribute as skipWithClientIf() does.
    don't have , c              3       K   | ]  }|  y wrI   rd   .0names     r   	<genexpr>zrequireAttrs.<locals>.<genexpr>#  s     *DGD4G   )r   r  join)rw  
attributesr  missings       r   requireAttrsr    sO    
 !+E
'#t2Dt
GE*DG*D!DDF F Fs
   AAc            	         d}| D cg c]$  }t        |t              rt        t        |      s|& }}|rddj	                  d |D              z   }nR| D cg c]$  }t        |t              rt        t        |      n|& }}	 t        j                  | }|j                          t        |dudj                  dj	                  d | D              |            S c c}w c c}w # t        $ r}t        |      }Y d}~Wd}~ww xY w)a  Skip 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.
    Nr  r  c              3       K   | ]  }|  y wrI   rd   r  s     r   r  z requireSocket.<locals>.<genexpr>1  s     'Ar  zcan't create socket({0}): {1}c              3   2   K   | ]  }t        |        y wrI   )strr  os     r   r  z requireSocket.<locals>.<genexpr>?  s     +dc!fds   )
rt  r  r   r   r  r   r!   r   r  format)r1  errrw  r  callargsr$   r   s          r   requireSocketr  &  s    C" Bds#s#GFC,@ dG Bdii'A'AAA  $%# -7sC,@GFC(cI# 	 %	x(A
 GGI4'..II+d++S	23 3B
%  	a&C	s#   )C)C C   	C>)C99C>c            	       
   e Zd Z ej                  edud      d        Zd Zd Z ej                  edud      d        Z	d Z
d Zd	 Zd
 Zd Z ej                  ej                   dk(  d      d        Z ej$                  ej(                  d      d        Z ej                  ej.                  dk(  d       ej                  ej2                  d      d               Zd Zd Zd Z ej                   eed      d       ej                   eed      d      d               Z  ej                   eed      d      d        Z! ej                   eed       d!      d"        Z" ej                   eed#      d$      d%        Z# ej                   eed&      d'      d(        Z$d) Z%d* Z&ejN                  d+        Z(d, Z)d- Z* ej                   eed.      d/      d0        Z+ ej                   eed1      d2      d3        Z, ej                   eed1      d2      d4        Z- ej                   eed5      d6      d7        Z. ej                   eed5      d6      d8        Z/d9 Z0d: Z1d; Z2d< Z3d= Z4d> Z5d? Z6 ej                  ej                   dk(  d      d@        Z7 ej                  ej                   dk(  d       ej                   eedA      dB      dC               Z8dD Z9dE Z:dF Z; ej                   ejx                  dG      dH      dI        Z=dJ Z>dK Z?dL Z@dM ZAdN ZBdO ZCdP ZDdQ ZEdR ZFdS ZGdT ZHejN                  dU        ZI ej                  ej2                  dV      dW        ZJ ej                  ej2                  dV      dX        ZKdY ZL ej                  ej2                  dV       ej$                  ej.                  dZk(  d[       ej$                  eMd\       ej                   eed      d]      d^                             ZN ej                  ej2                  dV       ej                  ej.                  dZk(  d_      d`               ZO ej                  ej2                  dV       ej$                  ej.                  dZk(  d[       ej$                  eMd\       ej                   eed      d]      da                             ZP ej                  ej2                  dV       ej                  ej.                  dZk(  d_      db               ZQdc ZRdd ZSde ZT ej                   eedf      dg      dh        ZUdi ZVdj ZWdk ZXdl ZYdm ZZ ej$                  ej                   dk(  dn      do        Z[dp Z\dq Z]dr Z^ds Z_dt Z`du Zay)vGeneralModuleTestsNzneed _socket modulec                     | j                  t        j                  t        j                               | j                  t        d      5  dt        j                  _        d d d        y # 1 sw Y   y xY w)N	immutabler
   )
assertTruegc
is_tracked_socketr   assertRaisesRegexr   foorY   s    r   test_socket_typez#GeneralModuleTests.test_socket_typeG  sC    gnn56##I{;!"GNN <;;s   	A((A1c                     dd l }| j                  t        j                  |j                  u        t        j                         }| j	                  |t        j                         |j                          y r   )r  r  r   
SocketTypeassertIsInstancer!   )rZ   r  r$   s      r   test_SocketType_is_socketobjectz2GeneralModuleTests.test_SocketType_is_socketobjectM  sJ    ))W^^;<MMOa!2!23		r>   c                 2   t        j                   t         j                  t         j                        }|5  | j                  d|j	                         z  t        |             | j                  dt         j                  z  t        |             | j                  dt         j                  z  t        |             | j                  dt        |             | j                  dt        |             |j                  d       | j                  dt        |             | j                  t        |j                               t        |             d d d        | j                  dt        |             | j                  dt        |             y # 1 sw Y   @xY w)	Nzfd=%iz	family=%sztype=%szproto=0raddr	127.0.0.1r   laddrz[closed])
r   rT   rA   assertInfilenor   assertNotInrv   r  r   rZ   r$   s     r   	test_reprzGeneralModuleTests.test_reprT  s   MM&..&*<*<=MM'AHHJ.Q8MM+6Q@MM)f&8&88$q'BMM)T!W-Wd1g.FF#$MM'47+MM#ammo.Q8  	j$q'*$q'* Qs   DFFc           	         t        j                  t         j                  t         j                        }d|j	                         d|j
                  d|j                  d|j                  d	}| j                  t        |      |       |j                          d|j
                  d|j                  d|j                  d}| j                  t        |      |       y # |j                          w xY w)Nz<socket object, fd=z	, family=z, type=z, proto=>z<socket object, fd=-1, family=)r  r   rT   rA   r  familyru  protor   r   r!   )rZ   r$   expecteds      r   test_csocket_reprz$GeneralModuleTests.test_csocket_reprb  s    NN7??G,?,?@	88:qxxBHT!Wh/GGIxx2a(+ GGIs   AC C1c                    t        j                   t         j                  t         j                        5 }t        |      }| j	                  |j                         |j                                d d d        d }t        j                          	 j                          | j                  d       y # 1 sw Y   BxY w# t        $ r Y y w xY w)NzSocket proxy still exists)
r   rT   rA   r   r   r  r   
gc_collectfailReferenceError)rZ   r$   ps      r   test_weakrefzGeneralModuleTests.test_weakrefo  s    ]]6>>6+=+=>!aAQXXZ4 ? 	3HHJ II12 ?>  		s   :B.B: .B7:	CCc                 <   d}| j                  t        |dz        5  t        # 1 sw Y   nxY w| j                  t        |dz        5  t        j                  # 1 sw Y   nxY w| j                  t        |dz        5  t        j                  # 1 sw Y   y xY w)Nz$Error raising socket exception (%s).r   r   zsocket.herrorzsocket.gaierror)assertRaisesr   r   herrorgaierrorrZ   r   s     r   testSocketErrorz"GeneralModuleTests.testSocketError|  s    4wC)O<M =<wC/,AB-- CBwC2C,CD//! EDs    $-
AA$BBc                    t        j                   t         j                  t         j                        }| j                  |j                         |j                  d       |j                         }| j                  t              5 }|j                  d|       d d d        | j                  t        j                        d       | j                  t              5 }|j                  d|       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  dd        d d d        | j                  dt        |j                               | j                  t              5 }|j                  dd|       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  dd|       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  ddd        d d d        | j                  dt        |j                               | j                  t              5 }|j                  dd	|       d d d        | j                  t              5 }|j                  dd d        d d d        | j                  t              5 }|j                  d       d d d        | j                  d
t        |j                               | j                  t              5 }|j                  dd|d       d d d        | j                  dt        |j                               y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N) r   u   ☠z*a bytes-like object is required, not 'str'y              @z.a bytes-like object is required, not 'complex'   fooznot NoneTyper   barz	(1 given)   z	(4 given))r   rT   r(   ru   r!   rv   r   r  r   sendtor   r  	exceptionr  )rZ   r$   socknamecms       r   testSendtoErrorsz#GeneralModuleTests.testSendtoErrors  s   MM&..&*;*;< 	w==?y)RHHXx( *R\\*E	Gy)RHHR" *R\\*I	Ky)RHHVT" *nS%67y)RHHXq(+ *R\\*E	Gy)RHHRH% *R\\*I	Ky)RHHVQ% *nc",,&78y)RHHVUH- *y)RHHVT4( * y)RHHV *k3r||#45y)RHHVQ!, *k3r||#45C *) *) *) *) *) *) *))) *) *)sx   M>N.NN%N2/N?O6O'O&;O2>NNN"%N/2N<?O	OO#&O/2O;c                 D   t         j                   t         j                  rt         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   t         j                   t         j                   y rI   )r   rT   has_ipv6ri  rA   r(   r   SOCK_RDMr1   
SOL_SOCKETSO_REUSEADDRrY   s    r   testCrucialConstantsz'GeneralModuleTests.testCrucialConstants  sR    ??OOr>   c                     t         j                   t         j                   t         j                  rt         j                   y y rI   )r   IPPROTO_TCPIPPROTO_UDPr  IPPROTO_IPV6rY   s    r   testCrucialIpProtoConstantsz.GeneralModuleTests.testCrucialIpProtoConstants  s)    ?? r>   ntWindows specificc                    t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   y rI   )	r   IPPROTO_ICLFXBM
IPPROTO_STIPPROTO_CBTIPPROTO_IGPIPPROTO_RDPIPPROTO_PGMIPPROTO_L2TPrb  rY   s    r   testWindowsSpecificConstantsz/GeneralModuleTests.testWindowsSpecificConstants  sJ    r>   zWASI is missing these methodsc                 z    g d}|D ]2  }t        t        j                  |      r| j                  d| d       4 y )N)_acceptrv   r   
connect_exgetpeernamer   rX   recvfromrecvfrom_intor  
setsockoptshutdownzsocket method z is missing)r   r   r  )rZ   namesr  s      r   test_socket_methodsz&GeneralModuleTests.test_socket_methods  s8    

 D6==$/		N4&<= r>   darwinmacOS specific testIPv6 required for this testc                 b    h d}|D ]&  }| j                  t        t        |      d| d       ( y )N>   
IPV6_RTHDRIPV6_TCLASSIPV6_DSTOPTSIPV6_HOPOPTSIPV6_NEXTHOPIPV6_PATHMTUIPV6_PKTINFOIPV6_CHECKSUMIPV6_DONTFRAGIPV6_HOPLIMITIPV6_RECVRTHDRIPV6_RECVTCLASSIPV6_RECVDSTOPTSIPV6_RECVHOPOPTSIPV6_RECVPATHMTUIPV6_RECVPKTINFOIPV6_USE_MIN_MTUIPV6_RECVHOPLIMITIPV6_RTHDRDSTOPTSIPV6_RTHDR_TYPE_0zMissing RFC3542 socket option '')r  r   r   )rZ   optsopts      r   test3542SocketOptionsz(GeneralModuleTests.test3542SocketOptions  s7    
, COO$(GuA&N r>   c                    t        j                         }	 t        j                  |      }| j                  j                  d      dk\  d       	 t        j                  |      \  }}}|gz   }t        j                  |      }||vr"| j                  d|dt        |      d       y y # t        $ r | j	                  d       Y w xY w# t        $ r | j	                  d       Y w xY w)Nname lookup failurer   r   zError resolving host to ip.z1Error testing host resolution mechanisms. (fqdn: z, all: ))r   gethostnamegethostbynamer   rx   r  findgethostbyaddrgetfqdnr  r   )rZ   hostnameiphnamealiasesipaddrsall_host_namesfqhns           r   testHostnameResz"GeneralModuleTests.testHostnameRes  s    %%'	1%%h/B 	)+HI	1&,&:&:2&>#E7G #E*W4~~b!~%IIY]_cdr_stu &  	1MM/0	1  	1MM/0	1s#   B, C ,C	C	C)(C)c                     t         j                  ddfD ]'  }| j                  t        j                  |      |       ) t         j                  fD ]*  }| j                  |t        j                  |      d          , y )Nz10.0.0.1255.255.255.255r   )r   HOSTv4r   r   r  r  r  )rZ   r  rS  s      r   test_host_resolutionz'GeneralModuleTests.test_host_resolution  si    ")):7HIDV11$7> J
 #))*DMM$ 4 4T :1 => +r>   c                    d}dD ]l  }| j                  t        |      5  t        j                  |       d d d        | j                  t        |      5  t        j                  |       d d d        n y # 1 sw Y   AxY w# 1 sw Y   xY w)Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r  )r  r   r   r  r  )rZ   explanationr  s      r    test_host_resolution_bad_addressz3GeneralModuleTests.test_host_resolution_bad_address  su    3 	*D""7"5$$T* 6""7"<$$T* =<	*55<<s   A5B5A>	B
	sethostnameztest needs socket.sethostname()r  ztest needs socket.gethostname()c                    t        j                         }	 t        j                  d       	 | j                  t        j                         d       t        j                  d       | j                  t        j                         d       t        j                  |       y # t        $ r:}|j                  t        j
                  k(  r| j                  d       n Y d }~d }~ww xY w# t        j                  |       w xY w)Nnewztest should be run as roots   barr  )r   r  r   r   errnoEPERMrx   r   )rZ   oldhnr   s      r   test_sethostnamez#GeneralModuleTests.test_sethostname'  s     ""$	u%	&V//159v&V//159u%  	ww%++%:; <	 u%s#   B AC% 	C"(0CC"%C<if_nameindexz$socket.if_nameindex() not available.c                    t        j                         }|D ]  \  }}| j                  |t               | j                  |t               | j                  |d       t        j                  |      }| j                  |t               | j                  ||       t        j                  |      }| j                  |t               | j                  ||        y r   )	r   r'  r  intr  assertGreaterif_nametoindexr   if_indextoname)rZ   
interfacesindexr  _index_names         r   testInterfaceNameIndexz)GeneralModuleTests.testInterfaceNameIndex;  s     ((*
%KE4!!%-!!$,ua(**40F!!&#.UF+))%0E!!%-T5) &r>   r,  z&socket.if_indextoname() not available.c                    | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t        t        j                  ddz         | j                  t
        t        j                  d       t        t        d      rt        t        j                               }|D ]E  }|dz   }||vs| j                  t        t        f      5  t        j                  |       d d d        G dD ]@  }||vs| j                  t        t        f      5  t        j                  |       d d d        B y y # 1 sw Y   xY w# 1 sw Y   ZxY w)	Nr   r     	_DEADBEEFr'          )    l    )	r  r   r   r,  OverflowErrorr   r   dictr'  )rZ   indicesr.  index2s       r   testInvalidInterfaceIndexToNamez2GeneralModuleTests.testInvalidInterfaceIndexToNameK  s!    	'6#8#8!<-)>)>C-)>)>4H)V%:%:KH6>*6..01G (**M7+CD--f5 ED !
 *'**M7+CD--e4 ED * +
 ED EDs   /E4E"E	"E+	r+  z&socket.if_nametoindex() not available.c                     | j                  t        t        j                  d       | j                  t        t        j                  d       y )Nr   r5  )r  r   r   r+  r   rY   s    r   testInvalidInterfaceNameToIndexz2GeneralModuleTests.testInvalidInterfaceNameToIndex^  s4     	)V%:%:A>'6#8#8+Fr>   getrefcounttest needs sys.getrefcount()c                     	 t        j                  t              }t        j                  t        d       y # t
        $ r2 t        j                  t              k7  r| j                  d       Y y Y y w xY w)Nr   z$socket.getnameinfo loses a reference)sysr?  ra   r   getnameinfor   r  )rZ   origs     r   testRefCountGetNameInfoz*GeneralModuleTests.testRefCountGetNameInfod  sZ    	B??8,Dx* 	Bx(D0		@A 1	Bs   36 6A10A1c                 P    	 t        j                  dd       y # t        $ r Y y w xY w)N)rp   r   r   r   r   )r   rC  r   rY   s    r   testInterpreterCrashz'GeneralModuleTests.testInterpreterCrashp  s)    	~q1 		s    	%%c                    t         j                  dt         j                  dt         j                  dt         j                  di}|j                         D ]o  \  }}d|z  dz
  }dD ])  }| j                  ||z   | |||z              |z         +  ||      }| j                  ||z  |       | j                  t        |d       q y )N       r
   )r   r
     i  r   igE#i2Tvl        )	r   htonlntohlhtonsntohsitemsr   r  r8  )rZ   sizesfuncsizemaskrP   swappeds          r   testNtoHzGeneralModuleTests.testNtoHx  s     r6<<r6<<5++-JD$tGq=DG  T4QtV+=+DE H 4jGWt^T2mT59 (r>   c                    dd l }g d}|dgz   }dddddz  g}||j                  dz
  |j                  dz   gz   d	|j                  gz   }|D ],  }t        j                  |       t        j
                  |       . |D ],  }t        j                  |       t        j                  |       . |D ]L  }| j                  t        t        j                  |       | j                  t        t        j
                  |       N |D ]L  }| j                  t        t        j                  |       | j                  t        t        j                  |       N y )
Nr   )r   r
   r   rK  r7  r3  r6  r
   r4     )
	_testcapiINT_MININT_MAXr   rO  rN  rM  rL  r  r8  )rZ   rZ  s_good_valuesl_good_valuesl_bad_valuess_bad_valuesks          r   testNtoHErrorsz!GeneralModuleTests.testNtoHErrors  s   )%4Bq$w/q )"3"3A"567i''() 	
 ALLOLLO  ALLOLLO  AmV\\1=mV\\1=  AmV\\1=mV\\1= r>   c                 B   | j                   }t        j                  j                  d      st        j                  dv rd}nd}|D ]  }	 t	        j
                  |d      } n t        t        t        d      rt        j                         dk\  rt	        j
                  |      } |||       	 t	        j
                  |d      } |||       t        j                  s |t	        j                        |        |t	        j                  |d      |       | |t	        j                  |d      |       | j                  t        t        j                  d	       | j                  t        t        j                  d
       y # t        $ r Y Gw xY w# t        $ r d }Y w xY w)N)freebsdnetbsdgnukfreebsd)linuxr  )daytimeqotddomain)echorh  rj  tcpgetandroidapilevel   udpr3  rY  )r   rB  platform
startswithr   getservbynamer   r   rm  r   
is_androidgetservbyportr  r8  )rZ   eqservicesservicerW   port2udpports          r   testGetServByz GeneralModuleTests.testGetServBy  sm    LL##$HI||22 5H4HG++GU;   M 12&&(B.((1EtUO	**7E:G w !!v##E*G4
6e,g6v##GU3W=-)=)=rB-)=)=uE5    	G	s$   	F .F  	FFFFc                    | j                  t        j                         d        t        j                         5 }| j                  |j                         d        d d d        t	        d      5  | j                  t        j                         d       t        j                         5 }| j                  |j                         d       d d d        t        j
                  d        | j                  t        j                         d        t        j                         5 }| j                  |j                         d        d d d        d d d        | j                  t        t        j
                  d       | j                  t        t        j
                  d       y # 1 sw Y   @xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   yxY w)N
   r3  spam)	r   r   rJ   
gettimeoutrN   rK   r  
ValueErrorr   )rZ   r$   rE  s      r   testDefaultTimeoutz%GeneralModuleTests.testDefaultTimeout  s7    	113T:]]_Q\\^T2  &b)V557<D  !2B7 ! $$T*V557>D  !2D9 ! * 	*f&>&>C 	)V%=%=vF' _ ! ! *)sH   !F-9F=&!F%AF=!F1=F=F"%F.	*F=1F:	6F==G	inet_atonztest needs socket.inet_aton()c                     | j                  dt        j                  d             | j                  dt        j                  d             y )N       0.0.0.0   r  )r   r   r  rY   s    r   testIPv4_inet_aton_fourbytesz/GeneralModuleTests.testIPv4_inet_aton_fourbytes  s;    
 	F$4$4Y$?@F$4$45F$GHr>   	inet_ptonztest needs socket.inet_pton()c                     ddl m}mm fd} fd} j	                  d |d              j	                  d |d              j	                  d	 |d
              j	                  d |d              j	                  d |d             t
        s	 ||d        ||d        ||d        ||d        ||d        j	                  d |d              j	                  d |d              j	                  d	 |d
              j	                  d |d              ||d        ||d        ||d        ||d        ||d       y )Nr   )r  r  rT   c                      |       S rI   rd   )arT   r  s    r   rr  z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>      i+r>   c                 >    j                  t        t        f| |      S rI   r  r   r  rR  r  rZ   s     r   rr  z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>      t'8'8j!4(
r>   r  r  s     z255.0.255.0s   z170.170.170.170   1.2.3.4r  r  z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5::1)r   r  r  rT   r   r   )rZ   r   gassertInvalidrT   r  s   `   @@r   testIPv4toStringz#GeneralModuleTests.testIPv4toString  sG    	>=+
 	,a	l;,a.>?,a0A.BC,a	l;,a0A.BC!X&a%a#a%a,a	l;,a.>?,a0A.BC,a0A.BCa"a%a#a%ar>   c                     	 ddl mmm} |s j	                  d       t        j                  dk(  r
	  d       fd	 fd
} j                  d d              j                  d d              j                  d d              j                  d d              j                  d d              j                  d d              |d        |d        |d        |d        |d        |d        |d        |d       t        s |d        j                  d d              j                  d  d!              j                  d" d#              |d$        |d%        |d&        |d'        |d(        |d)       y # t
        $ r  j	                  d       Y w xY w# t        $ r+}|j                  dk(  r j	                  d       Y d }~d }~ww xY w)*Nr   )r  ri  r  IPv6 not available+could not import needed symbols from socketwin32::&'  IPv6 might not be supportedc                      |       S rI   rd   )r  ri  r  s    r   rr  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>      i!,r>   c                 >    j                  t        t        f|       S rI   r  r  r   rZ   s    r   rr  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>      $"3"3j!1a#
r>                      z0::0s                  z1::s   Ev V$z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes   B
    '  T zad42:abc::127:0:254:2s     
            z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:0z1:2:3:4:5:6:7:8:s               *@z::254.42.23.64s    B        *@z42::a29b:254.42.23.64s    B   *@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)r   r  ri  r  rx   ImportErrorrB  rp  r   winerrorr   r   )rZ   r  r   r  ri  r   r  s   `   @@@r   testIPv6toStringz#GeneralModuleTests.testIPv6toString  s   	I<<23 <<7"A(D)
 -
 	qw/qy13QuX>O45	
 	S%&	
 	;Qx[Ihegj!m$m$n%)*,-;	
 	C%&	
 	O23	
 	'(n%m$-.m$/0o  	IMMGH	I  A::&MM"?@As(   F# 	G #G G	G8 G33G8	inet_ntopztest needs socket.inet_ntop()c                 t    ddl m}mm fd} fd} j	                  d |d              j	                  d |d              j	                  d	 |d
              j	                  d |d              ||d        ||d        ||d        j	                  d |t        d                    j	                  d |d              j	                  d |d              j	                  d	 |d
              ||d        ||d        ||d        j	                  d |t        d                   y )Nr   )	inet_ntoar  rT   c                      |       S rI   rd   )r  rT   r  s    r   rr  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>P  r  r>   c                 >    j                  t        t        f| |      S rI   r  r  s     r   rr  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>Q  r  r>   z1.0.1.0s     z170.85.170.85s   UUr  r  r  r  s      s        r  )r   r  r  rT   r   	bytearray)rZ   r   r  r  rT   r  s   `   @@r   testStringToIPv4z#GeneralModuleTests.testStringToIPv4L  s'    	>=+
 	A&9$:;!,?*@A*A.A,BCA&9$:;a%a%a&!I6I,J*KLA&9$:;!,?*@A*A.A,BCa%a%a&!I6I,J*KLr>   c                 H    	 ddl mmm} |s j	                  d       t        j                  dk(  r
	  d       fd	 fd
} j                  d d              j                  d d              j                  d d              j                  d t        d                    |d        |d        |d       y # t
        $ r  j	                  d       Y w xY w# t        $ r*}|j                  dk(  r j	                  d       Y d }~d }~ww xY w)Nr   )r  ri  r  r  r  r  r  r  r  c                      |       S rI   rd   )r  ri  r  s    r   rr  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>w  r  r>   c                 >    j                  t        t        f|       S rI   r  r  s    r   rr  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>x  r  r>   r  r  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
 Ups   s   s   )r   r  ri  r  rx   r  rB  rp  r   r  r   r  )rZ   r  r   r  ri  r   r  s   `   @@@r   testStringToIPv6z#GeneralModuleTests.testStringToIPv6f  s   	I<<23 <<7"A(L1
 -
 	q/"8 9:/QR	
 	),B"C DEl#l#k"3  	IMMGH	I  A::&MM"?@As(   C 	C. C+*C+.	D!7 DD!c                    t        j                   t         j                  t         j                        }| j                  |j                         t        j                         D ]+  }t        j                         }	 |j                  d|f        n |j                         }	 t        j                  t        j                               }| j#                  |d   dfd|d   z         | j%                  |d          y # t        $ r-}|j                  t        j                  k7  s|dk(  r Y d }~d }~ww xY w# t        $ r | j!                  d       Y w xY w)Nr     r
  r   z
%s invalidr
   )r   rT   rA   ru   r!   	itertoolscountr   find_unused_portrv   r   r#  
EADDRINUSEr   r  r  rx   r  r   )rZ   rE  rP   rW   r   r  
my_ip_addrs          r   testSockNamezGeneralModuleTests.testSockName  s   }}V^^V-?-?@

# "A 113D		9d+,
  # !	1--f.@.@.BCJ 	d1g	:6tAw8NOa$'!  77e...!q& 39  	1MM/0	1s*   :C<!'D5 <	D2#D--D25EEc                 $   t        j                   t         j                  t         j                        }| j                  |j                         |j                  t         j                  t         j                        }| j                  |dk7  d       y )Nr   zinitial mode is reuse)	r   rT   rA   ru   r!   
getsockoptr  r  assertFalserZ   rE  reuses      r   testGetSockOptz!GeneralModuleTests.testGetSockOpt  s_     }}V^^V-?-?@

# 1 163F3FG!%<=r>   c                    t        j                   t         j                  t         j                        }| j                  |j                         |j                  t         j                  t         j                  d       |j                  t         j                  t         j                        }| j                  |dk(  d       y )Nr
   r   zfailed to set reuse mode)
r   rT   rA   ru   r!   r  r  r  r  r  r  s      r   testSetSockOptz!GeneralModuleTests.testSetSockOpt  sy    }}V^^V-?-?@

#))6+>+>B 1 163F3FG!%?@r>   c                     t        j                   t         j                  t         j                        5 }|j                  d       d d d        | j	                  t
        j                  d       y # 1 sw Y   +xY w)Nr
      spam)r   rT   rA   r   r  r   r  rT  s     r   testSendAfterClosez%GeneralModuleTests.testSendAfterClose  sL    ]]6>>6+=+=>$OOA ?'499g6 ?>s   A//A8c                    t        j                          }|j                  t         j                  df       t        j                   |j                               j	                          	 |j	                          | j                  d       y # t        $ rD}| j                  |j                  t        j                  t        j                  f       Y d }~y d }~ww xY w)Nr   r  z#close() should raise EBADF/ENOTSOCK)r   rv   
_LOCALHOSTr  r!   r  r   r  r#  EBADFENOTSOCK)rZ   rE  r  s      r   testCloseExceptionz%GeneralModuleTests.testCloseException  s    }}		6$$a()T[[]+113	=JJL
 II;<	  	DMM#))ekk5>>%BCC	Ds   )B 	C:CCc                 *   t        j                   t         j                  t         j                        5 }| j                  |j                  t         j                         t        t         d      rL| j                  |j                  t         j                  t         j                  z  t         j                  f       n*| j                  |j                  t         j                         | j                  |j                  d       d d d        y # 1 sw Y   y xY w)NSOCK_CLOEXECr   )
r   rT   rA   r   r  r   r  ru  r  r  rT  s     r   testNewAttributesz$GeneralModuleTests.testNewAttributes  s     ]]6>>6+=+=>$T[[&..9v~.dii%11F4G4GG%1134   F,>,>?TZZ+ ?>>s   CD		Dc                 8   t        j                          }| j                  |j                         t        j                         }|dz   }|dz
  }| j                  t        |j                  t        |f       | j                  t        |j                  t        |f       t        j                         D ]/  }t        j                         }	 |j                  t        |f        y  y # t        $ r-}|j                  t        j                  k7  s|dk(  r Y d }~dd }~ww xY w)NrY  r  )r   ru   r!   r   r  r  r8  rv   r   r  r  r   r#  r  )rZ   rE  rW   big_portneg_portrP   r   s          r   test_getsockaddrargz&GeneralModuleTests.test_getsockaddrarg  s    }}

#--/%<%<-T84DE-T84DE "A 113D		4,'
  #  77e...!q& 39s   C##	D,#DDc                 0   | j                  t        t        j                  d             | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             | j                  t        t        d             t        j                         }| j                  |j                         | j                  t        |j                  dd        |j                  t        j                  d       y )Nr   
SIO_RCVALL	RCVALL_ON
RCVALL_OFFSIO_KEEPALIVE_VALSr3  )r
   d   r  )	r  r   r   ru   r!   r  r  r   r  r  s     r   test_sock_ioctlz"GeneralModuleTests.test_sock_ioctl  s    w78564556(<=>MMO *aggr48	))=9r>   SIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc                 l   t        j                          }| j                  |j                         	 |j                  t         j                  d       | j                  t        |j                  t         j                  d        y # t
        $ r(}d}|j                  |k(  r| j                  d        d }~ww xY w)NTi='  zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
r   ru   r!   r   r  r   r  rx   r  r   )rZ   r$   r   WSAEOPNOTSUPPs       r   test_sio_loopback_fast_pathz.GeneralModuleTests.test_sio_loopback_fast_path  s     MMO 	GGF1148 	)QWWf.K.KTR  	!M||}, L M	s    B 	B3#B..B3c                 $   	 t        j                  dd       t        j                  t        d       D ]  }| j                  t        |      d        t        j                  dd       t        j                  dd       t        j                  d d       t        j                  rt        j                  dd       t        t        d      rt        j                         dk\  rt        j                  t        d	       t        j                  t        d       t        j                  t        d        t        j                  t        dt         j                  t         j                        }|D ]  \  }}}}}| j                  |t         j                         | j                  t!        |      d
|j"                  z         | j                  t%        |      t%        |j"                               | j                  |t         j                         | j                  t!        |      d|j"                  z         | j                  t%        |      t%        |j"                                t        j                  t        d dt         j                        }|D ](  \  }}}}}| j                  |t         j                         * t        j                  t        d ddt         j&                         t        j                  t        d dddt         j(                         t        j                  d dt         j*                  t         j                  dt         j(                         t        j                  t        d       }t        j                  t        d       }	| j                  ||	       t        j                  t        d t         j                        }t        j                  t        d t         j                        }	| j                  ||	       t        j                  t        d dt         j                        }t        j                  t        d t         j                        }	| j                  ||	       t        j                  t        d ddt         j&                        }t        j                  t        d t         j&                        }	| j                  ||	       t        j                  t        d dddt         j(                        }t        j                  t        d t         j(                        }	| j                  ||	       t        j                  d dt         j*                  t         j                  dt         j(                        }t        j                  d dt         j*                  t         j                  dt         j(                        }	| j                  ||	       | j-                  t.        t         j                  dd       t        t         d      r*	 t        j                  dd dddt         j0                         y y # t         j                  $ r4}|j                  t         j                  k(  r| j                  d        d }~ww xY w# t         j                  $ r Y y w xY w)N	localhostP   zbuggy libc versionr  r  r  rm  rn  http<AddressFamily.AF_INET: %r><SocketKind.SOCK_STREAM: %r>r   )rS  rW   r  ru  )r  )flags)rS  rW   r  ru  r  r  u   AI_NUMERICSERV)r   getaddrinfor  r#  EAI_SERVICErx   r   r   lenr   IPV6_ENABLEDr   rB  rm  rT   rA   r   valuer  SOL_TCP
AI_PASSIVE	AF_UNSPECr  UnicodeEncodeErrorr  )
rZ   r  infoinfosr  ru  r   socktyper  bs
             r   testGetaddrinfoz"GeneralModuleTests.testGetaddrinfo  s   	{B/ &&tT2DSY* 3 	;+;+4$%%ub) 12&&(B.tV,4$4&""4V^^V=O=OP%*!FD!QVV^^4T&\+H6<<+WXS[#fll*;<T6#5#56T$Z)G$**)TUSYDJJ8 &+ ""4q&2D2DE$) AxAqXv'9'9: %* 	4q!V^^<4q!Q0A0AB 	4F$4$4f6H6H!!,,	. tT*Dt4AtT6>>:tT&..AAtT1f.@.@AtT0B0BCAtT1a@tT@AtT1aF4E4EFtT1B1BCAtQ(8(8&:L:La%002Dq9I9I$*$6$6a%+%6%68 	A,f.@.@+xX 6+, "";aA#)#8#8:	 -I  	yyF...23		T ?? s)   X/ (Y9 /Y6/Y11Y69ZZc                    ddl m}m}m} 	 t	        j
                  d |dz   t        j                         	 t	        j
                  d |dz   t        j                         	 t	        j
                  d |dz
  dz   t        j                         	 t	        j
                  d |dz
  t        j                         t	        j
                  d dt        j                         t	        j
                  d dt        j                         y # t        $ r | j                  d       Y t        j                  $ r Y w xY w# t        $ r | j                  d       Y t        j                  $ r Y 	w xY w# t        $ r | j                  d       Y t        j                  $ r Y w xY w# t        $ r | j                  d       Y t        j                  $ r Y w xY w)Nr   )	ULONG_MAXLONG_MAXLONG_MINr
   r  z,Either no error or socket.gaierror expected.rK  )
rZ  r  r  r  r   r  rA   r8  r  r  )rZ   r  r  r  s       r   "test_getaddrinfo_int_port_overflowz5GeneralModuleTests.test_getaddrinfo_int_port_overflowV  s}    	<;	tY]9K9KL	tX\8J8JK	tX%6%:ASAST	tX\8J8JK 	4););<4f.@.@A=  	F IIDE 		
  	FIIDE 		
  	FIIDE 		
  	FIIDE 		s^   )D )D7  ,E, )F! D4D43D47E)E)(E),FFF!G>GGc                 P    | j                  t        t        j                  dd       y )N)zmail.python.orgr   r   )r  r   r   rC  rY   s    r   test_getnameinfoz#GeneralModuleTests.test_getnameinfo  s    '6#5#57LaPr>   networkznetwork is not enabledc                 B   t        j                  d      5  t        j                  d       d d d        d}t        j                  |       t        j                  |       t        j
                  |dt        j                  t        j                         y # 1 sw Y   jxY w)Nz
python.orgu!   испытание.pythontest.netr   )r   transient_internetr   r  gethostbyname_exr  r  rA   )rZ   rj  s     r   	test_idnazGeneralModuleTests.test_idna  sq    
 --l;  . < 5V$'6!F$4$4V5G5GH <;s   BBc                 $    t        t        d      rt        t        d      s j                  d        fd} fd}t        j                         \  }}t        j                  t        j
                  |      }	 |r|j                  d        j                  t              5  t        j                  d       |j                  dt        j                  z         d d d        |rkt        j                  t        j
                  |       t        j                  d        j                  t        |j                  dt        j                  z         t        j                  d	       t        j                  t        j
                  |       |j                          |j                          y # 1 sw Y   xY w# t        j                  d	       t        j                  t        j
                  |       |j                          |j                          w xY w)
Nalarmr  z9signal.alarm and socket.socketpair required for this testc                  P    j                  t        t        j                  d       y r   r  r  mathacoshr1  rZ   s    r   
ok_handlerz@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handler  s    j$**a8r>   c                  Z    j                  t        t        j                  d       ddz   y Nr   r
   r  r  s    r   raising_handlerzEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handler  s     j$**a8Fr>   g      ?r
      xr   )r   signalr   rx   r  SIGALRMr   r  ZeroDivisionErrorr  sendallr   SOCK_MAX_SIZETimeoutErrorr!   )rZ   with_timeoutr  r
  cr$   	old_alarms   `      r   check_sendall_interruptedz,GeneralModuleTests.check_sendall_interrupted  sR   vw'wv|/LMMUV	9	   "1MM&../B		S!""#45Q		$!6!667 6 fnnj9Q!!,		"&)>)>">@ LLOMM&..)4GGIGGI 65 LLOMM&..)4GGIGGIs&   9(F4 !8F(A5F4 (F1-F4 4AHc                 &    | j                  d       y NFr  rY   s    r   test_sendall_interruptedz+GeneralModuleTests.test_sendall_interrupted  s    &&u-r>   c                 &    | j                  d       y )NTr  rY   s    r   %test_sendall_interrupted_with_timeoutz8GeneralModuleTests.test_sendall_interrupted_with_timeout  s    &&t,r>   c                    t        j                   t         j                  t         j                        }t        |      }| j	                  t
              5 }d }t        j                          d d d        | j                  |t        j                  j                  d                t        j                   t         j                  t         j                        }|j                  d      }t        |      }d }t        j                          | j	                  t
              5  d }t        j                          d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   )r   rT   rA   r   assertWarnsResourceWarningr   r  r  r  warningr1  makefile)rZ   rE  r   r  r   s        r   test_dealloc_warnz$GeneralModuleTests.test_dealloc_warn  s    }}V^^V-?-?@Jo."D  / 	aRZZ__Q/01}}V^^V-?-?@MM$Jo.A  /. /. /.s   D=E	=E	Ec                 
   t        j                   t         j                  t         j                        5 }|j                  d      }|j	                          | j                  t        |      d       d d d        y # 1 sw Y   y xY w)Nr   z<_io.BufferedReader name=-1>)r   rT   rA   r   r!   r   r   rZ   rE  fps      r   test_name_closed_socketioz,GeneralModuleTests.test_name_closed_socketio  sT    ]]6>>6+=+=>$t$BHHJT"X'EF ?>>s   =A99Bc                    t        j                          5 }|j                  dd      }| j                  |j                                | j	                  |j                                | j	                  |j                                |j                          | j                  t        |j                         | j                  t        |j
                         | j                  t        |j                         d d d        y # 1 sw Y   y xY w)Nr   r   )	buffering)
r   r   r  readabler  writableseekabler!   r  r  r#  s      r   test_unusable_closed_socketioz0GeneralModuleTests.test_unusable_closed_socketio  s    ]]_tq1BOOBKKM*R[[]+R[[]+HHJj"++6j"++6j"++6 __s   C!C??Dc                    t        j                          }	 |j                  t        df       t        j                  |j	                                | j                  t              5  |j                  d       d d d        | j                  t              5  |j                          d d d        | j                  t              5  t        j                  d        d d d        | j                  t              5  t        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   |xY w# | j                  t              5  |j                          d d d        w # 1 sw Y   w xY wxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r
   r3  )	r   rv   r   r!   r  r  r   rX   r   rT  s     r   test_socket_closez$GeneralModuleTests.test_socket_close  s    }}	IItQi LL'""7+A , ""7+

 , y)LL *w'LL (' ,+ ,+""7+

 ,++ *)''s`   AD, %D7D, D E+5E7DD,  D),E(E	E(E%!E(+E47F c           	      J   dD ]z  }| j                  |      5  t        j                         5 }d|v rd nd}|j                  ||      5 }| j                  |j                  |       d d d        d d d        d d d        | y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w)N)r   r   rwwwbmoder  r	   encoding)subTestr   r   r   r3  )rZ   r3  rE  r5  r$  s        r   test_makefile_modez%GeneralModuleTests.test_makefile_mode  s    .D4(]]_'*d{tHth?2(($7 @ % )( / @? %_ )(s:   BB	B	&B.BB
BBBB"	c           	      *   dD ]j  }| j                  |      5  t        j                         5 }| j                  t        d      5  |j	                  |       d d d        d d d        d d d        l y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w)N)rtrp   +r  r2  zinvalid mode)r6  r   r  r  r   )rZ   r3  rE  s      r   test_makefile_invalid_modez-GeneralModuleTests.test_makefile_invalid_mode  so    'D4(]]_//
NKd+ L % )( ( LK %_ )(s:   B	A=A1	A=B	1A:6A==BB		B	c                    t        j                          }|5  t        t        j                  dz         D ](  }| j	                  t
        t        j                  ||       * 	 d d d        t        t        j                  dz         D ]  }t        j                  t        j                  t         j                  |            }| j                  |t         j                         t        j                  t        j                  t         j                  |            }| j                  |t         j                          y # 1 sw Y   xY wrP  )r   rangepickleHIGHEST_PROTOCOLr  r   dumpsloadsrT   r   rA   )rZ   rE  protocolr  ru  s        r   test_picklezGeneralModuleTests.test_pickle  s    }}!&"9"9A"=>!!)V\\4J ?  f559:H\\&,,v~~x"HIFVV^^4<<V-?-? JKDT6#5#56	 ; Ts   AD88Ec                    dD ]e  }t        j                   t         j                  t         j                        5 }|j                  t        df       |j                  |       d d d        g t        j                   t         j                  t         j                        5 }|j                  t        df       |j                          d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N)r   r3  r   )r   rT   rA   rv   r   rX   )rZ   backlogsrvs      r   test_listen_backlogz&GeneralModuleTests.test_listen_backlog  s    Gv~~v/A/ABc$#

7# CB 
 ]]6>>6+=+=>#HHdAYJJL ?>	 CB ?>s   )C(CC	C#c                 $   dd l }t        j                  t        j                  t        j                        5 }|j	                  t
        df       | j                  t        |j                  |j                  dz          d d d        y # 1 sw Y   y xY wr	  )
rZ  r   rT   rA   rv   r   r  r8  rX   r\  )rZ   rZ  rF  s      r   test_listen_backlog_overflowz/GeneralModuleTests.test_listen_backlog_overflow  s^     	]]6>>6+=+=>#HHdAYmSZZ9J9JQ9NO ?>>s   ABBIPv6 required for this test.c                 d   | j                  t        t        j                  t        j
                  ddfd       t        j                  t        j                  t        j                        5 }| j                  t        |j                  t        j
                  ddf       d d d        y # 1 sw Y   y xY w)Nr   r7  i)	r  r8  r   rC  r   re  ri  rA   rv   r  s     r   test_flowinfoz GeneralModuleTests.test_flowinfo  sw    -););(//J?	D]]6??F,>,>?1mQVVm6J6JAs5ST @??s   *3B&&B/c                     t        j                  ddt         j                  t         j                  t         j                        \  ^ }}| j                  |d       y )Nff02::1de:c0:face:8Dr   )ff02::1de:c0:face:8dr   r   r   )r   r  ri  r(   r  r   )rZ   r   sockaddrs      r   test_getaddrinfo_ipv6_basicz.GeneralModuleTests.test_getaddrinfo_ipv6_basic%  sJ    ".."&//	
1h 	#GHr>   c                     | j                  t        j                         t        j                  d             | j                  t        j                         t        j                  d             y )Nr  r  )r   r   r  rY   s    r   test_getfqdn_filter_localhostz0GeneralModuleTests.test_getfqdn_filter_localhost/  sB    )6>>)+DE)6>>$+?@r>   r  zdoes not work on WindowszSymbolic scope id does not workz test needs socket.if_nameindex()c                     t        j                         d   \  }}t        j                  d|z   dt         j                  t         j                  t         j
                        \  ^ }}| j                  |ddd|f       y )Nr   ff02::1de:c0:face:8D%r   rO  )r   r'  r  ri  r(   r  r   )rZ   ifindextest_interfacer   rP  s        r   &test_getaddrinfo_ipv6_scopeid_symbolicz9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolic3  sr     %+$7$7$9!$<!."..#n4&//	
1h 	$:D!W#MNr>   z.Numeric scope id does not work or undocumentedc                     d}t        j                  dt        |      z   dt         j                  t         j                  t         j
                        \  ^ }}| j                  |ddd|f       y )N*   rU  r   rO  r   )r   r  r  ri  r(   r  r   )rZ   rV  r   rP  s       r   %test_getaddrinfo_ipv6_scopeid_numericz8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericC  sc     "..#c'l2&//	
1h 	$:D!W#MNr>   c                     t        j                         d   \  }}ddd|f}t        j                  |t         j                  t         j                  z        }| j                  |d|z   df       y )Nr   rN  r   ff02::1de:c0:face:8d%1234)r   r'  rC  NI_NUMERICHOSTNI_NUMERICSERVr   )rZ   rV  rW  rP  nameinfos        r   &test_getnameinfo_ipv6_scopeid_symbolicz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolicT  sh     %+$7$7$9!$<!.*D!W=%%h0E0EH]H]0]^$;n$Lf#UVr>   c                     d}ddd|f}t        j                  |t         j                  t         j                  z        }| j	                  |dt        |      z   df       y )NrZ  rN  r   r   r]  r^  )r   rC  r_  r`  r   r  )rZ   rV  rP  ra  s       r   %test_getnameinfo_ipv6_scopeid_numericz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numeric_  sY     *D!W=%%h0E0EH]H]0]^$;c'l$JF#STr>   c                    t        j                   t         j                  t         j                        5 }| j                  t	        |j
                        d|j
                  j                  z         | j                  t	        |j                        d|j                  j                  z         | j                  t        |j
                        t        |j
                  j                               | j                  t        |j                        t        |j                  j                               d d d        y # 1 sw Y   y xY w)Nr  r  )	r   rT   rA   r   r   r  r  ru  r  r  s     r   test_str_for_enumsz%GeneralModuleTests.test_str_for_enumsj  s     ]]6>>6+=+=>!T!((^-JQXX^^-[\T!&&\+IAFFLL+XYS]C,?@S[#affll*;<	 ?>>s   C=D99Ec                    t        t        dd      }t        t        dd      }t        j                  |z  |z  }t        j                  t        j                  |      5 }| j	                  |j
                  t        j                         |j                  d       | j	                  |j
                  t        j                         |j                  d       | j	                  |j
                  t        j                         |j                  d       | j	                  |j
                  t        j                         |j                  d       | j	                  |j
                  t        j                         d d d        y # 1 sw Y   y xY w)NSOCK_NONBLOCKr   r  r
   TF)r   r   rA   rT   r   ru  r   setblocking)rZ   rh  r  	sock_typer$   s        r    test_socket_consistent_sock_typez3GeneralModuleTests.test_socket_consistent_sock_types  s   ;v~q9&&6E	]]6>>95QVVV%7%78LLOQVVV%7%78LLOQVVV%7%78MM$QVVV%7%78MM% QVVV%7%78 655s   DE==Fc                 n   t        j                   t         j                  t         j                        }|j                         }t	        t         j
                  j                  j                               dz   }t	        d t         j                  j                  j                         D              dz   }t        j                   ||d|      5 }| j                  |j                  |       | j                  |j                  |       | j                  |j                  ddh       d d d        y # 1 sw Y   y xY w)Nr
   c              3   .   K   | ]  \  }}|d vr|  yw)>   r  rh  Nrd   )r  r  kinds      r   r  zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>  s%      
C
d<< Cs   rn  )r  ru  r  r  r   )r   rT   rA   detachmaxAddressFamily__members__values
SocketKindrP  r   r  ru  r  r  )rZ   rE  fdunknown_familyunknown_typer$   s         r   test_unknown_socket_family_reprz2GeneralModuleTests.test_unknown_socket_family_repr  s     }}V^^V-?-?@[[]V11==DDFG!K 
$//;;AAC
 
 	 ]]%LQXX~6QVV\2MM!''Ar7+  s   AD++D4sendfileztest needs os.sendfile()c                     G d d      }t        j                          5 }t        j                  t        j                  t        j                        }t        j
                  |       | j                  t         j                        5  |j                   ||             d d d        | j                  t              5  |j                   |ddz               d d d        | j                  t              5  |j                   |d              d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   SxY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nc                       e Zd Zd Zd Zy)<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.Filec                     || _         y rI   ru  )rZ   ru  s     r   r   zEGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__  s	    r>   c                     | j                   S rI   r~  rY   s    r   r  zCGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.fileno  s    wwr>   N)ra   rb   rc   r   r  rd   r>   r   Filer|    s    r>   r  r   r4  )r   osr   curdirO_RDONLYr!   r  _GiveupOnSendfile_sendfile_use_sendfiler8  r   )rZ   r  rE  ru  s       r   test__sendfile_use_sendfilez.GeneralModuleTests.test__sendfile_use_sendfile  s    	 	 ]]_BKK0BHHRL""6#;#;<++DH5 =""=1++DDM: 2""9-++DJ7 . _ =<11-- _sT   A'E DE ;D(E 3D4E D%	!E (D1	-E 4D=	9E  E	c                    | j                  |j                  |       | j                  |j                  |       |j                         }t	        j                  |      }| j                  |j                         |j                          | j                  |j                  |       | j                  |j                  |       | j                  |j                         |       y Nr  )r   r  ru  r  r   ru   r!   ro  )rZ   r$   r  styperu  s2s         r   _test_socket_filenoz&GeneralModuleTests._test_socket_fileno  s    6*'XXZ]]"%!	
F+%(b)r>   c                    t        j                   t         j                  t         j                        }| j                  |j                         |j                  t        j                  df       | j                  |t         j                  t         j                         t        t         d      rt        j                   t         j                  t         j                        }| j                  |j                         |j                  t        j                  df       | j                  |t         j                  t         j                         t        j                  rt        j                   t         j                  t         j                        }| j                  |j                         |j                  t        j                  dddf       | j                  |t         j                  t         j                         t        t         d      rt        j                         }| j                  t        j                   |       t        j                   t         j"                  t         j                        }|5  	 |j                  |       | j                  |t         j"                  t         j                         d d d        y y # t$        $ r Y w xY w# 1 sw Y   y xY w)Nr   r(   rJ  )r   rT   rA   ru   r!   rv   r   r   r  r   r(   r  ri  re  rB  r   rC  rJ  r   )rZ   r$   	unix_names      r   test_socket_filenoz%GeneralModuleTests.test_socket_fileno  s   MM&..&*<*<= 	""A&'  FNNF4F4FG6<(fnnf.?.?@AOOAGG$FFM&&*+$$Q8I8IJ%%foov/A/ABAOOAGG$FFM((!Q23$$Q9K9KL69%%==?IOOI,,i8fnnf.@.@AAAFF9% ,,Q-3-?-?A  & '  s0   2K4J>/K>	K
K	K

KKc                     | j                  t              5  t        j                  t        j                  t        j                  d       d d d        y # 1 sw Y   y xY w)Ng     @E@r  r  r   r   rT   rA   rY   s    r    test_socket_fileno_rejects_floatz3GeneralModuleTests.test_socket_fileno_rejects_float  s6    y)MM&..&*<*<TJ *))   5AAc                     | j                  t              5  t        j                  t        j                  t        j                  d       d d d        y # 1 sw Y   y xY w)Nr  r  r  rY   s    r   &test_socket_fileno_rejects_other_typesz9GeneralModuleTests.test_socket_fileno_rejects_other_types  s6    y)MM&..&*<*<UK *))r  c                     | j                  t        d      5  t        j                  t        j                  t        j                  d       d d d        y # 1 sw Y   y xY w)Nnegative file descriptorr3  r  r  r  r   rT   rA   rY   s    r   )test_socket_fileno_rejects_invalid_socketz<GeneralModuleTests.test_socket_fileno_rejects_invalid_socket  s:    ##J0JKMM&..&*<*<RH LKK   5AAzWindows disallows -1 onlyc                     | j                  t        d      5  t        j                  t        j                  t        j                  d       d d d        y # 1 sw Y   y xY w)Nr  ir  r  rY   s    r   #test_socket_fileno_rejects_negativez6GeneralModuleTests.test_socket_fileno_rejects_negative  s:    ##J0JKMM&..&*<*<SI LKKr  c                 d   d}| j                  t              5 }t        j                  t        j                                d d d        | j                  j                  j                  t        j                  |f       | j                  t              5 }t        j                  t        j                  t        j                  t        j                                d d d        | j                  |j                  j                  t        j                  |f       y # 1 sw Y   xY w# 1 sw Y   LxY w)Ni6'  r  )r  r   r   r   make_bad_fdr  r  r#  r  rT   rA   )rZ   WSAENOTSOCKr  s      r   $test_socket_fileno_requires_valid_fdz7GeneralModuleTests.test_socket_fileno_requires_valid_fd  s    w'2MM!6!6!89 (bll((5;;*DEw'2MM"" ,,.0 (
 	bll((5;;*DE (' ('s   )DAD&D#&D/c                 2   t        j                         5 }| j                  t              5  t	        j                  |j                                d d d        | j                  t              5 }t	        j                  t        j                  t        j                  |j                                d d d        | j                  j                  j                  t        j                         d d d        y # 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   y xY wr  )tempfileNamedTemporaryFiler  r   r   r  rT   rA   r   r  r#  r  )rZ   afiler  s      r   %test_socket_fileno_requires_socket_fdz8GeneralModuleTests.test_socket_fileno_requires_socket_fd  s    ((*e""7+U\\^4 , ""7+rNN&& <<>+ ,
 R\\//@ +*++ ,+	 +*s;   D%C5D-AD0<D5C>	:DD
	DDc                     dd l }dd l}|j                  |j                  ddd |      }|j	                  |t
        j                         y )Nr   rq  r   c                 H    | j                         xr | j                  d      S )NAF_isupperrq  Cs    r   rr  z<GeneralModuleTests.test_addressfamily_enum.<locals>.<lambda>	      !))+=!,,u*==r>   source)r  enum_old_convert_IntEnum_test_simple_enumr   rq  )rZ   r  r  CheckedAddressFamilys       r   test_addressfamily_enumz*GeneralModuleTests.test_addressfamily_enum  sE    #11ox=  2  
 	3V5I5IJr>   c                     dd l }dd l}|j                  |j                  ddd |      }|j	                  |t
        j                         y )Nr   rt  r   c                 H    | j                         xr | j                  d      S )NSOCK_r  r  s    r   rr  z9GeneralModuleTests.test_socketkind_enum.<locals>.<lambda>  s    !))+?!,,w*??r>   r  )r  r  r  r  r  r   rt  )rZ   r  r  CheckedSocketKinds       r   test_socketkind_enumz'GeneralModuleTests.test_socketkind_enum  sE     ..lH? / 
 	0&2C2CDr>   c                     dd l }dd l}|j                  |j                  ddd |      }|j	                  |t
        j                         y )Nr   MsgFlagr   c                 H    | j                         xr | j                  d      S )NMSG_r  r  s    r   rr  z6GeneralModuleTests.test_msgflag_enum.<locals>.<lambda>  s    !))+>!,,v*>>r>   r  )r  r  r  IntFlagr  r   r  )rZ   r  r  CheckedMsgFlags       r   test_msgflag_enumz$GeneralModuleTests.test_msgflag_enum  sA    ++i> , 
 	~v~~>r>   c                     dd l }dd l}|j                  |j                  ddd |      }|j	                  |t
        j                         y )Nr   AddressInfor   c                 H    | j                         xr | j                  d      S )NAI_r  r  s    r   rr  z:GeneralModuleTests.test_addressinfo_enum.<locals>.<lambda>$  r  r>   r  )r  r  r  r  r  r   r  )rZ   r  r  CheckedAddressInfos       r   test_addressinfo_enumz(GeneralModuleTests.test_addressinfo_enum   sE    !//mX= 0   	163E3EFr>   )bra   rb   rc   r   
skipUnlessr  r  r  r  r  r  r  r  r  r  r  r  r  skipIfr   is_wasir  rB  rp  r   r  r  r  r  r  r   r   r&  r1  r<  r>  rE  rG  rV  cpython_onlyrb  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  is_resource_enabledr  r  r  r  r!  r%  r+  r-  r7  r;  rC  rG  rI  rL  rQ  rS  r   rX  r[  rb  rd  rf  rk  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  rd   r>   r   r  r  E  s<   X,.CD# E#
+ X,.CD
, E
,3"(6T  XD*<= > X__W__&EF
> G
> X13HIX335RS T J:v&?+" X79Z[X79Z[& \ \&$ X8?A*A* X)9:AC5C5" X)9:ACGCG Xm479B9B: > >.*FXG2 X58:I:I X58: : > X58:<1:<1| X58:M:M0 X58:#:#D(:>A7
=,( XD*<=	: >	: XD*<=X)ABLNSN >SN`.B`Q X444Y?13
I3
I>.-!"G	7 8,	7 P P X335STU UU X335STI UIA X335STX__S\\W,.HIX__S;<X8:\]
O ^ = J U
O X335STX8:O: UO X335STX__S\\W,.HIX__S;<X8:\]W ^ = J UW X335STX#,,'18:U: UU=9 ,2 XZ02LM8 N8"*A@KLI X__RWW_&ABJ CJF
AKE?Gr>   r  z!SocketCan required for this test.c                   $   e Zd Zd Z ej
                   eed      d      d        Zd Z	 ej
                   eed      d      d        Z
d Zd Z ej
                   eed	      d
      d        Z ej
                   eed      d      d        Zy)BasicCANTestc                 d    t         j                   t         j                   t         j                   y rI   )r   AF_CANr   r    rY   s    r   r  z!BasicCANTest.testCrucialConstants,  s    r>   CAN_BCM&socket.CAN_BCM required for this test.c                    t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                    t         j"                   t         j$                   t         j&                   t         j(                   t         j*                   t         j,                   t         j.                   t         j0                   y rI   )r   r  CAN_BCM_TX_SETUPCAN_BCM_TX_DELETECAN_BCM_TX_READCAN_BCM_TX_SENDCAN_BCM_RX_SETUPCAN_BCM_RX_DELETECAN_BCM_RX_READCAN_BCM_TX_STATUSCAN_BCM_TX_EXPIREDCAN_BCM_RX_STATUSCAN_BCM_RX_TIMEOUTCAN_BCM_RX_CHANGEDCAN_BCM_SETTIMERCAN_BCM_STARTTIMERCAN_BCM_TX_COUNTEVTCAN_BCM_TX_ANNOUNCECAN_BCM_TX_CP_CAN_IDCAN_BCM_RX_FILTER_IDCAN_BCM_RX_CHECK_DLCCAN_BCM_RX_NO_AUTOTIMERCAN_BCM_RX_ANNOUNCE_RESUMECAN_BCM_TX_RESET_MULTI_IDXCAN_BCM_RX_RTR_FRAMErY   s    r   testBCMConstantszBasicCANTest.testBCMConstants1  s     	 	      !!  !!!! 	!!""""######&&))))##r>   c                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   r   r   r   r    r  s     r   testCreateSocketzBasicCANTest.testCreateSocketQ  0    ]]6==&//6>>Ja KJJ   AAc                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r   r(   r  r  s     r   testCreateBCMSocketz BasicCANTest.testCreateBCMSocketU  s5     ]]6==&*;*;V^^LPQ MLLr  c                    t        j                   t         j                  t         j                  t         j                        5 }d}|j	                  |       | j                  |j                         |       d d d        y # 1 sw Y   y xY w)N)r  )r   r   r   r    rv   r   r   )rZ   r$   addresss      r   testBindAnyzBasicCANTest.testBindAny[  sS    ]]6==&//6>>JaGFF7OQ]]_g6 KJJs   4A??Bc                     t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        d|j                  d       d d d        y # 1 sw Y   y xY w)Ninterface name too long)   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r   r   r   r    r  r   rv   r  s     r   testTooLongInterfaceNamez%BasicCANTest.testTooLongInterfaceNamea  sI    ]]6==&//6>>Ja""7,E#$66=: KJJs   #A..A7CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c           	         t        j                   t         j                  t         j                  t         j                        5 }dD ]o  }|j	                  t         j
                  t         j                  |       | j                  ||j                  t         j
                  t         j                               q 	 d d d        y # 1 sw Y   y xY w)N)r   r
   )	r   r   r   r    r  SOL_CAN_RAWr  r   r  )rZ   r$   loopbacks      r   testLoopbackzBasicCANTest.testLoopbackg  s     ]]6==&//6>>Ja"V//1H1H%'  LL!3!3V5L5LMO # KJJs   A5CC
CAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c           	      4   d\  }}t        j                  d||      }t        j                  t        j                  t        j                  t        j
                        5 }|j                  t        j                  t        j                  |       | j                  ||j                  t        j                  t        j                  d             |j                  t        j                  t        j                  t        |             d d d        y # 1 sw Y   y xY w)N)   i   z=IIrq   )r   packr   r   r   r    r  r  r  r   r  r  )rZ   can_idcan_mask
can_filterr$   s        r   
testFilterzBasicCANTest.testFilterq  s     ([[9
]]6==&//6>>JaLL++V-B-BJOZLL!3!3V5J5JANPLL++V-B-BIjDYZ	 KJJs   B'DDN)ra   rb   rc   r  r   r  r   r   r  r  r  r  r  r  r  rd   r>   r   r  r  )  s    
 X3AC$C$< X3ACC7: X);<JLOLO X)9:HJ[J[r>   r  c                       e Zd ZddZed        Zed        Zd Zd Zd Z	d Z
d Zd	 Z ej                   eed
      d      d        Z ej                   eed
      d      d        Zy)CANTestc                 2    t         j                  | |       y r   )r   r   r   s     r   r   zCANTest.__init__  r  r>   c                     t        |      }|j                  dd      }t        j                  | j                  |||      S )zBuild a CAN frame.rq       )r  ljustr   r  r{   )clsr  datacan_dlcs       r   build_can_framezCANTest.build_can_frame  s8     d)zz!W%{{3,,fgtDDr>   c                 Z    t        j                  | j                  |      \  }}}|||d| fS )zDissect a CAN frame.N)r   r   r{   )r  framer  r  r  s        r   dissect_can_framezCANTest.dissect_can_frame  s4     !'c.?.? Ghw00r>   c                     | j                   j                  | j                        \  }}| j                  | j                  |       | j                  |d   | j
                         y r   )r$   r  rz   r   cfrw   rZ   r  r  s      r   testSendFramezCANTest.testSendFrame  sH    66??4<<0D"%a$..1r>   c                 |    | j                  dd      | _        | j                  j                  | j                         y )Nr   s   r  r  r   r  rY   s    r   _testSendFramezCANTest._testSendFrame  s+    &&t-DEdggr>   c                     | j                   j                  | j                        \  }}| j                  | j                  |       y rI   )r$   r  rz   r   r  r  s      r   testSendMaxFramezCANTest.testSendMaxFrame  s0    66??4<<0D"%r>   c                 |    | j                  dd      | _        | j                  j                  | j                         y )Nr   s   r  rY   s    r   _testSendMaxFramezCANTest._testSendMaxFrame  s*    &&t[9dggr>   c                    | j                   j                  | j                        \  }}| j                  | j                  |       | j                   j                  | j                        \  }}| j                  | j
                  |       y rI   )r$   r  rz   r   cf1cf2r  s      r   testSendMultiFrameszCANTest.testSendMultiFrames  s^    66??4<<0D2&66??4<<0D2&r>   c                     | j                  dd      | _        | j                  j                  | j                         | j                  dd      | _        | j                  j                  | j                         y )N   s   D3"   s   "3)r  r  r   r  r   rY   s    r   _testSendMultiFrameszCANTest._testSendMultiFrames  sS    ''.ABdhh''o>dhhr>   r  r  c                 &   | j                   j                  | j                        \  }}| j                  | j                  |       | j                  |      \  }}}| j                  | j                  |       | j                  | j                  |       y rI   )r   r  rz   r   r  r  r  r  )rZ   r  r  r  r  r  s         r   _testBCMzCANTest._testBCM  ss     88$$T\\2D"% $ 6 6r :f-D)r>   c                    t        j                   t         j                  t         j                  t         j                        }| j	                  |j
                         |j                  | j                  f       d| _        t        g d      | _
        | j                  | j                  | j                        | _        t         j                  }d}d}dx}x}x}}d}	d}
t        j                  | j                   ||||||||	|

      }|| j                  z   }|j#                  |      }| j%                  |t'        |             y )N#  )         r   i"  r
   )r   r   r(   r  ru   r!   r   rw   r  bytesr  r  r  r  r   r  r~   r  r   r  )rZ   bcmopcoder  r  ival1_seconds
ival1_usecival2_seconds
ival2_usec
bcm_can_idnframesheaderheader_plus_frame
bytes_sents                 r   testBCMzCANTest.testBCM  s    mmFMM6+<+<fnnM		"T^^%&,-	&&t{{DII>''BCCC
C]Z
T11!!
 #TWW,XX/0
S):%;<r>   Nr   )ra   rb   rc   r   classmethodr  r  r  r  r  r  r!  r%  r   r  r   r   r'  r9  rd   r>   r   r  r  }  s    D E E 1 1
2
&'  X3AC*C* X3AC=C=r>   r  z!CAN ISOTP required for this test.c                   v     e Zd Z fdZd Zd Z ej                   ee	d      d      d        Z
d Zd Z xZS )		ISOTPTestc                 2    t        |   |i | d| _        y Nrn   r(  r   rw   r0  s      r   r   zISOTPTest.__init__      $)&) r>   c                     t         j                   t         j                   t         j                   t         j                   y rI   )r   r  r   r)   r(   rY   s    r   r  zISOTPTest.testCrucialConstants  s"    r>   c                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   r  r  s     r   r  zISOTPTest.testCreateSocket  r  r  r)   z(socket.CAN_ISOTP required for this test.c                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r   r(   r)   r  s     r   testCreateISOTPSocketzISOTPTest.testCreateISOTPSocket  7     ]]6==&*;*;V=M=MNRS ONNr  c                 (   t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        d      5  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  )r  r
   r   )r   r   r(   r)   r  r   rv   r  s     r   r  z"ISOTPTest.testTooLongInterfaceName  sc    ]]6==&*;*;V=M=MNRS''1JK)* L ONKK ONs$   BA<+B<B	BBc                    	 t        j                   t         j                  t         j                  t         j                        5 }| j                  ddf}|j                  |       | j                  |j                         |       d d d        y # 1 sw Y   y xY w# t        $ rG}|j                  t        j                  k(  r| j                  d| j                  z         n Y d }~y d }~ww xY w)Nr)  iV  rt   )r   r   r(   r)   rw   rv   r   r   r   r#  ENODEVrx   rZ   r$   r  r   s       r   testBindzISOTPTest.testBind  s    
	v}}f.?.?AQAQRVW~~ue3t  $7 SRR  	ww%,,&E>>* + +	s7   AB ABB BB B 	C)"=C$$C))ra   rb   rc   r   r  r  r   r  r   r   rD  r  rJ  r+  r,  s   @r   r<  r<    sK    ! X5CEE+r>   r<  z!CAN J1939 required for this test.c                        e Zd Z fdZ ej
                   eed      d      d        Z ej
                   eed      d      d        Z	d Z
 xZS )	J1939Testc                 2    t        |   |i | d| _        y r>  r?  r0  s      r   r   zJ1939Test.__init__	  r@  r>   r-   z(socket.CAN_J1939 required for this test.c                    t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                   t         j                    t         j"                   t         j$                   t         j&                   t         j(                   t         j*                   t         j,                   t         j.                   t         j0                   y rI   )r   r-   J1939_MAX_UNICAST_ADDRJ1939_IDLE_ADDRJ1939_NO_ADDRJ1939_NO_NAMEJ1939_PGN_REQUESTJ1939_PGN_ADDRESS_CLAIMEDJ1939_PGN_ADDRESS_COMMANDEDJ1939_PGN_PDU1_MAXJ1939_PGN_MAXJ1939_NO_PGNSO_J1939_FILTERSO_J1939_PROMISCSO_J1939_SEND_PRIOSO_J1939_ERRQUEUESCM_J1939_DEST_ADDRSCM_J1939_DEST_NAMESCM_J1939_PRIOSCM_J1939_ERRQUEUEJ1939_NLA_PADJ1939_NLA_BYTES_ACKEDJ1939_EE_INFO_NONEJ1939_EE_INFO_TX_ABORTJ1939_FILTER_MAXrY   s    r   testJ1939ConstantszJ1939Test.testJ1939Constants
	  s     	%%  ((**!! 	!!  """"!!$$!!%%r>   c                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r   r(   r-   r  s     r   testCreateJ1939SocketzJ1939Test.testCreateJ1939Socket-	  rE  r  c                 .   	 t        j                   t         j                  t         j                  t         j                        5 }| j                  t         j
                  t         j                  t         j                  f}|j                  |       | j                  |j                         |       d d d        y # 1 sw Y   y xY w# t        $ rG}|j                  t        j                  k(  r| j                  d| j                  z         n Y d }~y d }~ww xY wrs   )r   r   r(   r-   rw   rR  rX  rQ  rv   r   r   r   r#  rH  rx   rI  s       r   rJ  zJ1939Test.testBind3	  s    
	v}}f.?.?AQAQRVW~~v';';V=P=PRXRfRfft  $7 SRR  	ww%,,&E>>* + +	s7   AC A,B8/C 8C=C C 	D=DD)ra   rb   rc   r   r   r  r   r   rf  rh  rJ  r+  r,  s   @r   rL  rL  	  sl    ! X5CE E B X5CEEr>   rL  z#RDS sockets required for this test.c                       e Zd Zd Zd Zd Zy)BasicRDSTestc                 D    t         j                   t         j                   y rI   )r   AF_RDSr0   rY   s    r   r  z!BasicRDSTest.testCrucialConstantsD	  s    r>   c                     t        j                   t         j                  t         j                  d      5 }	 d d d        y # 1 sw Y   y xY wr   )r   r0   r1   r  s     r   r  zBasicRDSTest.testCreateSocketH	  s.    ]]6==&*?*?Cq DCCs	   ?Ac                 T   d}t        j                   t         j                  t         j                  d      5 }|j                  t         j                  t         j
                  |       |j                  t         j                  t         j                  |       d d d        y # 1 sw Y   y xY w)Ni @  r   )r   r0   r1   r  r  	SO_RCVBUF	SO_SNDBUF)rZ   rz   r$   s      r   testSocketBufferSizez!BasicRDSTest.testSocketBufferSizeL	  sh    ]]6==&*?*?CqLL**F,<,<gFLL**F,<,<gF DCCs   ABB'N)ra   rb   rc   r  r  rr  rd   r>   r   rk  rk  A	  s    Gr>   rk  c                        e Zd ZddZ fdZd Zd Zd Zd Z e	e
j                  d      d        Z e	e
j                  d	      d
        Zd Zd Zd Zd Z xZS )RDSTestc                 2    t         j                  | |       y r   )r   r   r   s     r   r   zRDSTest.__init__V	  r  r>   c                 T    t         |           t        j                         | _        y rI   )r(  r[   r   r   evtr)  s    r   r[   zRDSTest.setUpY	  s    ??$r>   c                     | j                   j                  | j                        \  }}| j                  | j                  |       | j                  | j
                  |       y rI   )rU   r  rz   r   r  r   rZ   r  r  s      r   testSendAndRecvzRDSTest.testSendAndRecv]	  sF    YY''5
dD)-r>   c                     d| _         | j                  j                  | j                   dt        | j                  f       y Nr  r   r  r   r  r   rW   rY   s    r   _testSendAndRecvzRDSTest._testSendAndRecvb	  *    			1tTYY&78r>   c                 2   | j                   j                  | j                  t        j                        \  }}| j                  | j                  |       | j                   j                  | j                        \  }}| j                  | j                  |       y rI   )rU   r  rz   r   MSG_PEEKr   r  ry  s      r   testPeekzRDSTest.testPeekf	  sh    YY''fooF
dD)YY''5
dD)r>   c                     d| _         | j                  j                  | j                   dt        | j                  f       y r|  r}  rY   s    r   	_testPeekzRDSTest._testPeekl	  r  r>   recvmsgc                     | j                   j                  | j                        \  }}}}| j                  | j                  |       y rI   )rU   r  rz   r   r  )rZ   r  ancdata	msg_flagsr  s        r   testSendAndRecvMsgzRDSTest.testSendAndRecvMsgp	  s7    )-):):4<<)H&gy$D)r>   sendmsgc                     d| _         | j                  j                  | j                   gddt        | j                  f       y )Ns<   hello hello hello hello hello hello hello hello hello hello rd   r   )r  r   r  r   rW   rY   s    r   _testSendAndRecvMsgzRDSTest._testSendAndRecvMsgu	  s0    "	$))b!dDII->?r>   c                    | j                   j                  | j                        \  }}| j                  | j                  |       | j                   j                  | j                        \  }}| j                  | j
                  |       y rI   )rU   r  rz   r   data1data2ry  s      r   testSendAndRecvMultizRDSTest.testSendAndRecvMultiz	  sb    YY''5
dT*YY''5
dT*r>   c                     d| _         | j                  j                  | j                   dt        | j                  f       d| _        | j                  j                  | j
                  dt        | j                  f       y )Ns   baconr   s   egg)r  r   r  r   rW   r  rY   s    r   _testSendAndRecvMultizRDSTest._testSendAndRecvMulti	  sR    


Adii'89


Adii'89r>   c                    t        j                   | j                  gg g d      \  }}}| j                  | j                  |       | j                  j                  | j                        \  }}| j                  | j                  |       y )Ng      @)selectrU   r  r  rz   r   r  )rZ   r   r0  rp   r  r  s         r   
testSelectzRDSTest.testSelect	  sd    --RS91adii#YY''5
dD)r>   c                     d| _         | j                  j                  | j                   dt        | j                  f       y )Ns   selectr   r}  rY   s    r   _testSelectzRDSTest._testSelect	  s*    			1tTYY&78r>   r   )ra   rb   rc   r   r[   rz  r~  r  r  r  r   r  r  r  r  r  r  r+  r,  s   @r   rt  rt  S	  sv    D%.
9*9 &--+* ,* &--+@ ,@+:*9r>   rt  z'QIPCRTR sockets required for this test.c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)BasicQIPCRTRTestc                 $    t         j                   y rI   )r   r9   rY   s    r   r  z%BasicQIPCRTRTest.testCrucialConstants	  s    r>   c                     t        j                   t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r9   r(   r  s     r   r  z!BasicQIPCRTRTest.testCreateSocket	  s.    ]]6,,f.?.?@A A@@	   >Ac                     t        j                   t         j                  t         j                        5 }| j                  |j	                         d   d       d d d        y # 1 sw Y   y xY wNr
   r   )r   r9   r(   r   r   r  s     r   testUnboundzBasicQIPCRTRTest.testUnbound	  sF    ]]6,,f.?.?@AQ]]_Q/3 A@@s   $A  A)c                 (   t        j                   t         j                  t         j                        5 }t        j                  ||j                         d          | j                  |j                         d   d       d d d        y # 1 sw Y   y xY w)Nr   rR  r
   )r   r9   r(   r   rV   r   assertNotEqualr  s     r   testBindSockzBasicQIPCRTRTest.testBindSock	  sa    ]]6,,f.?.?@A##AAMMOA,>? 2A6 A@@s   ABBc                     t        j                   t         j                  t         j                        5 }| j                  t        t
        j                  |d       d d d        y # 1 sw Y   y xY w)NrX  rR  )r   r9   r(   r  r   r   rV   r  s     r   testInvalidBindSockz$BasicQIPCRTRTest.testInvalidBindSock	  sH    ]]6,,f.?.?@Ag}'>'>K A@@s   (A$$A-c                     t        j                   t         j                  t         j                        5 }|j                  d       | j	                  |j                         d   d       d d d        y # 1 sw Y   y xY w)N){   r  r
   r   )r   r9   r(   r   r  r   r  s     r   testAutoBindSockz!BasicQIPCRTRTest.testAutoBindSock	  sR    ]]6,,f.?.?@AIIj! 2A6 A@@s   5A11A:N)	ra   rb   rc   r  r  r  r  r  r  rd   r>   r   r  r  	  s!    47
L7r>   r  c                   $    e Zd Zd Zd Zd Zd Zy)BasicVSOCKTestc                 $    t         j                   y rI   )r   r   rY   s    r   r  z#BasicVSOCKTest.testCrucialConstants	  s	    r>   c                    t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   y rI   )	r   SO_VM_SOCKETS_BUFFER_SIZESO_VM_SOCKETS_BUFFER_MIN_SIZESO_VM_SOCKETS_BUFFER_MAX_SIZEr   VMADDR_PORT_ANYr   VM_SOCKETS_INVALID_VERSIONr   rY   s    r   testVSOCKConstantsz!BasicVSOCKTest.testVSOCKConstants	  sJ    ((,,,,))--r>   c                     t        j                   t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r   rA   r  s     r   r  zBasicVSOCKTest.testCreateSocket	  s,    ]]6??F,>,>?1 @??r  c                 X   t        j                   t         j                  t         j                        5 }|j                  t         j                  t         j                        }|j                  t         j                  t         j
                        }|j                  t         j                  t         j                        }|j                  t         j                  t         j                  |dz         |j                  t         j                  t         j
                  |dz         |j                  t         j                  t         j                  |dz         | j                  |dz  |j                  t         j                  t         j                               | j                  |dz  |j                  t         j                  t         j
                               | j                  |dz  |j                  t         j                  t         j                               d d d        y # 1 sw Y   y xY wNr   )	r   r   rA   r  r  r  r  r  r   )rZ   r$   orig_maxrD  orig_mins        r   rr  z#BasicVSOCKTest.testSocketBufferSize	  s   ]]6??F,>,>?1||FOO$*$H$HJH<< & @ @BD||FOO$*$H$HJH LL==x!|MLL994!8ELL==x!|M X\\\&//#AACD TAX\\&//#==?@ X\\\&//#AACD+ @??s   G$H  H)N)ra   rb   rc   r  r  r  rr  rd   r>   r   r  r  	  s    
.Dr>   r  z)Bluetooth sockets required for this test.c                   6   e Zd Zd Zd Z ej                  ej                  dk(  d      d        Z	 ej                  ej                  dk(  d      d        Z
 ej                  ej                  dk(  xs ej                  j                  d      d	      d
        Zy)BasicBluetoothTestc                 l   t         j                   t         j                   t         j                   t         j                   t
        j                  dk7  rat         j                   t         j                   t         j                   t
        j                  j                  d      st         j                   y y y )Nr  rd  )r   
BDADDR_ANYBDADDR_LOCALr@   rB   rB  rp  BTPROTO_HCISOL_HCIBTPROTO_L2CAPrq  BTPROTO_SCOrY   s    r   testBluetoothConstantsz)BasicBluetoothTest.testBluetoothConstants	  sp    <<7"NN  <<**95"" 6 #r>   c                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r@   rA   rB   r  s     r   testCreateRfcommSocketz)BasicBluetoothTest.testCreateRfcommSocket	  s7    ]]6..0B0BFDYDYZ^_ [ZZr  r  z&windows does not support L2CAP socketsc                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r@   r1   r  r  s     r   testCreateL2capSocketz(BasicBluetoothTest.testCreateL2capSocket	  s7    ]]6..0E0EvG[G[\`a ]\\r  z$windows does not support HCI socketsc                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r@   r   r  r  s     r   testCreateHciSocketz&BasicBluetoothTest.testCreateHciSocket	  s5    ]]6..ASASTXY UTTr  rd  z.windows and freebsd do not support SCO socketsc                     t        j                   t         j                  t         j                  t         j                        5 }	 d d d        y # 1 sw Y   y xY wrI   )r   r@   r1   r  r  s     r   testCreateScoSocketz&BasicBluetoothTest.testCreateScoSocket 
  s9     ]]6..0E0EvGYGYZ^_ [ZZr  N)ra   rb   rc   r  r  r   r  rB  rp  r  r  rq  r  rd   r>   r   r  r  	  s    # X__S\\W,.VW X X__S\\W,.TU V X__S\\W,R0G0G	0REGGr>   r  z'Hyper-V sockets required for this test.c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	BasicHyperVTestc                 D   t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   t         j                   t         j                   y rI   )r   HVSOCKET_CONNECT_TIMEOUTHVSOCKET_CONNECT_TIMEOUT_MAXHVSOCKET_CONNECTED_SUSPENDHVSOCKET_ADDRESS_FLAG_PASSTHRUHV_GUID_ZEROHV_GUID_WILDCARDHV_GUID_BROADCASTHV_GUID_CHILDRENHV_GUID_LOOPBACKHV_GUID_PARENTrY   s    r   testHyperVConstantsz#BasicHyperVTest.testHyperVConstants
  s\    ''++))--  r>   c                     d}| j                  t        |      5  t        j                  t        j                  t        j                         d d d        y # 1 sw Y   y xY w)Nz\[WinError 10041\])r  r   r   rE   rA   )rZ   r  s     r   -testCreateHyperVSocketWithUnknownProtoFailurez=BasicHyperVTest.testCreateHyperVSocketWithUnknownProtoFailure
  s=    (##GX6MM&**F,>,>? 766s   3AAc                 n   d}t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        t        j                  |            5  |j                  t         j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz3connect(): AF_HYPERV address must be tuple, not str
r   rE   rA   rF   r  r   reescaper   r  rZ   r  r$   s      r   )testCreateHyperVSocketAddrNotTupleFailurez9BasicHyperVTest.testCreateHyperVSocketAddrNotTupleFailure
  sw    H]]6++V-?-?AWAWX\]''	299X3FG		&--. H YXGG YXs$   *B+. BB+B(	$B++B4c                 p   d}t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        t        j                  |            5  |j                  t         j                  f       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N9AF_HYPERV address must be a str tuple (vm_id, service_id)r  r  s      r   0testCreateHyperVSocketAddrNotTupleOf2StrsFailurez@BasicHyperVTest.testCreateHyperVSocketAddrNotTupleOf2StrsFailure"
  sz    N]]6++V-?-?AWAWX\]''	299X3FG		6..01 H YXGG YXs$   *B,.!B B, B)	%B,,B5c                 R   d}t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        t        j                  |            5  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  )r
   r   )	r   rE   rA   rF   r  r   r  r  r   r  s      r   /testCreateHyperVSocketAddrNotTupleOfStrsFailurez?BasicHyperVTest.testCreateHyperVSocketAddrNotTupleOfStrsFailure(
  sq    N]]6++V-?-?AWAWX\]''	299X3FG		&! H YXGG YXs$   *B.B BB	BB&c                 r   d}t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        t        j                  |            5  |j                  dt         j                  f       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz=connect(): AF_HYPERV address vm_id is not a valid UUID string00
r   rE   rA   rF   r  r  r  r  r   r  r  s      r   1testCreateHyperVSocketAddrVmIdNotValidUUIDFailurezABasicHyperVTest.testCreateHyperVSocketAddrVmIdNotValidUUIDFailure.
  s|    R]]6++V-?-?AWAWX\]''
BIIh4GH		4!4!456 I YXHH YX$   *B-."B!B-!B*	&B--B6c                 r   d}t        j                   t         j                  t         j                  t         j                        5 }| j	                  t
        t        j                  |            5  |j                  t         j                  df       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NzBconnect(): AF_HYPERV address service_id is not a valid UUID stringr  r  r  s      r   6testCreateHyperVSocketAddrServiceIdNotValidUUIDFailurezFBasicHyperVTest.testCreateHyperVSocketAddrServiceIdNotValidUUIDFailure4
  s|    W]]6++V-?-?AWAWX\]''
BIIh4GH		6..56 I YXHH YXr  N)
ra   rb   rc   r  r  r  r  r  r  r  rd   r>   r   r  r  
  s&    
@
/2"77r>   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z ej*                  e      Zej*                  d        Zd Zd Zy)BasicTCPTestc                 2    t         j                  | |       y r   r  r   r   s     r   r   zBasicTCPTest.__init__=
      $$Tj$Ar>   c                 f    | j                   j                  d      }| j                  |t               y r   )r
  r   r   r   r  s     r   testRecvzBasicTCPTest.testRecv@
  s&    mm  &c"r>   c                 B    | j                   j                  t               y rI   r  r  r   rY   s    r   	_testRecvzBasicTCPTest._testRecvE
      C r>   c                     | j                   j                  t        t              dz
        }| j                   j                  d      }||z   }| j	                  |t               y N   r   )r
  r   r  r   r   )rZ   seg1seg2r   s       r   testOverFlowRecvzBasicTCPTest.testOverFlowRecvH
  sK    }}!!#c(Q,/}}!!$'Tkc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testOverFlowRecvzBasicTCPTest._testOverFlowRecvO
  r  r>   c                 l    | j                   j                  d      \  }}| j                  |t               y r   )r
  r  r   r   rZ   r   r  s      r   testRecvFromzBasicTCPTest.testRecvFromR
  s*    MM**40	Tc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testRecvFromzBasicTCPTest._testRecvFromW
  r  r>   c                     | j                   j                  t        t              dz
        \  }}| j                   j                  d      \  }}||z   }| j	                  |t               y r  )r
  r  r  r   r   )rZ   r  r  r  r   s        r   testOverFlowRecvFromz!BasicTCPTest.testOverFlowRecvFromZ
  sS    ]]++CHQJ7
d]]++D1
dTkc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testOverFlowRecvFromz"BasicTCPTest._testOverFlowRecvFroma
  r  r>   c                 v    d}	 | j                   j                  d      }|sn||z  }$| j                  |d       y )Nr>   r      ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r
  r   r   )rZ   r   reads      r   testSendAllzBasicTCPTest.testSendAlld
  sD    ==%%d+D4KC	 
 	k*r>   c                 >    d}| j                   j                  |       y )Nr  )r  r  )rZ   	big_chunks     r   _testSendAllzBasicTCPTest._testSendAlln
  s    	y)r>   c                 b   | j                   j                         }t        j                  |t        j                  t        j
                        }| j                  |j                         | j                  |t        j                         |j                  d      }| j                  |t               y r   )r
  r  r   fromfdrT   rA   ru   r!   r  r   r   r   )rZ   ru  rE  r   s       r   
testFromFdzBasicTCPTest.testFromFdr
  sq    ]]!!#}}R1C1CD

#dFMM2iioc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testFromFdzBasicTCPTest._testFromFd{
  r  r>   c                     | j                   j                         }| j                  |j                         |j	                  d      }| j                  |t               y r   )r
  dupru   r!   r   r   r   )rZ   rE  r   s      r   testDupzBasicTCPTest.testDup~
  sA    }}  "

#iioc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testDupzBasicTCPTest._testDup
  r  r>   c                     | j                   j                  d      }| j                  |t               | j                  j                          y r   )r
  r   r   r   r   r   r  s     r   testShutdownzBasicTCPTest.testShutdown
  s6    mm  &c" 			r>   c                 x    | j                   j                  t               | j                   j                  d       y r  )r  r  r   r  rY   s    r   _testShutdownzBasicTCPTest._testShutdown
  s&    C "r>   c                 f   dd l }| j                  j                  t               | j	                  t
        | j                  j                  |j                  dz          | j	                  t
        | j                  j                  d|j                  dz   z          | j                  j                  d       y )Nr   r
   r   )	rZ  r  r  r   r  r8  r  r\  UINT_MAXrZ   rZ  s     r   _testShutdown_overflowz#BasicTCPTest._testShutdown_overflow
  s    C -)@)@#++a/	1-)@)@y11A56	8"r>   c                 P   | j                   j                         }| j                   j                         }| j                  ||       | j	                  | j                   j
                         | j                  t        | j                   j                  d       | j                   j                          t        j                  t        j                  t        j                  |      }| j                  |j                         |j                  d      }| j                  |t               y )Nr   r  )r
  r  ro  r   r  _closedr  r   r   r!   r   rT   rA   ru   r   )rZ   r  r   rE  r   s        r   
testDetachzBasicTCPTest.testDetach
  s    %%'MM  "F#--.'4==#5#5t< }}V^^V-?-?J

#iioc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testDetachzBasicTCPTest._testDetach
  r  r>   Nr   )ra   rb   rc   r   r  r  r  r  r   r  r  r  r
  r  r  r  r  r  r  r  r   r  testShutdown_overflowr  r"  r$  rd   r>   r   r  r  ;
  s    B#
!#!#
!#!+*#!#!# 1G00># ## !r>   r  c                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
BasicUDPTestc                 2    t         j                  | |       y r   )r   r   r   s     r   r   zBasicUDPTest.__init__
  r  r>   c                     | j                   j                  t        t                    }| j	                  |t               y rI   rU   r   r  r   r   r  s     r   testSendtoAndRecvzBasicUDPTest.testSendtoAndRecv
  (    iinnSX&c"r>   c                 f    | j                   j                  t        dt        | j                  f       y r   r   r  r   r   rW   rY   s    r   _testSendtoAndRecvzBasicUDPTest._testSendtoAndRecv
      Qtyy 12r>   c                     | j                   j                  t        t                    \  }}| j	                  |t               y rI   rU   r  r  r   r   r  s      r   r   zBasicUDPTest.testRecvFrom
  .    II&&s3x0	Tc"r>   c                 f    | j                   j                  t        dt        | j                  f       y r   r.  rY   s    r   r  zBasicUDPTest._testRecvFrom
  r0  r>   c                 Z    | j                  t        | j                  j                  d       y Nr3  r  r  rU   r  rY   s    r   testRecvFromNegativez!BasicUDPTest.testRecvFromNegative
      *dii&8&8"=r>   c                 f    | j                   j                  t        dt        | j                  f       y r   r.  rY   s    r   _testRecvFromNegativez"BasicUDPTest._testRecvFromNegative
  r0  r>   Nr   
ra   rb   rc   r   r+  r/  r   r  r8  r;  rd   r>   r   r'  r'  
  s&    D#
3#
3>3r>   r'  c                   8    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	y)
BasicUDPLITETestc                 2    t         j                  | |       y r   )r   r   r   s     r   r   zBasicUDPLITETest.__init__
  s    !**4J*Gr>   c                     | j                   j                  t        t                    }| j	                  |t               y rI   r*  r  s     r   r+  z"BasicUDPLITETest.testSendtoAndRecv
  r,  r>   c                 f    | j                   j                  t        dt        | j                  f       y r   r.  rY   s    r   r/  z#BasicUDPLITETest._testSendtoAndRecv
  r0  r>   c                     | j                   j                  t        t                    \  }}| j	                  |t               y rI   r2  r  s      r   r   zBasicUDPLITETest.testRecvFrom
  r3  r>   c                 f    | j                   j                  t        dt        | j                  f       y r   r.  rY   s    r   r  zBasicUDPLITETest._testRecvFrom
  r0  r>   c                 Z    | j                  t        | j                  j                  d       y r6  r7  rY   s    r   r8  z%BasicUDPLITETest.testRecvFromNegative
  r9  r>   c                 f    | j                   j                  t        dt        | j                  f       y r   r.  rY   s    r   r;  z&BasicUDPLITETest._testRecvFromNegative
  r0  r>   Nr   r<  rd   r>   r   r>  r>  
  s&    H#
3#
3>3r>   r>  c                        e Zd Zej                  Z fdZd ZdZd Z	d Z
d Zd ZdZd	D ]  Ze eeed      z  Z dZdZdZdd
Z xZS )SendrecvmsgBasec                 T    t        j                         | _        t        |           y rI   )r   r   
misc_eventr(  r[   r)  s    r   r[   zSendrecvmsgBase.setUp  s    #//+r>   c                 8    | j                   j                  |      S rI   )cli_sockr  r  s     r   sendToServerzSendrecvmsgBase.sendToServer  s    }}!!#&&r>   rd   c                 f     | j                   j                  || j                  t        |      d  z    S rI   )rK  r  sendmsg_to_server_defaultsr  rZ   r1  s     r   sendmsgToServerzSendrecvmsgBase.sendmsgToServer  s8    
 %t}}$$T44SYZ@@C 	Cr>   c                 N     |j                   |g| }| j                  |       |S rI   )r  registerRecvmsgResult)rZ   rE  rz   r1  results        r   	doRecvmsgzSendrecvmsgBase.doRecvmsg'  s,     g--""6*r>   c                      y rI   rd   rZ   rS  s     r   rR  z%SendrecvmsgBase.registerRecvmsgResult1  s     	r>   c                 (    | j                  ||       y rI   r   rZ   addr1addr2s      r   checkRecvmsgAddressz#SendrecvmsgBase.checkRecvmsgAddress7  s     	&r>   r   )
MSG_CTRUNCMSG_OOBc                 n   | j                   }| j                  }|r|| j                  z  }|| j                  z  }n ||| j                  z  }|| j                  z  }|| z  }|| z  }||z  }||z  }||z  | z  }|rt	        dj                  |            ||z  | z  }	| j                  ||	z  ||	z         y )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   )
rZ   r  eorcheckset
checkunsetignore
defaultsetdefaultunsetinbothrT  s
             r   
checkFlagszSendrecvmsgBase.checkFlagsL  s    8 ..
22$666JD<<<L_$:::JD888L 	zk!
	! 	Jl"
J&&0 %%+VF^5 5 :%&0x$7r>   )Nr   r   r   )ra   rb   rc   r   r   fail_timeoutr[   rL  rN  rP  rT  rR  r\  ra  r  r   r   r`  rb  rc  rl  r+  r,  s   @r   rG  rG    sz    
 ++L' "$C' )'&$":: *    #$48r>   rG  c                       e Zd Zd Zy)RecvmsgIntoMixinc                     t        |      } |j                  |gg| }| j                  |       | j                  |d   d       | j	                  |d   |       t        |d |d          f|dd  z   S r	  )r  recvmsg_intorR  assertGreaterEqualassertLessEqualr-  )rZ   rE  rz   r1  bufrS  s         r   rT  zRecvmsgIntoMixin.doRecvmsg  s~     """C5040""6*q	1-VAY0c*6!9o&(6!":55r>   N)ra   rb   rc   rT  rd   r>   r   ro  ro    s    6r>   ro  c                   (     e Zd Ze fd       Z xZS )SendrecvmsgDgramFlagsBasec                 :    t         |   t        j                  z  S rI   )r(  rc  r   	MSG_TRUNCr)  s    r   rc  z5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator  s    w2V5E5EEEr>   )ra   rb   rc   propertyrc  r+  r,  s   @r   rv  rv    s     F Fr>   rv  c                   (     e Zd Ze fd       Z xZS )SendrecvmsgSCTPFlagsBasec                 :    t         |   t        j                  z  S rI   )r(  rb  r   MSG_EORr)  s    r   rb  z0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator  s    w.??r>   )ra   rb   rc   ry  rb  r+  r,  s   @r   r{  r{    s     @ @r>   r{  c                   B    e Zd Zed        Zed        Zed        Zd Zy)SendrecvmsgConnectionlessBasec                     | j                   S rI   )rU   rY   s    r   	serv_sockz'SendrecvmsgConnectionlessBase.serv_sock  s    yyr>   c                     | j                   S rI   )r   rY   s    r   rK  z&SendrecvmsgConnectionlessBase.cli_sock  s    xxr>   c                 "    g g d| j                   fS r   )r$  rY   s    r   rN  z8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaults  s    B4>>**r>   c                 N    | j                   j                  || j                        S rI   )rK  r  r$  r  s     r   rL  z*SendrecvmsgConnectionlessBase.sendToServer  s    }}##C88r>   N)ra   rb   rc   ry  r  rK  rN  rL  rd   r>   r   r  r    sC    
     + +9r>   r  c                   2    e Zd Zed        Zed        Zd Zy)SendrecvmsgConnectedBasec                     | j                   S rI   )r
  rY   s    r   r  z"SendrecvmsgConnectedBase.serv_sock  s    }}r>   c                     | j                   S rI   )r  rY   s    r   rK  z!SendrecvmsgConnectedBase.cli_sock  s    ~~r>   c                      y rI   rd   rY  s      r   r\  z,SendrecvmsgConnectedBase.checkRecvmsgAddress       	r>   N)ra   rb   rc   ry  r  rK  r\  rd   r>   r   r  r    s/        r>   r  c                        e Zd Z fdZ xZS )SendrecvmsgServerTimeoutBasec                 l    t         |           | j                  j                  | j                         y rI   )r(  r[   r  r   rm  r)  s    r   r[   z"SendrecvmsgServerTimeoutBase.setUp  s$    !!$"3"34r>   )ra   rb   rc   r[   r+  r,  s   @r   r  r    s    5 5r>   r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z eed      d        Zej(                  d        Zd Zd Zd Zd Zy)SendmsgTestsc                 |    | j                  | j                  j                  t        t                    t               y rI   r   r  r   r  r   rY   s    r   testSendmsgzSendmsgTests.testSendmsg  %    ,,SX6<r>   c                 j    | j                  | j                  t        g      t        t                     y rI   r   rP  r   r  rY   s    r   _testSendmsgzSendmsgTests._testSendmsg  s#    --se4c#h?r>   c                 |    | j                  | j                  j                  t        t                    t               y rI   r  rY   s    r   testSendmsgDataGeneratorz%SendmsgTests.testSendmsgDataGenerator  r  r>   c                 x    | j                  | j                  d t        fD              t        t                     y )Nc              3       K   | ]  }|  y wrI   rd   r  s     r   r  z9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>  s     .@%Qq%r  r  rY   s    r   _testSendmsgDataGeneratorz&SendmsgTests._testSendmsgDataGenerator  s,    --.@3%.@AS	#r>   c                 |    | j                  | j                  j                  t        t                    t               y rI   r  rY   s    r   testSendmsgAncillaryGeneratorz*SendmsgTests.testSendmsgAncillaryGenerator  r  r>   c                 z    | j                  | j                  t        gd dD              t        t                     y )Nc              3       K   | ]  }|  y wrI   rd   r  s     r   r  z>SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>  s     _Aar  rd   r  rY   s    r   _testSendmsgAncillaryGeneratorz+SendmsgTests._testSendmsgAncillaryGenerator  s,    --se__ES	#r>   c                 |    | j                  | j                  j                  t        t                    t               y rI   r  rY   s    r   testSendmsgArrayzSendmsgTests.testSendmsgArray  r  r>   c                     | j                  | j                  t        j                  dt              g      t	        t                     y )NB)r   rP  arrayr   r  rY   s    r   _testSendmsgArrayzSendmsgTests._testSendmsgArray  s2    --u{{3/D.EFS	#r>   c                 |    | j                  | j                  j                  t        t                    t               y rI   r  rY   s    r   testSendmsgGatherzSendmsgTests.testSendmsgGather  r  r>   c                     | j                  | j                  t        d d t        dd  g      t        t                     y Nr  r  rY   s    r   _testSendmsgGatherzSendmsgTests._testSendmsgGather  s2    --s2AwAB.@A3s8Lr>   c                 Z    | j                  | j                  j                  d      d       y Nr4     doner   r  r   rY   s    r   testSendmsgBadArgszSendmsgTests.testSendmsgBadArgs  !    ,,T2G<r>   c           	         | j                  t        | j                  j                         | j                  t        | j                  d       | j                  t        | j                  t                      | j                  t        | j                  t               g       | j                  t        | j                  t        t               g       | j                  t        | j                  t        gt                      | j                  t        | j                  t        gg t                      | j                  t        | j                  t        gg dt                      | j                  d       y )Ns   not in an iterabler   r  )r  r   rK  r  rP  objectr   rL  rY   s    r   _testSendmsgBadArgsz SendmsgTests._testSendmsgBadArgs  s   )T]]%:%:;)T%9%9/	1)T%9%9 (	$)T%9%9!8*	&)T%9%9/	+)T%9%9%	+)T%9%9%VX	/)T%9%9%Q	2'"r>   c                 Z    | j                  | j                  j                  d      d       y r  r  rY   s    r   testSendmsgBadCmsgzSendmsgTests.testSendmsgBadCmsg  r  r>   c           	      X   | j                  t        | j                  t        gt	               g       | j                  t        | j                  t        gt	               ddfg       | j                  t        | j                  t        gdt	               dfg       | j                  t        | j                  t        gddt	               fg       | j                  t        | j                  t        gdg       | j                  t        | j                  t        gdg       | j                  d       y )Nr      data)r   r   )r   r   r  rZ  r  r  r   rP  r   r  rL  rY   s    r   _testSendmsgBadCmsgz SendmsgTests._testSendmsgBadCmsg  s    )T%9%9%&(	-)T%9%9%68Q"8!9	;)T%9%9%1fh"8!9	;)T%9%9%1a"2!3	5)T%9%9%&	+)T%9%9%"5!6	8'"r>   
CMSG_SPACEc                 Z    | j                  | j                  j                  d      d       y r  r  rY   s    r   testSendmsgBadMultiCmsgz$SendmsgTests.testSendmsgBadMultiCmsg#  s#     	,,T2G<r>   c                     | j                  t        | j                  t        gg d       | j                  t        | j                  t        gdt	               g       | j                  d       y )Nr   r   r>   r  r  rY   s    r   _testSendmsgBadMultiCmsgz%SendmsgTests._testSendmsgBadMultiCmsg)  sU    )T%9%9%	.)T%9%9%+vx!8	:'"r>   c                 Z    | j                  | j                  j                  d      d       y r  r  rY   s    r   testSendmsgExcessCmsgRejectz(SendmsgTests.testSendmsgExcessCmsgReject1  s#     	,,T2G<r>   c                    t        t        d      s\| j                  t              5 }| j	                  t
        gddg       d d d        | j                  j                  j                         | j                  d       y # 1 sw Y   @xY w)Nr  r  r  )
r   r   r  r   rP  r   assertIsNoner  r#  rL  rZ   r  s     r   _testSendmsgExcessCmsgRejectz)SendmsgTests._testSendmsgExcessCmsgReject6  sg    v|,""7+r$$cU[+,FG ,bll001'" ,+s   A??Bc                      y rI   rd   rY   s    r   testSendmsgAfterClosez"SendmsgTests.testSendmsgAfterClose>  s    r>   c                     | j                   j                          | j                  t        | j                  t
        g       y rI   )rK  r!   r  r   rP  r   rY   s    r   _testSendmsgAfterClosez#SendmsgTests._testSendmsgAfterCloseB  s,    '4#7#7#?r>   N)ra   rb   rc   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  rv  r  r  r  r  r  rd   r>   r   r  r    s    =@=#=#=#=M=#$=# &,'= (=
 ((# )#=
#@r>   r  c                   ~    e Zd Zd Zd Zd Zd Z eej                  dvd      d        Z
e
j                  d        Zy	)
SendmsgStreamTestsc                 |    | j                  | j                  j                  t        t                    t               y rI   r  rY   s    r   testSendmsgExplicitNoneAddrz.SendmsgStreamTests.testSendmsgExplicitNoneAddrK  r  r>   c                 p    | j                  | j                  t        gg dd       t        t                     y r   r  rY   s    r   _testSendmsgExplicitNoneAddrz/SendmsgStreamTests._testSendmsgExplicitNoneAddrO  s)    --seRDA3s8Lr>   c                     | j                  | j                  j                  d      d       | j                  | j                  j                  | j                               y Nr      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarL   r   r  r   r  rI  r   rm  rY   s    r   testSendmsgTimeoutz%SendmsgStreamTests.testSendmsgTimeoutR  sE    ,,S18<,,T5F5F,GHr>   c                 T   	 | j                   j                  d       	 	 | j                  dg       # t        $ r Y n3t
        $ r(}|j                  t        j                  k7  r Y d }~nd }~ww xY w| j                  j                          y # | j                  j                          w xY w)NQ?r  )
rK  r   rP  r  r  r   r#  ENOMEMrI  r   rZ   r   s     r   _testSendmsgTimeoutz&SendmsgStreamTests._testSendmsgTimeoutW  s    	"MM$$T*5(((4   99, - OO!DOO!s6   B 2 	A-B A-A(#B (A--B B'>   rg  z<MSG_DONTWAIT not known to work on this platform when sendingc                     | j                  | j                  j                  d      d       | j                  | j                  j                  | j                               y r  r  rY   s    r   testSendmsgDontWaitz&SendmsgStreamTests.testSendmsgDontWaitn  sG    
 	,,S18<,,T5F5F,GHr>   c                    	 | j                  t              5 }	 | j                  dgg t        j                         ## 1 sw Y   nxY w| j                  j                  j                  t        j                  t        j                  t        j                  f       | j                  j                          y # | j                  j                          w xY wNr  )r  r   rP  r   MSG_DONTWAITr  r  r#  EAGAINEWOULDBLOCKr  rI  r   r  s     r   _testSendmsgDontWaitz'SendmsgStreamTests._testSendmsgDontWaitv  s    		"""7+r(((R9L9LM  ,+
 MM",,,, <<):):ELLIK OO!DOO!s   B6 %<AAB6 6CN)ra   rb   rc   r  r  r  r  r  rB  rp  r  rv  r  rd   r>   r   r  r  G  s]    =MI
". cll)3 !I!I
 $$
" %
"r>   r  c                       e Zd Zd Zd Zy)SendmsgConnectionlessTestsc                      y rI   rd   rY   s    r   testSendmsgNoDestAddrz0SendmsgConnectionlessTests.testSendmsgNoDestAddr  r  r>   c                     | j                  t        | j                  j                  t        g       | j                  t        | j                  j                  t        gg dd        y r   )r  r   rK  r  r   rY   s    r   _testSendmsgNoDestAddrz1SendmsgConnectionlessTests._testSendmsgNoDestAddr  sJ    '4==#8#8%	!'4==#8#8%Q	.r>   N)ra   rb   rc   r  r  rd   r>   r   r  r    s    

.r>   r  c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z eed      d        Zej,                  d        Z eej(                  d      d        Zej,                  d        Zy)RecvmsgGenericTestsc                    | j                  | j                  t        t                    \  }}}}| j	                  |t               | j                  || j                         | j	                  |g        | j                  |d       y NTre  rT  r  r  r   r   r\  r   rl  rZ   r   r  r  r  s        r   testRecvmsgzRecvmsgGenericTests.testRecvmsg  sg    $(NN4>>3s8$L!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   rL  r   rY   s    r   _testRecvmsgz RecvmsgGenericTests._testRecvmsg      #r>   c                    | j                  | j                  t        t              dd      \  }}}}| j	                  |t               | j                  || j                         | j	                  |g        | j                  |d       y )Nr   Tr  r  r  s        r   testRecvmsgExplicitDefaultsz/RecvmsgGenericTests.testRecvmsgExplicitDefaults  so    $(NN4>>36s8Q%C!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgExplicitDefaultsz0RecvmsgGenericTests._testRecvmsgExplicitDefaults  r  r>   c                    | j                  | j                  t        t              dz         \  }}}}| j	                  |t               | j                  || j                         | j	                  |g        | j                  |d       y )NrZ  Tr  r  r  s        r   testRecvmsgShorterz&RecvmsgGenericTests.testRecvmsgShorter  so    $(NN4>>36s8b=%B!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgShorterz'RecvmsgGenericTests._testRecvmsgShorter  r  r>   c                    | j                  | j                  t        t              dz
        \  }}}}| j	                  |t        d d        | j                  || j                         | j	                  |g        | j                  |d       y )Nr  Fr  r  r  s        r   testRecvmsgTruncz$RecvmsgGenericTests.testRecvmsgTrunc  su    $(NN4>>36s8a<%A!WeTc#2h'  t}}5"%5)r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgTruncz%RecvmsgGenericTests._testRecvmsgTrunc  r  r>   c                    | j                  | j                  t        t              d      \  }}}}| j	                  |t               | j                  || j                         | j	                  |g        | j                  |d       y )Nr
   Tr  r  r  s        r   testRecvmsgShortAncillaryBufz0RecvmsgGenericTests.testRecvmsgShortAncillaryBuf  sm    $(NN4>>36s8Q%@!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgShortAncillaryBufz1RecvmsgGenericTests._testRecvmsgShortAncillaryBuf  r  r>   c                    | j                  | j                  t        t              d      \  }}}}| j	                  |t               | j                  || j                         | j	                  |g        | j                  |d       y )N (  Tr  r  r  s        r   testRecvmsgLongAncillaryBufz/RecvmsgGenericTests.testRecvmsgLongAncillaryBuf  sm    $(NN4>>36s8U%D!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgLongAncillaryBufz0RecvmsgGenericTests._testRecvmsgLongAncillaryBuf  r  r>   c                     | j                   j                          | j                  t        | j                  | j                   d       y r   )r  r!   r  r   rT  rY   s    r   testRecvmsgAfterClosez)RecvmsgGenericTests.testRecvmsgAfterClose  s.    '4>>4>>4Hr>   c                      y rI   rd   rY   s    r   _testRecvmsgAfterClosez*RecvmsgGenericTests._testRecvmsgAfterClose  r  r>   c                     	 | j                   j                  d       | j                  t        | j                  | j                   t        t                     | j                  j                          y # | j                  j                          w xY w)Nr  )	r  r   r  r  rT  r  r   rI  r   rY   s    r   testRecvmsgTimeoutz&RecvmsgGenericTests.testRecvmsgTimeout  s`    	"NN%%d+l"nndnnc#hH OO!DOO!s   AA1 1Bc                 n    | j                  | j                  j                  | j                               y Nr  )r  rI  r   rm  rY   s    r   _testRecvmsgTimeoutz'RecvmsgGenericTests._testRecvmsgTimeout  s&    ,,T5F5F,GHr>   r  c           	         | j                  | j                  t        t              dz
  dt        j
                        \  }}}}| j                  |t        d d        | j                  || j                         | j                  |g        | j                  |dt        t        dd             | j                  | j                  t        t              dt        j
                        \  }}}}| j                  |t               | j                  || j                         | j                  |g        | j                  |d       | j                  | j                  t        t                    \  }}}}| j                  |t               | j                  || j                         | j                  |g        | j                  |d       y )	Nr  r   r  Frx  re  rh  Tr  )rT  r  r  r   r   r  r   r\  r   rl  r   r  s        r   testRecvmsgPeekz#RecvmsgGenericTests.testRecvmsgPeek  ss    %)NN4>>36s8a<39??%D!WeT 	c#2h'  t}}5"%
 	5&v{A> 	 	@ %)NN4>>36s8Q39??%D!WeT 	c"  t}}5"%4( %)NN4>>3s8$L!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgPeekz$RecvmsgGenericTests._testRecvmsgPeek  s    #r>   r  c                 X   | j                   j                  | j                         | j                  | j                   t	        t
                    \  }}}}| j                  |t
               | j                  || j                         | j                  |g        | j                  |d       y r  )
r  r   rm  rT  r  r   r   r\  r   rl  r  s        r   testRecvmsgFromSendmsgz*RecvmsgGenericTests.testRecvmsgFromSendmsg  s     	!!$"3"34$(NN4>>3s8$L!WeTc"  t}}5"%4(r>   c                     | j                  | j                  t        d d t        dd  g      t        t                     y r  r  rY   s    r   _testRecvmsgFromSendmsgz+RecvmsgGenericTests._testRecvmsgFromSendmsg&  s2    --s2AwAB.@A3s8Lr>   N)ra   rb   rc   r  r  r  r  r  r  r   r  r  r  r	  r  r  r  r  r  r  r   r  rv  r  r  r  rd   r>   r   r  r    s    )))*))I
"I &*% ) & )D    ! &--+) ,) ''M (Mr>   r  c                   $    e Zd Zd Zd Zd Zd Zy)RecvmsgGenericStreamTestsc                     | j                  | j                  d      \  }}}}| j                  |d       | j                  || j                         | j                  |g        | j                  |d        y )Nr   r>   r  )rT  r  r   r\  r   rl  r  s        r   testRecvmsgEOFz(RecvmsgGenericStreamTests.testRecvmsgEOF/  sc    $(NN4>>4$H!WeTc"  t}}5"%4(r>   c                 8    | j                   j                          y rI   )rK  r!   rY   s    r   _testRecvmsgEOFz)RecvmsgGenericStreamTests._testRecvmsgEOF7  s    r>   c                    | j                  | j                  t        t              dz
        \  }}}}| j	                  || j
                         | j                  |g        | j                  |d       | j                  | j                  d      \  }}}}| j	                  || j
                         | j                  |g        | j                  |d       ||z   }| j                  |t               y )Nr  Fr  r   T)rT  r  r  r   r\  r   r   rl  )rZ   r  r  r  r  r  r   s          r   testRecvmsgOverflowz-RecvmsgGenericStreamTests.testRecvmsgOverflow:  s    %)^^DNN47HqL&B"gud  t}}5"%5)%)^^DNND%I"gud  t}}5"%4(Tkc"r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgOverflowz.RecvmsgGenericStreamTests._testRecvmsgOverflowJ  r  r>   N)ra   rb   rc   r!  r#  r%  r'  rd   r>   r   r  r  +  s    )# r>   r  c                       e Zd Zd Zd Zy)RecvmsgTestsc                    | j                  t        | j                  j                         | j                  t        | j                  j                  ddd       | j                  t        | j                  j                  t        t              dd       | j                  t        | j                  j                  t        d      gdd       | j                  t        | j                  j                  t               dd       | j                  t        | j                  j                  t        t              t               d       | j                  t        | j                  j                  t        t              dt                      | j                  j                  t        t              dd      \  }}}}| j                  |t               | j                  || j                         | j                  |g        | j                  |d       y )Nr3  r   r|  Tr  )r  r   r  r  r  r  r   r  r  r   r\  r   rl  r  s        r   testRecvmsgBadArgszRecvmsgTests.testRecvmsgBadArgsQ  sq   )T^^%;%;<*dnn&<&<a	$*dnn&<&<c(B	+)T^^%;%;$R=/1a	1)T^^%;%; (Aq	*)T^^%;%;c(FHa	1)T^^%;%;c(Avx	1 %)NN$:$:3s8Q$J!WeTc"  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgBadArgsz RecvmsgTests._testRecvmsgBadArgsg  r  r>   N)ra   rb   rc   r+  r-  rd   r>   r   r)  r)  N  s    ),r>   r)  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
RecvmsgIntoTestsc                    t        t        t                    }| j                  t        | j
                  j                         | j                  t        | j
                  j                  t        t              dd       | j                  t        | j
                  j                  |dd       | j                  t        | j
                  j                  t               gdd       | j                  t        | j
                  j                  dgdd       | j                  t        | j
                  j                  |t               gdd       | j                  t        | j
                  j                  |gdd       | j                  t        | j
                  j                  |gt               d       | j                  t        | j
                  j                  |gdt                      | j
                  j                  |gdd      \  }}}}| j                  |t        t                     | j                  |t        t                     | j                  || j                         | j                  |g        | j                  |d       y )Nr   s   I'm not writabler3  Tr  )r  r  r   r  r   r  rq  r  r  r   r\  r   rl  rZ   rt  nbytesr  r  r  s         r   testRecvmsgIntoBadArgsz'RecvmsgIntoTests.testRecvmsgIntoBadArgsn  s   C!)T^^%@%@A)T^^%@%@c(Aq	*)T^^%@%@q!	%)T^^%@%@!8*a	,)T^^%@%@./A	7)T^^%@%@/1a	1*dnn&A&A%Q	()T^^%@%@%1	.)T^^%@%@%FH	. (,~~'B'BC5!Q'O$S*in-  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgIntoBadArgsz(RecvmsgIntoTests._testRecvmsgIntoBadArgs  r  r>   c                    t        t        t                    }| j                  j	                  d |fD              \  }}}}| j                  |t        t                     | j                  |t        t                     | j                  || j                         | j                  |g        | j                  |d       y )Nc              3       K   | ]  }|  y wrI   rd   r  s     r   r  z<RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>  s     1Qr  Tr  )	r  r  r   r  rq  r   r\  r   rl  r1  s         r   testRecvmsgIntoGeneratorz)RecvmsgIntoTests.testRecvmsgIntoGenerator  s    C!'+~~'B'B( $S*in-  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgIntoGeneratorz*RecvmsgIntoTests._testRecvmsgIntoGenerator  r  r>   c                    t        j                   ddgt        t              z        }| j                  j	                  |g      \  }}}}| j                  |t        t                     | j                  |j                         t               | j                  || j                         | j                  |g        | j                  |d       y )Nr  r   Tr  )
r  r  r   r  rq  r   tobytesr\  r   rl  r1  s         r   testRecvmsgIntoArrayz%RecvmsgIntoTests.testRecvmsgIntoArray  s    kk#sSX~.'+~~'B'BC5'I$S*,  t}}5"%4(r>   c                 .    | j                  t               y rI   r  rY   s    r   _testRecvmsgIntoArrayz&RecvmsgIntoTests._testRecvmsgIntoArray  r  r>   c                    t        d      }t        d      }t        d      }| j                  j                  |t        |      dd |g      \  }}}}| j	                  |t        d             | j	                  |t        d             | j	                  |t        d             | j	                  |t        d	             | j                  || j                         | j	                  |g        | j                  |d
       y )Ns   ----s
   0123456789s   --------------r   	      Mary had a little lambs   Marys
   01 had a 9s   little lamb---Tr  )	r  r  rq  
memoryviewr   r  r\  r   rl  )rZ   b1b2b3r2  r  r  r  s           r   testRecvmsgIntoScatterz'RecvmsgIntoTests.testRecvmsgIntoScatter  s    w}%()'+~~'B'BB!$b)(+$%>!?@Yw/0Y}56Y'89:  t}}5"%4(r>   c                 &    | j                  d       y )NrB  )rL  rY   s    r   _testRecvmsgIntoScatterz(RecvmsgIntoTests._testRecvmsgIntoScatter  s    34r>   N)ra   rb   rc   r3  r5  r8  r:  r=  r?  rG  rI  rd   r>   r   r/  r/  k  s*    )8	)))5r>   r/  c                       e Zd Z	 ddlZ edej
                        Z ee	d      d        Z
 ee	d      d        Zy# e$ r dZY (w xY w)CmsgMacroTestsr   NiCMSG_LENc                    | j                   t        j                  d      z
  dz   }t        t	        d            t        t	        |dz
  |            z   }| j                  t        j                  d      t        j                  d      j                  dz         |D ][  }t        j                  |      }| j                  |t        j                  d      z
  |       | j                  || j                          ] | j                  t        t        j                  d       | j                  t        t        j                  |       | j                  t        t        j                  t        j                         y )Nr   r
     rP   r   r3  )socklen_t_limitr   rL  listr=  r*  r  itemsizer   rs  r  r8  rB  maxsize)rZ   toobigrs  nrets        r   testCMSG_LENzCmsgMacroTests.testCMSG_LEN  s
    %%(::Q>eCj!Dv|V)D$EE 	6??1-u{{3/?/H/H1/LMA//!$CS6??1#55q9  d&:&:;	  	-"= 	-&A-#++Fr>   r  c                 b   | j                   t        j                  d      z
  dz   }t        t	        d            t        t	        |dz
  |            z   }t        j                  d      }| j                  |t        j                  d      j                  dz         |D ]  }t        j                  |      }| j                  ||       | j                  |t        j                  |             | j                  ||t        j                  d      z          | j                  || j                          |} | j                  t        t        j                  d       | j                  t        t        j                  |       | j                  t        t        j                  t        j                         y )Nr
   rN  r   rP   r   r3  )rO  r   r  rP  r=  r*  r  rQ  rr  rL  rs  r  r8  rB  rR  )rZ   rS  rs  lastrT  rU  s         r   testCMSG_SPACEzCmsgMacroTests.testCMSG_SPACE  sG    %%(9(9!(<<q@eCj!Dv|V)D$EE  #4S!1!:!:Q!>?A##A&C##C.##C);<##CV__Q-?)?@  d&:&:;D  	-):):B? 	-):):FC-):):CKKHr>   )ra   rb   rc   rZ  minr\  rO  r  r  r   rV  rY  rd   r>   r   rK  rK    sl    = j)*;*;<&*%G &G( &,'I (I7  %$%s   < AArK  c                   
   e Zd ZdZd Zd Zd Zd Zd Zd5dZ	d Z
d	 Zd
 Zd Z eed      d        Zej"                  d        Zd Zd Z ej,                  ej0                  dk(  d       ej,                  ed       eed      d                      Zej"                   ej,                  ej0                  dk(  d       ej,                  ed      d                      Z ej,                  ej0                  dk(  d       ej,                  ed       eed      d                      Zej"                   ej,                  ej0                  dk(  d       ej,                  ed      d                      Zd Z ej,                  ej0                  dk(  d      d        Zd Z d Z!d Z" eed      d        Z#e#j"                  d        Z$d6d Z%d! Z&d" Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d6d+Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8y4)7SCMRightsTestic                 T   g }t        |      D ]  }t        j                         \  }}| j                  t        j
                  |       | j                  t        j                  |       t	        j                  |t        |      j                                |j                  |        |S rI   )r=  r  mkstempru   r  rC  r!   writer  encodeappend)rZ   rT  fdsrP   ru  rF  s         r   newFDszSCMRightsTest.newFDs  sw     qA'')HBOOBIIt,OOBHHb)HHRQ)JJrN  
r>   c                     t        |      D ]g  \  }}t        j                  |dt        j                         | j	                  t        j
                  |d      t        |      j                                i y )Nr   r   )	enumerater  lseekSEEK_SETr   r	  r  r`  )rZ   rb  rT  ru  s       r   checkFDszSCMRightsTest.checkFDs
  sO     s^EArHHRBKK(RWWR.A@ $r>   c                 <    | j                  | j                  |       y rI   )ru   closeRecvmsgFDsrV  s     r   rR  z#SCMRightsTest.registerRecvmsgResult  s    ,,f5r>   c           	      >   |d   D ]  \  }}}|t         j                  k(  s|t         j                  k(  s/t        j                  d      }|j	                  |d t        |      t        |      |j                  z  z
          |D ]  }t        j                  |         y )Nr
   rP   )	r   r  
SCM_RIGHTSr  	frombytesr  rQ  r  r!   )rZ   recvmsg_result
cmsg_level	cmsg_type	cmsg_datarb  ru  s          r   rj  zSCMRightsTest.closeRecvmsgFDs  s     1?q0A,J	9f///!2!22kk#&i )II#i.3<<*GHJ KBHHRL  1Br>   c                     | j                  | j                  t        gt        j                  t        j
                  t        j                  d| j                  |            fg      t        t                     y )NrP   )	r   rP  r   r   r  rl  r  rc  r  )rZ   rT  s     r   createAndSendFDszSCMRightsTest.createAndSendFDs   sb     	  ##)#4#4#)#4#4#(;;sDKKN#C#E "FG H	r>   c                    |\  }}}}| j                  |t               | j                  || j                         | j	                  |dt
        j                  |       | j                  |t               | j                  t        |      |       t        j                  d      }	|D ]  }
| j                  |
t               |
\  }}}| j                  |t
        j                         | j                  |t
        j                         | j                  |t               | j                  t        |      t         z  d       |	j#                  |        | j                  t        |	      |       | j%                  |	       y )NTre  rg  rh  rP   r   )r   r   r\  r   rl  r   r]  r  rP  rs  r  r  tupler  rl  r-  
SIZEOF_INTrm  rh  )rZ   numfdsrS  maxcmsgsignoreflagsr   r  r  r  rb  itemro  rp  rq  s                 r   checkRecvmsgFDszSCMRightsTest.checkRecvmsgFDs*  s3    %+!WeTc"  t}}54F4E4E* 	 	, 	gt,S\84kk#D!!$./3,J	9Z):):;Y(9(9:!!)U3S^j8!<MM)$  	S6*cr>   c           	      x    | j                  d| j                  | j                  t        t              d             y )Nr
   r  r|  rT  r  r  r   rY   s    r   testFDPassSimplezSCMRightsTest.testFDPassSimpleE  .    Qt~~/23x!@ 	Ar>   c                    | j                  | j                  t        gt        j                  t        j
                  t        j                  d| j                  d            j                         fg      t        t                     y )NrP   r
   )
r   rP  r   r   r  rl  r  rc  r<  r  rY   s    r   _testFDPassSimplezSCMRightsTest._testFDPassSimpleJ  sh      ####++c4;;q>2::<> ?@
 H	r>   c           	      x    | j                  d| j                  | j                  t        t              d             y )Nr  r  r~  rY   s    r   testMultipleFDPassz SCMRightsTest.testMultipleFDPassS  r  r>   c                 &    | j                  d       y Nr  rs  rY   s    r   _testMultipleFDPassz!SCMRightsTest._testMultipleFDPassX      a r>   r  c                     | j                  d| j                  | j                  t        t              t        j                  dt        z                     y r  )r|  rT  r  r  r   r   r  rw  rY   s    r   testFDPassCMSG_SPACEz"SCMRightsTest.testFDPassCMSG_SPACE[  s@     	t~~dnnc#h$//J?A	Br>   c                 &    | j                  d       y r  r  rY   s    r   _testFDPassCMSG_SPACEz#SCMRightsTest._testFDPassCMSG_SPACEb  s    a r>   c                     | j                  d| j                  | j                  t        t              t        j                  dt        z              t
        j                         y )Nr
   r  rz  )	r|  rT  r  r  r   r   rL  rw  r]  rY   s    r   testFDPassCMSG_LENz SCMRightsTest.testFDPassCMSG_LENf  sK    Q!^^DNNCH,2OOA
N,KM
 *0):): 	 	<r>   c                 &    | j                  d       y rP  r  rY   s    r   _testFDPassCMSG_LENz!SCMRightsTest._testFDPassCMSG_LENp  r  r>   r  zskipping, see issue #12958zskipping, see issue #22397c           	      |    | j                  d| j                  | j                  t        t              d      d       y )Nr   r  )ry  r~  rY   s    r   testFDPassSeparatez SCMRightsTest.testFDPassSeparates  s4     	Q!^^DNNCHeL&' 	 	)r>   c                 h   | j                  d      \  }}| j                  | j                  t        gt        j
                  t        j                  t        j                  d|g      ft        j
                  t        j                  t        j                  d|g      fg      t        t                     y Nr   rP   	rc  r   rP  r   r   r  rl  r  r  rZ   fd0fd1s      r   _testFDPassSeparatez!SCMRightsTest._testFDPassSeparate}       ;;q>S  #&*;*;*0*;*;*/++cC5*A*C +1*;*;*0*;*;*/++cC5*A*C)D E H	r>   c                    d}| j                  || j                  | j                  t        t              t        j                  t              t        j                  t        |z        z         dt
        j                         y )Nr   )ry  rz  )
r|  rT  r  r  r   r   r  rw  rL  r]  )rZ   num_fdss     r   testFDPassSeparateMinSpacez(SCMRightsTest.testFDPassSeparateMinSpace  sj     W!^^DNNCH,2,=,=j,I,2OOJ<P,Q-RS '(V5F5F	 	 	Hr>   c                 h   | j                  d      \  }}| j                  | j                  t        gt        j
                  t        j                  t        j                  d|g      ft        j
                  t        j                  t        j                  d|g      fg      t        t                     y r  r  r  s      r   _testFDPassSeparateMinSpacez)SCMRightsTest._testFDPassSeparateMinSpace  r  r>   c                     	 | j                  |g|      }| j                  |t        |             y # t        $ r<}| j                  |j                  t               | j                  |g      }Y d }~\d }~ww xY wrI   )rP  r   r  r#  r)  r   r  )rZ   r   r  r2  r   s        r   sendAncillaryIfPossiblez%SCMRightsTest.sendAncillaryIfPossible  si    	1))3%9F
 	S*	  	1!!!''3/))3%0F	1s   1 	A62A11A6zsee issue #24725c           	          | j                  d| j                  | j                  t        t              d      t
        j                         y )Nr   r  r  )r|  rT  r  r  r   r   r]  rY   s    r   testFDPassEmptyzSCMRightsTest.testFDPassEmpty  s=     	Qt~~/23x!@)/):): 	 	<r>   c                 p    | j                  t        t        j                  t        j                  dfg       y Nr>   )r  r   r   r  rl  rY   s    r   _testFDPassEmptyzSCMRightsTest._testFDPassEmpty  s0    $$SF,=,=,2,=,=,/,1 +2 	3r>   c                    | j                  | j                  t        t              d      \  }}}}| j	                  |t               | j                  || j                         | j                  |dt        j                         | j                  t        |      d       |D ]e  \  }}}| j	                  |t        j                         | j	                  |t        j                         | j                  t        |      t               g y )Nr  Tr  r
   )rT  r  r  r   r   r\  r   rl  r   r]  rs  r  rl  
assertLessrw  rZ   r   r  r  r  ro  rp  rq  s           r   testFDPassPartialIntz"SCMRightsTest.testFDPassPartialInt  s    $(NN4>>36s8U%D!WeTc"  t}}540A0ABS\1-07,J	9Z):):;Y(9(9:OOC	NJ7 18r>   c           	          | j                  t        t        j                  t        j                  t        j
                  d| j                  g      j                         d d fg       y )NrP   r3  )r  r   r   r  rl  r  badfdr<  rY   s    r   _testFDPassPartialIntz#SCMRightsTest._testFDPassPartialInt  sS    $$kk#

|,446s;= >	?r>   c           	         | j                  | j                  t        t              d      \  }}}}| j	                  |t               | j                  || j                         | j                  |dt        j                         | j                  t        |      d       t        j                  d      }|D ]|  \  }}}| j	                  |t        j                         | j	                  |t        j                         |j                  |d t        |      t        |      |j                  z  z
          ~ | j                  t        |      d       | j!                  |       y )Nr  Tr  r   rP   )rT  r  r  r   r   r\  r   rl  r   r]  rs  r  r  rl  rm  rQ  rh  )	rZ   r   r  r  r  rb  ro  rp  rq  s	            r   testFDPassPartialIntInMiddlez*SCMRightsTest.testFDPassPartialIntInMiddle  s    %)NN4>>36s8U%D!WeTc"  t}}540A0ABS\1-kk#07,J	9Z):):;Y(9(9:MM) %E	Nc)ns||&CDF G 18
 	SXq)cr>   c           
      d   | j                  d      \  }}| j                  t        t        j                  t        j
                  t        j                  d|| j                  g      j                         d d ft        j                  t        j
                  t        j                  d|g      fg       y )Nr   rP   r3  )	rc  r  r   r   r  rl  r  r  r<  r  s      r   _testFDPassPartialIntInMiddlez+SCMRightsTest._testFDPassPartialIntInMiddle  s    ;;q>S$$kk#TZZ0199;CR@B kk#u%'(	)r>   c                     |\  }}}}| j                  |t               | j                  || j                         | j                  |g        | j	                  |dt
        j                  |       y )NTre  rf  rh  )r   r   r\  r   rl  r   r]  )rZ   rS  rz  r   r  r  r  s          r   checkTruncatedHeaderz"SCMRightsTest.checkTruncatedHeader  sf     %+!WeTc"  t}}5"%4&2C2C* 	 	,r>   c                     | j                  | j                  | j                  t        t                    t
        j                         y Nr  r  rT  r  r  r   r   r]  rY   s    r   testCmsgTruncNoBufSizez$SCMRightsTest.testCmsgTruncNoBufSize  s8     	!!$..S"J /5.?.?	 	" 	Ar>   c                 &    | j                  d       y rP  r  rY   s    r   _testCmsgTruncNoBufSizez%SCMRightsTest._testCmsgTruncNoBufSize  r  r>   c                     | j                  | j                  | j                  t        t              d      t
        j                         y )Nr   r  r  rY   s    r   testCmsgTrunc0zSCMRightsTest.testCmsgTrunc0  s6    !!$..S1"M.4.?.? 	" 	Ar>   c                 &    | j                  d       y rP  r  rY   s    r   _testCmsgTrunc0zSCMRightsTest._testCmsgTrunc0  r  r>   c                 v    | j                  | j                  | j                  t        t              d             y rP  )r  rT  r  r  r   rY   s    r   testCmsgTrunc1zSCMRightsTest.testCmsgTrunc1  s%    !!$..S1"MNr>   c                 &    | j                  d       y rP  r  rY   s    r   _testCmsgTrunc1zSCMRightsTest._testCmsgTrunc1  r  r>   c                     | j                  | j                  | j                  t        t              t
        dz               y r  )r  rT  r  r  r   rw  rY   s    r   testCmsgTrunc2IntzSCMRightsTest.testCmsgTrunc2Int  s2     	!!$..S1;a#A 	Br>   c                 &    | j                  d       y rP  r  rY   s    r   _testCmsgTrunc2Intz SCMRightsTest._testCmsgTrunc2Int  r  r>   c           	          | j                  | j                  | j                  t        t              t        j                  d      dz
               y r	  )r  rT  r  r  r   r   rL  rY   s    r   testCmsgTruncLen0Minus1z%SCMRightsTest.testCmsgTruncLen0Minus1"  s:    !!$..S171Ca1G#I 	Jr>   c                 &    | j                  d       y rP  r  rY   s    r   _testCmsgTruncLen0Minus1z&SCMRightsTest._testCmsgTruncLen0Minus1&  r  r>   c                    | j                  | j                  t        t              |      \  }}}}| j	                  |t               | j                  || j                         | j                  |dt        j                         |dk(  r|g k(  ry | j	                  t        |      d       |d   \  }}	}
| j	                  |t        j                         | j	                  |	t        j                         | j                  t        |
      |       | j                  t        |
      |       t        j                  d      }|j                  |
d t        |
      t        |
      |j                   z  z
          | j#                  |       y )NTre  rf  r   r
   rP   )rT  r  r  r   r   r\  r   rl  r   r]  r  rl  rr  rs  r  rm  rQ  rh  )rZ   ancbufmaxdatamindatar   r  r  r  ro  rp  rq  rb  s               r   checkTruncatedArrayz!SCMRightsTest.checkTruncatedArray,  s=   
 %)NN4>>36s8V%E!WeTc"  t}}54&2C2CDa<GrMWq)+21:(
IyV%6%67F$5$56I8S^W5kk#i !AI#i.3<<"?@B 	Ccr>   c                 P    | j                  t        j                  d      d       y )Nr   r  r  r  r   rL  rY   s    r   testCmsgTruncLen0zSCMRightsTest.testCmsgTruncLen0D  s      (:A Fr>   c                 &    | j                  d       y rP  r  rY   s    r   _testCmsgTruncLen0z SCMRightsTest._testCmsgTruncLen0G  r  r>   c                 V    | j                  t        j                  d      dz   d       y )Nr   r
   r  r  rY   s    r   testCmsgTruncLen0Plus1z$SCMRightsTest.testCmsgTruncLen0Plus1J  s#      (:Q(> Jr>   c                 &    | j                  d       y r  r  rY   s    r   _testCmsgTruncLen0Plus1z%SCMRightsTest._testCmsgTruncLen0Plus1M  r  r>   c                 `    | j                  t        j                  t              t               y )Nr  r  r   rL  rw  rY   s    r   testCmsgTruncLen1zSCMRightsTest.testCmsgTruncLen1P  s#      
(C)3 	! 	5r>   c                 &    | j                  d       y r  r  rY   s    r   _testCmsgTruncLen1z SCMRightsTest._testCmsgTruncLen1T  r  r>   c                 x    | j                  t        j                  dt        z        dz
  dt        z  dz
         y )Nr   r
   r  r  rY   s    r   testCmsgTruncLen2Minus1z%SCMRightsTest.testCmsgTruncLen2Minus1W  s5      J(G!(K*+j.A)= 	! 	?r>   c                 &    | j                  d       y r  r  rY   s    r   _testCmsgTruncLen2Minus1z&SCMRightsTest._testCmsgTruncLen2Minus1[  r  r>   N)r
   r   r   )9ra   rb   rc   r  rc  rh  rR  rj  rs  r|  r  r  r  r  r  r   r  rv  r  r  r  r   r  rB  rp  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  rd   r>   r   r\  r\    s    E
A6
!6A
A
! &,'B (B %%! &!<! X__S\\X-/KLX__S67&,') ( 8 M) ##X__S\\X-/KLX__S67	 8 M $	 X__S\\X-/KLX__S67&,'H ( 8 MH  ++X__S\\X-/KLX__S67	 8 M ,		+ X__S\\X-/AB< C<3
8? &,' ($ "--	) .	),A!A
!O!B!J!0G!K!5!?!r>   r\  c            	          e Zd ZdZdZd Zd3dZ eedd      d        Z	e	j                  d        Z eed	dd      d
        Zej                  d        Z eej                  d       eedd      d               Zej                  d        Z	 	 d3dZ eedddd      d        Zej                  d        Z eed	dddd      d        Zej                  d        Z eej                  d       eed	dddd      d               Zej                  d        Z eej                  d       eed	dddd      d               Zej                  d        Zd4dZ eedd      d        Zej                  d        Z eedd      d        Zej                  d        Z eedd      d        Zej                  d         Z eedd      d!        Z e j                  d"        Z! eedd      d#        Z"e"j                  d$        Z# eedd      d%        Z$e$j                  d&        Z%d4d'Z& eed	dddd      d(        Z'e'j                  d)        Z( eed	dddd      d*        Z)e)j                  d+        Z* eed	dddd      d,        Z+e+j                  d-        Z, eed	dddd      d.        Z-e-j                  d/        Z. eed	dddd      d0        Z/e/j                  d1        Z0y2)5RFC3542AncillaryTestr   r3  c                 V    i }|D ]!  \  }}}| j                  ||f|       ||||f<   # |S rI   )r  )rZ   r  dro  rp  rq  s         r   ancillaryMappingz%RFC3542AncillaryTest.ancillaryMappingp  sE     07,J	9j)4a8)2Az9%& 18 r>   c                    | j                   j                  t        j                  t        j                  d       | j
                  j                          | j                  | j                   t        t              |      \  }}}}| j                  |t               | j                  || j                         | j                  |dt        j                  |       | j                  t        |      d       | j                  |d   t                |d   \  }}	}
| j                  |t        j                         | j                  |	t        j"                         | j                  |
t$               | j                  t        |
      t&               t)        j(                  d      }|j+                  |
       | j-                  |d   d       | j/                  |d   |       y )Nr
   Tru  r   rP   )r  r  r   r  r  rI  r   rT  r  r   r   r\  r   rl  r]  r  rv  r  r-  rw  r  rm  rr  rs  )rZ   
ancbufsizemaxhoprz  r   r  r  r  ro  rp  rq  r  s               r   checkHopLimitz"RFC3542AncillaryTest.checkHopLimitz  sr   
 	!!&"5"5"(":":A	?$(NN4>>36s8Z%I!WeT 	c"  t}}54F4E4E* 	 	, 	Wq)gaj%0+21:(
IyV%8%89F$8$89i/Y4KK	I!a(QqT6*r>   r  r  c                 (    | j                  d       y Nr  r  )r  rY   s    r   testRecvHopLimitz%RFC3542AncillaryTest.testRecvHopLimit  s     	e,r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rI  r   rm  rL  r   rY   s    r   _testRecvHopLimitz&RFC3542AncillaryTest._testRecvHopLimit  s6    
 	,,T5F5F,GH#r>   r  c                 V    | j                  t        j                  t                     y )Nr  )r  r   r  rw  rY   s    r   testRecvHopLimitCMSG_SPACEz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACE  s      	f&7&7
&CDr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testRecvHopLimitCMSG_SPACEz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACE  4    ,,T5F5F,GH#r>   r  c                 >    | j                  d| j                         y Nr  )r  r  )r  	hop_limitrY   s    r   testSetHopLimitz$RFC3542AncillaryTest.testSetHopLimit  s    
 	eDNNCr>   c                 T   | j                  | j                  j                  | j                               | j	                  | j                  t        gt        j                  t        j                  t        j                  d| j                  g      fg      t        t                     y Nr  rP   )r  rI  r   rm  r   rP  r   r   r  r  r  r  r  rY   s    r   _testSetHopLimitz%RFC3542AncillaryTest._testSetHopLimit  s    ,,T5F5F,GH  ##)#6#68L8L#(;;sT^^4D#E#G "HI H		r>   c                    | j                   j                  t        j                  t        j                  d       | j                   j                  t        j                  t        j
                  d       | j                  j                          | j                  | j                   t        t              |      \  }}}}| j                  |t               | j                  || j                         | j                  |dt        j                  |       | j                  t        |      d       | j!                  |      }|t        j                  t        j"                  f   }	| j                  t        |	      t$               t'        j&                  d      }
|
j)                  |	       | j+                  |
d   d       | j-                  |
d   d       |t        j                  t        j.                  f   }| j                  t        |      t$               t'        j&                  d      }
|
j)                  |       | j+                  |
d   d       | j-                  |
d   |       y )Nr
   Tru  r   rP   r   r+  )r  r  r   r  r  r  rI  r   rT  r  r   r   r\  r   rl  r]  r  r  rw  r  rm  rr  rs  r  )rZ   r  r  rz  r   r  r  r  ancmaptcdatar  hldatas               r   checkTrafficClassAndHopLimitz1RFC3542AncillaryTest.checkTrafficClassAndHopLimit  s    	!!&"5"5"(":":A	?!!&"5"5"("8"8!	=$(NN4>>36s8Z%I!WeT 	c"  t}}54F4E4E* 	 	,Wq)&&w/,,f.@.@ABVj1KK	F!a(QqT3',,f.B.BCDVj1KK	F!a(QqT6*r>   r  r  c                 (    | j                  d       y r  )r  rY   s    r   testRecvTrafficClassAndHopLimitz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimit  s     	))U);r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r    _testRecvTrafficClassAndHopLimitz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimit  r  r>   c                 \    | j                  t        j                  t              dz         y Nr   r  )r  r   r  rw  rY   s    r   )testRecvTrafficClassAndHopLimitCMSG_SPACEz>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACE  s*    
 	))((4q8 	* 	:r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   *_testRecvTrafficClassAndHopLimitCMSG_SPACEz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACE  r  r>   c                 >    | j                  d| j                         y r  r  r  rY   s    r   testSetTrafficClassAndHopLimitz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimit  s!     	))U15 	* 	Ar>   c                    | j                  | j                  j                  | j                               | j	                  | j                  t        gt        j                  t        j                  t        j                  d| j                  g      ft        j                  t        j                  t        j                  d| j                  g      fg      t        t                     y r  )r  rI  r   rm  r   rP  r   r   r  r  r  traffic_classr  r  r  rY   s    r   _testSetTrafficClassAndHopLimitz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimit  s    ,,T5F5F,GH  ##)#6#68J8J#(;;sT5G5G4H#I#K#)#6#68L8L#(;;sT^^4D#E#G"HI
 H	r>   c                 >    | j                  d| j                         y r  r  rY   s    r   testOddCmsgSizez$RFC3542AncillaryTest.testOddCmsgSize  s!     	))U15 	* 	Ar>   c                    | j                  | j                  j                  | j                               	 | j	                  t
        gt        j                  t        j                  t        j                  d| j                  g      j                         dz   ft        j                  t        j                  t        j                  d| j                  g      fg      }y # t        $ r}| j                  |j                   t"               | j	                  t
        gt        j                  t        j                  t        j                  d| j                  g      ft        j                  t        j                  t        j                  d| j                  g      fg      }| j%                  |t'        t
                     Y d }~y d }~ww xY w)Nr  rP   r
  )r  rI  r   rm  rP  r   r   r  r  r  r  r<  r  r  r   r  r#  r)  r   r  )rZ   r2  r   s      r   _testOddCmsgSizez%RFC3542AncillaryTest._testOddCmsgSize  s]   ,,T5F5F,GH	/))%%v'9'9++cD$6$6#78@@BWLN%%v';';++cDNN#34678F  	/!!!''3/))%%v'9'9++cD$6$6#78:%%v';';++cDNN#34678F VSX..	/s   B&C 	G'CG  Gc                    | j                   j                  t        j                  t        j                  d       | j
                  j                          |dn|f} | j                  | j                   t        t              g| \  }}}}| j                  |t               | j                  || j                         | j                  |g        | j                  |dt        j                  |       y )Nr
   rd   Tr  )r  r  r   r  r  rI  r   rT  r  r   r   r\  r   rl  r]  )rZ   r  rz  r1  r   r  r  r  s           r   checkHopLimitTruncatedHeaderz1RFC3542AncillaryTest.checkHopLimitTruncatedHeader2  s     	!!&"5"5"(":":A	?'rj]$2DNN4>>36s8%D>B%D!WeT 	c"  t}}5"%4&2C2C* 	 	,r>   c                 F    | j                  d t        j                         y )Nr  rz  r  r   r]  rY   s    r   r  z+RFC3542AncillaryTest.testCmsgTruncNoBufSizeF  s%     	))T
 7=6G6G 	* 	Ir>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   r  z,RFC3542AncillaryTest._testCmsgTruncNoBufSizeQ  r  r>   c                 F    | j                  dt        j                         y )Nr   r  r  rY   s    r   testSingleCmsgTrunc0z)RFC3542AncillaryTest.testSingleCmsgTrunc0V  s#     	))Q6<6G6G 	* 	Ir>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTrunc0z*RFC3542AncillaryTest._testSingleCmsgTrunc0]  r  r>   c                 (    | j                  d       y )Nr
   r  )r  rY   s    r   testSingleCmsgTrunc1z)RFC3542AncillaryTest.testSingleCmsgTrunc1e  s    ))Q)7r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTrunc1z*RFC3542AncillaryTest._testSingleCmsgTrunc1i  r  r>   c                 6    | j                  dt        z         y r  )r  rw  rY   s    r   testSingleCmsgTrunc2Intz,RFC3542AncillaryTest.testSingleCmsgTrunc2Intn  s    ))Q^)Dr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTrunc2Intz-RFC3542AncillaryTest._testSingleCmsgTrunc2Intr  r  r>   c                 T    | j                  t        j                  d      dz
         y )Nr   r
   r  )r  r   rL  rY   s    r   testSingleCmsgTruncLen0Minus1z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1w  s!    ))V__Q5G!5K)Lr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTruncLen0Minus1z3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1{  r  r>   c                    | j                   j                  t        j                  t        j                  d       | j
                  j                          | j                  | j                   t        t              t        j                  t              dz
        \  }}}}| j                  |t               | j                  || j                         | j                  |dt        j                          | j#                  t        |      d       |ri|d   \  }}}| j                  |t        j                         | j                  |t        j$                         | j'                  t        |      t               y y )Nr
   Tr  r   )r  r  r   r  r  rI  r   rT  r  r   rL  rw  r   r\  r   rl  r]  rs  r  r  r  s           r   testSingleCmsgTruncInDataz.RFC3542AncillaryTest.testSingleCmsgTruncInData  s   
 	!!&"5"5"(":":A	?$(NNNNCHfooj&AA&E%G!WeT 	c"  t}}54&2C2CDS\1-/6qz,J	9Z)<)<=Y(<(<=OOC	NJ7	 r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTruncInDataz/RFC3542AncillaryTest._testSingleCmsgTruncInData  r  r>   c                    | j                   j                  t        j                  t        j                  d       | j                   j                  t        j                  t        j
                  d       | j                  j                          | j                  | j                   t        t              |      \  }}}}| j                  |t               | j                  || j                         | j                  |dt        j                  |       | j                  t        |      d       |d   \  }}}	| j                  |t        j                         | j!                  |t        j"                  t        j$                  h       | j                  t        |	      t&               t)        j(                  d      }
|
j+                  |	       | j-                  |
d   d       | j/                  |
d   d       y )Nr
   Tr  r   rP   r+  )r  r  r   r  r  r  rI  r   rT  r  r   r   r\  r   rl  r]  r  r  r  rw  r  rm  rr  rs  )rZ   r  rz  r   r  r  r  ro  rp  rq  r  s              r   checkTruncatedSecondHeaderz/RFC3542AncillaryTest.checkTruncatedSecondHeader  s|    	!!&"5"5"(":":A	?!!&"5"5"("8"8!	=$(NN4>>36s8Z%I!WeT 	c"  t}}54&2C2C* 	 	, 	Wq)+21:(
IyV%8%89i&"4"4f6J6J!KLY4KK	I!a(QqT3'r>   c                 t    | j                  t        j                  t              t        j                         y r  )r6  r   r  rw  r]  rY   s    r   testSecondCmsgTrunc0z)RFC3542AncillaryTest.testSecondCmsgTrunc0  s.     	''(9(9*(E4:4E4E 	( 	Gr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSecondCmsgTrunc0z*RFC3542AncillaryTest._testSecondCmsgTrunc0  r  r>   c                 Z    | j                  t        j                  t              dz          y rP  r6  r   r  rw  rY   s    r   testSecondCmsgTrunc1z)RFC3542AncillaryTest.testSecondCmsgTrunc1  s"     	''(9(9*(E(IJr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSecondCmsgTrunc1z*RFC3542AncillaryTest._testSecondCmsgTrunc1  r  r>   c                 h    | j                  t        j                  t              dt        z  z          y r  r<  rY   s    r   testSecondCmsgTrunc2Intz,RFC3542AncillaryTest.testSecondCmsgTrunc2Int  s+     	''(9(9*(E()J)7 	8r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSecondCmsgTrunc2Intz-RFC3542AncillaryTest._testSecondCmsgTrunc2Int  r  r>   c                     | j                  t        j                  t              t        j                  d      z   dz
         y r	  )r6  r   r  rw  rL  rY   s    r   testSecondCmsgTruncLen0Minus1z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1  s9     	''(9(9*(E(.(:);=>)? 	@r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSecondCmsgTruncLen0Minus1z3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1  r  r>   c                 &   | j                   j                  t        j                  t        j                  d       | j                   j                  t        j                  t        j
                  d       | j                  j                          | j                  | j                   t        t              t        j                  t              t        j                  t              z   dz
        \  }}}}| j                  |t               | j                  || j                          | j#                  |dt        j$                         t        j&                  t        j(                  h}|j+                  d      \  }}}| j                  |t        j                         |j-                  |       | j                  t        |      t               t/        j.                  d      }	|	j1                  |       | j3                  |	d   d       | j5                  |	d   d       |re|j+                  d      \  }}}| j                  |t        j                         |j-                  |       | j7                  t        |      t               | j                  |g        y )Nr
   Tr  r   rP   r+  )r  r  r   r  r  r  rI  r   rT  r  r   r  rw  rL  r   r\  r   rl  r]  r  r  popremover  rm  rr  rs  r  )
rZ   r   r  r  r  
cmsg_typesro  rp  rq  r  s
             r   testSecondCmsgTruncInDataz.RFC3542AncillaryTest.testSecondCmsgTruncInData  s   
 	!!&"5"5"(":":A	?!!&"5"5"("8"8!	=$(NNNNCHj)FOOJ,GG!K%M!WeT 	c"  t}}54&2C2CD((&*>*>?
+2;;q>(
IyV%8%89)$Y4KK	I!a(QqT3'/6{{1~,J	9Z)<)<=i(OOC	NJ7"%r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSecondCmsgTruncInDataz/RFC3542AncillaryTest._testSecondCmsgTruncInData  r  r>   N)r+  r   r  )1ra   rb   rc   r  r  r  r  r  r   r  rv  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r  r  r"  r$  r&  r(  r*  r,  r.  r0  r2  r4  r6  r8  r:  r=  r?  rA  rC  rE  rG  rL  rN  rd   r>   r   r  r  _  s    I M+8 &-?- @- !! " &,(;_ME NE  ++ , &--+&-?D @ ,D
    ! ?B12"+H &-#]4<4< %00 1 &,(;_#]4:4: /:: ; &--+&,(;_#]4A4 ,A $// 0 &--+&,(;_#]4A4 ,A   / !/*,( &-?I @I '' ( &-?I @I %% & &-?8 @8 %% & &-?E @E (( ) &-?M @M #.. / &-?8 @8* ** +(@ &,(;_#]4G4G %% & &,(;_#]4K4K %% & &,(;_#]4848 (( ) &,(;_#]4@4@ #.. / &,(;_#]4!&4!&F ** +r>   r  c                       e Zd Zy)SendrecvmsgUDPTestBaseNra   rb   rc   rd   r>   r   rP  rP         	r>   rP  r  c                       e Zd Zy)SendmsgUDPTestNrQ  rd   r>   r   rT  rT        r>   rT  r  c                       e Zd Zy)RecvmsgUDPTestNrQ  rd   r>   r   rW  rW    rU  r>   rW  rq  c                       e Zd Zy)RecvmsgIntoUDPTestNrQ  rd   r>   r   rY  rY     rU  r>   rY  c                       e Zd Zd Zy)SendrecvmsgUDP6TestBasec                 4    | j                  |d d |d d        y r6  rX  rY  s      r   r\  z+SendrecvmsgUDP6TestBase.checkRecvmsgAddress)        	sU3BZ0r>   Nra   rb   rc   r\  rd   r>   r   r[  r[  %  s    1r>   r[  rJ  ri  r(   c                       e Zd Zy)SendmsgUDP6TestNrQ  rd   r>   r   r`  r`  .       	r>   r`  c                       e Zd Zy)RecvmsgUDP6TestNrQ  rd   r>   r   rc  rc  4  ra  r>   rc  c                       e Zd Zy)RecvmsgIntoUDP6TestNrQ  rd   r>   r   re  re  :  ra  r>   re  r  c                       e Zd Zy)RecvmsgRFC3542AncillaryUDP6TestNrQ  rd   r>   r   rg  rg  @       	r>   rg  c                       e Zd Zy)#RecvmsgIntoRFC3542AncillaryUDP6TestNrQ  rd   r>   r   rj  rj  H  s     	r>   rj  c                       e Zd Zy)SendrecvmsgUDPLITETestBaseNrQ  rd   r>   r   rl  rl  R  s    
 	r>   rl  c                       e Zd Zy)SendmsgUDPLITETestNrQ  rd   r>   r   rn  rn  Y  ra  r>   rn  c                       e Zd Zy)RecvmsgUDPLITETestNrQ  rd   r>   r   rp  rp  _  ra  r>   rp  c                       e Zd Zy)RecvmsgIntoUDPLITETestNrQ  rd   r>   r   rr  rr  e  ra  r>   rr  c                       e Zd Zd Zy)SendrecvmsgUDPLITE6TestBasec                 4    | j                  |d d |d d        y r6  rX  rY  s      r   r\  z/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressr  r]  r>   Nr^  rd   r>   r   rt  rt  l  s    1r>   rt  c                       e Zd Zy)SendmsgUDPLITE6TestNrQ  rd   r>   r   rw  rw  w  rh  r>   rw  c                       e Zd Zy)RecvmsgUDPLITE6TestNrQ  rd   r>   r   ry  ry    rh  r>   ry  c                       e Zd Zy)RecvmsgIntoUDPLITE6TestNrQ  rd   r>   r   r{  r{    rh  r>   r{  c                       e Zd Zy)#RecvmsgRFC3542AncillaryUDPLITE6TestNrQ  rd   r>   r   r}  r}    s     	r>   r}  c                       e Zd Zy)'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNrQ  rd   r>   r   r  r    s     	r>   r  c                       e Zd Zy)SendrecvmsgTCPTestBaseNrQ  rd   r>   r   r  r    rU  r>   r  c                       e Zd Zy)SendmsgTCPTestNrQ  rd   r>   r   r  r    rU  r>   r  c                       e Zd Zy)RecvmsgTCPTestNrQ  rd   r>   r   r  r    rR  r>   r  c                       e Zd Zy)RecvmsgIntoTCPTestNrQ  rd   r>   r   r  r    rR  r>   r  c                       e Zd Zy)SendrecvmsgSCTPStreamTestBaseNrQ  rd   r>   r   r  r    rR  r>   r  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXrT   rA   rb  c                       e Zd Zy)SendmsgSCTPStreamTestNrQ  rd   r>   r   r  r    ra  r>   r  c                        e Zd Z fdZ xZS )RecvmsgSCTPStreamTestc                     	 t         t        |           y # t        $ r9}|j                  t        j
                  k7  r | j                  d       Y d }~y d }~ww xY wNz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r(  r  r!  r   r#  ENOTCONNrx   rZ   r   r*  s     r   r!  z$RecvmsgSCTPStreamTest.testRecvmsgEOF  sL    	R'=? 	Rww%..(MMPQQ	R    	A/AAra   rb   rc   r!  r+  r,  s   @r   r  r        R Rr>   r  c                        e Zd Z fdZ xZS )RecvmsgIntoSCTPStreamTestc                     	 t         t        |           y # t        $ r9}|j                  t        j
                  k7  r | j                  d       Y d }~y d }~ww xY wr  )r(  r  r!  r   r#  r  rx   r  s     r   r!  z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOF  sL    	R+TAC 	Rww%..(MMPQQ	Rr  r  r,  s   @r   r  r    r  r>   r  c                       e Zd Zy)SendrecvmsgUnixStreamTestBaseNrQ  rd   r>   r   r  r    rU  r>   r  rJ  c                       e Zd Zy)SendmsgUnixStreamTestNrQ  rd   r>   r   r  r    rR  r>   r  c                       e Zd Zy)RecvmsgUnixStreamTestNrQ  rd   r>   r   r  r    ra  r>   r  c                       e Zd Zy)RecvmsgIntoUnixStreamTestNrQ  rd   r>   r   r  r    ra  r>   r  r  rl  c                       e Zd Zy)RecvmsgSCMRightsStreamTestNrQ  rd   r>   r   r  r    rR  r>   r  c                       e Zd Zy)RecvmsgIntoSCMRightsStreamTestNrQ  rd   r>   r   r  r    ra  r>   r  c                   d     e Zd Z fdZej
                  Z eed      r	dZ	d Z
 xZS dZ	d Z
 xZS )InterruptedTimeoutBasec                     t         |           t        j                  t        j                  d       }| j	                  t        j                  t        j                  |       y )Nc                     ddz  S r  rd   )signumr  s     r   rr  z.InterruptedTimeoutBase.setUp.<locals>.<lambda>  s    Ar>   )r(  r[   r  r  ru   )rZ   orig_alrm_handlerr*  s     r   r[   zInterruptedTimeoutBase.setUp  s>    "MM&..*EGv~~7HIr>   	setitimerg?c                 L    t        j                  t         j                  |       y rI   )r  r  ITIMER_REALrZ   secondss     r   setAlarmzInterruptedTimeoutBase.setAlarm  s    V//9r>   r   c                 .    t        j                  |       y rI   )r  r  r  s     r   r  zInterruptedTimeoutBase.setAlarm   s    LL!r>   )ra   rb   rc   r[   r   r   rL   r   r  
alarm_timer  r+  r,  s   @r   r  r    s8    
J &&G
 v{#
	: 
	"r>   r  siginterruptr  r  z+Don't have signal.alarm or signal.setitimerc                        e Zd Z fdZd Zd Zd Zd Zd Z e	e
j                  d      d        Z e	e
j                  d	      d
        Z xZS )InterruptedRecvTimeoutTestc                 l    t         |           | j                  j                  | j                         y rI   )r(  r[   rU   r   rL   r)  s    r   r[   z InterruptedRecvTimeoutTest.setUp-  s"    		T\\*r>   c                     	 | j                  | j                         | j                  t              5 } ||i | d d d        | j                  d       y # 1 sw Y   xY w# | j                  d       w xY wr   )r  r  r  r  rZ   rR  r1  r2  r  s        r   checkInterruptedRecvz/InterruptedRecvTimeoutTest.checkInterruptedRecv1  s`    	MM$//*""#45d%f% 6 MM! 65 MM!s!   0A! 	AA! AA! !A4c                 P    | j                  | j                  j                  d       y r   )r  rU   r   rY   s    r   testInterruptedRecvTimeoutz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeout;  s    !!$))..$7r>   c                 b    | j                  | j                  j                  t        d             y r   )r  rU   	recv_intor  rY   s    r   testInterruptedRecvIntoTimeoutz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeout>  s     !!$))"5"5yGr>   c                 P    | j                  | j                  j                  d       y r   )r  rU   r  rY   s    r   testInterruptedRecvfromTimeoutz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutA  s    !!$))"4"4d;r>   c                 b    | j                  | j                  j                  t        d             y r   )r  rU   r  r  rY   s    r   "testInterruptedRecvfromIntoTimeoutz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutD  s     !!$))"9"99T?Kr>   r  c                 P    | j                  | j                  j                  d       y r   )r  rU   r  rY   s    r   testInterruptedRecvmsgTimeoutz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutG  s    !!$))"3"3T:r>   rq  c                 d    | j                  | j                  j                  t        d      g       y r   )r  rU   rq  r  rY   s    r   !testInterruptedRecvmsgIntoTimeoutz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeoutK  s#    !!$))"8"89T?:KLr>   )ra   rb   rc   r[   r  r  r  r  r  r  r   r  r  r+  r,  s   @r   r  r  &  sc    +8H<L &--+; ,; &--0M 1Mr>   r  c                        e Zd Z fdZd Zd Z ej                  dd      d        Z ej                  dd      d        Z	 ej                  dd       e
ej                  d      d	               Z xZS )
InterruptedSendTimeoutTestc                    t         |           | j                         | _        | j	                  | j                  j
                         t        j                  | j                        }|j                          | j                  j                         \  | _        }| j	                  | j                  j
                         |j                          | j                  j                  | j                         y )N)target)r(  r[   r  r  ru   r!   r   Thread	doConnectstartrU   r   r
  r  r   rL   )rZ   
cli_threadr  r*  s      r   r[   z InterruptedSendTimeoutTest.setUpZ  s    ),,- %%T^^<
"ii..0t++,!!$,,/r>   c                 N    | j                   j                  | j                         y rI   )r  r   r$  rY   s    r   r  z$InterruptedSendTimeoutTest.doConnecth  s    t~~.r>   c                     	 | j                  t              5 }	 | j                  | j                          ||i | $# 1 sw Y   nxY w	 | j                  d       y # | j                  d       w xY wr   )r  r  r  r  r  s        r   checkInterruptedSendz/InterruptedSendTimeoutTest.checkInterruptedSendk  sd    	""#45MM$//2$)&)  655
 MM!DMM!s   A &=AA A/r|  r#  c                 P    | j                  | j                  j                  d       y r  )r  r  r  rY   s    r   testInterruptedSendTimeoutz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutx  s    !!$.."5"5x@r>   c                 f    | j                  | j                  j                  d| j                         y r  )r  r  r  r$  rY   s    r   testInterruptedSendtoTimeoutz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeout|  s'     	!!$.."7"7"&..	2r>   r  c                 R    | j                  | j                  j                  dg       y r  )r  r  r  rY   s    r   testInterruptedSendmsgTimeoutz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout  s      	!!$.."8"88*Er>   )ra   rb   rc   r[   r  r  r   requires_mac_verr  r  r  r   r  r+  r,  s   @r   r  r  R  s    0/
 Wb!$A %A Wb!$2 %2 Wb!$&--+F , %Fr>   r  c                       e Zd Zd Zd Zy)TCPCloserTestc                 X   | j                   j                         \  }}|j                          | j                  }t	        j                  |gg g d      \  }}}| j                  ||g       | j                  |j                  d      d       |j                          |j                          y )N      ?r
   r>   )rU   r   r!   r   r  r   r   )rZ   r   r  sdr	  r_  r  s          r   	testClosezTCPCloserTest.testClose  s    YY%%'
d

XX!=="r2s;eSt$S) 	



r>   c                     | j                   j                  t        | j                  f       t	        j
                  d       y Nr  )r   r   r   rW   r   r   rY   s    r   
_testClosezTCPCloserTest._testClose  s(    $		*+

3r>   N)ra   rb   rc   r  r  rd   r>   r   r  r    s    r>   r  c                   >    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d Z
y	)BasicSocketPairTestc                 2    t         j                  | |       y r   )r  r   r   s     r   r   zBasicSocketPairTest.__init__  s    <r>   c                    | j                  |t        j                         t        t        d      r+| j                  |j                  t        j
                         n*| j                  |j                  t        j                         | j                  |j                  t        j                         | j                  |j                  d       y )NrJ  r   )
r  r   r   r   r  rJ  rT   ru  rA   r  rT  s     r   _check_defaultsz#BasicSocketPairTest._check_defaults  s~    dFMM269%T[[&..9T[[&..9F$6$67Q'r>   c                 :    | j                  | j                         y rI   )r  r   rY   s    r   _testDefaultsz!BasicSocketPairTest._testDefaults  s    TXX&r>   c                 :    | j                  | j                         y rI   )r  rU   rY   s    r   testDefaultsz BasicSocketPairTest.testDefaults  s    TYY'r>   c                 f    | j                   j                  d      }| j                  |t               y r   rU   r   r   r   r  s     r   r  zBasicSocketPairTest.testRecv  $    iinnT"c"r>   c                 B    | j                   j                  t               y rI   r   r  r   rY   s    r   r  zBasicSocketPairTest._testRecv      cr>   c                 B    | j                   j                  t               y rI   rU   r  r   rY   s    r   testSendzBasicSocketPairTest.testSend      		sr>   c                 f    | j                   j                  d      }| j                  |t               y r   r   r   r   r   r  s     r   	_testSendzBasicSocketPairTest._testSend  $    hhmmD!c"r>   Nr   )ra   rb   rc   r   r  r  r  r  r  r  r  rd   r>   r   r  r    s*    =('(##r>   r  c                        e Zd Zd Z fdZ fdZd Zd Zd Zd Z	d Z
d	 Z ej                   eed
       xs
  eed       d       ej                   ej$                  d      d               Zd Zd Zd Z xZS )PurePythonSocketPairTestc                     	 t        j                  t         j                        S # t        $ r& t        j                  t         j                        cY S w xY wrI   )r   r  ri  r   rT   rY   s    r   r  z#PurePythonSocketPairTest.socketpair  s@    	5$$V__55 	5$$V^^44	5s   "% ,AAc                     t        t        d      r/t        j                  | _        t        j
                  t        _        nd | _        t        |           y )Nr  )r   r  r   r  _orig_sp_fallback_socketpairr(  r[   r)  s    r   r[   zPurePythonSocketPairTest.setUp  s<    7L)"--DM !' ; ;F !DMr>   c                 f    t         |           | j                  | j                  t        _        y y rI   )r(  r^   r  r   r  r)  s    r   r^   z!PurePythonSocketPairTest.tearDown  s)    ==$ $F %r>   c                 f    | j                   j                  d      }| j                  |t               y r   r  r  s     r   	test_recvz"PurePythonSocketPairTest.test_recv  r  r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   
_test_recvz#PurePythonSocketPairTest._test_recv  r  r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   	test_sendz"PurePythonSocketPairTest.test_send  r  r>   c                 f    | j                   j                  d      }| j                  |t               y r   r  r  s     r   
_test_sendz#PurePythonSocketPairTest._test_send  r  r>   c                     t        j                  t         j                        \  }}|j                          |j                          y rI   )r   r  rT   r!   rZ   r   rF  s      r   	test_ipv4z"PurePythonSocketPairTest.test_ipv4  s,    $$V^^4S				r>   c                      y rI   rd   rY   s    r   
_test_ipv4z#PurePythonSocketPairTest._test_ipv4  r  r>   r  IPV6_V6ONLY IPV6_V6ONLY option not supportedr  c                     t        j                  t         j                        \  }}|j                          |j                          y rI   )r   r  ri  r!   r  s      r   	test_ipv6z"PurePythonSocketPairTest.test_ipv6  s.    
 $$V__5S				r>   c                      y rI   rd   rY   s    r   
_test_ipv6z#PurePythonSocketPairTest._test_ipv6   r  r>   c                 <   t         j                   j                  d fd}d x}}	 |t         j                   _        | j                  t              5  t        j                         \  }}d d d        t         j                   _        rj                          |r|j                          |r|j                          y y # 1 sw Y   VxY w# t         j                   _        rj                          |r|j                          |r|j                          w w xY w)Nc                     |       }it        j                   t         j                  t         j                        j                  d       	 j	                  |d d        j                  d       |S # t
        t        f$ r Y $w xY w)NFr   T)r   rT   rA   ri  r   BlockingIOErrorInterruptedError)rZ   r  inject_sockorig_getsocknames     r   inject_getsocketnamez[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname  s    '-H "$mmFNNF<N<NO''.''!5 ''-O ()9: s   A7 7B	B	)r   r   r  r   r  r!   )rZ   r  sock1sock2r  r  s       @@r   $test_injected_authentication_failurez=PurePythonSocketPairTest.test_injected_authentication_failure  s    !==44	 	(<FMM%""7+%002u , )9FMM%!!#  ,+ )9FMM%!!# s$   *C C,C C
C ADc                      y rI   rd   rY   s    r   %_test_injected_authentication_failurez>PurePythonSocketPairTest._test_injected_authentication_failure$  s    
 	r>   )ra   rb   rc   r  r[   r^   r   r  r  r  r	  r  r   r  r   r  r  r   r  r  r  r  r  r+  r,  s   @r   r  r    s    
5	.##
 X__.99 9 -8879 X335RS T9
Br>   r  c                   <   e Zd ZddZd Zd Zd Zej                  d        Z	 ej                  e      Z
 ej                   eed      d       ej                  dd	d
      d               Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  d        Zd Zy)NonBlockingTCPTestsc                 d    t        j                         | _        t        j	                  | |       y r   )r   r   eventr   r   r   s     r   r   zNonBlockingTCPTests.__init__.  s#    __&
&&t
&Cr>   c                 x   | j                  | j                  j                         |       |dk7  }| j                  |j                         |       t        e|d u }t	        j                  |t        j
                  t        j                        }| j                  t        |t        j                  z         |       y y )N        )	r   rU   r~  getblockingr   F_GETFLr  
O_NONBLOCKbool)rZ   rE  rL   blockingfd_blockingflags         r   assert_sock_timeoutz'NonBlockingTCPTests.assert_sock_timeout2  s    --/9sN))+X6 #d?K;;tU]]BMMBDdR]]&:!;;[I r>   c                    | j                   j                  d       | j                  | j                   d        | j                   j                  d       | j                  | j                   d       | j                   j                  d        | j                  | j                   d        | j                   j                  d       | j                  | j                   d       | j                   j                  d       | j                  | j                   d       | j                   j                  d       | j                  | j                   d       y )NTFr#  r   r|  )rU   ri  r+  r   rY   s    r   testSetBlockingz#NonBlockingTCPTests.testSetBlockingC  s    		d#  D1		e$  C0		T"  D1		Q  A.		R   B/		Q  A.r>   c                      y rI   rd   rY   s    r   _testSetBlockingz$NonBlockingTCPTests._testSetBlockingW  r  r>   c                    dd l }|j                  |j                  k\  r| j                  d       | j                  j                  d       | j                  | j                  j                         d       | j                  j                  |j                  dz          | j                  | j                  j                                y )Nr   zneeds UINT_MAX < ULONG_MAXFr#  r
   )	rZ  r  r  rx   rU   ri  r   r~  r  r  s     r   testSetBlocking_overflowz,NonBlockingTCPTests.testSetBlocking_overflowZ  s     	!4!44MM67		e$--/5		i00145$))..01r>   rh  ztest needs socket.SOCK_NONBLOCKr         c                     | j                   j                          t        j                  t        j                  t        j                  t        j
                  z        | _         | j                  | j                   d       y r   )rU   r!   r   rT   rA   rh  r+  rY   s    r   testInitNonBlockingz'NonBlockingTCPTests.testInitNonBlockingi  sQ    
 			MM&.."("4"4v7K7K"KM	  A.r>   c                      y rI   rd   rY   s    r   _testInitNonBlockingz(NonBlockingTCPTests._testInitNonBlockings  r  r>   c                 (   t        d       5  | j                  j                  d       | j                  j                         \  }}| j	                  |j
                         | j                  |j                                d d d        y # 1 sw Y   y xY w)Nr|  )rN   rU   r   r   ru   r!   r  r~  r  s      r   testInheritFlagsBlockingz,NonBlockingTCPTests.testInheritFlagsBlockingv  se     &d+II  $))+JD$OODJJ'doo/0	 ,++s   A3BBc                 Z    | j                   j                  t        | j                  f       y rI   r   r   r   rW   rY   s    r   _testInheritFlagsBlockingz-NonBlockingTCPTests._testInheritFlagsBlocking      $		*+r>   c                 .   d}t        |      5  | j                  j                  d       | j                  j                         \  }}| j	                  |j
                         | j                  |j                         |       d d d        y # 1 sw Y   y xY w)Ng      4@r|  )rN   rU   r   r   ru   r!   r   r~  )rZ   default_timeoutr   r  s       r   testInheritFlagsTimeoutz+NonBlockingTCPTests.testInheritFlagsTimeout  sl     %o6II  $))+JD$OODJJ'T__.@	 766s   A4BBc                 Z    | j                   j                  t        | j                  f       y rI   r;  rY   s    r   _testInheritFlagsTimeoutz,NonBlockingTCPTests._testInheritFlagsTimeout  r=  r>   c                    | j                   j                  d       t        j                         }| j	                  t
              5  | j                   j                         \  }}d d d        t        j                         |z
  }| j                  |d       | j                  j                          t        j                  | j                   gg g t        j                        \  }}}| j                   |vr| j                  d       | j                   j                         \  }}| j                  |j                         | j!                  |j#                                y # 1 sw Y   xY w)NFr  z'Error trying to do accept after select.)rU   ri  r   	monotonicr  r  r   r  r!  r   r  r   LONG_TIMEOUTr  ru   r!   r  r~  )rZ   
start_timer   r  dtr	  r_  r  s           r   
testAcceptzNonBlockingTCPTests.testAccept  s    		e$ ^^%
/))+JD$ 0^^
*C 

!==$))b"g>R>RSeS99D II?@ YY%%'
d

#$//+, 0/s   EE#c                     | j                   j                          | j                  j                  t        | j
                  f       y rI   )r!  r   r   r   r   rW   rY   s    r   _testAcceptzNonBlockingTCPTests._testAccept  s-     	

$		*+r>   c                 B   | j                   j                         \  }}| j                  |j                         |j	                  d       | j                  t              5  |j                  t        t                    }d d d        | j                  j                          t        j                  |gg g t        j                        \  }}}||vr| j                  d       |j                  t        t                    }| j!                  |t               y # 1 sw Y   xY w)NFz0Error during select call to non-blocking socket.)rU   r   ru   r!   ri  r  r  r   r  r   r!  r   r  r   rE  r  r   )rZ   r   r  r   r	  r_  r  s          r   r  zNonBlockingTCPTests.testRecv  s    YY%%'
d

# /))CH%C 0 	

!==$R9M9MNeStIIHI iiC!c" 0/s   DDc                     | j                   j                  t        | j                  f       | j                  j                          | j                   j                  t               y rI   )r   r   r   rW   r!  r   r  r   rY   s    r   r  zNonBlockingTCPTests._testRecv  sA    $		*+ 	

 	r>   c                    dd l }|j                  dz   }| j                  j                         \  }}| j	                  |j
                         	 |j                  |       |j                  t        t                    }y # t        $ r Y y w xY wr	  )rZ  r\  rU   r   ru   r!   r   r8  r   r  r   )rZ   rZ  large_timeoutr   r  r   s         r   testLargeTimeoutz$NonBlockingTCPTests.testLargeTimeout  sz    
 	!))A- YY%%'
d

#	OOM*
 iiC!	  	 	s   A= =	B	B	c                    dd l }|j                  dz   }| j                  j                  t        | j
                  f       	 | j                  j                  |       | j                  j                  t               y # t        $ r Y y w xY wr	  )
rZ  r\  r   r   r   rW   r   r8  r  r   )rZ   rZ  rN  s      r   _testLargeTimeoutz%NonBlockingTCPTests._testLargeTimeout  so    !))A-$		*+	HH. 	  		s    A; ;	BBNr   )ra   rb   rc   r   r+  r-  r/  r   r  r1  _testSetBlocking_overflowr   r  r   r   requires_linux_versionr5  r7  r9  r<  r@  rB  rH  rJ  r  r  rO  rQ  rd   r>   r   r  r  ,  s    DJ"/( 
2 
2 !5 4 45E FX9:<#W##Aq"-/ .</1,	A,-,,#( " "$	r>   r  c                       e Zd ZdZdZdZdZdZdZe	Z
dZe	Zd!dZd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%y)"FileObjectClassTestCaseao  Unit 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.
    r3  r	   strictNr   r1  c                 2    t         j                  | |       y r   r  r   s     r   r   z FileObjectClassTestCase.__init__   r  r>   c                 n   t        d      D cg c]  }t        j                          c}\  | _        | _        | _        | _        t        j                  |        | j                  j                  | j                  | j                  | j                  | j                  | j                        | _        y c c}w )Nr  r5  errorsnewline)r=  r   r   evt1evt2serv_finishedcli_finishedr  r[   r
  r   	read_moderz   r5  rZ  r[  	read_file)rZ   rP   s     r   r[   zFileObjectClassTestCase.setUp  s    ',QxG1'/!IOOxG1C	49d0$2C!!$'//NNDLL}}[[ll	 0 $G1s   B2c                     | j                   j                          | j                  j                          | j	                  | j                  j
                         d | _        t        j                  |        y rI   )r^  r   ra  r!   r  closedr  r^   rY   s    r   r^   z FileObjectClassTestCase.tearDown  sO     --.$$T*r>   c                     t         j                  |        | j                  j                  | j                  | j
                  | j                  | j                  | j                        | _	        y )NrY  )
r  r   r  r   
write_moderz   r5  rZ  r[  
write_filerY   s    r   r   z#FileObjectClassTestCase.clientSetUp  sM    ''-..11OOT\\}}[[ll	 2 $r>   c                     | j                   j                          | j                  j                          | j	                  | j                  j
                         d | _        t        j                  |        y rI   )r_  r   rf  r!   r  rc  r  r   rY   s    r   r   z&FileObjectClassTestCase.clientTearDown  sO    ../**40r>   c                    | j                   j                  d       | j                  j                  d       | j	                  t
        | j                  j                  d       | j	                  t              5 }| j                  j                  d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nr
   r  z!cannot read from timed out object)
r
  r   ra  r	  r  r  r   r  r  r  )rZ   ctxs     r   testReadAfterTimeoutz,FileObjectClassTestCase.testReadAfterTimeout#  s     	  #A,(;(;Q?w'3NN" (93s}};MN ('s   7CC
c                     | j                   j                  | j                  dd        | j                   j                          | j                  j                          y )Nr   r  )rf  r_  	write_msgflushr^  r   rY   s    r   _testReadAfterTimeoutz-FileObjectClassTestCase._testReadAfterTimeout/  sA    dnnQq12!r>   c                     | j                   j                  t        | j                        dz
        }| j                   j                  d      }||z   }| j	                  || j                         y r  )ra  r	  r  read_msgr   )rZ   	first_seg
second_segr   s       r   testSmallReadz%FileObjectClassTestCase.testSmallRead4  sV    NN''DMM(:1(<=	^^((+
*$dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   rf  r_  rl  rm  rY   s    r   _testSmallReadz&FileObjectClassTestCase._testSmallRead;  (    dnn-r>   c                 p    | j                   j                         }| j                  || j                         y rI   )ra  r	  r   rp  r  s     r   testFullReadz$FileObjectClassTestCase.testFullRead?  s(    nn!!#dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   )rf  r_  rl  r!   rY   s    r   _testFullReadz%FileObjectClassTestCase._testFullReadD  rw  r>   c                      t        | j                               }	 | j                  j                  d      }|sn||z  }$| j	                  || j                         y rP  )ru  rp  ra  r	  r   )rZ   rt  chars      r   testUnbufferedReadz*FileObjectClassTestCase.testUnbufferedReadH  sV    !d4==!#>>&&q)D4KC	 
 	dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   ru  rY   s    r   _testUnbufferedReadz+FileObjectClassTestCase._testUnbufferedReadR  rw  r>   c                 p    | j                   j                         }| j                  || j                         y rI   )ra  readliner   rp  rZ   lines     r   testReadlinez$FileObjectClassTestCase.testReadlineV  s(    ~~&&(t}}-r>   c                     | j                   j                  | j                         | j                   j                          y rI   ru  rY   s    r   _testReadlinez%FileObjectClassTestCase._testReadline[  rw  r>   c                     | j                   j                          | j                  j                         }| j	                  || j
                         y rI   )r
  r!   ra  r	  r   rp  r  s     r   testCloseAfterMakefilez.FileObjectClassTestCase.testCloseAfterMakefile_  s8    nn!!#dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   ru  rY   s    r   _testCloseAfterMakefilez/FileObjectClassTestCase._testCloseAfterMakefilef  rw  r>   c                    | j                   j                          | j                  j                  t	        t
                    }t        | j                  t              r|j                         }| j                  || j                         y rI   )ra  r!   r
  r   r  r   rt  rp  r  decoder   r  s     r   testMakefileAfterMakefileClosez6FileObjectClassTestCase.testMakefileAfterMakefileClosej  sW    mm  S*dmmS)**,Cdmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   ru  rY   s    r   _testMakefileAfterMakefileClosez7FileObjectClassTestCase._testMakefileAfterMakefileCloseq  rw  r>   c                 P    | j                  | j                  j                          y rI   )r  ra  rc  rY   s    r   testClosedAttrz&FileObjectClassTestCase.testClosedAttru  s    DNN1112r>   c                 P    | j                  | j                  j                          y rI   )r  rf  rc  rY   s    r   _testClosedAttrz'FileObjectClassTestCase._testClosedAttrx  s    DOO2223r>   c                     | j                  | j                  j                  | j                         | j                  | j                  j                  | j
                  j                                y rI   )r   ra  r3  r`  r  r
  r  rY   s    r   testAttributesz&FileObjectClassTestCase.testAttributes{  sG    ,,dnn=,,dmm.B.B.DEr>   c                     | j                  | j                  j                  | j                         | j                  | j                  j                  | j
                  j                                y rI   )r   rf  r3  re  r  r  r  rY   s    r   _testAttributesz'FileObjectClassTestCase._testAttributes  sG    --t?--t~~/D/D/FGr>   c                    | j                   j                          | j                  t        | j                   j                         | j
                  j                          | j                  t        | j
                  j                         y rI   )ra  r!   r  r  r  r
  r   r   rY   s    r   testRealClosez%FileObjectClassTestCase.testRealClose  sV    *dnn&;&;<'4==#<#<=r>   c                      y rI   rd   rY   s    r   _testRealClosez&FileObjectClassTestCase._testRealClose  r  r>   r   )&ra   rb   rc   ry   rz   r5  rZ  r[  r`  r   rp  re  rl  r   r[   r^   r   r   rj  rn  rs  rv  ry  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  rd   r>   r   rU  rU    s    	 GHFGIHJIB$+$1
O"
- -
 - .
 - - 34FH>r>   rU  c                       e Zd ZdZdZd Zd Zd Zd Z e	j                   eed      d      d	        Zd
 Zd Zd Zd Zd Zy)!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.r   c                 *   | j                   j                         }| j                  |d| j                  z          | j                  j                  dd      | _         | j                   j                         }| j                  |d| j                  z          y )N   A. r   r      B. )ra  r  r   rl  r
  r   r  s     r   testUnbufferedReadlinez8UnbufferedFileObjectClassTestCase.testUnbufferedReadline  sp    ~~&&(v67//a8~~&&(v67r>   c                     | j                   j                  d| j                  z          | j                   j                  d| j                  z          | j                   j                          y )Nr  r  ru  rY   s    r   _testUnbufferedReadlinez9UnbufferedFileObjectClassTestCase._testUnbufferedReadline  sH    ft~~56ft~~56r>   c                 0   | j                   j                          | j                   j                  d      }| j                  || j                         | j
                  j                          | j                  t        | j                   j                  d       y r   )r
  r!   r   r   rp  ra  r  r   r  s     r   testMakefileClosez3UnbufferedFileObjectClassTestCase.testMakefileClose  sf    mm  &dmm,'4==#5#5t<r>   c                     | j                   j                  | j                         | j                   j                          y rI   ru  rY   s    r   _testMakefileClosez4UnbufferedFileObjectClassTestCase._testMakefileClose  rw  r>   r?  r@  c                     t        j                  | j                        }| j                  j	                          t        j                  | j                        }| j                  |dz
  |       y rP  )rB  r?  r
  ra  r!   r   )rZ   refcount_beforerefcount_afters      r   testMakefileCloseSocketDestroyz@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroy  sM     //$--871,n=r>   c                      y rI   rd   rY   s    r   _testMakefileCloseSocketDestroyzAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroy  r  r>   c                    | j                   j                  d       | j                  | j                  j	                  t        d            d        | j                  | j                  j                  t        | j                        dz
        d        | j                  j                          | j                  j                  d       | j                  j                  t        | j                        dz
        }|Ft        j                  d       | j                  j                  t        | j                        dz
        }t        d      }| j                  j	                  |      }| j                  |d       ||d | z   }| j                  || j                         | j                  | j                  j	                  t        d            d        | j                  | j                  j                  d      d        y )NFr|  r  r  g      ?rJ  r
   )r
  ri  r   ra  readintor  r	  r  rp  r\  r   r]  r   r   r   )rZ   rq  rt  rT  r   s        r   testSmallReadNonBlockingz:UnbufferedFileObjectClassTestCase.testSmallReadNonBlocking  si   !!%(002?F,,S-?!-CDdK				sNN''DMM(:Q(>?	JJsO++C,>,BCImNN##C(A#bq'!dmm,002?F,,Q/6r>   c                 "   | j                   j                  d       | j                  j                  | j                         | j                  j                          | j                  j                          | j                  j                  d       y )Nr        @)	r\  r   rf  r_  rl  rm  r]  r   r^  rY   s    r   _testSmallReadNonBlockingz;UnbufferedFileObjectClassTestCase._testSmallReadNonBlocking  s[    		sdnn-		 	$r>   c                     | j                   j                  d       | j                  r| j                  | j                         y y )Nr  )r_  r   serv_skippedrx   rY   s    r   testWriteNonBlockingz6UnbufferedFileObjectClassTestCase.testWriteNonBlocking  s8    s# MM$++, r>   c                 \   d | _         | j                  j                  d       dt        j                  z  }d}| j
                  j                  |      }| j                  |d       t        |      D ]3  }| j
                  j                  |      }| y | j                  |d       5 d| _         y )NFr  r|  r   z$failed to saturate the socket buffer)	r  r  ri  r   r  rf  r_  r*  r=  )rZ   BIGLIMITrT  rP   s        r   _testWriteNonBlockingz7UnbufferedFileObjectClassTestCase._testWriteNonBlocking  s     ""5)W***OO!!#&1a uA%%c*Ayq!$  !GDr>   N)ra   rb   rc   ry   rz   r  r  r  r  r   r  r   rB  r  r  r  r  r  r  rd   r>   r   r  r    si    < G8 
=  Xm479>9>7&%-Gr>   r  c                       e Zd ZdZy)#LineBufferedFileObjectClassTestCaser
   Nra   rb   rc   rz   rd   r>   r   r  r        Gr>   r  c                       e Zd ZdZy)$SmallBufferedFileObjectClassTestCaser   Nr  rd   r>   r   r  r     r  r>   r  c                   B    e Zd ZdZdZej                  d      ZdZeZ	dZ
y)"UnicodeReadFileObjectClassTestCase=Tests for socket.makefile() in text mode (rather than binary)r   r	   r1  r  Nra   rb   rc   ry   r`  r   r  rp  re  rl  r[  rd   r>   r   r  r    s'    GIzz'"HJIGr>   r  c                   B    e Zd ZdZdZeZdZej                  d      Z	dZ
y)#UnicodeWriteFileObjectClassTestCaser  r   r0  r	   r  N)ra   rb   rc   ry   r`  r   rp  re  r  rl  r[  rd   r>   r   r  r    s'    GIHJ

7#IGr>   r  c                   `    e Zd ZdZdZej                  d      ZdZej                  d      Z	dZ
y)'UnicodeReadWriteFileObjectClassTestCaser  r   r	   r0  r  Nr  rd   r>   r   r  r    s0    GIzz'"HJ

7#IGr>   r  c                       e Zd ZdZd Zy)NetworkConnectionTestzProve network connection.c                 z    t        j                  t        | j                  f      | _        | j                  | _        y rI   )r   create_connectionr   rW   r   r  rY   s    r   r   z!NetworkConnectionTest.clientSetUp&  s*     ++T499,=>r>   N)ra   rb   rc   ry   r   rd   r>   r   r  r  #  s
    #"r>   r  c                       e Zd ZdZy)BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality.
    N)ra   rb   rc   ry   rd   r>   r   r  r  ,  s    r>   r  c                       e Zd Z G d dej                        Zej                  d        Zej                  d        Z
ej                  d        Zd Zd Zy)	NetworkConnectionNoServerc                       e Zd Zd Zy)$NetworkConnectionNoServer.MockSocketc                     t        d      )Nz	timed out)r  rO  s     r   r   z,NetworkConnectionNoServer.MockSocket.connect3  s    {++r>   N)ra   rb   rc   r   rd   r>   r   
MockSocketr  2  s    	,r>   r  c              #      K   t         j                   }| j                  t         _         	 d |t         _         y# |t         _         w xY ww)z*Return a socket which times out on connectN)r   r  )rZ   
old_sockets     r   mocked_socket_modulez.NetworkConnectionNoServer.mocked_socket_module6  s2      ]]
	'&FMJFMs   &A	9 A	AA	c                    t        j                         }t        j                  t        j                  t        j                        }| j                  |j                         | j                  t              5 }|j                  t        |f       d d d        | j                  j                  j                  t        j                         y # 1 sw Y   >xY wrI   )r   r  r   rT   rA   ru   r!   r  r   r   r   r   r  r#  ECONNREFUSED)rZ   rW   r   r  s       r   test_connectz&NetworkConnectionNoServer.test_connect@  s    --/mmFNNF,>,>?		"w'2KKt% (++U-?-?@ ('s   7CCc                 *   t        j                         }| j                  t              5 }t	        j
                  t        |f       d d d        t        j                         }| j                  j                  j                  |       y # 1 sw Y   DxY wrI   )r   r  r  r   r   r  r   get_socket_conn_refused_errsr  r  r#  )rZ   rW   r  expected_errnoss       r   test_create_connectionz0NetworkConnectionNoServer.test_create_connectionI  sj     --/w'2$$dD\2 (" (DDFbll((/:% ('s   B		Bc                    t        j                         }	 t        j                  t        |fd       | j                  d       | j                  t               |j                  D ]  }| j                  |t                t        j                  d|dt        j                        }| j                  t        |      t        |j                               y # t        $ r}|}Y d }~d }~ww xY w)NT)
all_errorszexpected connection to failr  r   )r   r  r   r  r   r  ExceptionGroupr  
exceptionsr   r  rA   r   r  )rZ   rW   r   eg	addressess        r   !test_create_connection_all_errorsz;NetworkConnectionNoServer.test_create_connection_all_errorsb  s    --/	5$$dD\dC II34b.1A!!!W-  &&q&"4"46	 	YR]]);<  	B	s   C 	C+C&&C+c                 D   | j                         5  	 t        j                  t        df       | j	                  d       d d d        y # t
        $ r Y t        $ r8}t        j                  s|j                  t        j                  k7  r Y d }~Od }~ww xY w# 1 sw Y   y xY w)Nr   zTimeoutError not raised)r  r   r  r   r  r  r   r   r  r#  EAFNOSUPPORTr  s     r   test_create_connection_timeoutz8NetworkConnectionNoServer.test_create_connection_timeoutt  s     &&(5(($6 		34 )(     --e>P>P1P 2Q )(s?   BAB	BBB.B	BBBBN)ra   rb   rc   r   r  
contextlibcontextmanagerr  r   skip_if_tcp_blackholer  r  r  r  rd   r>   r   r  r  0  sl    ,V]] , ' ' ((A )A ((; );0=$5r>   r  c                   f    e Zd ZdZddZd Zd Zd ZeZd Z	eZ
d ZeZd ZeZd	 ZeZd
 ZeZd Zy)NetworkConnectionAttributesTestNc                 \    t         j                  | |       t        j                  |        y r   r   r   s     r   r   z(NetworkConnectionAttributesTest.__init__  r   r>   c                 6    t        j                         | _        y rI   )r   r  source_portrY   s    r   r   z+NetworkConnectionAttributesTest.clientSetUp  s    (99;r>   c                     | j                   | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z.NetworkConnectionAttributesTest.clientTearDown  s/    88HHNN%%d+r>   c                 ^    | j                   j                         \  }}|j                          y rI   )rU   r   r!   r  s      r   _justAcceptz+NetworkConnectionAttributesTest._justAccept  s!    YY%%'
d

r>   c                    t        j                  t        | j                  ft        j
                        | _        | j                  | j                  j                         | j                  | j                  j                  d       y )Nr  r   )r   r  r   rW   r   r   r   ru   r!   r   r  rY   s    r   _testFamilyz+NetworkConnectionAttributesTest._testFamily  sT    ++T499,=$+$<$<>'!,r>   c                 J   t        j                  t        | j                  ft        j
                  d| j                  f      | _        | j                  | j                  j                         | j                  | j                  j                         d   | j                         y )Nr  )rL   source_addressr
   )r   r  r   rW   r   r   r  r   ru   r!   r   r   rY   s    r   _testSourceAddressz2NetworkConnectionAttributesTest._testSourceAddress  su    ++T499,=$+$<$<,.0@0@+AC 	'--/2D4D4DEr>   c                    | j                  t        j                         d u        t        j                  d       	 t        j                  t
        | j                  f      | _        | j                  | j                  j                         t        j                  d        | j                  | j                  j                         d       y # t        j                  d        w xY w)NrZ  r  r   rJ   rK   r  r   rW   r   ru   r!   r   r~  rY   s    r   _testTimeoutDefaultz3NetworkConnectionAttributesTest._testTimeoutDefault  s    002d:;  $	+//tyy0ABDHOODHHNN+$$T*,,.3 $$T*s   AC C"c                    | j                  t        j                         d u        t        j                  d       	 t        j                  t
        | j                  fd       | _        | j                  | j                  j                         t        j                  d        | j                  | j                  j                         d        y # t        j                  d        w xY wN   r  r  rY   s    r   _testTimeoutNonez0NetworkConnectionAttributesTest._testTimeoutNone  s    002d:;  $	+//tyy0A4PDHOODHHNN+$$T*,,.5 $$T*s   AC C$c                     t        j                  t        | j                  fd      | _        | j                  | j                  j                         d       y r  )r   r  r   rW   r   r   r~  rY   s    r   _testTimeoutValueNamedz6NetworkConnectionAttributesTest._testTimeoutValueNamed  s<    ++T499,=rJ,,.3r>   c                     t        j                  t        | j                  fd      | _        | j                  | j                  j                         | j                  | j                  j                         d       y )Nr  )	r   r  r   rW   r   ru   r!   r   r~  rY   s    r   _testTimeoutValueNonamedz8NetworkConnectionAttributesTest._testTimeoutValueNonamed  sP    ++T499,=rB',,.3r>   r   )ra   rb   rc   r   r   r   r   r  
testFamilyr  testSourceAddressr  testTimeoutDefaultr  testTimeoutNoner 	  testTimeoutValueNamedr	  testTimeoutValueNonamedr	  rd   r>   r   r  r    sh    
C&<, J- $F %	4 "O	6 (4 *4r>   r  c                   6    e Zd ZddZd Zd Zd ZeZd Zd Z	y)	NetworkConnectionBehaviourTestc                 \    t         j                  | |       t        j                  |        y r   r   r   s     r   r   z'NetworkConnectionBehaviourTest.__init__  r   r>   c                      y rI   rd   rY   s    r   r   z*NetworkConnectionBehaviourTest.clientSetUp  r  r>   c                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   z-NetworkConnectionBehaviourTest.clientTearDown  r   r>   c                     | j                   j                         \  }}| j                  |j                         t	        j
                  d       |j                  d       y )Nr     done!)rU   r   ru   r!   r   r   r  r  s      r   testInsideTimeoutz0NetworkConnectionBehaviourTest.testInsideTimeout  s?    YY%%'
d

#

1		(r>   c                     t        j                  t        | j                  f      x| _        }|j                  d      }| j                  |d       y )Nr  r	  )r   r  r   rW   r   r   r   )rZ   rE  r  s      r   _testInsideTimeoutz1NetworkConnectionBehaviourTest._testInsideTimeout  s?     22D$))3DEE4yy|x(r>   c                     t        j                  t        | j                  fd      x| _        | j                  t        fd       y )Nr
   r  c                  &     j                  d      S )Nr  )r   )rE  s   r   rr  zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>  s    		!r>   )r   r  r   rW   r   r  r  rT  s    @r   _testOutsideTimeoutz2NetworkConnectionBehaviourTest._testOutsideTimeout  s6     22D$))3DaPP4,(<=r>   Nr   )
ra   rb   rc   r   r   r   r	  testOutsideTimeoutr	  r	  rd   r>   r   r	  r	    s(    &,

 +)
>r>   r	  c                   X    e Zd Zd Zd Z ej                   eed      d      d        Z	y)TCPTimeoutTestc                 >      fd} j                  t        |d       y )Nc                  p    j                   j                  d       j                   j                          y r  )rU   r   r   r1  r2  rZ   s     r   raise_timeoutz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeout  s%    II  %IIr>   z*Error generating a timeout exception (TCP)r  r  rZ   r	  s   ` r   testTCPTimeoutzTCPTimeoutTest.testTCPTimeout  s     	 	,J	Lr>   c                    d}	 | j                   j                  d       | j                   j                         }|s| j	                  d       y y # t        $ r | j	                  d       Y 1t
        $ r d}Y = | j	                  d       Y QxY w)NFr#  z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)rU   r   r   r  r  r   rZ   okr  s      r   testTimeoutZerozTCPTimeoutTest.testTimeoutZero  s    	;II  %))""$C IIKL   	?II=> 	B	;II9:s   5A B
*
B
6B
r  ztest needs signal.alarm()c           
      :   | j                   j                  d        G d dt              fd}t        j                  t        j                  |      }	 	 t        j
                  d       | j                   j                         }| j                  d       t        j
                  d       	 t        j                  t        j                  |       y # t        $ r | j                  d       Y W$ r Y ]t        $ r?}| j                  dt        |      d	|d
t        j                                Y d }~d }~ww xY w# t        j
                  d       w xY w# $ r | j                  d       Y w xY w# t        j                  t        j                  |       w xY w)Nr  c                       e Zd Zy)4TCPTimeoutTest.testInterruptedTimeout.<locals>.AlarmNrQ  rd   r>   r   Alarmr(	  	  s    r>   r)	  c                     rI   rd   )r  r  r)	  s     r   alarm_handlerz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handler  s    Kr>   r   znothing caughtzcaught timeout instead of Alarmz)caught other exception instead of Alarm: (z):
r   zgot Alarm in wrong place)rU   r   rd  r  r  r  r   r  r  r   ru  	traceback
format_exc)rZ   r+	  r  r  r   r)	  s        @r   testInterruptedTimeoutz%TCPTimeoutTest.testInterruptedTimeout  s/    			S!	I 		MM&..-@		5 Qii&&( 		*+Q
 MM&..)4!   =		;<   @		7Ay';';'=? @ @@ Q 	2II01	2 MM&..)4sx   /C D> E ,E4 D;,D> .D;2D> 4D;<5D61D> 6D;;D> >EE E1.E4 0E11E4 4&FN)
ra   rb   rc   r!	  r%	  r   r  r   r  r/	  rd   r>   r   r	  r	    s;    LM X146565r>   r	  c                       e Zd Zd Zd Zy)UDPTimeoutTestc                 >      fd} j                  t        |d       y )Nc                  r    j                   j                  d       j                   j                  d       y Nr  r   rU   r   r   r	  s     r   r	  z4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeout'  %    II  %IINN4 r>   z*Error generating a timeout exception (UDP)r	  r 	  s   ` r   testUDPTimeoutzUDPTimeoutTest.testUDPTimeout&  s     	! 	,J	Lr>   c                    d}	 | j                   j                  d       | j                   j                  d      }|s| j	                  d       y y # t        $ r | j	                  d       Y 1t
        $ r d}Y = | j	                  d       Y QxY w)NFr#  r   z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)1recv() returned success when we did not expect itrU   r   r   r  r  r   r#	  s      r   r%	  zUDPTimeoutTest.testTimeoutZero-  s    	;II  %))..&C IIIJ   	?II=> 	B	;II9:   6A B+
B7BN)ra   rb   rc   r7	  r%	  rd   r>   r   r1	  r1	  $  s    LKr>   r1	  c                       e Zd Zd Zd Zy)UDPLITETimeoutTestc                 >      fd} j                  t        |d       y )Nc                  r    j                   j                  d       j                   j                  d       y r4	  r5	  r	  s     r   r	  z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeout@  r6	  r>   z.Error generating a timeout exception (UDPLITE)r	  r 	  s   ` r   testUDPLITETimeoutz%UDPLITETimeoutTest.testUDPLITETimeout?  s     	! 	,N	Pr>   c                    d}	 | j                   j                  d       | j                   j                  d      }|s| j	                  d       y y # t        $ r | j	                  d       Y 1t
        $ r d}Y = | j	                  d       Y QxY w)NFr#  r   z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)r9	  r:	  r#	  s      r   r%	  z"UDPLITETimeoutTest.testTimeoutZeroF  s    	?II  %))..&C IIIJ   	CIIAB 	B	?II=>r;	  N)ra   rb   rc   r@	  r%	  rd   r>   r   r=	  r=	  ;  s    PKr>   r=	  c                       e Zd Zd Zd Zy)TestExceptionsc                    | j                  t        t        t                     | j                  t        t        j
                  t                     | j                  t        t        j                  t                     | j                  t        t        j                  t                     | j                  t        j                  t               | j                  t        j                  t               y rI   )r  
issubclassr   rd  r   r  r  rL   assertIserrorr  rY   s    r   testExceptionTreez TestExceptions.testExceptionTreeV  s~    
7I67
6==':;
6??G<=
6>>7;<fllG,fnnl3r>   c                    t        j                   t         j                  t         j                  d      }t        j                   t         j                  t         j                  d|j                               }|j	                          | j                  |j                         | j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   F)
r   rT   rA   r  r!   ru   ro  r  r   ri  )rZ   sock0rE  s      r   test_setblocking_invalidfdz)TestExceptions.test_setblocking_invalidfd^  s     fnnf.@.@!D}}NNF..5<<>C$w'U# (''s   6CCN)ra   rb   rc   rH	  rK	  rd   r>   r   rC	  rC	  T  s    4
$r>   rC	  rg  Linux specific testc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestLinuxAbstractNamespacel   c                 t   d}t        j                   t         j                  t         j                        5 }|j                  |       |j	                          t        j                   t         j                  t         j                        5 }|j                  |j                                |j                         d   5 }| j                  |j                         |       | j                  |j                         |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Ns    python-test-hello r   )
r   rJ  rA   rv   rX   r   r   r   r   r  )rZ   r  s1r  s3s        r   testLinuxAbstractNamespacez5TestLinuxAbstractNamespace.testLinuxAbstractNamespacep  s    2]]6>>6+=+=>"GGGIIKv~~v/A/ABb

2>>+,YY[^r$$R^^%5w?$$R^^%5w? $ C ?>
 $^ CB ?>s=   AD.	3D"<AD=D"D.DD""D+	'D..D7c                    dd| j                   dz
  z  z   }t        j                  t        j                  t        j                        5 }|j	                  |       | j                  |j                         |       d d d        y # 1 sw Y   y xY w)Nr
     hr
   )UNIX_PATH_MAXr   rJ  rA   rv   r   r   rZ   r  r$   s      r   testMaxNamez&TestLinuxAbstractNamespace.testMaxName{  sc    DD$6$6$:;;]]6>>6+=+=>!FF7OQ]]_g6 ?>>s   2BBc                     dd| j                   z  z   }t        j                  t        j                  t        j                        5 }| j	                  t
        |j                  |       d d d        y # 1 sw Y   y xY w)N h)rV	  r   rJ  rA   r  r   rv   rW	  s      r   testNameOverflowz+TestLinuxAbstractNamespace.testNameOverflow  sS    3!3!333]]6>>6+=+=>!gqvvw7 ?>>s   "A00A9c                    t        j                   t         j                  t         j                        }	 |j                  d       | j	                  |j                         d       |j                          y # |j                          w xY w)Nz python test     python test )r   rJ  rA   rv   r   r   r!   r  s     r   testStrNamez&TestLinuxAbstractNamespace.testStrName  sX    MM&..&*<*<=	FF+,Q]]_.GHGGIAGGIs   1A6 6Bc                    t        j                   t         j                  t         j                        5 }|j                  t	        d             | j                  |j                         d       d d d        y # 1 sw Y   y xY w)Nr^	  )r   rJ  rA   rv   r  r   r   r  s     r   testBytearrayNamez,TestLinuxAbstractNamespace.testBytearrayName  sQ    ]]6>>6+=+=>!FF9678Q]]_.GH ?>>s   ;A77B c                 D   d}t        j                   t         j                  t         j                        5 }|j                  d       | j	                  |j                         |       t        j                   t         j                  t         j                        5 }|j                  d       | j	                  |j                         |       | j                  |j                         |j                                d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ns   ^ [0-9a-f]{5}r  )r   rJ  rA   rv   assertRegexr   r  )rZ   abstract_addressrQ	  r  s       r   testAutobindz'TestLinuxAbstractNamespace.testAutobind  s     -]]6>>6+=+=>"GGBKR^^-/?@v~~v/A/ABb  !13CD##BNN$4bnn6FG C	 ?> CB	 ?>s%   A$DA D
9D
D	DDN)
ra   rb   rc   rV	  rS	  rX	  r\	  r_	  ra	  re	  rd   r>   r   rN	  rN	  k  s*     M	@78
IHr>   rN	  ztest needs socket.AF_UNIXc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej                  ej                  d
k(  d      d        Zy)TestUnixDomainc                 r    t        j                   t         j                  t         j                        | _        y rI   )r   rJ  rA   rE  rY   s    r   r[   zTestUnixDomain.setUp  s    MM&..&2D2DE	r>   c                 8    | j                   j                          y rI   )rE  r!   rY   s    r   r^   zTestUnixDomain.tearDown  s    		r>   c                     	 t        j                  |      S # t        $ r6 | j                  dj	                  |t        j                                      Y y w xY w)NzBPathname {0!a} cannot be represented in file system encoding {1!r})r  fsencoder  rx   r  rB  getfilesystemencodingrZ   rF  s     r   encodedzTestUnixDomain.encoded  sN    	8;;t$$! 	8MM((.#335)78	8s    <AAc                     	 t        j                  ||       y # t        $ r:}t        |      dk(  r!| j	                  dj                  |             n Y d }~y d }~ww xY w)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r   rD  r   r  rx   r  )rZ   rE  rF  r   s       r   rv   zTestUnixDomain.bind  sV    	**46 	1v00LVD\# 	#	s    	A0AAc                 X    | j                  | j                  j                         d       y )N)r  N)r  rE  r   rY   s    r   r  zTestUnixDomain.testUnbound  s    dii++-z:r>   c                 *   t         j                  j                  t        j                        }| j                  | j                  |       | j                  t        j                  |       | j                  | j                  j                         |       y rI   )r  rF  abspathr   TESTFNrv   rE  ru   rC  r   r   rm	  s     r   testStrAddrzTestUnixDomain.testStrAddr  s]    wwy//0		$))T"	(($/..0$7r>   c                 H   t         j                  j                  t        j                        }| j                  | j                  | j                  |             | j                  t        j                  |       | j                  | j                  j                         |       y rI   )r  rF  rr	  r   rs	  rv   rE  rn	  ru   rC  r   r   rm	  s     r   testBytesAddrzTestUnixDomain.testBytesAddr  sf    wwy//0		$))T\\$/0	(($/..0$7r>   c                 l   t         j                  j                  t        j                        }| j                  |      }| j                  | j                  |j                  dd             | j                  t        j                  |       | j                  | j                  j                         |       y )Nasciisurrogateescape)r  rF  rr	  r   TESTFN_UNICODErn	  rv   rE  r  ru   rC  r   r   )rZ   rF  r  s      r   testSurrogateescapeBindz&TestUnixDomain.testSurrogateescapeBind  sy     wwy778LL		$))QXXg/@AB	(($/..0$7r>   c                 l   t         j                  | j                  d       t        j                  j                  t         j                        }| j                  | j                  |       | j                  t         j                  |       | j                  | j                  j                         |       y )Nz!No unencodable filename available)r   TESTFN_UNENCODABLErx   r  rF  rr	  rv   rE  ru   rC  r   r   rm	  s     r   testUnencodableAddrz"TestUnixDomain.testUnencodableAddr  sx     ''/MM=>wwy;;<		$))T"	(($/..0$7r>   rg  rL	  c                 Z    | j                  t        | j                  j                  d       y )Nr  )r  r   rE  rv   rY   s    r   testEmptyAddresszTestUnixDomain.testEmptyAddress  s     	'499>>26r>   N)ra   rb   rc   r[   r^   rn	  rv   r  rt	  rv	  r{	  r~	  r   r  rB  rp  r	  rd   r>   r   rg	  rg	    s\    F	8
;8888 X__S\\W,.CD7 E7r>   rg	  c                   n    e Zd ZdZddZd Zd Zd ZeZd Z	eZ
d Zd Zd	 ZeZd
 ZeZd Zd Zd ZeZy)BufferIOTestzF
    Test the buffer versions of socket.recv() and socket.send().
    c                 2    t         j                  | |       y r   r  r   s     r   r   zBufferIOTest.__init__  r  r>   c                 6   t        j                   ddgt        t              z        }| j                  j	                  |      }| j                  |t        t                     |j                         }|d t        t               }| j                  |t               y Nr  r   )r  r  r   r
  r  r   r<  rZ   rt  r2  r   s       r   testRecvIntoArrayzBufferIOTest.testRecvIntoArray  sn    kk#sSX~.((-S*kkm)3s8nc"r>   c                 X    t        t              }| j                  j                  |       y rI   r-  r   r  r  rZ   rt  s     r   _testRecvIntoArrayzBufferIOTest._testRecvIntoArray      CjC r>   c                     t        d      }| j                  j                  |      }| j                  |t	        t
                     |d t	        t
               }| j                  |t
               y r   )r  r
  r  r   r  r   r	  s       r   testRecvIntoBytearrayz"BufferIOTest.testRecvIntoBytearray  sR    o((-S*)3s8nc"r>   c                     t        d      }| j                  j                  t        |            }| j	                  |t        t                     |d t        t               }| j	                  |t               y r   )r  r
  r  rC  r   r  r   r	  s       r   testRecvIntoMemoryviewz#BufferIOTest.testRecvIntoMemoryview
  sV    o((C9S*)3s8nc"r>   c                 <   t        j                   ddgt        t              z        }| j                  j	                  |      \  }}| j                  |t        t                     |j                         }|d t        t               }| j                  |t               y r	  )r  r  r   r
  r  r   r<  rZ   rt  r2  r  r   s        r   testRecvFromIntoArrayz"BufferIOTest.testRecvFromIntoArray  sr    kk#sSX~.}}2237S*kkm)3s8nc"r>   c                 X    t        t              }| j                  j                  |       y rI   r	  r	  s     r   _testRecvFromIntoArrayz#BufferIOTest._testRecvFromIntoArray  r	  r>   c                     t        d      }| j                  j                  |      \  }}| j                  |t	        t
                     |d t	        t
               }| j                  |t
               y r   )r  r
  r  r   r  r   r	  s        r   testRecvFromIntoBytearrayz&BufferIOTest.testRecvFromIntoBytearray  sV    o}}2237S*)3s8nc"r>   c                     t        d      }| j                  j                  t        |            \  }}| j	                  |t        t                     |d t        t               }| j	                  |t               y r   )r  r
  r  rC  r   r  r   r	  s        r   testRecvFromIntoMemoryviewz'BufferIOTest.testRecvFromIntoMemoryview(  sZ    o}}22:c?CS*)3s8nc"r>   c                 r    t        d      }| j                  t        | j                  j                  |d       y )Nrq   r   )r  r  r  r
  r  r	  s     r   testRecvFromIntoSmallBufferz(BufferIOTest.testRecvFromIntoSmallBuffer1  s)    l*dmm&A&A3Mr>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testRecvFromIntoSmallBufferz)BufferIOTest._testRecvFromIntoSmallBuffer6  r  r>   c                     t               }| j                  j                  |       | j                  j                  |d       y r   )r  r
  r  r	  s     r   testRecvFromIntoEmptyBufferz(BufferIOTest.testRecvFromIntoEmptyBuffer9  s/    k##C(##C+r>   Nr   )ra   rb   rc   ry   r   r	  r	  r	  _testRecvIntoBytearrayr	  _testRecvIntoMemoryviewr	  r	  r	  _testRecvFromIntoBytearrayr	  _testRecvFromIntoMemoryviewr	  r	  r	  _testRecvFromIntoEmptyBufferrd   r>   r   r	  r	    sm    B#!# 0# 1#!# "8# #9N
!,
 $: r>   r	  i        c                      t        t        d      sy	 t        dd      } | 5  | D ]  }|j                  d      s ddd       y 	 ddd       y# t        t        t
        f$ r Y yw xY w# 1 sw Y   yxY w)	zCheck if the TIPC module is loaded

    The TIPC module is not loaded automatically on Ubuntu and probably
    other Linux distros.
    AF_TIPCFz/proc/modulesr	   r4  ztipc NT)r   r   r   FileNotFoundErrorIsADirectoryErrorr   rq  )r   r  s     r   isTipcAvailabler	  E  sx     69%73
 
Dw' 
 
  0/B   
 s'   A A)A)A)A&%A&)A2z6TIPC module is not loaded, please 'sudo modprobe tipc'c                       e Zd Zd Zy)TIPCTestc                 $   t        j                   t         j                  t         j                        }t        j                   t         j                  t         j                        }| j                  |j                         | j                  |j                         |j                  t         j                  t         j                  d       t         j                  t        t        t        f}|j                  |       t         j                  t        t        t        t        t        z
  dz        z   df}|j                  t         |       |j#                  d      \  }}| j%                  |j'                         |       | j%                  |t                y )Nr
   r   r   r   )r   r	  r  ru   r!   r  r  r  TIPC_ADDR_NAMESEQ
TIPC_STYPE
TIPC_LOWER
TIPC_UPPERrv   TIPC_ADDR_NAMEr)  r  r   r  r   r   )rZ   rF  r   srvaddrsendaddrr   recvaddrs          r   testRDMzTIPCTest.testRDM\  s   mmFNNFOO<mmFNNFOO<		"		"v((&*=*=qA++ZJ()):S*z"9Q!>??D

3!T*X*H5c"r>   N)ra   rb   rc   r	  rd   r>   r   r	  r	  Y  s    #r>   r	  c                   ,    e Zd ZddZd Zd Zd Zd Zy)TIPCThreadableTestc                 p    t         j                  j                  | |       t        j                  |        y r   r   r   s     r   r   zTIPCThreadableTest.__init__t  s)    ""4j"A%r>   c                    t        j                   t         j                  t         j                        | _        | j	                  | j                  j
                         | j                  j                  t         j                  t         j                  d       t         j                  t        t        t        f}| j                  j                  |       | j                  j                          | j                          | j                  j!                         \  | _        | _        | j	                  | j"                  j
                         y rP  )r   r	  rA   rF  ru   r!   r  r  r  r	  r	  r	  r	  rv   rX   r   r   r   r   )rZ   r	  s     r   r[   zTIPCThreadableTest.setUpx  s    ==1C1CD'F--v/B/BAF++ZJ(g  "#'88??#4 	4=		(r>   c                    t        j                  d       t        j                  t        j                  t        j                        | _        | j                  | j
                  j                         t        j                  t        t        t        t        t        z
  dz        z   df}| j
                  j                  |       | j
                  j                         | _        y )Nr   r   r   )r   r   r   r	  rA   r   ru   r!   r	  r	  r	  r)  r	  r   r   cliaddr)rZ   r  s     r   r   zTIPCThreadableTest.clientSetUp  s     	

3==1C1CD'%%zS*z"9Q!>??Dxx++-r>   c                     | j                   j                  d      }| j                  |t               | j                  | j                  | j
                         y r   )r   r   r   r   r	  r   r  s     r   r   zTIPCThreadableTest.testStream  s<    iinnT"c"t}}5r>   c                 v    | j                   j                  t               | j                   j                          y rI   r   rY   s    r   r  zTIPCThreadableTest._testStream  r  r>   Nr   r  rd   r>   r   r	  r	  q  s    &
)
.6
r>   r	  c                   *    e Zd Zd Zd Zd Zd Zd Zy)ContextManagersTestc                 4   t        j                          5 }| j                  |j                         d d d        | j                  j                         t        j                          5 }|j	                          d d d        | j                  |j                         t        j                          5 }| j                  t        |j                  d       d d d        | j                  |j                         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   =xY wNr  )r   r  r!  r  r!   r  r   r  rT  s     r   _testSocketClassz$ContextManagersTest._testSocketClass  s    ]]_T\\* %]]_JJL %]]_gt||V< % _ _ _s#   C6(D0"D6C?DDc                     | j                   j                         \  }}| j                  |j                         |j	                  d      }|j                  |       y r   rU   r   ru   r!   r   r  rZ   r   r  r  s       r   testCreateConnectionBasez,ContextManagersTest.testCreateConnectionBase  A    YY%%'
d

#yyTr>   c                 \   | j                   j                         }t        j                  |      5 }| j	                  |j
                         |j                  d       | j                  |j                  d      d       d d d        | j                  j
                         y # 1 sw Y   %xY w)Nr  r   )
rU   r   r   r  r  r!  r  r   r   r  rZ   r  rE  s      r   _testCreateConnectionBasez-ContextManagersTest._testCreateConnectionBase  sz    ))'')%%g.$T\\*LL TYYt_f5 / 	%	 /.s   AB""B+c                     | j                   j                         \  }}| j                  |j                         |j	                  d      }|j                  |       y r   r	  r	  s       r   testCreateConnectionClosez-ContextManagersTest.testCreateConnectionClose  r	  r>   c                 $   | j                   j                         }t        j                  |      5 }|j	                          d d d        | j                  j                         | j                  t        |j                  d       y # 1 sw Y   FxY wr	  )
rU   r   r   r  r!   r  r!  r  r   r  r	  s      r   _testCreateConnectionClosez.ContextManagersTest._testCreateConnectionClose  sa    ))'')%%g.$JJL /%'4<<8 /.s   BBN)ra   rb   rc   r	  r	  r	  r	  r	  rd   r>   r   r	  r	    s    &&9r>   r	  c                       e Zd Z ej                   eed      d       ej                  ddd      d               Z	d Z
d Zd	 Z ej                  ed
u d      d        Z ej                  ed
u d      d        Zd Zy
)InheritanceTestr  zSOCK_CLOEXEC not definedr   r2  r3  c                 F   t        j                   t         j                  t         j                  t         j                  z        5 }| j	                  |j
                  t         j                         | j                  |j                                d d d        y # 1 sw Y   y xY wrI   )r   rT   rA   r  r   ru  r  get_inheritabler  s     r   test_SOCK_CLOEXECz!InheritanceTest.test_SOCK_CLOEXEC  sr     ]]6>>!--0C0CCEHIQVVV%7%78Q..01E E Es   A
BB c                     t        j                          }|5  | j                  |j                         d       d d d        y # 1 sw Y   y xY wr  )r   r   r	  rT  s     r   test_default_inheritablez(InheritanceTest.test_default_inheritable  s3    }}T113U; TTs   !AA
c                    t        j                          }|5  |j                         }|j                          |5  | j                  |j	                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )r   r  r!   r   r	  )rZ   rE  newsocks      r   test_dupzInheritanceTest.test_dup  s\    }}hhjGJJL  !8!8!:EB  T  Ts"   #A8!A,A8,A5	1A88Bc                    t        j                          }|5  |j                  d       | j                  |j                         d       |j                  d       | j                  |j                         d       d d d        y # 1 sw Y   y xY w)NTF)r   set_inheritabler   r	  rT  s     r   test_set_inheritablez$InheritanceTest.test_set_inheritable  sh    }}  &T113T:  'T113U; TTs   A#BBNr   c                    t        j                          }|5  |j                         }| j                  |j                         d       t	        j                  |t        j
                        }|t        j                   z  }t	        j                  |t        j                  |       | j                  |j                         d       d d d        y # 1 sw Y   y xY w)NFT)r   r  r   r	  r   F_GETFD
FD_CLOEXECF_SETFD)rZ   rE  ru  r  s       r   test_get_inheritable_cloexecz,InheritanceTest.test_get_inheritable_cloexec  s    }}BT113U; KKEMM2Ee&&&&EKKEMM51T113T: TTs   B.CCc                    t        j                          }|5  |j                         }| j                  t        j                  |t        j                        t        j
                  z  t        j
                         |j                  d       | j                  t        j                  |t        j                        t        j
                  z  d       d d d        y # 1 sw Y   y xY w)NTr   )r   r  r   r   r	  r	  r	  )rZ   rE  ru  s      r   test_set_inheritable_cloexecz,InheritanceTest.test_set_inheritable_cloexec  s    }}BU[[U]];e>N>NN"--/   &U[[U]];e>N>NN  TTs   B:CC#c                    t        j                         \  }}| j                  |j                         | j                  |j                         | j	                  |j                         d       | j	                  |j                         d       y r  )r   r  ru   r!   r   r	  )rZ   rQ	  r  s      r   test_socketpairzInheritanceTest.test_socketpair  sf    ""$B!!++-u5++-u5r>   )ra   rb   rc   r   r  r   r   r   rS  r	  r	  r	  r	  r  r   r	  r	  r	  rd   r>   r   r	  r	    s    X835#W##Aq"-2 .52<
C< X__Ud]L1; 2; X__Ud]L1	  2	 6r>   r	  rh  zSOCK_NONBLOCK not definedc                   H    e Zd ZddZ ej
                  ddd      d        Zy)NonblockConstantTestc                 D   |r| j                  |j                  t        j                         | j                  |j	                         |       | j                  t        j                  |t        j                  t        j                        t        j                  z         |dk(  r | j                  |j                                y | j                  |j                                y | j                  |j                  t        j                         | j                  |j	                         d        | j                  t        j                  |t        j                  t        j                        t        j                  z         | j                  |j                                y r   )r   ru  r   rA   r~  r  r   r%  r  r&  r  r$  )rZ   r$   nonblockrL   s       r   checkNonblockz"NonblockConstantTest.checkNonblock  s   QVVV%7%78Q\\^W5OOAu}}bmm<r}}LN!|  1 0QVVV%7%78Q\\^T2Au}}bmm<r}}LNOOAMMO,r>   r   r2  r3  c                    t        j                   t         j                  t         j                  t         j                  z        5 }| j	                  |       |j                  d       | j	                  |d       |j                  d       | j	                  |       |j                  d        | j	                  |d       |j                  d       | j	                  |d       |j                  d       | j	                  |d       d d d        t        j                         }t        j                  d       t        j                          5 }| j	                  |       d d d        t        j                  d        t        j                          5 }| j	                  |d       d d d        t        j                  d       t        j                          5 }| j	                  |d       d d d        t        j                  d        t        j                          5 }| j	                  |d       d d d        t        j                  |       y # 1 sw Y   DxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w)NTF)r	  g       @r  r#  )	r   rT   rA   rh  r	  ri  r   rJ   rK   )rZ   r$   ts      r   test_SOCK_NONBLOCKz'NonblockConstantTest.test_SOCK_NONBLOCK%  s    ]]6>>!--0D0DDFIJq!MM$q51MM% q!LLq51LLq#.MM$q51F $$&  %]]_q!   &]]_q%(   %]]_q#.   &]]_q%(   #7F F  _ _ _ _s=   CI
II#I/I;
II #I,/I8;JN)Tr#  )ra   rb   rc   r	  r   rS  r	  rd   r>   r   r	  r	  	  s,    -2 $W##Aq"-$ .$r>   r	  r  r  zneed multiprocessingc                   :    e Zd Zed        Zd Zd Zd Zd Zd Z	y)TestSocketSharingc                     |j                         }|j                         }t        j                  |      }|j                         \  }}|j	                  |       |j                          |j                          y rI   )r   r   	fromsharer   r  r!   )r  qsdatamessager$   r  r  s          r   remoteProcessServerz%TestSocketSharing.remoteProcessServerL  sY     %%'U#
A 	

7

		r>   c                    t        j                         }t        j                  | j                  |f      }|j	                          | j
                  j                  |j                        }| j
                  j                         }| j
                  j                          |j                  |       d}|j                  |       t        j                  |      }g }	 |j                  d      }|sn|j                  |       &|j                          dj                  |      }| j!                  ||       |j                          y )Nr  r1  s
   slapmahfror  r>   )multiprocessingr   Processr	  r  rU   sharepidr   r!   r   r   r  r   ra  r  r   )	rZ   r	  r  r  r  r	  r$   mreceiveds	            r   	testSharezTestSocketSharing.testShareZ  s    
 !!###4+C+C1$O		 yyquu% yy$$&			d  	g $$T*66#;DHHTN	 
 	
	88A;7+	r>   c                     | j                   j                  t        j                               }| j	                  t
        t        j                  |d d        | j	                  t
        t        j                  |dz          y )Nr3  r  )rU   r	  r  getpidr  r  r   r	  )rZ   r  s     r   testShareLengthz!TestSocketSharing.testShareLength}  sT    yyryy{+*f&6&6Sb	B*f&6&6VDr>   c                    | j                  |j                         d        | j                  |j                         |j                                | j                  |j                  |j                         | j                  |j                  |j                         |j                  dk7  r'| j                  |j                  |j                         y y r   )r   r~  r  ru  r  )rZ   orgothers      r   compareSocketsz TestSocketSharing.compareSockets  s     	)40)5+;+;+=>U\\25::. 99>SYY4 r>   c                    | j                   j                  t        j                               }t	        j
                  |      }	 | j                  | j                   |       |j                          y # |j                          w xY wrI   )rU   r	  r  r
  r   r	  r
  r!   )rZ   r  r$   s      r   testShareLocalz TestSocketSharing.testShareLocal  sV    yyryy{+T"			1-GGIAGGIs   A1 1Bc                    t         j                  t         j                  g}t         j                  t         j                  g}|D ]  }|D ]  }	 t        j                   ||      }	 |j                  t        j                               }t        j                  |      }	 | j                  ||       |j                          	 |j                            y # t
        $ r Y w xY w# |j                          w xY w# |j                          w xY wrI   )r   rT   ri  rA   r(   r   r	  r  r
  r	  r
  r!   )rZ   familiestypesr   r	  r  r  shareds           r   	testTypeszTestSocketSharing.testTypes  s    NNFOO4##V%6%67A#]]1a0F#!<<		4D#--d3F'++FF;LLN     LLNs6   C#8C8C#.C8	C C #C55C88D
N)
ra   rb   rc   r:  r	  r	  r
  r
  r
  r
  rd   r>   r   r	  r	  G  s1    
  !FE
5 #r>   r	  c                       e Zd ZdZdZdZdZej                  Z	e
d        Ze
d        Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%y )!SendfileUsingSendTestz>
    Test the send() implementation of socket.sendfile().
    i   r   r>   c                 $   d }dj                  t        | j                        D cg c]3  }t        j                  t
        j                        j                         5 c}      }t        t        j                  d      5 } || j                  | j                        D ]  }|j                  |        	 d d d        t        t        j                  d      5 }|j                         | _        d d d        y c c}w # 1 sw Y   GxY w# 1 sw Y   y xY w)Nc              3   B   K   | |kD  r| | |z  } | |kD  r| r|  y y wrI   rd   )totalsteps     r   chunksz0SendfileUsingSendTest.setUpClass.<locals>.chunks  s3     $,
 $,  s   r>   r1  r   )r  r=  BUFSIZErandomchoicestringascii_lettersr`  r   r   rs	  FILESIZEr_  r	  FILEDATA)r  r
  rP   chunkr   csizes         r   
setUpClassz SendfileUsingSendTest.setUpClass  s    	 #(#57#5a !--(<(<=DDF#57 8)""D)Qckk: ; * )""D)Q668CL *)7)) *)s   8C5?4C:D:DDc                 J    t        j                  t         j                         y rI   )r   rC  rs	  )r  s    r   tearDownClassz#SendfileUsingSendTest.tearDownClass  s    ))*r>   c                     | j                   j                  t        j                         | j                   j	                         \  }}|j                  | j
                         | j                  |j                         |S rI   )rU   r   r   rE  r   TIMEOUTru   r!   r  s      r   accept_connz!SendfileUsingSendTest.accept_conn  sU    		W112YY%%'
d%

#r>   c                     g }	 |j                  | j                        }|sn|j                  |       0dj                  |      S r  )r   r
  ra  r  )rZ   r   r	  r
  s       r   	recv_datazSendfileUsingSendTest.recv_data  sD    IIdll+EOOE"	 
 xx!!r>   c                     t        |d      S )N_sendfile_use_sendr   rT  s     r   meth_from_sockz$SendfileUsingSendTest.meth_from_sock  s     t122r>   c                    | j                   j                         }t        t        j                  d      }t        j                  |      5 }|5 }| j                  |      } ||      }| j                  || j                         | j                  |j                         | j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rU   r   r   r   rs	  r   r  r)
  r   r
  tellrZ   r  filerE  methsents         r   _testRegularFilez&SendfileUsingSendTest._testRegularFile  s    ))'')I$$d+%%g.$&&t,D:DT4==1TYY[$--8	 9=....s%   
C
A B>-C
>C	C

Cc                     | j                         }| j                  |      }| j                  t        |      | j                         | j                  || j
                         y rI   r#
  r%
  r   r  r
  r
  rZ   r   r  s      r   testRegularFilez%SendfileUsingSendTest.testRegularFile  J    !~~d#TDMM2t}}-r>   c                    | j                   j                         }t        j                  | j                        }t        j                  |      5 }|5 }|j                  |      }| j                  || j                         | j                  |j                         | j                         | j                  t
        j                  |j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrI   )rU   r   ioBytesIOr
  r   r  ry  r   r
  r,
  r  r  r  )rZ   r  r.
  rE  r0
  s        r   _testNonRegularFilez)SendfileUsingSendTest._testNonRegularFile  s    ))'')zz$--(%%g.$==&DT4==1TYY[$--8f66"994A	 9=....s%   C2BC&C2&C/	+C22C;c                     | j                         }| j                  |      }| j                  t        |      | j                         | j                  || j
                         y rI   r3
  r4
  s      r   testNonRegularFilez(SendfileUsingSendTest.testNonRegularFile  r6
  r>   c                    | j                   j                         }t        j                  dz   }t	        |d      5  | j                  t        j                  |       d d d        t	        |d      }t        j                  |      5 }|5 }| j                  |      } ||      }| j                  |d       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N2r1  r   r   )rU   r   r   rs	  r   ru   rC  r   r  r)
  r   r,
  )rZ   r  filenamer.
  rE  r/
  r0
  s          r   _testEmptyFileSendz(SendfileUsingSendTest._testEmptyFileSend	  s    ))'')##c)(D!OOI,,h7 "Hd#%%g.$&&t,D:DT1%TYY[!,	 9=.. "! 9=..s0   !C$C<AC0C<$C-0C9	5C<<Dc                 j    | j                         }| j                  |      }| j                  |d       y r  )r#
  r%
  r   r4
  s      r   testEmptyFileSendz'SendfileUsingSendTest.testEmptyFileSend  s.    !~~d#s#r>   c                    | j                   j                         }t        t        j                  d      }t        j                  |      5 }|5 }| j                  |      } ||d      }| j                  || j                  dz
         | j                  |j                         | j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr     )offsetr+
  r-
  s         r   _testOffsetz!SendfileUsingSendTest._testOffset  s    ))'')I$$d+%%g.$&&t,DT*DT4==4#78TYY[$--8	 9=....s%   
CA%C2CC	CCc                     | j                         }| j                  |      }| j                  t        |      | j                  dz
         | j                  || j
                  dd         y )NrD
  r3
  r4
  s      r   
testOffsetz SendfileUsingSendTest.testOffset%  sV    !~~d#TDMMD$89t}}TU34r>   c                    | j                   j                         }t        t        j                  d      }t        j                  |t        j                        }|5  |5  d}| j                  |      } |||      }| j                  ||       | j                  |j                         |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  GKL r  rU   r   r   r   rs	  r   r  r   r   r)
  r   r,
  rZ   r  r.
  rE  r  r/
  r0
  s          r   
_testCountz SendfileUsingSendTest._testCount-  s    ))'')I$$d+''070H0HJ4E&&t,DE*DT5)TYY[%0 TT44TT%   CAC /C C		CCc                     d}| j                         }| j                  |      }| j                  t        |      |       | j                  || j                  d |        y )NrJ
  r#
  r%
  r   r  r
  rZ   r  r   r  s       r   	testCountzSendfileUsingSendTest.testCount9  sR    !~~d#TE*t}}Ve45r>   c                    | j                   j                         }t        t        j                  d      }t        j                  |t        j                        }|5  |5  d}| j                  |      } |||      }| j                  ||       | j                  |j                         |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r
   rK
  rL
  rM
  s          r   _testCountSmallz%SendfileUsingSendTest._testCountSmallB  s    ))'')I$$d+''070H0HJ4E&&t,DE*DT5)TYY[%0 TT44TTrO
  c                     d}| j                         }| j                  |      }| j                  t        |      |       | j                  || j                  d |        y rP  rQ
  rR
  s       r   testCountSmallz$SendfileUsingSendTest.testCountSmallN  sR    !~~d#TE*t}}Ve45r>   c                    | j                   j                         }t        t        j                  d      }t        j                  |d      5 }|5 }d}| j                  |      } ||d|      }| j                  ||       | j                  |j                         |dz          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r  駆   )rE
  r  )
rU   r   r   r   rs	  r   r  r)
  r   r,
  rM
  s          r   _testCountWithOffsetz*SendfileUsingSendTest._testCountWithOffsetW  s    ))'')I$$d+%%gq9T44E&&t,DT7DT5)TYY[%$,7 DH994499s%   C AB4#C 4B=	9C  C	c                     d}| j                         }| j                  |      }| j                  t        |      |       | j                  || j                  d|dz           y )NrY
  rZ
  rQ
  rR
  s       r   testCountWithOffsetz)SendfileUsingSendTest.testCountWithOffseta  sV    !~~d#TE*t}}T%*=>r>   c                    | j                   j                         }t        t        j                  d      }t        j                  |      5 }|5 }|j                  d       | j                  |      }| j                  t        ||       | j                  t        |j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   F)rU   r   r   r   rs	  r   r  ri  r)
  r  r  ry  rZ   r  r.
  rE  r/
  s        r   _testNonBlockingz&SendfileUsingSendTest._testNonBlockingj  s    ))'')I$$d+%%g.$U#&&t,Dj$5j$-->	 9=....s%   
CAB9(C9C	>CCc                 j    | j                         }|j                  d      r| j                  d       y y )Nr   z$was not supposed to receive any data)r#
  r   r  rZ   r   s     r   testNonBlockingz%SendfileUsingSendTest.testNonBlockings  s-    !99T?II<= r>   c                 |   | j                   j                         }t        t        j                  d      }t        j                  |t        j                        }|5  |5  | j                  |      } ||      }| j                  || j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  )rU   r   r   r   rs	  r   r  r   r   r)
  r   r
  r-
  s         r   _testWithTimeoutz&SendfileUsingSendTest._testWithTimeoutz  s    ))'')I$$d+''070H0HJ4&&t,D:DT4==1 TT44TTs$   B26B&B2&B/	+B22B;c                     | j                         }| j                  |      }| j                  t        |      | j                         | j                  || j
                         y rI   r3
  r4
  s      r   testWithTimeoutz%SendfileUsingSendTest.testWithTimeout  r6
  r>   c                 \   | j                   j                         }t        t        j                  d      5 }t        j                  |      5 }|j                  d       | j                  |      }| j                  t        ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   g{Gz?)rU   r   r   r   rs	  r   r  r   r)
  r  r  r_
  s        r   _testWithTimeoutTriggeredSendz3SendfileUsingSendTest._testWithTimeoutTriggeredSend  s    ))''))""D)T))'2d%**40!!,d; 3 *)22 *)s#   B":BB"B	B""B+c                 p    | j                         }|j                  d       t        j                  d       y )NiX r
   )r#
  r   r   r   rb
  s     r   testWithTimeoutTriggeredSendz2SendfileUsingSendTest.testWithTimeoutTriggeredSend  s'    !		%

1r>   c                      y rI   rd   rY   s    r   _test_errorsz"SendfileUsingSendTest._test_errors  r  r>   c           	         t        t        j                  d      5 }t        j                  t        j                        5 }| j                  |      }| j                  t        d||       d d d        d d d        t        t        j                  d      5 }t        j                         5 }| j                  |      }| j                  t        d||       d d d        d d d        t        t        j                  d      5 }t        j                         5 }| j                  |      }| j                  t        d||d	       | j                  t        d||d
	       | j                  t        d||d	       | j                  t        d||d	       d d d        d d d        y # 1 sw Y   6xY w# 1 sw Y   ;xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   DxY w# 1 sw Y   y xY w)Nr   r  rA   r	   r4  zbinary modezpositive integerr>
  rK
  r   r   r3  )	r   r   rs	  r   r(   r)
  r  r  r   )rZ   r.
  r$   r/
  s       r   test_errorsz!SendfileUsingSendTest.test_errors  s   )""D)TF$5$56!**1-&&tT; 7 *
 )""W5A**1-&&tT; ! 6
 )""D)TA**1-&&y2D'+T ' >&&y2D'+T ' >&&z3E'+T ' <&&z3E'+T ' = ! *) 76 *) ! 65 ! *)sl   %F+ *F*F+G**F8G>GA:GGF(	#F++F58G	=GGG	GG%N)&ra   rb   rc   ry   r
  r
  r
  r   r   r"
  r:  r
  r 
  r#
  r%
  r)
  r1
  r5
  r:
  r<
  r@
  rB
  rF
  rH
  rN
  rS
  rU
  rW
  r[
  r]
  r`
  rc
  re
  rg
  ri
  rk
  rm
  ro
  rd   r>   r   r
  r
    s     !HGH&&G5 5$ + +"39.A.
-$95
16
168??>2.<=r>   r
  ry  z%os.sendfile() required for this test.c                       e Zd ZdZd Zy)SendfileUsingSendfileTestzB
    Test the sendfile() implementation of socket.sendfile().
    c                     t        |d      S )Nr  r(
  rT  s     r   r)
  z(SendfileUsingSendfileTest.meth_from_sock  s    t566r>   N)ra   rb   rc   ry   r)
  rd   r>   r   rq
  rq
    s    7r>   rq
  zAF_ALG requiredc                       e Zd Zd Z ej
                  dd      d        Zd Z ej
                  dd      d        Z ej
                  dd      d	        Z	 ej
                  dd      d
        Z
d Zd Zy)LinuxKernelCryptoAPIc                    t        j                   t         j                  t         j                  d      }	 |j                  ||f       |S # t        $ r5}|j                          t        j                  t        |      ||      d }~ww xY wr   )	r   r6   r1   rv   r	  r!   r   SkipTestr  )rZ   typr  rE  r   s        r   
create_algzLinuxKernelCryptoAPI.create_alg  sn    }}V]]F,A,A1E	IIsDk" K ! 	7JJL##CFC66	7s   A
 
	B0BBr  r  c                    t         j                  d      }| j                  dd      5 }|j                         \  }}|5  |j	                  d       | j                  |j                  d      |       d d d        |j                         \  }}|5  |j                  dt        j                         |j                  dt        j                         |j                  dt        j                         |j                  d	       | j                  |j                  d      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
N@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adhashsha256s   abcr      a   b   cr>   )
r-  fromhexrx
  r   r  r   r   r  r   MSG_MORE)rZ   r  algoopr   s        r   test_sha256z LinuxKernelCryptoAPI.test_sha256  s    == ": ;__VX.$KKMEB

6"  x8  KKMEBfoo.foo.foo.  x8  /.
  /.s;   E
3D21E
BD>!E
2D;	7E
>E	E

Ec                    d}d}t         j                  d      }| j                  dd      5 }|j                  t        j
                  t        j                  |       |j                         \  }}|5  |j                  |       | j                  |j                  d      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ns   Python loves AF_ALGs   what do ya want for nothing?(193dbb43c6297b47ea6277ec0ce67119a3f3aa66r{
  z
hmac(sha1)r   )r-  r
  rx
  r  r   SOL_ALGALG_SET_KEYr   r  r   r   )rZ   keyr  r  r
  r
  r   s          r   test_hmac_sha1z#LinuxKernelCryptoAPI.test_hmac_sha1  s     %.==!KL__V\2dOOFNNF,>,>DKKMEB

4   x8  32  32s$   AC13B5$C5B>	:CC
r  c                    t         j                  d      }t         j                  d      }d}t         j                  d      }t        |      }| j                  dd      5 }|j	                  t
        j                  t
        j                  |       |j                         \  }}|5  |j                  t
        j                  |t
        j                         |j                  |       | j                  |j                  |      |       d d d        |j                         \  }}|5  |j                  |gt
        j                  |       | j                  |j                  |      |       d d d        d	}	|g|	z  }
|j                         \  }}|5  |j                  |
t
        j                  |       |j                  ||	z        }d d d        | j                  t              ||	z         | j                  |d | |       |j                         \  }}|5  |j                  |gt
        j                  |       |j                  ||	z        }d d d        | j                  t              ||	z         | j                  |||	z         d d d        y # 1 sw Y   xY w# 1 sw Y   7xY w# 1 sw Y   xY w# 1 sw Y   kxY w# 1 sw Y   y xY w)
N 06a9214036b8a15b512e03d534120006 3dafba429d9eb430b422da802c9fac41s   Single block msg e353779c1079aeb82708942dbe77181askcipherzcbc(aes))r
  ivr  )r
  r
  r   )r-  r
  r  rx
  r  r   r
  r
  r   sendmsg_afalgALG_OP_ENCRYPTr
  r  r   r   ALG_OP_DECRYPT)rZ   r
  r
  r   
ciphertextmsglenr
  r
  r   
multiplierlongmsgencdecs                r   test_aes_cbcz!LinuxKernelCryptoAPI.test_aes_cbc  sW   mm>?]]=>!]]#EF
S__Z4OOFNNF,>,>DKKMEB  F$9$9b'- ! 8

3  *=	  KKMEB  *$*$9$9b ! B  #6  Jej(GKKMEB  $*$9$9b ! Bggfz12  SXv
':;S&\:6KKMEB  #$*$9$9b ! Bggfz12  SXv
':;S#
"23A 54    7 54sp   AK$A#JK$AJ)%K7J+AK8J7;KJ	KJ(	#K+J4	0K7K 	<KKrA  c                 
	   t        j                  d      }||dk\  r|dk  r| j                  d       t        j	                  d      }t        j	                  d      }t        j	                  d      }t        j	                  d      }t        j	                  d	      }t        j	                  d
      }t        |      }t        |      }	| j                  dd      5 }
|
j                  t        j                  t        j                  |       |
j                  t        j                  t        j                  d |       |
j                         \  }}|5  |j                  t        j                  ||	t        j                         |j!                  |t        j                         |j!                  |       |j#                  |	t        |      z   |z         }| j%                  |||	|         | j%                  ||| d         d d d        |
j                         \  }}|5  ||z   }|j                  |gt        j                  ||	       |j#                  |	t        |      z   |z         }| j%                  |||	|         | j%                  ||| d         d d d        t'        j(                  d      j*                  }|
j                         \  }}|5  ||z   }|j-                  |gt        j                  t        j.                   |t        j                        gt        j                  t        j0                   |t        |            |z   gt        j                  t        j2                   ||	      gf       |j#                  t        |      |z         }| j%                  |||	|         | j%                  ||| d         d d d        |
j                         \  }}|5  ||z   |z   }|j                  |gt        j4                  ||	       |j#                  t        |      |z
        }| j%                  |||	d         d d d        d d d        y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   8xY w# 1 sw Y   y xY w)NLinux)r2  rJ  )r2  r$  zupstream Linux kernel issue c939cc13397c1d37de6ae0e1cb7c423cb3d8cc017cbb89b39e0f67e2 c3b3c41f113a31b73d9a5cd432103069 24825602bd12a984e0092d3e448eda5f 93fe7d9e9bfd10348a5606e5cafa7354 0032a1dc85f1c9786925a2e71d8272ddaeadzgcm(aes))r
  r
  assoclenr  )r
  r
  r
  r   )r   _get_kernel_versionrx   r-  r
  r  rx
  r  r   r
  r
  ALG_SET_AEAD_AUTHSIZEr   r
  r
  r
  r  r   r   r   Structr  r  
ALG_SET_OP
ALG_SET_IVALG_SET_AEAD_ASSOCLENr
  )rZ   kernel_versionr
  r
  plainassocexpected_ctexpected_tagtaglenr
  r
  r
  r   resr   pack_uint32s                   r   test_aead_aes_gcmz&LinuxKernelCryptoAPI.test_aead_aes_gcm  s    44W=%(^g-E;<mm>?]]56@A@Amm$FG}}%GH\"u:__VZ0DOOFNNF,>,>DOOFNNF,H,H &* KKMEB  F$9$9b*2&// ! K

5&//2

5!gghU3f<=  c(F7.CD  sF78}=  KKMEBem  #6+@+@R*2 ! 4gghU3f<=  c(F7.CD  sF78}=  !--,11KKKMEBem

Ennf&7&7VEZEZ9[\nnf&7&7SW9MPR9RSnnf&B&BKPXDYZ ggc#h/0  c(F7.CD  sF78}=  KKMEBk)L8  #6+@+@R*2 ! 4ggc#h/0  HI7 Y 10    Y 10sq   A5Q9B/Q=Q9A6Q<Q9C.Q!:Q9AQ-6Q9Q	Q9Q	Q9!Q*	&Q9-Q6	2Q99Rc                    | j                  dd      5 }t        j                  d      }|j                  t        j
                  t        j                  |       |j                         \  }}|5  |j                  d      }| j                  t        |      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrngdrbg_pr_sha256rI  )rx
  r  urandomr  r   r
  r
  r   r   r   r  )rZ   r
  
extra_seedr
  r   rns         r   test_drbg_pr_sha256z(LinuxKernelCryptoAPI.test_drbg_pr_sha256`  s     __U$45BJOOFNNF,>,>
KKKMEBWWR[  R"- 	 65 	 65s$   AB7--B+B7+B4	0B77C c                 &   t        j                   t         j                  t         j                  d      }|5  | j                  t              5  |j                          d d d        | j                  t              5  |j                  d        d d d        | j                  t              5  |j                  d       d d d        | j                  t              5  |j                  t         j                  d        d d d        | j                  t              5  |j                  t         j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   BxY w# 1 sw Y   y xY w)Nr   )r
  r
   )r
  r
  r3  )r   r6   r1   r  r   r
  r
  rT  s     r   test_sendmsg_afalg_argsz,LinuxKernelCryptoAPI.test_sendmsg_afalg_argsk  s   }}V]]F,A,A1E""9-""$ . ""9-""d"+ . ""9-""1% . ""9-""f&;&;d"K . ""9-""f&;&;b"I . T-- .- .- .- .- Ts   FEF:EF*E#<F"E/;F"E;:FE	FE 	F#E,	(F/E8	4F;F	 FFc                 |   t        j                   t         j                  t         j                  d      }| j                  |j                         | j                  t              5  |j                  d       d d d        | j                  t        d      5  |j                  d       d d d        | j                  t              5  |j                  d       d d d        | j                  t        d      5  |j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   RxY w# 1 sw Y   y xY w)Nr   )tttttttttttttr  ztype too long)ttttttttttttttr  )ru  ?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)ru  @nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r6   r1   ru   r!   r  r	  rv   r  r  rT  s     r   test_length_restrictionz,LinuxKernelCryptoAPI.test_length_restriction}  s    }}V]]F,A,A1E

# 01II() 2##J@II() A 01II() 2##J@II() A@ 21@@ 21@@s0   $DDD&3D2DD#&D/2D;N)ra   rb   rc   rx
  r   rS  r
  r
  r
  r
  r
  r
  r
  rd   r>   r   rt
  rt
    s    	 $W##Aq)9 *9"9 $W##Aq)&4 *&4P $W##Aq)B8 *B8H $W##Aq). *.J$*r>   rt
  r  r  c                       e Zd Zd Zy)TestMacOSTCPFlagsc                 B    | j                  t        j                         y rI   )r  r   TCP_KEEPALIVErY   s    r   test_tcp_keepalivez$TestMacOSTCPFlags.test_tcp_keepalive  s    ,,-r>   N)ra   rb   rc   r
  rd   r>   r   r
  r
    s    .r>   r
  winzrequires Windowsc                       e Zd Zh dZd Zy)TestMSWindowsTCPFlags>   
TCP_MAXSEGTCP_KEEPCNTTCP_NODELAYTCP_FASTOPENTCP_KEEPIDLETCP_KEEPINTVLc                     t        t              D cg c]  }|j                  d      s| }}|D cg c]  }|| j                  vs| }}| j	                  g |d       y c c}w c c}w )NTCPzANew TCP flags were discovered. See bpo-32394 for more information)dirr   rq  knownTCPFlagsr   )rZ   r$   providedunknowns       r   test_new_tcp_flagsz(TestMSWindowsTCPFlags.test_new_tcp_flags  se    "6{B{!all5.AA{B&Fh!43E3E*E1hFWO	Q CFs   A!A!A&A&N)ra   rb   rc   r
  r
  rd   r>   r   r
  r
    s    MQr>   r
  c                   J   e Zd Zd Zd Zd Z ej                   ee	d       xs
  ee	d       d       ej                  ej                  d      d               Z ej                   ej                          d	       ej                  ej                  d      d
               Zy)CreateServerTestc                 6   t        j                         }t        j                  d|f      5 }| j	                  |j                         d   d       | j	                  |j                         d   |       d d d        t         j                  rwt        j                  d|ft        j                        5 }| j	                  |j                         d   d       | j	                  |j                         d   |       d d d        y y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r   r
   r  r  )r   r  r   create_serverr   r   r  ri  rZ   rW   rE  s      r   test_addresszCreateServerTest.test_address  s    --/!!;"56$T--/2K@T--/2D9 7 %%%%udm-3__>AE  !1!1!3A!6>  !1!1!3A!6=> > & 76> >s   AD2ADDDc                 >   t        j                  d      5 }| j                  |j                  t         j                         | j                  |j
                  t         j                         d d d        t        j                  rt        j                  dt         j                        5 }| j                  |j                  t         j                         | j                  j
                  t         j                         d d d        y y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r   r  )
r   r
  r   r  rT   ru  rA   r   r  ri  )rZ   rE  r$   s      r   test_family_and_typez%CreateServerTest.test_family_and_type  s    !!"23tT[[&..9TYY(:(:; 4 %%%%jIQ  6??;  F,>,>? JI & 43 JIs   AD(ADDDc                 T   t        t        d      s6| j                  t              5  t        j                  dd       d d d        y t        j                  d      5 }|j                  t        j                  t        j                        }| j                  |d       d d d        t        j                  dd      5 }|j                  t        j                  t        j                        }| j                  |d       d d d        y # 1 sw Y   y xY w# 1 sw Y   vxY w# 1 sw Y   y xY w)NSO_REUSEPORT)r  r   T)
reuse_portr   )
r   r   r  r  r
  r  r  r
  r   r  )rZ   rE  r  s      r   test_reuse_portz CreateServerTest.test_reuse_port  s    v~."":.$$%5$G /. %%&674oof&7&79L9LM  a( 8 %%&64HDoof&7&79L9LM##C+ IH /. 87 IHs%   DAD<ADDDD'r  r  r  r  c                 x    t        j                  dt         j                        5 }d d d        y # 1 sw Y   y xY w)Nr
  r  )r   r
  ri  rT  s     r   test_ipv6_only_defaultz'CreateServerTest.test_ipv6_only_default  s$    
 !!*V__EEEEs   09dualstack_ipv6 not supportedc                     t        j                  dt         j                  d      5 }| j                  |j                  t         j                         d d d        y # 1 sw Y   y xY w)Nr
  Tr  dualstack_ipv6)r   r
  ri  r   r  rT  s     r   test_dualstack_ipv6_familyz+CreateServerTest.test_dualstack_ipv6_family  sH     !!*V__157:>T[[&//:7 7 7s   +AA$N)ra   rb   rc   r
  r
  r
  r   r  r   r  r  r   r  r
  r   has_dualstack_ipv6r
  rd   r>   r   r
  r
    s    	>@
, X__.99 9 -8879 X335RSL T9L X__2224435X335RS; T5;r>   r
  c                      e Zd Zej                  Zd Zd Zd Z e	j                  ej                  d      d        Z e	j                   ej                           d       e	j                  ej                  d      d               Z e	j                   ej                           d       e	j                  ej                  d      d               Zy	)
CreateServerFunctionalTestc                 0     fd}t        j                         |j                   j                         t        j                  ||f      } |j
                           j                  |j                   j                         j                          y )Nc                 *   | 5  | j                         \  }}|5  j                  j                         |j                  d      }|s	 d d d        d d d        y |j	                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr   )r   r   rL   r   r  )rE  r   r   r   r!  rZ   s       r   runz3CreateServerFunctionalTest.echo_server.<locals>.run  so    ++-aJJt||,))D/C	   LL%  T s.   B	0A=
B	A=,B	=B	B		Br	  )	r   r   r   rL   r  r  ru   r  r   )rZ   rE  r
  r   r!  s   `   @r   echo_serverz&CreateServerFunctionalTest.echo_server  sd    	& !%!!D8<T\\2		r>   c                    t        j                   |      5 }|j                  | j                         |j                  |       |j	                  d       | j                  |j                  d      d       d d d        y # 1 sw Y   y xY w)Nr  r  r   )r   r   rL   r   r  r   r   )rZ   r  r  rE  s       r   echo_clientz&CreateServerFunctionalTest.echo_client  s\    ]]&)TOODLL)LLLL TYYt_f5	 *))s   AA??Bc                     t        j                         }t        j                  d|f      5 }| j	                  |       | j                  d|ft        j                         d d d        y # 1 sw Y   y xY w)Nr  r  )r   r  r   r
  r
  r
  rT   r
  s      r   	test_tcp4z$CreateServerFunctionalTest.test_tcp4  sW    --/!!2t*-T"k40&..A .--s   4A))A2r  c                 
   t        j                         }t        j                  d|ft        j                        5 }| j                  |       | j                  d|ft        j                         d d d        y # 1 sw Y   y xY w)Nr  r  r  r   r  r   r
  ri  r
  r
  r
  s      r   	test_tcp6z$CreateServerFunctionalTest.test_tcp6  sd    --/!!2t*)/:=AT"eT]FOO<: : :s   4A99Br
  c                    t        j                         }t        j                  d|ft        j                  d      5 }| j                  |       | j                  d|ft        j                         d d d        y # 1 sw Y   y xY w)Nr  Tr
  r  )r   r  r   r
  ri  r
  r
  rT   r
  s      r   test_dual_stack_client_v4z4CreateServerFunctionalTest.test_dual_stack_client_v4  si     --/!!2t*V__157:>T"k40&..A7 7 7   4A::Bc                    t        j                         }t        j                  d|ft        j                  d      5 }| j                  |       | j                  d|ft        j                         d d d        y # 1 sw Y   y xY w)Nr  Tr
  r  r
  r
  s      r   test_dual_stack_client_v6z4CreateServerFunctionalTest.test_dual_stack_client_v6  sh     --/!!2t*V__157:>T"eT]FOO<7 7 7r
  N)ra   rb   rc   r   r   rL   r
  r
  r
  r   r  r   r  r
  r  r   r
  r
  r
  rd   r>   r   r
  r
    s    &&G$6B X335RS= T= X__2224435X335RSB T5B X__2224435X335RS= T5=r>   r
  send_fdsrecv_fdsc                       e Zd Zd Zy)SendRecvFdsTestsc           	      "   d }d }t        d      D cg c]  }t        j                          }}| j                  ||       |D cg c]  \  }}|	 }}}t	        j
                  t        j                  t        j                        \  }}	|5  |	5  t	        j                  |t        g|       t	        j                  |	t        t              dz  t        |      dz        \  }
}}}| j                  ||       d d d        d d d        | j                  
t               | j                  t              t        |             | j                  d       t        |      D ]7  \  }}|\  }}t        j                  |t        |      j!                                9 t        |      D ]D  \  }}t        j"                  |d      }| j                  |t        |      j!                                F y c c}w c c}}w # 1 sw Y   xY w# 1 sw Y   xY w)Nc                 l    | D ]/  \  }}t        j                  |       t        j                  |       1 y rI   r  r!   )pipesr  fd2s      r   close_pipesz8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipes$  s&    !S "r>   c                 <    | D ]  }t        j                  |        y rI   r  )rb  ru  s     r   	close_fdsz6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fds)  s     r>   r|  r   r   r  )r=  r  piperu   r   r  rJ  rA   r
  r   r   r  r   re  r_  r  r`  r	  )rZ   r  r
  r   r  rfdwfdrb  r  r  r   fds2r  r  r.  r  s                   r   testSendAndRecvFdsz#SendRecvFdsTests.testSendAndRecvFds#  s   	
	
 %*"I.IqI.U+#()5xsCs5) ((9K9KLuEOOEC5#.%+__UCHqL#c(UV,%W"CudOOIt,	 U 	c"TCH-" $E*JE3HCHHS#e*++-. + $D/JE3773$DTCJ$5$5$78 *- /) EUUs0   G,G1HA'G78H7H	<HHN)ra   rb   rc   r  rd   r>   r   r  r    s    #9r>   r  c                  t    t        j                         } t        j                  t         j                  g|   y rI   )r   threading_setupr   addModuleCleanupthreading_cleanup)thread_infos    r   setUpModuler  I  s*    "224K.@@O;Or>   __main__)r   testr   test.supportr   r   r   _threadr   r  r  r#  r  r8
  r  r  r  r>  rp  r   r
  r  r  r  r   r
  r   rB  r  r   r   r-	  weakrefr   r	  r  r   requires_working_socketr   r`  r   r   r   systemr   releaseWSLr  r   r%   r*   r.   r2   r7   r:   r=   rC   rG   r  rN   HAVE_SOCKET_CANHAVE_SOCKET_CAN_ISOTPHAVE_SOCKET_CAN_J1939HAVE_SOCKET_RDSHAVE_SOCKET_ALGHAVE_SOCKET_QIPCRTRHAVE_SOCKET_VSOCKr   HAVE_SOCKET_UDPLITEHAVE_SOCKET_BLUETOOTHHAVE_SOCKET_HYPERVrQ  rw  r   rR   rf   rj   rm   r   r   r   r   r  r   r   r   r  r   r  r  r  r&  r.  r:  r@  rH  rN  rV  rZ  r]  r`  rd  rg  rk  r  r  r  r  r  r  r<  rL  rk  rt  r  r  r  r  r  r'  r>  rG  ro  rv  r{  r  r  r  r  r  r  r  r  r)  r/  rK  r\  r  rP  rT  rW  rY  r[  r  r`  rc  re  rg  rj  rl  rn  rp  rr  rt  rw  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU  r  r  r  r  r  r  r  r  r  r  r  r	  r	  r1	  r=	  rC	  rN	  rg	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r  r	  r
  rq
  rt
  r
  rq  r
  r
  r
  r  r  ra   mainrd   r>   r   <module>r*     s     " & )     	 	   	     	      
         t ,)009 	hoo5 "2("2"2"44(
 . . #$.0 .0 "$"$*, &( f&78 .0 (*  U[[&&
	H%% 	H%% 7 70+H%% 0+f7H%% 7 m m^,M> ,,M> , (
35, 1> ,5,,M> ,(,M> ,, $-<=&
13WY!^DF#H$5$5~ #F3 > .#J3/ 3B,X&& ,H1X&& 10~ ,nn ,<!!76!!H3 3A' A
6> 
6A, A@, @Xl X2\ 2 L  
A= AY} Y/.F3>aG** aGH' _&IJP[8$$ P[ KP[f _&IJW=# W= KW=t *,OP'!! ' Q'T *,OP:!! : Q:z _&KLG8$$ G MG" _&KL<9# <9 M<9| (
357x(( 7576 $-&
13+DX&& +D3 .+D\ *@B"** "B"J '>@/7h'' /7@/7dx!& x!v3( 3: (
3530 353nt8 t8n	6 	6F F@ @9O 9* (5? 5t@/ t@n:" :"z. ."SM/ SMl  3  F& :M5')< M5`8IX&& 8Ivf!0 f!Ro7 oh	6:4k	
 fmmY'	/1G 	 (	 fmmY'	\#9 	 (	 fmm^,	)+A 	 -	17;5|1 fmmY']//1OPz<(	02I 	 ) Q (	 fmmY']//1OPz<(	l$; 	 ) Q (	 fmm^,]//1OPz<(	*,C 	 ) Q -	 fmmY']//1OPfn%z<(	&:&=	 ) & Q (	 fmm^,]//1OPfn%z<(	*:*>*A	 ) & Q -	 (
35	!::4o	5	
 (
35fmmY'	35O 	 (5	 (
35fmmY'	'A 	 (5	 (
35fmm^,	-/I 	 -5	 (
351";;57G151 fmmY']//1OP(
35z<(	46Q 	 )5 Q (
	 fmmY']//1OP(
35z<(	,(C 	 )5 Q (
	 fmm^,]//1OP(
35z<(	.0K 	 )5 Q -
	 fmmY']//1OP(
35fn%z<(	*>&A	 ) &5 Q (	 fmm^,]//1OP(
35fn%z<(	.>*>*E	 ) &5 Q -		55{	 fmmY'	')? 	 (	 fmmY'	\#<+	 (	 fmm^,	)+D/	 -	
	$<$<$<n	
 fmmY'NOy-8	.0M 	 9 P (	 fmmY'NOy-8	RL*C9	R 9 P (	R fmm^,NOy-8	R 02K =	R 9 P -	R	$<$<n	 fmmY'fi 	.0M 	 ! (	 fmmY'fi 	L*C9	 ! (	 fmm^,fi 	 02K =	 ! -	 fmmY	2fi|<	0M 	 = 3	 fmmY7fi|<	%5}%B	 = 8	" "@ fn%WVW-M1MBD$M!7 $MD &$MR fn%WVW-M1MBD3F!7!9;3FD &3Fl) ( #.  #Fg~ gT{/ {|`1 `FkG(? kG\*A 
+B 
)@ *A .E "F ")< P5 1 1 P5fF4m^ F4R>]N >>75] 75rK] K. (
35K* K5K.$X&& $. S\\W,.CD4H!2!2 4H E4Hn WVY/1LMG7X&& G7 NG7TP:& P:f 


( _&MO#x   #O#, _&MO$**N $O$N)9/ )9X@6h'' @6F WV_5029$8,, 9$29$x RWW_&89_&<=b# b# > :b#JF=1 F=R WR,<>7 5 7>7 _&78J*8,, J* 9J*Z S\\X-/DE.)) . F.
 S\\,,U35GHQH-- Q IQ,0;x(( 0;f>=!2!2 >=@ fj!fj!fi $9x(( $9 ! " "$9NP
 zHMMO YY  O  E   GsE   AJ 	AJ )AJ! JAJJAJJAJJAJJ!AJ,J+AJ,