
    dafB                    %   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       G d7 d8e j                  eO                           ZW G d9 d:eP      ZX G d; d<e j                  eO      ZY G d= d>e j                        ZZ G d? d@eZ      Z[ G dA dBeZeO      Z\ G dC dDe[e\      Z] G dE dFeZ      Z^ G dG dHe^      Z_ G dI dJeZ      Z` G dK dLe`      Za G dM dNe`      Zb G dO dPe`      Zc G dQ dRe`      Zd G dS dTe`      Ze G dU dVee      Zf G dW dXee      ZgdY ZhdZ Zid[ Zj G d\ d]e j                        Zk e j                  e<d^       G d_ d`e j                               Zl e j                  e<d^       G da dbeT             Zm e j                  e=dc       G dd dee j                               Zn e j                  e>df       G dg dhe j                               Zo e j                  e?di       G dj dke j                               Zp e j                  e?di       G dl dmeU             Zq e j                  eAdn       G do dpe j                               Zr e j                  e$du d4       e j                  eBd6       G dq dre j                                      Zs e j                  eEds       G dt due j                               Zt e j                  eFdv       G dw dxe j                               Zu G dy dzeX      Zv G d{ d|eQ      Zw e j                  eDd-       G d} d~eS             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 deP      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Ɛd,Zǐd-ZȐd.Zɐd/ Z e j                   eʫ       d0       G d1 d2e j                               Z e j                   eʫ       d0       G d3 d4e j                  eO             Z G d5 d6eP      Z G d7 d8e j                        Z e j                   eCed9      d:       G d; d<e j                               Z e j                  ej                  d=k(  d>       e j                  e"d?       G d@ dAeJ                    Z G dB dCeP      Z e j                   eCedD      dE       G dF dGeҫ             Z e j                  e@dH       G dI dJe j                               Z e j                  ej$                  dKk(  dL       G dM dNe j                               Z e j                  ej$                  j                  dO      dP       G dQ dRe j                               Z G dS dTe j                        Z G dU dVe j                        Z eiedW       eiedX       eied       G dY dZe 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(]      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     +/root/Python-3.12.4/Lib/test/test_socket.pyget_cidr   9   s    }6;<(,% 	NAvDDfMA	N
 }}S!$Q''	N 	N 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.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__  )    ""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                 f    | j                   j                  d      }| j                  |t               y N   )r   recvassertEqualMSGrZ   msgs     r   
testStreamz(ThreadedVSOCKSocketStreamTest.testStream  $    iinnT"c"r>   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                   ,    e Zd ZddZd Zd Zd Zd Zy)SocketPairTestc                 p    t         j                  j                  | |       t        j                  |        y r   r   r   s     r   r   zSocketPairTest.__init__.  r   r>   c                 F    t        j                         \  | _        | _        y rI   )r   
socketpairrU   r   rY   s    r   r[   zSocketPairTest.setUp2  s    $//1	48r>   c                 F    | j                   j                          d | _         y rI   r]   rY   s    r   r^   zSocketPairTest.tearDown5  r_   r>   c                      y rI   rd   rY   s    r   r   zSocketPairTest.clientSetUp9      r>   c                 p    | j                   j                          d | _         t        j                  |        y rI   r   rY   s    r   r   zSocketPairTest.clientTearDown<  r   r>   Nr   )ra   rb   rc   r   r[   r^   r   r   rd   r>   r   r  r  ,  s    &2,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.setUpQ  s,    NN$	))*r>   c                 F    | j                   j                          d | _         y rI   r]   rY   s    r   r  zSocketTestBase.close_serverV  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.bindServerZ  s&    dii ..0r>   N)ra   rb   rc   ry   r[   r  r  rd   r>   r   r  r  H  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.setUpc  s    		r>   )ra   rb   rc   ry   r[   __classcell__r(  s   @r   r$  r$  `  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__o  s#    $)&)%r>   c                 N    | j                         | _        | j                          y rI   )newClientSocketr   
bindClientrY   s    r   r   z#ThreadedSocketTestMixin.clientSetUps  s    '')r>   c                 "    | j                         S )z&Return a new socket for use as client.)r  rY   s    r   r2  z'ThreadedSocketTestMixin.newClientSocketw  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   r3  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   r2  r3  r   r)  r*  s   @r   r,  r,  h  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   r8  r8    s!    
"
! !r>   r8  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   rF  rF    s    7Ar>   rF  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   rQ  rZ   rC  s     r   r!  zInetTestBase.bindSock  s    4995r>   )	ra   rb   rc   ry   r   rQ  r[   r!  r)  r*  s   @r   rL  rL    s    +D&6r>   rL  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  rI  r>   NrJ  rd   r>   r   rT  rT        -Ar>   rT  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>   NrJ  rd   r>   r   rX  rX    s    -@r>   rX  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>   NrJ  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>   NrJ  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   HOSTv6rQ  rd   r>   r   rb  rb    s    +Dr>   rb  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>   NrJ  rd   r>   r   re  re    rV  r>   re  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   rg  r(   rO   rY   s    r   r  zUDPLITE6TestBase.newSocket  s%    }}V__f.?.?AWAWXXr>   NrJ  rd   r>   r   ri  ri    s    1Yr>   ri  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   )r/  r0  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   rm  s    r   <lambda>z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>  s    ; r>   )r   skip
isinstancetypeclient_skip)objretvalrm  reasons     r   skipdecz!skipWithClientIf.<locals>.skipdec  s/    &v&s+#t$!6Fr>   c                 N    t        | t              st        | d      sd | _        | S )Nrt  c                     | S rI   rd   )r   s    r   rp  z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>
  s     r>   )rr  rs  r   rt  )ru  s    r   	noskipdecz#skipWithClientIf.<locals>.noskipdec  s!    3%m)D)CO
r>   rd   )	conditionrw  rx  r{  rm  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     *DD4*D   )r   r}  join)ru  
attributesr  missings       r   requireAttrsr    sN    
 !+E'#t2DtEG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>$  s     'A'Ar  zcan't create socket({0}): {1}c              3   2   K   | ]  }t        |        y wrI   )strr  os     r   r  z requireSocket.<locals>.<genexpr>2  s     +c!f+s   )
rr  r  r   r   r  r   r!   r   r}  format)r/  errru  r  callargsr$   r   s          r   requireSocketr    s    C" Bs#s#GFC,@  BG 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_type:  sL    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_socketobject@  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filenoreprassertNotInrv   r  r   rZ   r$   s     r   	test_reprzGeneralModuleTests.test_reprG  s   MM&..&*<*<= 	9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	9 	j$q'*$q'*	9 	9s   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  familyrs  protor   r  r!   )rZ   r$   expecteds      r   test_csocket_reprz$GeneralModuleTests.test_csocket_reprU  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_weakrefb  s    ]]6>>6+=+=> 	5!aAQXXZ4	5 	3HHJ II12	5 	5  		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gaierrorr   s     r   testSocketErrorz"GeneralModuleTests.testSocketErroro  s    4wC)O< 	M	 	wC/,AB 	 --	  	 wC2C,CD 	"//!	" 	"s    $-
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.testSendtoErrorsy  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_ipv6rg  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_L2TPr`  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  s=    

  	>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  s<    
,  	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.255   )r   HOSTv4r   r   r  r  r  )rZ   r  rQ  s      r   test_host_resolutionz'GeneralModuleTests.test_host_resolution   sr    ")):7HI 	?DV11$7>	?
 #))* 	?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	  s    3 	* 	+D""7"5 +$$T*+""7"< +$$T*+ +		++ ++ +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.testInvalidInterfaceIndexToName>  s9    	'6#8#8!<-)>)>C-)>)>4H)V%:%:KH6>*6..01G  6(**M7+CD 6--f56 66
 * 5'**M7+CD 5--e45 55 +
6 65 5s   /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   r4  )r  r   r   r*  r   rY   s    r   testInvalidInterfaceNameToIndexz2GeneralModuleTests.testInvalidInterfaceNameToIndexQ  s4     	)V%:%:A>'6#8#8+Fr>   getrefcountz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.testRefCountGetNameInfoW  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   rA  r   rY   s    r   testInterpreterCrashz'GeneralModuleTests.testInterpreterCrashc  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  r7  )rZ   sizesfuncsizemaskrP   swappeds          r   testNtoHzGeneralModuleTests.testNtoHk  s     r6<<r6<<5++- 	:JD$tGq=DG F  T4QtV+=+DEF 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  rI  r6  r2  r5  r
   r3     )
	_testcapiINT_MININT_MAXr   rM  rL  rK  rJ  r  r7  )rZ   rX  s_good_valuesl_good_valuesl_bad_valuess_bad_valuesks          r   testNtoHErrorsz!GeneralModuleTests.testNtoHErrorsy  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)echorf  rh  tcpgetandroidapilevel   udpr2  rW  )r   r@  platform
startswithr   getservbynamer   r   rk  r   
is_androidgetservbyportr  r7  )rZ   eqservicesservicerW   port2udpports          r   testGetServByz GeneralModuleTests.testGetServBy  sr    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
   r2  spam)	r   r   rJ   
gettimeoutrN   rK   r  
ValueErrorr   )rZ   r$   rC  s      r   testDefaultTimeoutz%GeneralModuleTests.testDefaultTimeout  sV    	113T:]]_ 	3Q\\^T2	3 &b) 		:V557< 8D  !2B78 $$T*V557> :D  !2D9:		: 	*f&>&>C 	)V%=%=vF'	3 	38 8: :		: 		: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   rp  z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>      i+ r>   c                 >    j                  t        t        f| |      S rI   r  r   r}  rP  r  rZ   s     r   rp  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  rg  r  IPv6 not available+could not import needed symbols from socketwin32::&'  IPv6 might not be supportedc                      |       S rI   rd   )r  rg  r  s    r   rp  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>      i!, r>   c                 >    j                  t        t        f|       S rI   r  r  r   rZ   s    r   rp  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  rg  r  rx   ImportErrorr@  rn  r   winerrorr   r   )rZ   r  r   r  rg  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   rp  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>C  r  r>   c                 >    j                  t        t        f| |      S rI   r  r  s     r   rp  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>D  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.testStringToIPv4?  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  rg  r  r  r  r  r  r  r  c                      |       S rI   rd   )r  rg  r  s    r   rp  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>j  r  r>   c                 >    j                  t        t        f|       S rI   r  r  s    r   rp  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>k  r  r>   r  r  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
 Ups   s   s   )r   r  rg  r  rx   r  r@  rn  r   r  r   r  )rZ   r  r   r  rg  r   r  s   `   @@@r   testStringToIPv6z#GeneralModuleTests.testStringToIPv6Y  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   rC  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   rC  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   rR  s     r   testSendAfterClosez%GeneralModuleTests.testSendAfterClose  sS    ]]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   rC  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  rs  r  r  rR  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)NrW  r  )r   ru   r!   r   r  r  r7  rv   r   r  r  r   r"  r  )rZ   rC  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_VALSr2  )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$   exc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  rk  rl  http<AddressFamily.AF_INET: %r><SocketKind.SOCK_STREAM: %r>r   )rQ  rW   r  rs  )r  )flags)rQ  rW   r  rs  r  r  u   AI_NUMERICSERV)r   getaddrinfor  r"  EAI_SERVICErx   r   r   lenr   IPV6_ENABLEDr   r@  rk  rT   rA   r  valuer  SOL_TCP
AI_PASSIVE	AF_UNSPECr  UnicodeEncodeErrorr  )
rZ   r  infoinfosr  rs  r   socktyper  bs
             r   testGetaddrinfoz"GeneralModuleTests.testGetaddrinfo  s   	{B/ &&tT2 	+DSY*	+ 	;+;+4$%%ub) 12&&(B.tV,4$4&""4V^^V=O=OP%* 	9!FD!QVV^^4T&\+H6<<+WXS[#fll*;<T6#5#56T$Z)G$**)TUSYDJJ8	9 ""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.rI  )
rX  r  r  r  r   r  rA   r7  r  r  )rZ   r  r  r  s       r   "test_getaddrinfo_int_port_overflowz5GeneralModuleTests.test_getaddrinfo_int_port_overflowI  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   rA  rY   s    r   test_getnameinfoz#GeneralModuleTests.test_getnameinfoy  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   rh  s     r   	test_idnazGeneralModuleTests.test_idna}  sx    
 --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r/  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  sY   vw'wv|/LMMUV	9	   "1MM&../B		S!""#45 8Q		$!6!6678 fnnj9Q!!,		"&)>)>">@ LLOMM&..)4GGIGGI8 8 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  warningr/  makefile)rZ   rC  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   rC  fps      r   test_name_closed_socketioz,GeneralModuleTests.test_name_closed_socketio  sa    ]]6>>6+=+=> 	G$t$BHHJT"X'EF	G 	G 	G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    ]]_ 	7tq1BOOBKKM*R[[]+R[[]+HHJj"++6j"++6j"++6	7 	7 	7s   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
   r2  )	r   rv   r   r!   r  r  r   rX   r   rR  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   r2  )rZ   r2  rC  r4  r#  s        r   test_makefile_modez%GeneralModuleTests.test_makefile_mode  s    . 	8D4( 8]]_ 8'*d{tHth? 82(($7888 8	88 88 88 8s:   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  r1  zinvalid mode)r5  r   r  r}  r  )rZ   r2  rC  s      r   test_makefile_invalid_modez-GeneralModuleTests.test_makefile_invalid_mode  s    ' 	,D4( ,]]_ ,//
NK ,d+,,, ,	,, ,, ,, ,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rN  )r   rangepickleHIGHEST_PROTOCOLr  r   dumpsloadsrT   r   rA   )rZ   rC  protocolr  rs  s        r   test_picklezGeneralModuleTests.test_pickle  s    }} 	K!&"9"9A"=> K!!)V\\4JK	K f559: 	7H\\&,,v~~x"HIFVV^^4<<V-?-? JKDT6#5#56		7	K 	Ks   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   r2  r   )r   rT   rA   rv   r   rX   )rZ   backlogsrvs      r   test_listen_backlogz&GeneralModuleTests.test_listen_backlog  s     	$Gv~~v/A/AB $c$#

7#$ $	$
 ]]6>>6+=+=> 	#HHdAYJJL	 		$ $	 	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  )
rX  r   rT   rA   rv   r   r  r7  rX   rZ  )rZ   rX  rE  s      r   test_listen_backlog_overflowz/GeneralModuleTests.test_listen_backlog_overflow	  sk     	]]6>>6+=+=> 	P#HHdAYmSZZ9J9JQ9NO	P 	P 	P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   r6  i)	r  r7  r   rA  r   rc  rg  rA   rv   r  s     r   test_flowinfoz GeneralModuleTests.test_flowinfo  s    -););(//J?	D]]6??F,>,>? 	U1mQVVm6J6JAs5ST	U 	U 	U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  rg  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   rN  )r   r&  r  rg  r(   r  r   )rZ   ifindextest_interfacer   rO  s        r   &test_getaddrinfo_ipv6_scopeid_symbolicz9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolic&  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*   rT  r   rN  r   )r   r  r  rg  r(   r  r   )rZ   rU  r   rO  s       r   %test_getaddrinfo_ipv6_scopeid_numericz8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numeric6  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   rM  r   ff02::1de:c0:face:8d%1234)r   r&  rA  NI_NUMERICHOSTNI_NUMERICSERVr   )rZ   rU  rV  rO  nameinfos        r   &test_getnameinfo_ipv6_scopeid_symbolicz9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolicG  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 )NrY  rM  r   r   r\  r]  )r   rA  r^  r_  r   r  )rZ   rU  rO  r`  s       r   %test_getnameinfo_ipv6_scopeid_numericz8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericR  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  rs  r  r  s     r   test_str_for_enumsz%GeneralModuleTests.test_str_for_enums]  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   rs  r   setblocking)rZ   rg  r  	sock_typer$   s        r    test_socket_consistent_sock_typez3GeneralModuleTests.test_socket_consistent_sock_typef  s   ;v~q9&&6E	]]6>>95 		9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		9 		9 		9s   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  rg  Nrd   )r  r  kinds      r   r  zEGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>  s%      
d<< 
s   rl  )r  rs  r  r  r   )r   rT   rA   detachmaxAddressFamily__members__values
SocketKindrN  r   r  rs  r  r  )rZ   rC  fdunknown_familyunknown_typer$   s         r   test_unknown_socket_family_reprz2GeneralModuleTests.test_unknown_socket_family_reprv  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   rt  )rZ   rt  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  r3  )r   osr   curdirO_RDONLYr!   r  _GiveupOnSendfile_sendfile_use_sendfiler7  r   )rZ   r  rC  rt  s       r   test__sendfile_use_sendfilez.GeneralModuleTests.test__sendfile_use_sendfile  s    	 	 ]]_ 	8BKK0BHHRL""6#;#;< 6++DH56""=1 ;++DDM:;""9- 8++DJ78	8 	86 6; ;8 8	8 	8sT   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  rs  r  r   ru   r!   rn  )rZ   r$   r  stypert  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(   rH  )r   rT   rA   ru   r!   rv   r   r   r  r   r(   r  rg  rc  r@  r   rA  rH  PermissionError)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AFF9% ,,Q-3-?-?AA A & ' A 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  sC    y) 	KMM&..&*<*<TJ	K 	K 	K   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  sC    y) 	LMM&..&*<*<UK	L 	L 	L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 descriptorr2  r  r  r}  r   rT   rA   rY   s    r   )test_socket_fileno_rejects_invalid_socketz<GeneralModuleTests.test_socket_fileno_rejects_invalid_socket  sF    ##J0JK 	IMM&..&*<*<RH	I 	I 	I   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  sF    ##J0JK 	JMM&..&*<*<SI	J 	J 	Jr  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' 	02MM"" ,,.0	0
 	bll((5;;*DE	: 	:	0 	0s   )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    ((* 		Ae""7+ 5U\\^45 ""7+ +rNN&& <<>++
 R\\//@		A 		A5 5+ +			A 		A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   rp  r   c                 H    | j                         xr | j                  d      S )NAF_isupperro  Cs    r   rp  z<GeneralModuleTests.test_addressfamily_enum.<locals>.<lambda>      !))+=!,,u*= r>   source)r  enum_old_convert_IntEnum_test_simple_enumr   rp  )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   rs  r   c                 H    | j                         xr | j                  d      S )NSOCK_r  r  s    r   rp  z9GeneralModuleTests.test_socketkind_enum.<locals>.<lambda>  s    !))+?!,,w*? r>   r  )r  r  r  r  r  r   rs  )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   rp  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   rp  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  r@  rn  r   r  r  r  r  r  r   r   r%  r0  r;  r=  rC  rE  rT  cpython_onlyr`  rx  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,  r6  r:  rB  rF  rH  rK  rP  rR  r   rW  rZ  ra  rc  re  rj  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  rd   r>   r   r  r  8  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.testBCMConstants$  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.testCreateSocketD  8    ]]6==&//6>>J 	a	 	 	   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.testCreateBCMSocketH  s=     ]]6==&*;*;V^^L 	PQ	 	 	r  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.testBindAnyN  s[    ]]6==&//6>>J 	7aGFF7OQ]]_g6	7 	7 	7s   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.testTooLongInterfaceNameT  sQ    ]]6==&//6>>J 	:a""7,E#$66=:	: 	: 	:s   #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.testLoopbackZ  s     ]]6==&//6>>J 	Oa" OV//1H1H%'  LL!3!3V5L5LMOO	O 	O 	Os   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.testFilterd  s     ([[9
]]6==&//6>>J 	[aLL++V-B-BJOZLL!3!3V5J5JANPLL++V-B-BIjDYZ		[ 	[ 	[s   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__s  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_framev  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                        dk(  sJ t        j                   | j"                  ||||||||	|

      }|| j                  z   }|j%                  |      }| j'                  |t        |             y )N#  )         r   i"  r
   rH  )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
477|r!!!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  p  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   r.  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  ?     ]]6==&*;*;V=M=MN 	RS	 	 	r  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  sr    ]]6==&*;*;V=M=MN 	+RS''1JK +)*+	+ 	++ +	+ 	+s$   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R 8VW~~ue3t  $78 8 8  	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?  r.  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.testBind&	  s    
	v}}f.?.?AQAQR 8VW~~v';';V=P=PRXRfRfft  $78 8 8  	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.testCrucialConstants7	  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.testCreateSocket;	  s6    ]]6==&*?*?C 	q	 	 	s	   ?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.testSocketBufferSize?	  st    ]]6==&*?*?C 	GqLL**F,<,<gFLL**F,<,<gF	G 	G 	Gs   ABB'N)ra   rb   rc   r  r  rr  rd   r>   r   rk  rk  4	  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__I	  r  r>   c                 T    t         |           t        j                         | _        y rI   )r&  r[   r   r   evtr'  s    r   r[   zRDSTest.setUpL	  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.testSendAndRecvP	  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._testSendAndRecvU	  *    			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.testPeekY	  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._testPeek_	  r  r>   recvmsgc                     | j                   j                  | j                        \  }}}}| j                  | j                  |       y rI   )rU   r  rz   r   r  )rZ   r  ancdata	msg_flagsr  s        r   testSendAndRecvMsgzRDSTest.testSendAndRecvMsgc	  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._testSendAndRecvMsgh	  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.testSendAndRecvMultim	  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._testSendAndRecvMultit	  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   r/  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  F	  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	  s6    ]]6,,f.?.?@ 	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	  sN    ]]6,,f.?.?@ 	4AQ]]_Q/3	4 	4 	4s   $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   rP  r
   )r   r9   r(   r   rV   r   assertNotEqualr  s     r   testBindSockzBasicQIPCRTRTest.testBindSock	  si    ]]6,,f.?.?@ 	7A##AAMMOA,>? 2A6	7 	7 	7s   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)NrV  rP  )r   r9   r(   r  r   r   rV   r  s     r   testInvalidBindSockz$BasicQIPCRTRTest.testInvalidBindSock	  sT    ]]6,,f.?.?@ 	LAg}'>'>K	L 	L 	L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	  sZ    ]]6,,f.?.?@ 	7AIIj! 2A6	7 	7 	7s   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	  s4    ]]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_maxrB  orig_mins        r   rr  z#BasicVSOCKTest.testSocketBufferSize	  s   ]]6??F,>,>? 	D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+	D 	D 	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  rb  )r   
BDADDR_ANYBDADDR_LOCALr@   rB   r@  rn  BTPROTO_HCISOL_HCIBTPROTO_L2CAPro  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	  s?    ]]6..0B0BFDYDYZ 	^_	 	 	r  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	  s?    ]]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	  s=    ]]6..ASAST 	XY	 	 	r  rb  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	  sA     ]]6..0E0EvGYGYZ 	^_	 	 	r  N)ra   rb   rc   r  r  r   r  r@  rn  r  r  ro  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

  sJ    (##GX6 	@MM&**F,>,>?	@ 	@ 	@s   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
  s    H]]6++V-?-?AWAWX 	/\]''	299X3FG /		&--./	/ 	// /	/ 	/s$   *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
  s    N]]6++V-?-?AWAWX 	2\]''	299X3FG 2		6..012	2 	22 2	2 	2s$   *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
  s    N]]6++V-?-?AWAWX 	"\]''	299X3FG "		&!"	" 	"" "	" 	"s$   *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 	7\]''
BIIh4GH 7		4!4!4567	7 	77 7	7 	7$   *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.testCreateHyperVSocketAddrServiceIdNotValidUUIDFailure'
  s    W]]6++V-?-?AWAWX 	7\]''
BIIh4GH 7		6..567	7 	77 7	7 	7r  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__0
      $$Tj$Ar>   c                 f    | j                   j                  d      }| j                  |t               y r   )r	  r   r   r   r   s     r   testRecvzBasicTCPTest.testRecv3
  s&    mm  &c"r>   c                 B    | j                   j                  t               y rI   r  r   r   rY   s    r   	_testRecvzBasicTCPTest._testRecv8
      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.testOverFlowRecv;
  sK    }}!!#c(Q,/}}!!$'Tkc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testOverFlowRecvzBasicTCPTest._testOverFlowRecvB
  r  r>   c                 l    | j                   j                  d      \  }}| j                  |t               y r   )r	  r  r   r   rZ   r   r  s      r   testRecvFromzBasicTCPTest.testRecvFromE
  s*    MM**40	Tc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testRecvFromzBasicTCPTest._testRecvFromJ
  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.testOverFlowRecvFromM
  sS    ]]++CHQJ7
d]]++D1
dTkc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testOverFlowRecvFromz"BasicTCPTest._testOverFlowRecvFromT
  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.testSendAllW
  sD    ==%%d+D4KC	 
 	k*r>   c                 >    d}| j                   j                  |       y )Nr  )r  r  )rZ   	big_chunks     r   _testSendAllzBasicTCPTest._testSendAlla
  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   rt  rC  r   s       r   
testFromFdzBasicTCPTest.testFromFde
  sq    ]]!!#}}R1C1CD

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

#iioc"r>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testDupzBasicTCPTest._testDupx
  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  )	rX  r  r   r   r  r7  r  rZ  UINT_MAXrZ   rX  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  rn  r   r  _closedr  r   r   r!   r   rT   rA   ru   r   )rZ   r  r   rC  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 Nr2  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   r/  s     r   sendmsgToServerzSendrecvmsgBase.sendmsgToServer  s8    
 %t}}$$T44SYZ@@C 	Cr>   c                 N     |j                   |g| }| j                  |       |S rI   )r  registerRecvmsgResult)rZ   rC  rz   r/  results        r   	doRecvmsgzSendrecvmsgBase.doRecvmsg  s,     g--""6*r>   c                      y rI   rd   rZ   rS  s     r   rR  z%SendrecvmsgBase.registerRecvmsgResult$  s     	r>   c                 (    | j                  ||       y rI   r   rZ   addr1addr2s      r   checkRecvmsgAddressz#SendrecvmsgBase.checkRecvmsgAddress*  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inbothrR  s
             r   
checkFlagszSendrecvmsgBase.checkFlags?  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  
  s    
 ++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   rC  rz   r/  bufrS  s         r   rT  zRecvmsgIntoMixin.doRecvmsgy  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  v  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 Nr3     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  rY  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.testSendmsgExcessCmsgReject$  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._testSendmsgExcessCmsgReject)  sr    v|,""7+ Hr$$cU[+,FGHbll001'"H Hs   A??Bc                      y rI   rd   rY   s    r   testSendmsgAfterClosez"SendmsgTests.testSendmsgAfterClose1  s    r>   c                     | j                   j                          | j                  t        | j                  t
        g       y rI   )rK  r!   r  r   rP  r   rY   s    r   _testSendmsgAfterClosez#SendmsgTests._testSendmsgAfterClose5  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  rt  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.testSendmsgExplicitNoneAddr>  r  r>   c                 p    | j                  | j                  t        gg dd       t        t                     y r   r  rY   s    r   _testSendmsgExplicitNoneAddrz/SendmsgStreamTests._testSendmsgExplicitNoneAddrB  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.testSendmsgTimeoutE  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._testSendmsgTimeoutJ  s    	"MM$$T*5(((4   99, - OO!DOO!s6   B 2 	A-B A-A(#B (A--B B'>   re  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.testSendmsgDontWaita  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._testSendmsgDontWaiti  s    		"""7+ Nr(((R9L9LM N N
 MM",,,, <<):):ELLIK OO!DOO!s   B6 %<AAB6 6CN)ra   rb   rc   r  r  r  r  r}  r@  rn  r  rt  r  rd   r>   r   r  r  :  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  w  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 )NrY  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  rt  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._testRecvmsgEOF*  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._testRecvmsgOverflow=  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 )Nr2  r   rz  Tr  )r  r   r  r  r}  r  r   r  r  r   r\  r   rl  r  s        r   testRecvmsgBadArgszRecvmsgTests.testRecvmsgBadArgsD  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._testRecvmsgBadArgsZ  r  r>   N)ra   rb   rc   r+  r-  rd   r>   r   r)  r)  A  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 writabler2  Tr  )r  r  r   r  r   r  rq  r  r}  r   r\  r   rl  rZ   rt  nbytesr  r  r  s         r   testRecvmsgIntoBadArgsz'RecvmsgIntoTests.testRecvmsgIntoBadArgsa  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/  ^  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  r2  )socklen_t_limitr   rL  listr<  r)  r  itemsizer   rs  r  r7  r@  maxsize)rZ   toobigrr  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  r2  )rO  r   r  rP  r<  r)  r  rQ  rr  rL  rs  r  r7  r@  rR  )rZ   rS  rr  lastrT  rU  s         r   testCMSG_SPACEzCmsgMacroTests.testCMSG_SPACE  sL    %%(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   rX  minrZ  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  rA  r!   writer  encodeappend)rZ   rT  fdsrP   rt  rD  s         r   newFDszSCMRightsTest.newFDs  s|     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  rt  s       r   checkFDszSCMRightsTest.checkFDs  sV     s^ 	AEArHHRBKK(RWWR.A@	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  rt  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!	!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  s8    %+!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.testFDPassSimple8  .    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._testFDPassSimple=  sh      ####++c4;;q>2::<> ?@
 H	r>   c           	      x    | j                  d| j                  | j                  t        t              d             y )Nr  r  r~  rY   s    r   testMultipleFDPassz SCMRightsTest.testMultipleFDPassF  r  r>   c                 &    | j                  d       y Nr  rs  rY   s    r   _testMultipleFDPassz!SCMRightsTest._testMultipleFDPassK      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_SPACEN  s@     	t~~dnnc#h$//J?A	Br>   c                 &    | j                  d       y r  r  rY   s    r   _testFDPassCMSG_SPACEz#SCMRightsTest._testFDPassCMSG_SPACEU  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_LENY  sK    Q!^^DNNCH,2OOA
N,KM
 *0):): 	 	<r>   c                 &    | j                  d       y rN  r  rY   s    r   _testFDPassCMSG_LENz!SCMRightsTest._testFDPassCMSG_LENc  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.testFDPassSeparatef  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._testFDPassSeparatep       ;;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 	8,J	9Z):):;Y(9(9:OOC	NJ7	8r>   c           	          | j                  t        t        j                  t        j                  t        j
                  d| j                  g      j                         d d fg       y )NrP   r2  )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 	G,J	9Z):):;Y(9(9:MM) %E	Nc)ns||&CDF G	G
 	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   r2  )	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 rN  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 rN  r  rY   s    r   _testCmsgTrunc0zSCMRightsTest._testCmsgTrunc0  r  r>   c                 v    | j                  | j                  | j                  t        t              d             y rN  )r  rT  r  r  r   rY   s    r   testCmsgTrunc1zSCMRightsTest.testCmsgTrunc1  s%    !!$..S1"MNr>   c                 &    | j                  d       y rN  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 rN  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 rN  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.testCmsgTruncLen07  s      (:A Fr>   c                 &    | j                  d       y rN  r  rY   s    r   _testCmsgTruncLen0z SCMRightsTest._testCmsgTruncLen0:  r  r>   c                 V    | j                  t        j                  d      dz   d       y )Nr   r
   r  r  rY   s    r   testCmsgTruncLen0Plus1z$SCMRightsTest.testCmsgTruncLen0Plus1=  s#      (:Q(> Jr>   c                 &    | j                  d       y r  r  rY   s    r   _testCmsgTruncLen0Plus1z%SCMRightsTest._testCmsgTruncLen0Plus1@  r  r>   c                 `    | j                  t        j                  t              t               y )Nr  r  r   rL  rw  rY   s    r   testCmsgTruncLen1zSCMRightsTest.testCmsgTruncLen1C  s#      
(C)3 	! 	5r>   c                 &    | j                  d       y r  r  rY   s    r   _testCmsgTruncLen1z SCMRightsTest._testCmsgTruncLen1G  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.testCmsgTruncLen2Minus1J  s5      J(G!(K*+j.A)= 	! 	?r>   c                 &    | j                  d       y r  r  rY   s    r   _testCmsgTruncLen2Minus1z&SCMRightsTest._testCmsgTruncLen2Minus1N  r  r>   N)r
   r   r   )9ra   rb   rc   r  rc  rh  rR  rj  rs  r|  r  r  r  r  r  r   r  rt  r  r  r  r   r  r@  rn  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  r2  c                 V    i }|D ]!  \  }}}| j                  ||f|       ||||f<   # |S rI   )r  )rZ   r  dro  rp  rq  s         r   ancillaryMappingz%RFC3542AncillaryTest.ancillaryMappingc  sJ     07 	3,J	9j)4a8)2Az9%&	3 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.checkHopLimitm  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  r/  r   r  r  r  s           r   checkHopLimitTruncatedHeaderz1RFC3542AncillaryTest.checkHopLimitTruncatedHeader%  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.testCmsgTruncNoBufSize9  s%     	))T
 7=6G6G 	* 	Ir>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   r  z,RFC3542AncillaryTest._testCmsgTruncNoBufSizeD  r  r>   c                 F    | j                  dt        j                         y )Nr   r  r  rY   s    r   testSingleCmsgTrunc0z)RFC3542AncillaryTest.testSingleCmsgTrunc0I  s#     	))Q6<6G6G 	* 	Ir>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTrunc0z*RFC3542AncillaryTest._testSingleCmsgTrunc0P  r  r>   c                 (    | j                  d       y )Nr
   r  )r  rY   s    r   testSingleCmsgTrunc1z)RFC3542AncillaryTest.testSingleCmsgTrunc1X  s    ))Q)7r>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTrunc1z*RFC3542AncillaryTest._testSingleCmsgTrunc1\  r  r>   c                 6    | j                  dt        z         y r  )r  rw  rY   s    r   testSingleCmsgTrunc2Intz,RFC3542AncillaryTest.testSingleCmsgTrunc2Inta  s    ))Q^)Dr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTrunc2Intz-RFC3542AncillaryTest._testSingleCmsgTrunc2Inte  r  r>   c                 T    | j                  t        j                  d      dz
         y )Nr   r
   r  )r  r   rL  rY   s    r   testSingleCmsgTruncLen0Minus1z2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1j  s!    ))V__Q5G!5K)Lr>   c                     | j                  | j                  j                  | j                               | j	                  t
               y r  r  rY   s    r   _testSingleCmsgTruncLen0Minus1z3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1n  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.testSingleCmsgTruncInDatas  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 rN  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  rt  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  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[  rI  rg  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  '  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  3       	r>   rg  c                       e Zd Zy)#RecvmsgIntoRFC3542AncillaryUDP6TestNrQ  rd   r>   r   rj  rj  ;  s     	r>   rj  c                       e Zd Zy)SendrecvmsgUDPLITETestBaseNrQ  rd   r>   r   rl  rl  E  s    
 	r>   rl  c                       e Zd Zy)SendmsgUDPLITETestNrQ  rd   r>   r   rn  rn  L  ra  r>   rn  c                       e Zd Zy)RecvmsgUDPLITETestNrQ  rd   r>   r   rp  rp  R  ra  r>   rp  c                       e Zd Zy)RecvmsgIntoUDPLITETestNrQ  rd   r>   r   rr  rr  X  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.checkRecvmsgAddresse  r]  r>   Nr^  rd   r>   r   rt  rt  _  s    1r>   rt  c                       e Zd Zy)SendmsgUDPLITE6TestNrQ  rd   r>   r   rw  rw  j  rh  r>   rw  c                       e Zd Zy)RecvmsgUDPLITE6TestNrQ  rd   r>   r   ry  ry  r  rh  r>   ry  c                       e Zd Zy)RecvmsgIntoUDPLITE6TestNrQ  rd   r>   r   r{  r{  z  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   r`  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  rH  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   rp  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   rP  r/  r0  r  s        r   checkInterruptedRecvz/InterruptedRecvTimeoutTest.checkInterruptedRecv$  sg    	MM$//*""#45 &d%f%& MM!& & 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.testInterruptedRecvIntoTimeout1  s     !!$))"5"5yGr>   c                 P    | j                  | j                  j                  d       y r   )r  rU   r  rY   s    r   testInterruptedRecvfromTimeoutz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeout4  s    !!$))"4"4d;r>   c                 b    | j                  | j                  j                  t        d             y r   )r  rU   r  r  rY   s    r   "testInterruptedRecvfromIntoTimeoutz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeout7  s     !!$))"9"99T?Kr>   r  c                 P    | j                  | j                  j                  d       y r   )r  rU   r  rY   s    r   testInterruptedRecvmsgTimeoutz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeout:  s    !!$))"3"3T:r>   rq  c                 d    | j                  | j                  j                  t        d      g       y r   )r  rU   rq  r  rY   s    r   !testInterruptedRecvmsgIntoTimeoutz<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout>  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.setUpM  s    ),,- %%T^^<
"ii..0t++,!!$,,/r>   c                 N    | j                   j                  | j                         y rI   )r  r   r"  rY   s    r   r  z$InterruptedSendTimeoutTest.doConnect[  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.checkInterruptedSend^  sm    	""#45 *MM$//2$)&) * * *
 MM!DMM!s   A &=AA A/rz  r#  c                 P    | j                  | j                  j                  d       y r  )r  r  r   rY   s    r   testInterruptedSendTimeoutz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutk  s    !!$.."5"5x@r>   c                 f    | j                  | j                  j                  d| j                         y r  )r  r  r  r"  rY   s    r   testInterruptedSendtoTimeoutz7InterruptedSendTimeoutTest.testInterruptedSendtoTimeouto  s'     	!!$.."7"7"&..	2r>   r  c                 R    | j                  | j                  j                  dg       y r  )r  r  r  rY   s    r   testInterruptedSendmsgTimeoutz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeoutx  s      	!!$.."8"88*Er>   )ra   rb   rc   r[   r  r  r   requires_mac_verr  r  r  r   r  r)  r*  s   @r   r  r  E  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 )NrH  r   )
r  r   r   r   r  rH  rT   rs  rA   r  rR  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  r   r>   c                 B    | j                   j                  t               y rI   )r   r   r   rY   s    r   r  zBasicSocketPairTest._testRecv  s    cr>   c                 B    | j                   j                  t               y rI   )rU   r   r   rY   s    r   testSendzBasicSocketPairTest.testSend  s    		sr>   c                 f    | j                   j                  d      }| j                  |t               y r   )r   r   r   r   r   s     r   	_testSendzBasicSocketPairTest._testSend  s$    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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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   rC  rL   blockingfd_blockingflags         r   assert_sock_timeoutz'NonBlockingTCPTests.assert_sock_timeout  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   rz  )rU   rh  r  r   rY   s    r   testSetBlockingz#NonBlockingTCPTests.testSetBlocking  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._testSetBlocking  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
   )	rX  r  r  rx   rU   rh  r   r|  r  r  s     r   testSetBlocking_overflowz,NonBlockingTCPTests.testSetBlocking_overflow  s     	!4!44MM67		e$--/5		i00145$))..01r>   rg  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   rg  r  rY   s    r   testInitNonBlockingz'NonBlockingTCPTests.testInitNonBlocking  sQ    
 			MM&.."("4"4v7K7K"KM	  A.r>   c                      y rI   rd   rY   s    r   _testInitNonBlockingz(NonBlockingTCPTests._testInitNonBlocking  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)Nrz  )rN   rU   r   r   ru   r!   r  r|  r
  s      r   testInheritFlagsBlockingz,NonBlockingTCPTests.testInheritFlagsBlocking  sn     &d+ 	1II  $))+JD$OODJJ'doo/0		1 	1 	1s   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@rz  )rN   rU   r   r   ru   r!   r   r|  )rZ   default_timeoutr   r  s       r   testInheritFlagsTimeoutz+NonBlockingTCPTests.testInheritFlagsTimeout  sy     %o6 	AII  $))+JD$OODJJ'T__.@		A 	A 	As   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   rh  r   	monotonicr  BlockingIOErrorr   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$	,^^
*C 

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

#$//+,	, 	,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!   rh  r  r  r   r  r   r  r   r  r   r  r  r   )rZ   r   r  r   r	  r_  r  s          r   r  zNonBlockingTCPTests.testRecv6  s    YY%%'
d

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

!==$R9M9MNeStIIHI iiC!c"	& 	&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._testRecvJ  sA    $		*+ 	

 	r>   Nr   )ra   rb   rc   r   r  r  r  r   r  r  _testSetBlocking_overflowr   r  r   r   requires_linux_versionr  r	  r  r  r  r  r  r  r  r  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.
    r2  r	   strictNr   r0  c                 2    t         j                  | |       y r   r  r   s     r   r   z FileObjectClassTestCase.__init__k  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  r4  errorsnewline)r<  r   r   evt1evt2serv_finishedcli_finishedr  r[   r	  r  	read_moderz   r4  r(  r)  	read_file)rZ   rP   s     r   r[   zFileObjectClassTestCase.setUpn  s    ',QxG1"#IOO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   r/  r!   r  closedr  r^   rY   s    r   r^   z FileObjectClassTestCase.tearDownx  sO     --.$$T*r>   c                     t         j                  |        | j                  j                  | j                  | j
                  | j                  | j                  | j                        | _	        y )Nr'  )
r  r   r  r  
write_moderz   r4  r(  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   r4  r!   r  r1  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   r/  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  )r4  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  )r/  r	  r  read_msgr   )rZ   	first_seg
second_segr   s       r   testSmallReadz%FileObjectClassTestCase.testSmallRead  sV    NN''DMM(:1(<=	^^((+
*$dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   r4  r_  r:  r;  rY   s    r   _testSmallReadz&FileObjectClassTestCase._testSmallRead  (    dnn-r>   c                 p    | j                   j                         }| j                  || j                         y rI   )r/  r	  r   r>  r   s     r   testFullReadz$FileObjectClassTestCase.testFullRead  s(    nn!!#dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   )r4  r_  r:  r!   rY   s    r   _testFullReadz%FileObjectClassTestCase._testFullRead  rE  r>   c                      t        | j                               }	 | j                  j                  d      }|sn||z  }$| j	                  || j                         y rN  )rs  r>  r/  r	  r   )rZ   rt  chars      r   testUnbufferedReadz*FileObjectClassTestCase.testUnbufferedRead  sV    !d4==!#>>&&q)D4KC	 
 	dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   rC  rY   s    r   _testUnbufferedReadz+FileObjectClassTestCase._testUnbufferedRead  rE  r>   c                 p    | j                   j                         }| j                  || j                         y rI   )r/  readliner   r>  rZ   lines     r   testReadlinez$FileObjectClassTestCase.testReadline  s(    ~~&&(t}}-r>   c                     | j                   j                  | j                         | j                   j                          y rI   rC  rY   s    r   _testReadlinez%FileObjectClassTestCase._testReadline  rE  r>   c                     | j                   j                          | j                  j                         }| j	                  || j
                         y rI   )r	  r!   r/  r	  r   r>  r   s     r   testCloseAfterMakefilez.FileObjectClassTestCase.testCloseAfterMakefile  s8    nn!!#dmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   rC  rY   s    r   _testCloseAfterMakefilez/FileObjectClassTestCase._testCloseAfterMakefile  rE  r>   c                    | j                   j                          | j                  j                  t	        t
                    }t        | j                  t              r|j                         }| j                  || j                         y rI   )r/  r!   r	  r   r  r   rr  r>  r  decoder   r   s     r   testMakefileAfterMakefileClosez6FileObjectClassTestCase.testMakefileAfterMakefileClose  sW    mm  S*dmmS)**,Cdmm,r>   c                     | j                   j                  | j                         | j                   j                          y rI   rC  rY   s    r   _testMakefileAfterMakefileClosez7FileObjectClassTestCase._testMakefileAfterMakefileClose  rE  r>   c                 P    | j                  | j                  j                          y rI   )r  r/  r1  rY   s    r   testClosedAttrz&FileObjectClassTestCase.testClosedAttr  s    DNN1112r>   c                 P    | j                  | j                  j                          y rI   )r  r4  r1  rY   s    r   _testClosedAttrz'FileObjectClassTestCase._testClosedAttr  s    DOO2223r>   c                     | j                  | j                  j                  | j                         | j                  | j                  j                  | j
                  j                                y rI   )r   r/  r2  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   r4  r2  r3  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   )r/  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   r4  r(  r)  r.  r   r>  r3  r:  r   r[   r^   r   r   r8  r<  rA  rD  rG  rI  rL  rN  rS  rU  rW  rY  r\  r^  r`  rb  rd  rf  rh  rj  rd   r>   r   r#  r#  U  s    	 GHFGIHJIB$+$1
O"
- -
 - .
 - - 34FH>r>   r#  c                   P    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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. )r/  rP  r   r:  r	  r  rQ  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 )Nrn  ro  rC  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   r>  r/  r  r   r   s     r   testMakefileClosez3UnbufferedFileObjectClassTestCase.testMakefileClose  sf    mm  &dmm,'4==#5#5t<r>   c                     | j                   j                  | j                         | j                   j                          y rI   rC  rY   s    r   _testMakefileClosez4UnbufferedFileObjectClassTestCase._testMakefileClose  rE  r>   c                     t        j                  | j                        }| j                  j	                          t        j                  | j                        }| j                  |dz
  |       y rN  )r@  r>  r	  r/  r!   r   )rZ   refcount_beforerefcount_afters      r   testMakefileCloseSocketDestroyz@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroy  sK    //$--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 )NFrz  r  r  g      ?rH  r
   )r	  rh  r   r/  readintor  r	  r  r>  r*  r   r+  r   r   r   )rZ   r?  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   r4  r_  r:  r;  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.testWriteNonBlockingG  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
  rz  r   z$failed to saturate the socket buffer)	r  r  rh  r   r  r4  r_  r)  r<  )rZ   BIGLIMITrT  rP   s        r   _testWriteNonBlockingz7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN  s     ""5)W***OO!!#&1a u 
	GA%%c*Ayq!$
	G !GDr>   N)ra   rb   rc   ry   rz   rp  rr  rt  rv  rz  r|  r  r  r  r  rd   r>   r   rl  rl    sA    < G8 
= >7&%-Gr>   rl  c                       e Zd ZdZy)#LineBufferedFileObjectClassTestCaser
   Nra   rb   rc   rz   rd   r>   r   r  r  d      Gr>   r  c                       e Zd ZdZy)$SmallBufferedFileObjectClassTestCaser  Nr  rd   r>   r   r  r  i  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	   r0  r  Nra   rb   rc   ry   r.  r   r[  r>  r3  r:  r)  rd   r>   r   r  r  n  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   r/  r	   r  N)ra   rb   rc   ry   r.  r   r>  r3  r[  r:  r)  rd   r>   r   r  r  x  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	   r/  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.connect  s    {++r>   N)ra   rb   rc   r   rd   r>   r   
MockSocketr    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_module  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_connection  sq     --/w' 	32$$dD\2	3" (DDFbll((/:%	3 	3s   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_errors  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_timeout  s     &&( 		55(($6 		34		5 		5     --e>P>P1P 2Q		5 		5s?   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    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)NrY  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__7  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.testInsideTimeoutC  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   rC  r  s      r   _testInsideTimeoutz1NetworkConnectionBehaviourTest._testInsideTimeoutJ  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   )rC  s   r   rp  zDNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>Q  s    		! r>   )r   r  r   rW   r   r  r  rR  s    @r   _testOutsideTimeoutz2NetworkConnectionBehaviourTest._testOutsideTimeoutO  s6     22D$))3DaPP4,(<=r>   Nr   )
ra   rb   rc   r   r   r   r  testOutsideTimeoutr  r  rd   r>   r   r  r  5  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   r/  r0  rZ   s     r   raise_timeoutz4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeoutW  s%    II  %IIr>   z*Error generating a timeout exception (TCP)r  r  rZ   r  s   ` r   testTCPTimeoutzTCPTimeoutTest.testTCPTimeoutV  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  r  s    r>   r  c                     rI   rd   )r  r  r  s     r   alarm_handlerz<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handlert  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   rs  	traceback
format_exc)rZ   r  r  r  r   r  s        @r   testInterruptedTimeoutz%TCPTimeoutTest.testInterruptedTimeoutk  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  T  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   r	  r  rd   r>   r   r  r    s    LKr>   r  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 r	  r	  r  s     r   r  z<UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeout  r	  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)r	  r	  r  s      r   r  z"UDPLITETimeoutTest.testTimeoutZero  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.testExceptionTree  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   rn  r  r   rh  )rZ   sock0rC  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   r	  r	  rd   r>   r   r	  r	    s    4
$r>   r	  re  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   rH  rA   rv   rX   r   r   r   r   r  )rZ   r  s1r  s3s        r   testLinuxAbstractNamespacez5TestLinuxAbstractNamespace.testLinuxAbstractNamespace  s    2]]6>>6+=+=> 	@"GGGIIKv~~v/A/AB @b

2>>+,YY[^ @r$$R^^%5w?$$R^^%5w?@@	@ 	@
@ @@ @	@ 	@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   rH  rA   rv   r   r   rZ   r  r$   s      r   testMaxNamez&TestLinuxAbstractNamespace.testMaxName  sl    DD$6$6$:;;]]6>>6+=+=> 	7!FF7OQ]]_g6	7 	7 	7s   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)r$	  r   rH  rA   r  r   rv   r%	  s      r   testNameOverflowz+TestLinuxAbstractNamespace.testNameOverflow  s\    3!3!333]]6>>6+=+=> 	8!gqvvw7	8 	8 	8s   "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   rH  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   rH  rA   rv   r  r   r   r  s     r   testBytearrayNamez,TestLinuxAbstractNamespace.testBytearrayName  s^    ]]6>>6+=+=> 	I!FF9678Q]]_.GH	I 	I 	I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   rH  rA   rv   assertRegexr   r  )rZ   abstract_addressr	  r  s       r   testAutobindz'TestLinuxAbstractNamespace.testAutobind  s     -]]6>>6+=+=> 	H"GGBKR^^-/?@v~~v/A/AB Hb  !13CD##BNN$4bnn6FGH		H 	HH H		H 	Hs%   A$DA D
9D
D	DDN)
ra   rb   rc   r$	  r!	  r&	  r*	  r-	  r/	  r3	  rd   r>   r   r	  r	    s*     M	@78
IHr>   r	  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   rH  rA   rC  rY   s    r   r[   zTestUnixDomain.setUp  s    MM&..&2D2DE	r>   c                 8    | j                   j                          y rI   )rC  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  r@  getfilesystemencodingrZ   rD  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   rB  r   r  rx   r  )rZ   rC  rD  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  rC  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  rD  abspathr   TESTFNrv   rC  ru   rA  r   r   r;	  s     r   testStrAddrzTestUnixDomain.testStrAddr0  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  rD  r@	  r   rA	  rv   rC  r<	  ru   rA  r   r   r;	  s     r   testBytesAddrzTestUnixDomain.testBytesAddr7  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  rD  r@	  r   TESTFN_UNICODEr<	  rv   rC  r[  ru   rA  r   r   )rZ   rD  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  rD  r@	  rv   rC  ru   rA  r   r   r;	  s     r   testUnencodableAddrz"TestUnixDomain.testUnencodableAddrG  sx     ''/MM=>wwy;;<		$))T"	(($/..0$7r>   re  r	  c                 Z    | j                  t        | j                  j                  d       y )Nr  )r  r   rC  rv   rY   s    r   testEmptyAddresszTestUnixDomain.testEmptyAddressQ  s     	'499>>26r>   N)ra   rb   rc   r[   r^   r<	  rv   r  rB	  rD	  rI	  rL	  r   r  r@  rn  rN	  rd   r>   r   r5	  r5	    s\    F	8
;8888 X__S\\W,.CD7 E7r>   r5	  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._testRecvIntoArrayf      CjC r>   c                     t        d      }| j                  j                  |      }| j                  |t	        t
                     |d t	        t
               }| j                  |t
               y r   )r  r	  r  r   r  r   rT	  s       r   testRecvIntoBytearrayz"BufferIOTest.testRecvIntoBytearrayj  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   rT	  s       r   testRecvIntoMemoryviewz#BufferIOTest.testRecvIntoMemoryviews  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 rS	  )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   rW	  rX	  s     r   _testRecvFromIntoArrayz#BufferIOTest._testRecvFromIntoArray  rZ	  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  rX	  s     r   testRecvFromIntoSmallBufferz(BufferIOTest.testRecvFromIntoSmallBuffer  s)    l*dmm&A&A3Mr>   c                 B    | j                   j                  t               y rI   r  rY   s    r   _testRecvFromIntoSmallBufferz)BufferIOTest._testRecvFromIntoSmallBuffer  r  r>   c                     t               }| j                  j                  |       | j                  j                  |d       y r   )r  r	  r  rX	  s     r   testRecvFromIntoEmptyBufferz(BufferIOTest.testRecvFromIntoEmptyBuffer  s/    k##C(##C+r>   Nr   )ra   rb   rc   ry   r   rU	  rY	  r\	  _testRecvIntoBytearrayr^	  _testRecvIntoMemoryviewra	  rc	  re	  _testRecvFromIntoBytearrayrg	  _testRecvFromIntoMemoryviewri	  rk	  rm	  _testRecvFromIntoEmptyBufferrd   r>   r   rP	  rP	  W  sm    B#!# 0# 1#!# "8# #9N
!,
 $: r>   rP	  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	   r3  ztipc NT)r   r   r   FileNotFoundErrorIsADirectoryErrorr  ro  )r   rR  s     r   isTipcAvailablery	    s     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   rv	  r  ru   r!   r  r  r  TIPC_ADDR_NAMESEQ
TIPC_STYPE
TIPC_LOWER
TIPC_UPPERrv   TIPC_ADDR_NAMEr(  r  r   r  r   r   )rZ   rE  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{	    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__  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 rN  )r   rv	  rA   rE  ru   r!   r  r  r  r}	  r~	  r	  r	  rv   rX   r   r   r   r   )rZ   r	  s     r   r[   zTIPCThreadableTest.setUp  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   rv	  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	    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  rR  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  rC  s      r   _testCreateConnectionBasez-ContextManagersTest._testCreateConnectionBase  s    ))'')%%g. 	6$T\\*LL TYYt_f5	6 	%		6 	6s   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'  sh    ))'')%%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  r  r  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   rs  r  get_inheritabler  s     r   test_SOCK_CLOEXECz!InheritanceTest.test_SOCK_CLOEXEC0  st     ]]6>>!--0C0CCE 	2HIQVVV%7%78Q..01	2 	2 	2s   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	  rR  s     r   test_default_inheritablez(InheritanceTest.test_default_inheritable9  s>    }} 	<T113U;	< 	< 	<s   !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   rC  newsocks      r   test_dupzInheritanceTest.test_dup>  sx    }} 	ChhjGJJL C  !8!8!:EBC	C 	CC C	C 	Cs"   #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	  rR  s     r   test_set_inheritablez$InheritanceTest.test_set_inheritableF  ss    }} 	<  &T113T:  'T113U;	< 	< 	<s   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   rC  rt  r  s       r   test_get_inheritable_cloexecz,InheritanceTest.test_get_inheritable_cloexecO  s    }} 		;BT113U; KKEMM2Ee&&&&EKKEMM51T113T:		; 		; 		;s   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   rC  rt  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 	  	  	 s   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   r	  r  s      r   test_socketpairzInheritanceTest.test_socketpairj  sf    ""$B!!++-u5++-u5r>   )ra   rb   rc   r   r  r   r   r   r!  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	  rg  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   rs  r   rA   r|  r  r   r  r  r  r  r  )rZ   r$   nonblockrL   s       r   checkNonblockz"NonblockConstantTest.checkNonblocku  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  r  r  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   rg  r	  rh  r   rJ   rK   )rZ   r$   ts      r   test_SOCK_NONBLOCKz'NonblockConstantTest.test_SOCK_NONBLOCK  s    ]]6>>!--0D0DDF 	2IJq!MM$q51MM% q!LLq51LLq#.MM$q51	2 $$&  %]]_ 	"q!	"  &]]_ 	)q%(	)  %]]_ 	/q#.	/  &]]_ 	)q%(	)  #7	2 	2 	" 	"	) 	)	/ 	/	) 	)s=   CI
II#I/I;
II #I,/I8;JN)Tr  )ra   rb   rc   r	  r   r!  r	  rd   r>   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.remoteProcessServer  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  r/  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.testShare  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 )Nr2  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  rs  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   rg  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	    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                 n   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                         | _        t        | j                        | j                  k(  sJ 	 d d d        y c c}w # 1 sw Y   lxY w# 1 sw Y   y xY w)Nc              3   P   K   | |k\  sJ | |kD  r| | |z  } | |kD  r| r|  y y wrI   rd   )totalsteps     r   chunksz0SendfileUsingSendTest.setUpClass.<locals>.chunks#  s?     D= =$,
 $,  s   &&r>   r0  r   )r  r<  BUFSIZErandomchoicestringascii_lettersr`  r   r   rA	  FILESIZEr_  r	  FILEDATAr  )r  r	  rP   chunkr   csizes         r   
setUpClassz SendfileUsingSendTest.setUpClass!  s    	 #(#57 !--(<(<=DDF 7 8)""D) 	Qckk: 	 )""D) 	5Q668CLs||$444	5 	57	 		5 	5s   8D?4D:D+D(+D4c                 J    t        j                  t         j                         y rI   )r   rA  rA	  )r  s    r   tearDownClassz#SendfileUsingSendTest.tearDownClass4  s    ))*r>   c                     | j                   j                  t        j                         | j                   j	                         \  }}|j                  | j
                         | j                  |j                         |S rI   )rU   r   r   r  r   TIMEOUTru   r!   r
  s      r   accept_connz!SendfileUsingSendTest.accept_conn8  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   rR  s     r   meth_from_sockz$SendfileUsingSendTest.meth_from_sockH  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   rA	  r   r  r	  r   r	  tellrZ   r  filerC  methsents         r   _testRegularFilez&SendfileUsingSendTest._testRegularFileO  s    ))'')I$$d+%%g. 	9$ 	9&&t,D:DT4==1TYY[$--8		9 	9 	9 	9 	9 	9s%   
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.testRegularFileX  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  rx  r   r	  r	  r  r  r  )rZ   r  r	  rC  r	  s        r   _testNonRegularFilez)SendfileUsingSendTest._testNonRegularFile`  s    ))'')zz$--(%%g. 	A$ 	A==&DT4==1TYY[$--8f66"994A		A 	A 	A 	A 	A 	As%   C2BC&C2&C/	+C22C;c                     | j                         }| j                  |      }| j                  t        |      | j                         | j                  || j
                         y rI   r
  r
  s      r   testNonRegularFilez(SendfileUsingSendTest.testNonRegularFilej  r
  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2r0  r   r   )rU   r   r   rA	  r   ru   rA  r   r  r	  r   r	  )rZ   r  filenamer	  rC  r	  r	  s          r   _testEmptyFileSendz(SendfileUsingSendTest._testEmptyFileSendr  s    ))'')##c)(D! 	8OOI,,h7	8Hd#%%g. 	-$ 	-&&t,D:DT1%TYY[!,		- 	- 	-	8 	8	- 	- 	- 	-s0   !C$C<AC0C<$C-0C9	5C<<Dc                 j    | j                         }| j                  |      }| j                  |d       y r  )r	  r	  r   r
  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. 	9$ 	9&&t,DT*DT4==4#78TYY[$--8		9 	9 	9 	9 	9 	9s%   
CA%C2CC	CCc                     | j                         }| j                  |      }| j                  t        |      | j                  dz
         | j                  || j
                  dd         y )Nr
  r
  r
  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   rA	  r   r  r   r   r	  r   r	  rZ   r  r	  rC  r  r	  r	  s          r   
_testCountz SendfileUsingSendTest._testCount  s    ))'')I$$d+''070H0HJ 	14 	1E&&t,DE*DT5)TYY[%0	1 	1 	1 	1 	1 	1%   CAC /C C		CCc                     d}| j                         }| j                  |      }| j                  t        |      |       | j                  || j                  d |        y )Nr
  r	  r	  r   r  r	  rZ   r  r   r  s       r   	testCountzSendfileUsingSendTest.testCount  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
   r
  r
  r
  s          r   _testCountSmallz%SendfileUsingSendTest._testCountSmall  s    ))'')I$$d+''070H0HJ 	14 	1E&&t,DE*DT5)TYY[%0	1 	1 	1 	1 	1 	1r
  c                     d}| j                         }| j                  |      }| j                  t        |      |       | j                  || j                  d |        y rN  r
  r 
  s       r   testCountSmallz$SendfileUsingSendTest.testCountSmall  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  駆   )r
  r  )
rU   r   r   r   rA	  r   r  r	  r   r	  r
  s          r   _testCountWithOffsetz*SendfileUsingSendTest._testCountWithOffset  s    ))'')I$$d+%%gq9 	8T4 	84E&&t,DT7DT5)TYY[%$,7	8 	8 	8 	8 	8 	8s%   C AB4#C 4B=	9C  C	c                     d}| j                         }| j                  |      }| j                  t        |      |       | j                  || j                  d|dz           y )Nr'
  r(
  r
  r 
  s       r   testCountWithOffsetz)SendfileUsingSendTest.testCountWithOffset  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   rA	  r   r  rh  r	  r  r}  rx  rZ   r  r	  rC  r	  s        r   _testNonBlockingz&SendfileUsingSendTest._testNonBlocking  s    ))'')I$$d+%%g. 	?$ 	?U#&&t,Dj$5j$-->		? 	? 	? 	? 	? 	?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.testNonBlocking  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   rA	  r   r  r   r   r	  r   r	  r	  s         r   _testWithTimeoutz&SendfileUsingSendTest._testWithTimeout  s    ))'')I$$d+''070H0HJ 	24 	2&&t,D:DT4==1	2 	2 	2 	2 	2 	2s$   B26B&B2&B/	+B22B;c                     | j                         }| j                  |      }| j                  t        |      | j                         | j                  || j
                         y rI   r
  r
  s      r   testWithTimeoutz%SendfileUsingSendTest.testWithTimeout  r
  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   rA	  r   r  r   r	  r  r  r-
  s        r   _testWithTimeoutTriggeredSendz3SendfileUsingSendTest._testWithTimeoutTriggeredSend  s    ))''))""D) 	<T))'2 <d%**40!!,d;<	< 	<< <	< 	<s#   B":BB"B	B""B+c                 p    | j                         }|j                  d       t        j                  d       y )NiX r
   )r	  r   r   r   r0
  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	   r3  zbinary modezpositive integerr
  r
  r   r   r2  )	r   r   rA	  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;;	;
 )""W5 	; ;A**1-&&tT;;	;
 )""D) 
	=T 	=A**1-&&y2D'+T ' >&&y2D'+T ' >&&z3E'+T ' <&&z3E'+T ' =	=
	= 
	=; ;	; 	;; ;	; 	;	= 	=
	= 
	=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	  r	  r
  r
  r

  r
  r
  r
  r
  r
  r!
  r#
  r%
  r)
  r+
  r.
  r1
  r3
  r5
  r7
  r9
  r;
  r=
  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	  rx  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	  rR  s     r   r	  z(SendfileUsingSendfileTest.meth_from_sock&  s    t566r>   N)ra   rb   rc   ry   r	  rd   r>   r   r?
  r?
     s    7r>   r?
  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   rw	  r!   r   SkipTestr  )rZ   typr  rC  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-  fromhexrF
  r   r  r   r   r   r   MSG_MORE)rZ   r  algoopr   s        r   test_sha256z LinuxKernelCryptoAPI.test_sha256:  s   == ": ;__VX. 	9$KKMEB 9

6"  x89 KKMEB 9foo.foo.foo.  x89	9 	99 9
9 9	9 	9s;   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?(193dbb43c6297b47ea6277ec0ce67119a3f3aa66rI
  z
hmac(sha1)r   )r-  rN
  rF
  r  r   SOL_ALGALG_SET_KEYr   r  r   r   )rZ   keyr  r  rP
  rQ
  r   s          r   test_hmac_sha1z#LinuxKernelCryptoAPI.test_hmac_sha1L  s     %.==!KL__V\2 	9dOOFNNF,>,>DKKMEB 9

4   x89	9 	99 9	9 	9s$   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))rQ
  ivr  )rQ
  r^
  r   )r-  rN
  r  rF
  r  r   rU
  rV
  r   sendmsg_afalgALG_OP_ENCRYPTrO
  r  r   r   ALG_OP_DECRYPT)rZ   rW
  r^
  r   
ciphertextmsglenrP
  rQ
  r   
multiplierlongmsgencdecs                r   test_aes_cbcz!LinuxKernelCryptoAPI.test_aes_cbc[  s   mm>?]]=>!]]#EF
S__Z4  	4OOFNNF,>,>DKKMEB >  F$9$9b'- ! 8

3  *=	> KKMEB 7  *$*$9$9b ! B  #67 Jej(GKKMEB 3  $*$9$9b ! Bggfz123 SXv
':;S&\:6KKMEB 3  #$*$9$9b ! Bggfz123 SXv
':;S#
"23A 	4  	4> >7 73 33 37 	4  	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      }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
        j*                   |t        |            |z   gt
        j                  t
        j,                   ||      gf       |
j                  t        |      |z         }| j                  ||||         | j                  ||| d         d d d        |	j                         \  }
}|
5  ||z   |z   }|
j                  |gt
        j.                  ||
       |
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 c939cc13397c1d37de6ae0e1cb7c423cb3d8cc017cbb89b39e0f67e2 c3b3c41f113a31b73d9a5cd432103069 24825602bd12a984e0092d3e448eda5f 93fe7d9e9bfd10348a5606e5cafa7354 0032a1dc85f1c9786925a2e71d8272ddaeadzgcm(aes))rQ
  r^
  assoclenr  )rQ
  r^
  rq
  r   )r-  rN
  r  rF
  r  r   rU
  rV
  ALG_SET_AEAD_AUTHSIZEr   r_
  r`
  rO
  r  r   r   r   Structr  r  
ALG_SET_OP
ALG_SET_IVALG_SET_AEAD_ASSOCLENra
  )rZ   rW
  r^
  plainassocexpected_ctexpected_tagtaglenrq
  rP
  rQ
  r   resr   pack_uint32s                  r   test_aead_aes_gcmz&LinuxKernelCryptoAPI.test_aead_aes_gcm  s   mm>?]]56@A@Amm$FG}}%GH\"u:__VZ0 1	8D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 8k)L8  #6+@+@R*2 ! 4ggc#h/0  HI78Y1	8 1	8> >> >> >8 8Y1	8 1	8sq   'A5QB/PQ(A6P"<QC.P/Q%AP;QP	Q"P,	'Q/P8	4Q;Q	 QQ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_sha256rG  )rF
  r  urandomr  r   rU
  rV
  r   r   r   r  )rZ   rP
  
extra_seedrQ
  r   rns         r   test_drbg_pr_sha256z(LinuxKernelCryptoAPI.test_drbg_pr_sha256  s     __U$45 	.BJOOFNNF,>,>
KKKMEB .WWR[  R"-.		. 	.. .		. 	.s$   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   )rQ
  r
   )rQ
  rq
  r2  )r   r6   r1   r  r   r_
  r`
  rR  s     r   test_sendmsg_afalg_argsz,LinuxKernelCryptoAPI.test_sendmsg_afalg_args  s\   }}V]]F,A,A1E 	J""9- %""$% ""9- ,""d"+, ""9- &""1%& ""9- L""f&;&;d"KL ""9- J""f&;&;b"IJ	J 	J% %, ,& &L LJ J	J 	Js   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  )rs  ?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)rs  @nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r   r6   r1   ru   r!   r  rw	  rv   r  r}  rR  s     r   test_length_restrictionz,LinuxKernelCryptoAPI.test_length_restriction  s    }}V]]F,A,A1E

# 01 	*II()	*##J@ 	*II()	* 01 	*II()	*##J@ 	*II()	* 	*	* 	*	* 	*	* 	*	* 	*s0   $DDD&3D2DD#&D/2D;N)ra   rb   rc   rF
  r   r!  rR
  rX
  rh
  r~
  r
  r
  r
  rd   r>   r   rB
  rB
  *  s    	 $W##Aq)9 *9"9 $W##Aq)&4 *&4P $W##Aq)<8 *<8| $W##Aq). *.J$*r>   rB
  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   ro  knownTCPFlagsr   )rZ   r$   providedunknowns       r   test_new_tcp_flagsz(TestMSWindowsTCPFlags.test_new_tcp_flags  sc    "6{B!all5.AABB&F!43E3E*E1F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  rg  rZ   rW   rC  s      r   test_addresszCreateServerTest.test_address  s    --/!!;"56 	:$T--/2K@T--/2D9	: %%%%udm-3__> >AE  !1!1!3A!6>  !1!1!3A!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   rs  rA   r   r  rg  )rZ   rC  r$   s      r   test_family_and_typez%CreateServerTest.test_family_and_type  s    !!"23 	<tT[[&..9TYY(:(:;	< %%%%jI @Q  6??;  F,>,>?@ @ &	< 	<@ @s   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   rC  r  s      r   test_reuse_portz CreateServerTest.test_reuse_port%  s    v~."":. H$$%5$GH H %%&67 )4oof&7&79L9LM  a() %%&64H ,Doof&7&79L9LM##C+, ,H H) ), ,s%   DAD<ADDDD'r  IPV6_V6ONLYz IPV6_V6ONLY option not supportedr  c                     t        j                  dt         j                        5 }|j                  t         j                  t         j
                        sJ 	 d d d        y # 1 sw Y   y xY w)Nr
  r  )r   r
  rg  r  r  r
  rR  s     r   test_ipv6_only_defaultz'CreateServerTest.test_ipv6_only_default1  sS    
 !!*V__E 	L??6#6#68J8JKKK	L 	L 	Ls   1A!!A*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
  rg  r   r  rR  s     r   test_dualstack_ipv6_familyz+CreateServerTest.test_dualstack_ipv6_family9  sM     !!*V__157 	;:>T[[&//:	; 	; 	;s   +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  )rC  r   r   r   r  rZ   s       r   runz3CreateServerFunctionalTest.echo_server.<locals>.runF  s     &++-a &JJt||,))D/C	&& & LL%&& && && &s.   B	0A=
B	A=,B	=B	B		Br	  )	r   r   r   rL   r  r  ru   r  r   )rZ   rC  r
  r   r  s   `   @r   echo_serverz&CreateServerFunctionalTest.echo_serverE  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  rC  s       r   echo_clientz&CreateServerFunctionalTest.echo_clientW  se    ]]&) 	6TOODLL)LLLL TYYt_f5		6 	6 	6s   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^  sd    --/!!2t*- 	BT"k40&..A	B 	B 	B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
  rg  r
  r
  r
  s      r   	test_tcp6z$CreateServerFunctionalTest.test_tcp6d  si    --/!!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
  rg  r
  r
  rT   r
  s      r   test_dual_stack_client_v4z4CreateServerFunctionalTest.test_dual_stack_client_v4n  sr     --/!!2t*V__157 	B:>T"k40&..A	B 	B 	B   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_v6x  sm     --/!!2t*V__157 	=:>T"eT]FOO<	= 	= 	=r
  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
  B  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  rt  s     r   	close_fdsz6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fds  s     r>   rz  r  r   r  )r<  r  piperu   r   r  rH  rA   r
  r   r
  r  r   re  r_  r  r`  r	  )rZ   r
  r
  r   r
  rfdwfdrb  sock1sock2r   fds2r  r  r-  r  s                   r   testSendAndRecvFdsz#SendRecvFdsTests.testSendAndRecvFds  s   	
	
 %*"I.q..U+#()xsCs)) ((9K9KLu 	-E 	-OOEC5#.%+__UCHqL#c(UV,%W"CudOOIt,		- 	- 	c"TCH-" $E* 	/JE3HCHHS#e*++-.	/ $D/ 	9JE3773$DTCJ$5$5$78	9- /)	- 	- 	- 	-s0   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
    s*    "224K.@@O;Or>   __main__)r   testr   test.supportr   r   r   _threadr   r  r  r"  r  r
  r  r  r  r=  rn  r   r	  r  r  r  r   r	  r   r@  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,  r8  r>  rF  rL  rT  rX  r[  r^  rb  re  ri  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#  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r	  r	  r5	  rP	  r~	  r	  r	  ry	  r{	  r	  r	  r	  r	  r  r	  r	  r?
  rB
  r
  ro  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 H$5$5~  3 > . D3/ 3B,X&& ,8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]/ ]@`1 `FiG(? iGX*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D*8,, D* 9D*N 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 _T  O  E   GsE   AI 	AI& )AI4 IAI#I"AI#I&AI1I0AI1I4AI?I>AI?