
    0hh9                    h&   S SK r S SK Jr  S SKJr  S SKJrJrJrJrJ	r	  S SK
rS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK r S SK!r!S SK"r"S SK#r#S SK$J%r%   S SK&r& S SK(r( S SK)r)\RT                  " SS9  \RV                  r+S	RY                  S
5      r-Sr.Sr/\R`                  " 5       S:H  r1S\Rd                  " 5       ;   r3 S SK4r4S r5S r6S r7S r8S r9S r:S r;S r<S r=S r>S r?S r@\R                  S 5       rB\R                  S 5       rC\7" 5       rD\8" 5       rE\9" 5       rF\:" 5       rG\;" 5       rH\<" 5       rI\=" 5       rJ\K" \S5      =(       a6    \R                  =(       a    \R                  " 5       R                  S:  (       + rO\>" 5       rP\?" 5       rQ\@" 5       rR\R                  " S5      R                  rT " S  S!\ R                  5      rV " S" S#\ R                  5      rW " S$ S%\W5      rX " S& S'\ R                  5      rY " S( S)\ R                  5      rZ " S* S+5      r[ " S, S-\V\[5      r\ " S. S/\W\[5      r]\ R                  " \OS05       " S1 S2\X\[5      5       r_ " S3 S4\Y\[5      r` " S5 S6\Z\[5      ra\ R                  " \(SL S75      \ R                  " \3S85      \ R                  " \JS95      \ R                  " \6" 5       S::g  S;5       " S< S=\ R                  \[5      5       5       5       5       rc " S> S?\\5      rd " S@ SA\ R                  \[5      re " SB SC\ R                  5      rf " SD SE\f5      rg " SF SG\f\[5      rh " SH SI\g\h5      ri " SJ SK\f5      rj " SL SM\j5      rk " SN SO\f5      rl " SP SQ\l5      rm " SR SS\l5      rn " ST SU\l5      ro " SV SW\l5      rp " SX SY\l5      rq " SZ S[\q5      rr " S\ S]\q5      rsS^ rtS_ ruS` rv " Sa Sb\ R                  5      rw\ R                  " \DSc5       " Sd Se\ R                  5      5       rx\ R                  " \DSc5       " Sf Sg\`5      5       ry\ R                  " \ESh5       " Si Sj\ R                  5      5       rz\ R                  " \FSk5       " Sl Sm\ R                  5      5       r{\ R                  " \GSn5       " So Sp\ R                  5      5       r|\ R                  " \GSn5       " Sq Sr\a5      5       r}\ R                  " \ISs5       " St Su\ R                  5      5       r~\ R                  " \(SL S75      \ R                  " \JS95       " Sv Sw\ R                  5      5       5       r\ R                  " \PSx5       " Sy Sz\ R                  5      5       r\ R                  " \RS{5       " S| S}\ R                  5      5       r " S~ S\d5      r " S S\]5      r\ R                  " \OS05       " S S\_5      5       r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\\5      r " S S\ R                  5      r " S S\5      r " S S\5      r " S S\\\h\n5      r\u" \R6                  S5       " S S\\5      5       r\u" \R6                  S5       " S S\\5      5       r\u" \R6                  S5       " S S\\5      5       r " S S\\\h\r5      r\u" \R6                  S5      \ R                  " \GR6                  S5      \v" SS5       " S S\\5      5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \v" SS5       " S S\\5      5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \v" SS5       " S S\\5      5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \u" \S5      \v" SS5       " S S\\5      5       5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \u" \S5      \v" SS5       " S S\\\5      5       5       5       5       r\ R                  " \OS05       " S S\\\h\o5      5       r\ R                  " \OS05      \u" \R6                  S5       " S S\\5      5       5       r\ R                  " \OS05      \u" \R6                  S5       " S S\\5      5       5       r\ R                  " \OS05      \u" \R6                  S5       " S S\\5      5       5       r\ R                  " \OS05       " S S\\\h\s5      5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \ R                  " \OS05      \v" SS5       " S S\\5      5       5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \ R                  " \OS05      \v" SS5       " S S\\5      5       5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \ R                  " \OS05      \v" SS5       " S S\\5      5       5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \ R                  " \OS05      \u" \S5      \v" SS5       " S S\\5      5       5       5       5       5       r\u" \R6                  S5      \ R                  " \GR6                  S5      \ R                  " \OS05      \u" \S5      \v" SS5       " S S\\\5      5       5       5       5       5       r " S S\\i\m5      r\u" \R6                  S5       " S S\\5      5       r\u" \R6                  S5       " S S\\\5      5       r\u" \R6                  S5       " S S\\\5      5       r " S S\\\i\p5      r\u" \R6                  S5      \ R                  " \1S5      \v" SSS5       " S S\\5      5       5       5       r\u" \R6                  S5      \ R                  " \1S5      \v" SSS5       " S S\\\5      5       5       5       r\u" \R6                  S5      \ R                  " \1S5      \v" SSS5       " S S\\\5      5       5       5       r " S S\\i\k5      r\u" \R6                  S5      \u" \S5       " S S\\5      5       5       r\u" \R6                  S5      \u" \S5       " S S\\\5      5       5       r\u" \R6                  S5      \u" \S5       " S S\\\5      5       5       r\u" \R6                  SS5      \u" \SSS5       " S S\\5      5       5       r\u" \R6                  SS5      \u" \SSS5       " S S\\\5      5       5       r " S S5      r\u" \S5      \ R                  " \K" \S5      =(       d	    \K" \S5      S5       " S S\\n5      5       5       r\u" \S5      \ R                  " \K" \S5      =(       d	    \K" \S5      S5       " GS  GS\\g\m5      5       5       r " GS GS\\5      r " GS GS\e5      r " GS GS\e5      r " GS GS	\\5      r " GS
 GS\d5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\\5      r " GS GS\ R                  5      r " GS GS\V\[5      r " GS  GS!\V\[5      r " GS" GS#\V5      r " GS$ GS%\W5      r\ R                  " \OS05       " GS& GS'\X5      5       r " GS( GS)\ R                  5      r\ R                  " \R*                  GS*;   GS+5       " GS, GS-\ R                  5      5       r\ R                  " \K" \S5      GS.5       " GS/ GS0\ R                  5      5       r " GS1 GS2\d5      rGS3rGS4rGS5rGS6 r\ R                  " \" 5       GS75       " GS8 GS9\ R                  5      5       r\ R                  " \" 5       GS75       " GS: GS;\ R                  \[5      5       r " GS< GS=\\5      r " GS> GS?\ R                  5      r\ R                  " \K" \GS@5      GSA5       " GSB GSC\ R                  5      5       r\ R                  " \GR                  GSD:H  GSE5      \ R                  " \&GSF5       " GSG GSH\V5      5       5       r " GSI GSJ\\5      r\ R                  " \K" \GSK5      GSL5       " GSM GSN\5      5       r\ R                  " \HGSO5       " GSP GSQ\ R                  5      5       r\ R                  " \R*                  GSR:H  GSS5       " GST GSU\ R                  5      5       r\ R                  " \R*                  GR                  GSV5      GSW5       " GSX GSY\ R                  5      5       r " GSZ GS[\ R                  5      r " GS\ GS]\ R                  5      r\u" \GS^5      \u" \GS_5      \u" \S5       " GS` GSa\ R                  5      5       5       5       rGSb r\GSc:X  a  \ GR                  " 5         gg! \' a    Sr& GNuf = f! \' a    Sr( GNf = f! \' a    Sr) GNf = f! \' a    Sr4 GN:f = f(d      N)mock)support)is_apple	os_helperrefleak_helpersocket_helperthreading_helper)proxyFT)moduleu   Michael Gilfix was hereሴ
utf-8     AIXzmicrosoft-standard-WSLc                 ,   ^ U (       d  S nU$ U4S jnU$ )Nc                     S U l         U $ )Nc                     U $ N fs    9/opt/python-3.13.8/usr/lib/python3.13/test/test_socket.py<lambda>;skipForRefleakHuntinIf.<locals>.decorator.<locals>.<lambda>A   s    a    )client_skipr   s    r   	decorator)skipForRefleakHuntinIf.<locals>.decorator@   s    'AMHr   c                 \   >^  [         R                  " T 5      U U4S j5       nS nX!l        U$ )Nc                  z   > [         R                  " 5       (       a  [        R                  " ST 35      eT" U 0 UD6$ )Nz'ignore while hunting for refleaks, see )r   hunting_for_refleaksunittestSkipTest)argskwdsr   issuerefs     r   wrapper:skipForRefleakHuntinIf.<locals>.decorator.<locals>.wrapperF   s=    !6688"++.UV^U_,`aa$'$''r   c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )Nc                  J   > [         R                  " 5       (       a  g T" U 0 UD6$ r   )r   r    )r#   r$   r   s     r   r&   OskipForRefleakHuntinIf.<locals>.decorator.<locals>.client_skip.<locals>.wrapperN   s%    %::<<d+d++r   )
contextlibwraps)r   r&   s   ` r   r   >skipForRefleakHuntinIf.<locals>.decorator.<locals>.client_skipM   s'    !!!$, %, r   )r+   r,   r   )r   r&   r   r%   s   `  r   r   r   E   s2    a ( !( #.Nr   r   )	conditionr%   r   s    ` r   skipForRefleakHuntinIfr/   >   s     	2 )	( r   c                  ,   [         c  g [        [        S5      (       d  g  [        SS5       n [         R                  " U [        R
                  S5      nS S S 5        [        R                  " SW5      S   $ ! , (       d  f       N(= f! [         a     g f = f)NIOCTL_VM_SOCKETS_GET_LOCAL_CIDz
/dev/vsockrbz    Ir   )	fcntlhasattrsocketopenioctlr1   structunpackOSError)r   rs     r   get_cidr=   [   s{    }6;<<(,%AvDDfMA &
 }}S!$Q'' &% s(   B 'A5B 5
B?B 
BBc                       [         R                   " [         R                  [         R                  [         R                  5      n U R	                  5         g! [
        [        4 a     gf = f)z5Check whether CAN sockets are supported on this host.FT)r6   PF_CANSOCK_RAWCAN_RAWcloseAttributeErrorr;   ss    r   _have_socket_canrF   h   sL    MM&--&..I 	
		 G$    AA A('A(c                       [         R                   " [         R                  [         R                  [         R                  5      n U R	                  5         g! [
        [        4 a     gf = f)z;Check whether CAN ISOTP sockets are supported on this host.FT)r6   r?   
SOCK_DGRAM	CAN_ISOTPrB   rC   r;   rD   s    r   _have_socket_can_isotprK   r   P    MM&--):):F<L<LM 	
		 G$ rG   c                       [         R                   " [         R                  [         R                  [         R                  5      n U R	                  5         g! [
        [        4 a     gf = f)z;Check whether CAN J1939 sockets are supported on this host.FT)r6   r?   rI   	CAN_J1939rB   rC   r;   rD   s    r   _have_socket_can_j1939rO   |   rL   rG   c                       [         R                   " [         R                  [         R                  S5      n U R                  5         g! [        [
        4 a     gf = f)z5Check whether RDS sockets are supported on this host.r   FT)r6   PF_RDSSOCK_SEQPACKETrB   rC   r;   rD   s    r   _have_socket_rdsrS      J    MM&--)>)>B 	
		 G$    4A AAc                       [         R                   " [         R                  [         R                  S5      n U R                  5         g! [        [
        4 a     gf = f)z8Check whether AF_ALG sockets are supported on this host.r   FT)r6   AF_ALGrR   rB   rC   r;   rD   s    r   _have_socket_algrX      rT   rU   c                       [         R                   " [         R                  [         R                  S5      n U R                  5         g! [        [
        4 a     gf = f)z<Check whether AF_QIPCRTR sockets are supported on this host.r   FT)r6   
AF_QIPCRTRrI   rB   rC   r;   rD   s    r   _have_socket_qipcrtrr[      sL    MM&++V->->B 	
		 G$ rU   c                      [        5       n U SL$ )z:Check whether AF_VSOCK sockets are supported on this host.N)r=   )cids    r   _have_socket_vsockr^      s    
)CtOr   c                       [         R                   " [         R                  [         R                  [         R                  5      n U R	                  5         g! [
        [        4 a     gf = f)z>Check whether AF_BLUETOOTH sockets are supported on this host.FT)r6   AF_BLUETOOTHSOCK_STREAMBTPROTO_RFCOMMrB   rC   r;   rD   s    r   _have_socket_bluetoothrc      sT     MM&--v/A/A6CXCXY 	
		 G$ rG   c                       [         R                   " [         R                  [         R                  [         R                  5      n U R	                  5         g! [
        [        4 a     gf = f)z?Check whether BTPROTO_L2CAP sockets are supported on this host.FT)r6   r`   rR   BTPROTO_L2CAPrB   rC   r;   rD   s    r   _have_socket_bluetooth_l2caprf      sR    MM&--v/D/DfFZFZ[ 	
		 G$ rG   c                       [         R                   " [         R                  [         R                  [         R                  5      n U R	                  5         g! [
        [        4 a     gf = f)z;Check whether AF_HYPERV sockets are supported on this host.FT)r6   	AF_HYPERVra   HV_PROTOCOL_RAWrB   rC   r;   rD   s    r   _have_socket_hypervrj      sR    MM&**F,>,>@V@VW 	
		 G$ rG   c              #      #    [         R                  " 5       n [         R                  " U 5        S v   [         R                  " U5        g ! [         R                  " U5        f = f7fr   )r6   getdefaulttimeoutsetdefaulttimeout)timeoutold_timeouts     r   socket_setdefaulttimeoutrp      sE     **,K.  )  -  -s   A%A
 A%
A""A%c               #      #    [         R                  S;  a  S v   g [        R                  " 5          [        R                  " SS[
        S9  S v   S S S 5        g ! , (       d  f       g = f7f)N>   win32darwinalwaysz9received malformed or improperly-truncated ancillary data)actionmessagecategory)sysplatformwarningscatch_warningsfilterwarningsRuntimeWarningr   r   r    downgrade_malformed_data_warningr~      sO      ||..		 	 	" 	O#	

 	 
#	"	"s   /A*A	A*
A'#A*IPPROTO_UDPLITE   ic                        \ rS rSrS rS rSrg)SocketTCPTesti  c                     [         R                   " [         R                  [         R                  5      U l        [        R
                  " U R                  5      U l        U R                  R                  5         g r   )r6   AF_INETra   servr   	bind_portportlistenselfs    r   setUpSocketTCPTest.setUp  sD    MM&..&2D2DE	!++DII6			r   c                 F    U R                   R                  5         S U l         g r   r   rB   r   s    r   tearDownSocketTCPTest.tearDown      			r   r   r   N__name__
__module____qualname____firstlineno__r   r   __static_attributes__r   r   r   r   r     s    
r   r   c                        \ rS rSrS rS rSrg)SocketUDPTesti  c                     [         R                   " [         R                  [         R                  5      U l        [        R
                  " U R                  5      U l        g r   )r6   r   rI   r   r   r   r   r   s    r   r   SocketUDPTest.setUp  s4    MM&..&2C2CD	!++DII6	r   c                 F    U R                   R                  5         S U l         g r   r   r   s    r   r   SocketUDPTest.tearDown  r   r   r   Nr   r   r   r   r   r     s    7r   r   c                       \ rS rSrS rSrg)SocketUDPLITETesti  c                     [         R                   " [         R                  [         R                  [         R                  5      U l        [
        R                  " U R                  5      U l        g r   )r6   r   rI   r   r   r   r   r   r   s    r   r   SocketUDPLITETest.setUp  s<    MM&..&2C2CVE[E[\	!++DII6	r   r   N)r   r   r   r   r   r   r   r   r   r   r     s    7r   r   c                       \ rS rSrSrSrSr Sr\R                  " \5      r
 Sr\S\R                  " \5      S-  -  -  rS	 rS
rg)SocketCANTesti!  zTo 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                    [         R                   " [         R                  [         R                  [         R                  5      U l        U R                  U R                  R                  5         U R                  R                  U R                  45        g ! [         a!    U R                  SU R                  -  5         g f = fN%network interface `%s` does not exist)r6   r?   r@   rA   rE   
addCleanuprB   bind	interfacer;   skipTestr   s    r   r   SocketCANTest.setUpJ  s|    v}}foov~~N%	+FFKK)* 	+MMA>>* +	+s   .&B (C ?C rD   N)r   r   r   r   __doc__r   bufsizecan_frame_fmtr9   calcsizecan_frame_sizebcm_cmd_msg_fmtr   r   r   r   r   r   r   !  s[     IG M__]3N   Osfooo>BCCO+r   r   c                   "    \ rS rSrSrSrS rSrg)SocketRDSTestiT  zTTo be able to run this test, the `rds` kernel module must be loaded:
# modprobe rds
    c                 N   [         R                   " [         R                  [         R                  S5      U l        U R	                  U R                  R
                  5         [        R                  " U R                  5      U l        g ! [         a    U R                  S5         g f = f)Nr   zunable to bind RDS socket)r6   rQ   rR   r   r   rB   r   r   r   r;   r   r   s    r   r   SocketRDSTest.setUp[  sk    MM&--1F1FJ			(	7%//		:DI 	7MM56	7s    %B B$#B$r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   T  s     G7r   r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)ThreadableTestid  a1  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    U R                   U l        U R                  U l         g r   )r   _ThreadableTest__setUp_setUpr   s    r   __init__ThreadableTest.__init__  s    zz[[
r   c                 8    U R                   R                  5         g)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setr   s    r   serverExplicitReady"ThreadableTest.serverExplicitReady  s    
 	r   c                 F  ^  T R                  [        R                  " 5       5        [        R                  " 5       T l        [        R                  " 5       T l        [        R                  " 5       T l        [        R                  " S5      T l        ST l
        U 4S jnT R                  U5        T R                  5       nUR                  S5      nX#S-   S  n[        T SU-   5      n[        R                   " T R"                  U45      T l         T R'                  5          T R
                  R)                  5         T R                  R+                  5         T R                  T R                  R*                  5        g !   ST l
        e = f! T R
                  R)                  5         f = f)Nr   Fc                  x   > T R                   R                  5       (       a  T R                   R                  5       eg r   )queueqsizegetr   s   r   raise_queued_exception5ThreadableTest._setUp.<locals>.raise_queued_exception  s,    zz!!jjnn&& "r   ._T)enterContextr	   wait_threads_exit	threadingEventr   client_readydoner   Queueserver_crashedr   idrfindgetattrthreadstart_new_thread	clientRunclient_threadr   r   wait)r   r   
methodnamer   test_methods   `    r   r   ThreadableTest._setUp  s9   *<<>?%OO-%OO-OO%	[[^
#	' 	./ WWY
S!!%
dC*$45#44NN[N,	$LLN
 !!# 		'	"&D!!#s   E7 7
FF F c                    U R                   R                  5          U R                  5          U R                  R                  5         U R                  (       a  U R                  5         g [        US5      (       d  [        S5      e U" 5         U R                  5         g ! [         aO  nU R                  R                  U5        U R                  5          S nAU R                  R                  5         g S nAff = f! U R                  R                  5         f = f! [         a%  nU R                  R                  U5         S nANS nAff = f! U R                  5         f = f)N__call__z%test_func must be a callable function)r   r   clientSetUpBaseExceptionr   putclientTearDownr   r   r   r5   	TypeError)r   	test_funces      r   r   ThreadableTest.clientRun  s    	$ !!#!y*--CDD	"K !!  	JJNN1!!!#	
 !!#  	JJNN1	 !sS   B D 
C7(+C2C: 2C77C: :D
E#E>E EE Ec                     [        S5      e)Nz clientSetUp must be implemented.)NotImplementedErrorr   s    r   r   ThreadableTest.clientSetUp  s    !"DEEr   c                 b    U R                   R                  5         [        R                  " 5         g r   )r   r   r   exitr   s    r   r   ThreadableTest.clientTearDown  s    		r   )__setUpr   r   r   r   r   r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   d  s(    #J!
 (@",Fr   r   c                   *    \ rS rSrSS jrS rS rSrg)ThreadedTCPSocketTesti  c                 T    [         R                  XS9  [        R                  U 5        g N)
methodNamer   r   r   r   r   s     r   r   ThreadedTCPSocketTest.__init__  !    t;%r   c                 t    [         R                   " [         R                  [         R                  5      U l        g r   )r6   r   ra   clir   s    r   r   !ThreadedTCPSocketTest.clientSetUp  s    ==1C1CDr   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r   rB   r   r   r   s    r   r   $ThreadedTCPSocketTest.clientTearDown  %    %%d+r   r   NrunTestr   r   r   r   r   r   r   r   r   r   r   r   r     s    &E,r   r   c                   *    \ rS rSrSS jrS rS rSrg)ThreadedUDPSocketTesti  c                 T    [         R                  XS9  [        R                  U 5        g r   )r   r   r   r   s     r   r   ThreadedUDPSocketTest.__init__  r   r   c                 t    [         R                   " [         R                  [         R                  5      U l        g r   )r6   r   rI   r   r   s    r   r   !ThreadedUDPSocketTest.clientSetUp  s    ==1B1BCr   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   $ThreadedUDPSocketTest.clientTearDown  r  r   r  Nr  r	  r   r   r   r  r    s    &D,r   r  z'UDPLITE sockets required for this test.c                   *    \ rS rSrSS jrS rS rSrg)ThreadedUDPLITESocketTesti  c                 T    [         R                  XS9  [        R                  U 5        g r   )r   r   r   r   s     r   r   "ThreadedUDPLITESocketTest.__init__  s!    ""4"?%r   c                     [         R                   " [         R                  [         R                  [         R                  5      U l        g r   )r6   r   rI   r   r   r   s    r   r   %ThreadedUDPLITESocketTest.clientSetUp  s&    ==1B1BFDZDZ[r   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   (ThreadedUDPLITESocketTest.clientTearDown  r  r   r  Nr  r	  r   r   r   r  r    s    &\,r   r  c                   *    \ rS rSrSS jrS rS rSrg)ThreadedCANSocketTesti  c                 T    [         R                  XS9  [        R                  U 5        g r   )r   r   r   r   s     r   r   ThreadedCANSocketTest.__init__  r   r   c                     [         R                   " [         R                  [         R                  [         R                  5      U l         U R                  R                  U R                  45        g ! [         a     g f = fr   )r6   r?   r@   rA   r   r   r   r;   r   s    r   r   !ThreadedCANSocketTest.clientSetUp  sR    ==P	HHMM4>>+, 	 	s   	&A0 0
A=<A=c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   $ThreadedCANSocketTest.clientTearDown  r  r   r  Nr  r	  r   r   r   r  r    s    &,r   r  c                   *    \ rS rSrSS jrS rS rSrg)ThreadedRDSSocketTesti  c                 T    [         R                  XS9  [        R                  U 5        g r   )r   r   r   r   s     r   r   ThreadedRDSSocketTest.__init__  r   r   c                    [         R                   " [         R                  [         R                  S5      U l         U R                  R	                  [
        S45        U R                  R                  5       U l        g ! [         a     g f = fNr   )	r6   rQ   rR   r   r   HOSTgetsocknamecli_addrr;   r   s    r   r   !ThreadedRDSSocketTest.clientSetUp  sa    ==0E0EqI	HHMM4)$ HH002DM 	 	s   A A< <
B	B	c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   $ThreadedRDSSocketTest.clientTearDown$  r  r   r   r*  Nr  r	  r   r   r   r#  r#    s    &	,r   r#  
need fcntlz$VSOCK does not work on Microsoft WSLz%VSOCK sockets required for this test.   z-This test can only be run on a virtual guest.c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
ThreadedVSOCKSocketStreamTesti)  c                 h    [         R                  R                  XS9  [        R                  U 5        g r   r!   TestCaser   r   r   s     r   r   &ThreadedVSOCKSocketStreamTest.__init__1  s'    ""4"?%r   c                 Z   [         R                   " [         R                  [         R                  5      U l        U R	                  U R                  R
                  5        U R                  R                  [         R                  [        45        U R                  R                  5         U R                  5         U R                  R                  [        R                  5        U R                  R                  5       u  U l        U l        U R	                  U R                  R
                  5        g r   )r6   AF_VSOCKra   r   r   rB   r   VMADDR_CID_ANY	VSOCKPORTr   r   
settimeoutr   LOOPBACK_TIMEOUTacceptconnconnaddrr   s    r   r   #ThreadedVSOCKSocketStreamTest.setUp5  s    MM&//63E3EF			(		--y9:		  "		W556#'99#3#3#5 	4=		(r   c                    [         R                  " S5        [        R                  " [        R                  [        R                  5      U l        U R                  U R
                  R                  5        [        5       nU[        R                  [        R                  4;   a  [        nU R
                  R                  U[        45        g )N皙?)timesleepr6   r8  ra   r   r   rB   r=   VMADDR_CID_HOSTr9  VMADDR_CID_LOCALconnectr:  )r   r]   s     r   r   )ThreadedVSOCKSocketStreamTest.clientSetUp?  sy    

3==&2D2DE'i6))6+@+@AA"C#y)*r   c                      U R                   R                  S5      nU R                  W[        5        g ! [         a$  nU R                  [	        U5      5         S nAN@S nAff = fN   )r>  recvPermissionErrorr   reprassertEqualMSG)r   msgexcs      r   
testStream(ThreadedVSOCKSocketStreamTest.testStreamI  sP    	%))..&C 	c"  	%MM$s)$$	%s   4 
A"AA"c                 v    U R                   R                  [        5        U R                   R                  5         g r   r   sendrP  rB   r   s    r   _testStream)ThreadedVSOCKSocketStreamTest._testStreamP       cr   )r   r>  r?  r   Nr  
r   r   r   r   r   r   r   rS  rX  r   r   r   r   r2  r2  )  s    &)+#r   r2  c                   :    \ rS rSrSrS
S jrS rS rS rS r	Sr
g	)SocketConnectedTestiT  zSocket 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                 *    [         R                  XS9  g r   )r   r   r   s     r   r   SocketConnectedTest.__init__[      &&t&Cr   c                     [         R                  U 5        U R                  5         U R                  R	                  5       u  pXl        g r   )r   r   r   r   r=  cli_connr   r>  addrs      r   r   SocketConnectedTest.setUp^  s7    ##D) 	  "YY%%'
r   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   )rb  rB   r   r   r   s    r   r   SocketConnectedTest.tearDownf  s'    &&t,r   c                     [         R                  U 5        U R                  R                  [        U R
                  45        U R                  U l        g r   )r   r   r   rG  r(  r   	serv_connr   s    r   r   SocketConnectedTest.clientSetUpk  s6    ))$/$		*+r   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   )ri  rB   r   r   r   s    r   r   "SocketConnectedTest.clientTearDownp  s'    ,,T2r   rb  ri  Nr  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]  r]  T  s!    D-
"
3r   r]  c                   <    \ rS rSrS
S jrS rS rS rS rS r	Sr
g	)SocketPairTestiu  c                     [         R                  R                  XS9  [        R                  U 5        S U l        S U l        g r   )r!   r5  r   r   r   r   r   s     r   r   SocketPairTest.__init__w  s5    ""4"?%	r   c                 ,    [         R                  " 5       $ r   )r6   
socketpairr   s    r   rs  SocketPairTest.socketpair}  s      ""r   c                 >    U R                  5       u  U l        U l        g r   )rs  r   r   r   s    r   r   SocketPairTest.setUp  s    "oo/	48r   c                 h    U R                   (       a  U R                   R                  5         S U l         g r   r   r   s    r   r   SocketPairTest.tearDown  s    99IIOO	r   c                     g r   r   r   s    r   r   SocketPairTest.clientSetUp      r   c                     U R                   (       a  U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   SocketPairTest.clientTearDown  s,    88HHNN%%d+r   )r   r   Nr  )r   r   r   r   r   rs  r   r   r   r   r   r   r   r   ro  ro  u  s     #0
,r   ro  c                   *    \ rS rSrSrS rS rS rSrg)SocketTestBasei  zA 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                     U R                  5       U l        U R                  U R                  5        U R	                  5         g r   )	newSocketr   r   close_server
bindServerr   s    r   r   SocketTestBase.setUp  s,    NN$	))*r   c                 F    U R                   R                  5         S U l         g r   r   r   s    r   r  SocketTestBase.close_server  r   r   c                 x    U R                  U R                  5        U R                  R                  5       U l        g)z9Bind server socket and set self.serv_addr to its address.N)bindSockr   r)  	serv_addrr   s    r   r  SocketTestBase.bindServer  s&    dii ..0r   )r   r  N)	r   r   r   r   r   r   r  r  r   r   r   r   r  r    s    
1r   r  c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )SocketListeningTestMixini  z%Mixin to listen on the server socket.c                 V   > [         TU ]  5         U R                  R                  5         g r   )superr   r   r   r   	__class__s    r   r   SocketListeningTestMixin.setUp  s    		r   r   )r   r   r   r   r   r   r   __classcell__r  s   @r   r  r    s    / r   r  c                   D   ^  \ rS rSrSrU 4S jrS rS rS rS r	Sr
U =r$ )	ThreadedSocketTestMixini  zMixin 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                 P   > [         TU ]  " U0 UD6  [        R                  U 5        g r   )r  r   r   r   r#   kwargsr  s      r   r    ThreadedSocketTestMixin.__init__  s#    $)&)%r   c                 N    U R                  5       U l        U R                  5         g r   )newClientSocketr   
bindClientr   s    r   r   #ThreadedSocketTestMixin.clientSetUp  s    '')r   c                 "    U R                  5       $ )z&Return a new socket for use as client.)r  r   s    r   r  'ThreadedSocketTestMixin.newClientSocket  s    ~~r   c                 x    U R                  U R                  5        U R                  R                  5       U l        g)z8Bind client socket and set self.cli_addr to its address.N)r  r   r)  r*  r   s    r   r  "ThreadedSocketTestMixin.bindClient  s&    dhh,,.r   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   &ThreadedSocketTestMixin.clientTearDown  r  r   r.  )r   r   r   r   r   r   r   r  r  r   r   r  r  s   @r   r  r    s&    & /
, ,r   r  c                   P   ^  \ rS rSrSrU 4S jrU 4S jrU 4S jrU 4S jrSr	U =r
$ )ConnectedStreamTestMixini  zMixin 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U ]  5         U R                  5         U R                  R	                  5       u  pXl        g r   )r  r   r   r   r=  rb  )r   r>  rd  r  s      r   r   ConnectedStreamTestMixin.setUp  s3     	  "YY%%'
r   c                 d   > U R                   R                  5         S U l         [        TU ]  5         g r   )rb  rB   r  r   r  s    r   r   !ConnectedStreamTestMixin.tearDown  s%    r   c                    > [         TU ]  5         U R                  R                  U R                  5        U R                  U l        g r   )r  r   r   rG  r  ri  r  s    r   r   $ConnectedStreamTestMixin.clientSetUp  s/    (r   c                    >  U R                   R                  5         S U l         [        TU ]  5         g ! [         a     Nf = fr   )ri  rB   rC   r  r   r  s    r   r   'ConnectedStreamTestMixin.clientTearDown  s@    	NN  "!DN 	   		s   !3 
A A rm  )r   r   r   r   r   r   r   r   r   r   r  r  s   @r   r  r    s!    
"
! !r   r  c                       \ rS rSrSrS rSrg)UnixSocketTestBasei  z(Base class for Unix-domain socket tests.c                     [         R                  " 5       nU R                  [        R                  U5        [         R
                  " X5        g r   )r   create_unix_domain_namer   r   unlinkbind_unix_socket)r   sockpaths      r   r  UnixSocketTestBase.bindSock  s2    446	(($/&&t2r   r   N)r   r   r   r   r   r  r   r   r   r   r  r    s
    23r   r  c                       \ rS rSrSrS rSrg)UnixStreamBasei  z-Base class for Unix-domain SOCK_STREAM tests.c                 h    [         R                   " [         R                  [         R                  5      $ r   )r6   AF_UNIXra   r   s    r   r  UnixStreamBase.newSocket      }}V^^V-?-?@@r   r   Nr   r   r   r   r   r  r   r   r   r   r  r    s    7Ar   r  c                   6   ^  \ rS rSrSr\rU 4S jrS rSr	U =r
$ )InetTestBasei  z!Base class for IPv4 socket tests.c                 J   > [         TU ]  5         U R                  S   U l        g Nr   )r  r   r  r   r  s    r   r   InetTestBase.setUp  s    NN1%	r   c                 @    [         R                  " XR                  S9  g )Nhost)r   r   r  r   r  s     r   r  InetTestBase.bindSock  s    995r   )r   )r   r   r   r   r   r(  r  r   r  r   r  r  s   @r   r  r    s    +D&6 6r   r  c                       \ rS rSrSrS rSrg)TCPTestBasei  z#Base class for TCP-over-IPv4 tests.c                 h    [         R                   " [         R                  [         R                  5      $ r   )r6   r   ra   r   s    r   r  TCPTestBase.newSocket  r  r   r   Nr  r   r   r   r  r        -Ar   r  c                       \ rS rSrSrS rSrg)UDPTestBasei!  z#Base class for UDP-over-IPv4 tests.c                 h    [         R                   " [         R                  [         R                  5      $ r   )r6   r   rI   r   s    r   r  UDPTestBase.newSocket$  s    }}V^^V->->??r   r   Nr  r   r   r   r  r  !  s    -@r   r  c                       \ rS rSrSrS rSrg)UDPLITETestBasei'  z'Base class for UDPLITE-over-IPv4 tests.c                     [         R                   " [         R                  [         R                  [         R                  5      $ r   )r6   r   rI   r   r   s    r   r  UDPLITETestBase.newSocket*  s%    }}V^^V->->@V@VWWr   r   Nr  r   r   r   r  r  '  s    1Xr   r  c                       \ rS rSrSrS rSrg)SCTPStreamBasei-  z;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.c                     [         R                   " [         R                  [         R                  [         R                  5      $ r   )r6   r   ra   IPPROTO_SCTPr   s    r   r  SCTPStreamBase.newSocket0  s*    }}V^^V-?-?#002 	2r   r   Nr  r   r   r   r  r  -  s
    E2r   r  c                   0    \ rS rSrSr\R                  rSrg)Inet6TestBasei5  z!Base class for IPv6 socket tests.r   N)	r   r   r   r   r   r   HOSTv6r  r   r   r   r   r  r  5  s    +Dr   r  c                       \ rS rSrSrS rSrg)UDP6TestBasei:  z#Base class for UDP-over-IPv6 tests.c                 h    [         R                   " [         R                  [         R                  5      $ r   )r6   AF_INET6rI   r   s    r   r  UDP6TestBase.newSocket=  s    }}V__f.?.?@@r   r   Nr  r   r   r   r  r  :  r  r   r  c                       \ rS rSrSrS rSrg)UDPLITE6TestBasei@  z'Base class for UDPLITE-over-IPv6 tests.c                     [         R                   " [         R                  [         R                  [         R                  5      $ r   )r6   r  rI   r   r   s    r   r  UDPLITE6TestBase.newSocketC  s%    }}V__f.?.?AWAWXXr   r   Nr  r   r   r   r  r  @  s    1Yr   r  c                 6   ^^ S mUU4S jnS nU (       a  U$ U$ )ag  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                      g r   r   )r#   r  s     r   client_pass%skipWithClientIf.<locals>.client_passR  r{  r   c                    > [         R                  " T5      " U 5      n[        U [        5      (       d  U4S jUl        U$ )Nc                    > T$ r   r   )r   r  s    r   r   3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>W  s    ;r   )r!   skip
isinstancetyper   )objretvalr  reasons     r   skipdec!skipWithClientIf.<locals>.skipdecT  s0    v&s+#t$$!6Fr   c                 b    [        U [        5      (       d  [        U S5      (       d  S U l        U $ )Nr   c                     U $ r   r   r   s    r   r   5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>[  s    r   )r  r  r5   r   )r  s    r   	noskipdec#skipWithClientIf.<locals>.noskipdecY  s'    3%%m)D)D)CO
r   r   )r.   r  r  r  r  s    `  @r   skipWithClientIfr  I  s!    
  7.Y.r   c                     U Vs/ s H  n[        X5      (       a  M  UPM     nn[        USSR                  S U 5       5      -   5      $ s  snf )z{Skip decorated test if obj is missing any of the given attributes.

Sets client_skip attribute as skipWithClientIf() does.
don't have , c              3   $   #    U  H  ov   M     g 7fr   r   .0names     r   	<genexpr>requireAttrs.<locals>.<genexpr>g  s     *DGD4G   )r5   r  join)r  
attributesr  missings       r   requireAttrsr  `  sM    
 !+E
'#2Dt
GE*DG*D!DDF F Fs
   A
A
c            	      B   SnU  Vs/ s H3  n[        U[        5      (       d  M  [        [        U5      (       a  M1  UPM5     nnU(       a  SSR	                  S U 5       5      -   nO[U  Vs/ s H*  n[        U[        5      (       a  [        [        U5      OUPM,     nn [        R                  " U6 nUR                  5         [        USLSR                  SR	                  S U  5       5      U5      5      $ s  snf s  snf ! [         a  n[        U5      n SnANXSnAff = f)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   $   #    U  H  ov   M     g 7fr   r   r  s     r   r   requireSocket.<locals>.<genexpr>u  s     'Ar  zcan't create socket({0}): {1}c              3   8   #    U  H  n[        U5      v   M     g 7fr   )strr   os     r   r  r    s     +dc!ffds   )
r  r  r5   r6   r  r   rB   r;   r  format)r#   errr  r  callargsrE   r   s          r   requireSocketr  j  s    C" Bds#s# ,3FC,@ dG Bdii'A'AAA  $%# -7sC,@,@GFC(cI# 	 %	x(A
 GGI4'..II+d++S	23 3B
%  	a&C	s-   C5C5C5*1C:C? ?
D	DDc            	          \ rS rSr\R
                  " \SLS5      S 5       rS rS r	\R
                  " \SLS5      S 5       r
S rS	 rS
 rS rS r\R
                  " \R"                  S:H  S5      S 5       r\R&                  " \R*                  S5      S 5       r\R
                  " \R0                  S:H  S5      \R
                  " \R4                  S5      S 5       5       rS rS rS r\R
                  " \" \ S5      S5      \R
                  " \" \ S5      S5      S 5       5       r!\R
                  " \" \ S5      S5      S  5       r"\R
                  " \" \ S!5      S"5      S# 5       r#\R
                  " \" \ S$5      S%5      S& 5       r$\R
                  " \" \S'5      S(5      S) 5       r%S* r&S+ r'\RP                  \R&                  " \)SL S,5      S- 5       5       r*S. r+S/ r,\R
                  " \" \ S05      S15      S2 5       r-\R
                  " \" \ S35      S45      S5 5       r.\R
                  " \" \ S35      S45      S6 5       r/\R
                  " \" \ S75      S85      S9 5       r0\R
                  " \" \ S75      S85      S: 5       r1S; r2S< r3S= r4S> r5S? r6S@ r7SA r8\R
                  " \R"                  S:H  S5      SB 5       r9\R
                  " \R"                  S:H  S5      \R
                  " \" \ SC5      SD5      SE 5       5       r:SF r;\R&                  " \)SL S,5      SG 5       r<SH r=\R
                  " \R|                  " SI5      SJ5      SK 5       r?SL r@SM rASN rBSO rCSP rDSQ rESR rFSS rGST rHSU rISV rJ\RP                  \R&                  " \)SL S,5      SW 5       5       rK\R
                  " \R4                  SX5      SY 5       rL\R
                  " \R4                  SX5      SZ 5       rMS[ rN\R
                  " \R4                  SX5      \R&                  " \R0                  S\:H  S]5      \R&                  " \OS^5      \R
                  " \" \ S5      S_5      S` 5       5       5       5       rP\R
                  " \R4                  SX5      \R
                  " \R0                  S\:H  Sa5      Sb 5       5       rQ\R
                  " \R4                  SX5      \R&                  " \R0                  S\:H  S]5      \R&                  " \OS^5      \R
                  " \" \ S5      S_5      Sc 5       5       5       5       rR\R
                  " \R4                  SX5      \R
                  " \R0                  S\:H  Sa5      Sd 5       5       rSSe rTSf rUSg rV\R
                  " \" \Sh5      Si5      Sj 5       rWSk rXSl rYSm rZSn r[So r\\R&                  " \R"                  S:H  Sp5      Sq 5       r]Sr r^Ss r_St r`Su raSv rbSw rcSxrdg)yGeneralModuleTestsi  Nzneed _socket modulec                     U R                  [        R                  " [        R                  5      5        U R                  [        S5         S[        R                  l        S S S 5        g ! , (       d  f       g = f)N	immutabler   )
assertTruegc
is_tracked_socketr6   assertRaisesRegexr   foor   s    r   test_socket_type#GeneralModuleTests.test_socket_type  sC    gnn56##I{;!"GNN <;;s   
A))
A7c                     SS K nU R                  [        R                  UR                  L 5        [        R                  " 5       nU R	                  U[        R                  5        UR                  5         g r'  )r  r  r6   
SocketTypeassertIsInstancerB   )r   r  rE   s      r   test_SocketType_is_socketobject2GeneralModuleTests.test_SocketType_is_socketobject  sJ    ))W^^;<MMOa!2!23		r   c                 >   [         R                   " [         R                  [         R                  5      nU   U R                  SUR	                  5       -  [        U5      5        U R                  S[         R                  -  [        U5      5        U R                  S[         R                  -  [        U5      5        U R                  S[        U5      5        U R                  S[        U5      5        UR                  S5        U R                  S[        U5      5        U R                  [        UR                  5       5      [        U5      5        S S S 5        U R                  S[        U5      5        U R                  S[        U5      5        g ! , (       d  f       NE= f)	Nzfd=%iz	family=%sztype=%szproto=0raddr	127.0.0.1r   laddrz[closed])
r6   r   ra   assertInfilenorN  assertNotInr   r  r)  r   rE   s     r   	test_reprGeneralModuleTests.test_repr  s   MM&..&*<*<=MM'AHHJ.Q8MM+6Q@MM)f&8&88$q'BMM)T!W-Wd1g.FF#$MM'47+MM#ammo.Q8  	j$q'*$q'* Qs   DF
Fc           	         [         R                  " [         R                  [         R                  5      nSUR	                  5       < SUR
                  < SUR                  < SUR                  < S3	nU R                  [        U5      U5        UR                  5         SUR
                  < SUR                  < SUR                  < S3nU R                  [        U5      U5        g ! UR                  5         f = f)Nz<socket object, fd=z	, family=z, type=z, proto=>z<socket object, fd=-1, family=)r  r6   r   ra   r+  familyr  protorO  rN  rB   )r   rE   expecteds      r   test_csocket_repr$GeneralModuleTests.test_csocket_repr  s    NN7??G,?,?@	88:qxxBHT!Wh/GGIxx2a(+ GGIs   AC' 'C9c                    [         R                   " [         R                  [         R                  5       n[        U5      nU R	                  UR                  5       UR                  5       5        S S S 5        S n[        R                  " 5          WR                  5         U R                  S5        g ! , (       d  f       NH= f! [         a     g f = f)NzSocket proxy still exists)
r6   r   ra   r
   rO  r+  r   
gc_collectfailReferenceError)r   rE   ps      r   test_weakrefGeneralModuleTests.test_weakref  s    ]]6>>6+=+=>!aAQXXZ4 ? 	3HHJ II12 ?>  		s   :B0C 0
B>
CCc                 H   SnU R                  [        US-  S9   [        e! , (       d  f       O= fU R                  [        US-  S9   [        R                  e! , (       d  f       O= fU R                  [        US-  S9   [        R                  e! , (       d  f       g = f)Nz$Error raising socket exception (%s).r;   rQ  zsocket.herrorzsocket.gaierror)assertRaisesr;   r6   herrorgaierrorr   rQ  s     r   testSocketError"GeneralModuleTests.testSocketError  s    4wC)O<M =<wC/,AB-- CBwC2C,CD//! EDs    !
/	A
A(B
B!c                 d   [         R                   " [         R                  [         R                  5      nU R                  UR                  5        UR                  S5        UR                  5       nU R                  [        5       nUR                  SU5        S S S 5        U R                  [        WR                  5      S5        U R                  [        5       nUR                  SU5        S S S 5        U R                  [        UR                  5      S5        U R                  [        5       nUR                  SS 5        S S S 5        U R                  S[        UR                  5      5        U R                  [        5       nUR                  SSU5        S S S 5        U R                  [        UR                  5      S5        U R                  [        5       nUR                  SSU5        S S S 5        U R                  [        UR                  5      S5        U R                  [        5       nUR                  SSS 5        S S S 5        U R                  S[        UR                  5      5        U R                  [        5       nUR                  SS	U5        S S S 5        U R                  [        5       nUR                  SS S 5        S S S 5        U R                  [        5       nUR                  S5        S S S 5        U R                  S
[        UR                  5      5        U R                  [        5       nUR                  SSUS5        S S S 5        U R                  S[        UR                  5      5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNh= f! , (       d  f       GN$= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNX= f! , (       d  f       GN9= f! , (       d  f       GN= f! , (       d  f       N= f)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))r6   r   rI   r   rB   r   r)  r@  r   sendtorO  r  	exceptionr*  )r   rE   socknamecms       r   testSendtoErrors#GeneralModuleTests.testSendtoErrors  s   MM&..&*;*;< 	w==?y)RHHXx( *R\\*E	Gy)RHHR" *R\\*I	Ky)RHHVT" *nS%67y)RHHXq(+ *R\\*E	Gy)RHHRH% *R\\*I	Ky)RHHVQ% *nc",,&78y)RHHVUH- *y)RHHVT4( * y)RHHV *k3r||#45y)RHHVQ!, *k3r||#45C *) *) *) *) *) *) *))) *) *)sx   M?N/N#N5O0OO+7O=(P<P!?
N
N #
N25
O
O
O(+
O:=
P
P!
P/c                 N   [         R                    [         R                  (       a  [         R                    [         R                    [         R
                    [         R                    [         R                    [         R                    [         R                    [         R                    g r   )r6   r   has_ipv6r  ra   rI   r@   SOCK_RDMrR   
SOL_SOCKETSO_REUSEADDRr   s    r   testCrucialConstants'GeneralModuleTests.testCrucialConstants  sR    ??OOr   c                     [         R                    [         R                    [         R                  (       a  [         R                    g g r   )r6   IPPROTO_TCPIPPROTO_UDPrR  IPPROTO_IPV6r   s    r   testCrucialIpProtoConstants.GeneralModuleTests.testCrucialIpProtoConstants  s)    ?? r   ntWindows specificc                    [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    [         R                    [         R                    g r   )	r6   IPPROTO_ICLFXBM
IPPROTO_STIPPROTO_CBTIPPROTO_IGPIPPROTO_RDPIPPROTO_PGMIPPROTO_L2TPr  r   s    r   testWindowsSpecificConstants/GeneralModuleTests.testWindowsSpecificConstants  sJ    r   zWASI is missing these methodsc                     / SQnU H9  n[        [        R                  U5      (       a  M$  U R                  SU S35        M;     g )N)_acceptr   rG  
connect_exgetpeernamer)  r   recvfromrecvfrom_intorK  
setsockoptshutdownzsocket method z is missing)r5   r6   r9  )r   namesr  s      r   test_socket_methods&GeneralModuleTests.test_socket_methods  s;    

 D6==$//		N4&<= r   rs   macOS specific testIPv6 required for this testc                 f    1 SknU H'  nU R                  [        [        U5      SU S35        M)     g )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  r5   r6   )r   optsopts      r   test3542SocketOptions(GeneralModuleTests.test3542SocketOptions  s7    
, COO$(GuA&N r   c                    [         R                  " 5       n [         R                  " U5      nU R                  WR                  S5      S:  S5         [         R                  " U5      u  p4nUW/W-   n[         R                  " U5      nXv;  a$  U R                  SU< S[        U5      < S35        g g ! [         a    U R	                  S5         Nf = f! [         a    U R	                  S5         Nf = f)Nname lookup failurer   r   zError resolving host to ip.z1Error testing host resolution mechanisms. (fqdn: z, all: ))r6   gethostnamegethostbynamer;   r   r  findgethostbyaddrgetfqdnr9  rN  )r   hostnameiphnamealiasesipaddrsall_host_namesfqhns           r   testHostnameRes"GeneralModuleTests.testHostnameRes>  s    %%'	1%%h/B 	)+HI	1&,&:&:2&>#EG #E*W4~~b!%IIY]_cdr_stu &  	1MM/0	1  	1MM/0	1s#   B2 C 2CCC10C1c                    [         R                  SS4 H)  nU R                  [        R                  " U5      U5        M+     [         R                  4 H,  nU R                  U[        R                  " U5      S   5        M.     g )Nz10.0.0.1255.255.255.255r0  )r   HOSTv4rO  r6   r  r*  r  )r   rd  r  s      r   test_host_resolution'GeneralModuleTests.test_host_resolutionQ  si    ")):7HIDV11$7> J
 #))*DMM$ 4 4T :1 => +r   c                 ,   SnS Hi  nU R                  [        US9   [        R                  " U5        S S S 5        U R                  [        US9   [        R                  " U5        S S S 5        Mk     g ! , (       d  f       NF= f! , (       d  f       M  = f)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;   r6   r  r  )r   explanationrd  s      r    test_host_resolution_bad_address3GeneralModuleTests.test_host_resolution_bad_addressZ  su    3 	*D""7"5$$T* 6""7"<$$T* =<	*55<<s   A3B3
B	
B	sethostnameztest needs socket.sethostname()r  ztest needs socket.gethostname()c                    [         R                  " 5       n [         R                  " S5         U R                  [         R                  " 5       S5        [         R                  " S5        U R                  [         R                  " 5       S5        [         R                  " U5        g ! [         a:  nUR                  [        R
                  :X  a  U R                  S5         S nANe S nAff = f! [         R                  " U5        f = f)Nnewztest should be run as roots   barrI  )r6   r  r  r;   errnoEPERMr   rO  )r   oldhnr   s      r   test_sethostname#GeneralModuleTests.test_sethostnamek  s     ""$	u%	&V//159v&V//159u%  	ww%++%:;;		 u%s)   B% A C, %
C)//C$#C$$C),Dif_nameindexz$socket.if_nameindex() not available.c                    [         R                  " 5       nU H  u  p#U R                  U[        5        U R                  U[        5        U R                  US5        [         R                  " U5      nU R                  U[        5        U R                  X$5        [         R                  " U5      nU R                  U[        5        U R                  X55        M     g r'  )	r6   r  r"  intr  assertGreaterif_nametoindexrO  if_indextoname)r   
interfacesindexr  _index_names         r   testInterfaceNameIndex)GeneralModuleTests.testInterfaceNameIndex  s     ((*
%KE!!%-!!$,ua(**40F!!&#.U+))%0E!!%-T) &r   r  z&socket.if_indextoname() not available.c                    U R                  [        [        R                  S5        U R                  [        [        R                  S5        U R                  [        [        R                  SS-  5        U R                  [
        [        R                  S5        [        [        S5      (       a  [        [        R                  " 5       5      nU HI  nUS-   nX1;  d  M  U R                  [        [        45         [        R                  " U5        S S S 5        MK     S HD  nX!;  d  M
  U R                  [        [        45         [        R                  " U5        S S S 5        MF     g g ! , (       d  f       M  = f! , (       d  f       Mk  = f)	Nr   r0    	_DEADBEEFr          )    l    )	r@  r;   r6   r  OverflowErrorr   r5   dictr  )r   indicesr  index2s       r   testInvalidInterfaceIndexToName2GeneralModuleTests.testInvalidInterfaceIndexToName  s     	'6#8#8!<-)>)>C-)>)>4H)V%:%:KH6>**6..01G (**M7+CD--f5 ED !
 *'**M7+CD--e4 ED * +
 ED EDs   7E&E8&
E5	8
F	r  z&socket.if_nametoindex() not available.c                     U R                  [        [        R                  S5        U R                  [        [        R                  S5        g )Nr   r  )r@  r   r6   r  r;   r   s    r   testInvalidInterfaceNameToIndex2GeneralModuleTests.testInvalidInterfaceNameToIndex  s4     	)V%:%:A>'6#8#8+Fr   getrefcounttest needs sys.getrefcount()c                      [         R                  " [        5      n[        R                  " [        S5        g ! [
         a4    [         R                  " [        5      W:w  a  U R                  S5         g  g f = f)Nr   z$socket.getnameinfo loses a reference)rx   r  r   r6   getnameinfor   r9  )r   origs     r   testRefCountGetNameInfo*GeneralModuleTests.testRefCountGetNameInfo  sZ    	B??8,Dx* 	Bx(D0		@A 1	Bs   58 9A65A6c                 T     [         R                  " SS5        g ! [         a     g f = f)N)r   r   r   r   r   )r6   r  r;   r   s    r   testInterpreterCrash'GeneralModuleTests.testInterpreterCrash  s)    	~q1 		s    
''c                    [         R                  S[         R                  S[         R                  S[         R                  S0nUR                  5        Hn  u  p#SU-  S-
  nS H(  nU R                  XT-  U" U" XT-  5      5      U-  5        M*     U" U5      nU R                  Xd-  U5        U R                  [        US5        Mp     g )N       r   )r   r     i  r0  igE#i2Tvl        )	r6   htonlntohlhtonsntohsitemsrO  r@  r  )r   sizesfuncsizemaskr   swappeds          r   testNtoHGeneralModuleTests.testNtoH  s     r6<<r6<<5++-JDtGq=DG  4QV+=+DE H 4jGW^T2mT59 (r   requires _testcapic                    SS K n/ SQnUS/-   nSSSSS-  /nUUR                  S-
  UR                  S-   /-   S	UR                  /-   nU H/  n[        R                  " U5        [        R
                  " U5        M1     U H/  n[        R                  " U5        [        R                  " U5        M1     U HM  nU R                  [        [        R                  U5        U R                  [        [        R
                  U5        MO     U HM  nU R                  [        [        R                  U5        U R                  [        [        R                  U5        MO     g )
Nr   )r   r   r0  r  r  r  r  r   r     )
	_testcapiINT_MININT_MAXr6   r  r  r  r  r@  r  )r   r  s_good_valuesl_good_valuesl_bad_valuess_bad_valuesks          r   testNtoHErrors!GeneralModuleTests.testNtoHErrors  s    	)%4Bq$w/q )"3"3A"567i''() 	
 ALLOLLO  ALLOLLO  AmV\\1=mV\\1=  AmV\\1=mV\\1= r   c                    U R                   n[        R                  R                  S5      (       d  [        (       a  SnOSnU H  n [
        R                  " US5      n  O   [        e[        R                  (       a#  [        R                  " 5       R                  S:  d  [
        R                  " U5      nU" XE5         [
        R                  " US5      nU" Xd5        [        R                  (       a#  [        R                  " 5       R                  S:  d  U" [
        R                  " W5      U5        U" [
        R                  " US5      U5        Ub  U" [
        R                  " US5      U5        U R                  [        [
        R                  S5        U R                  [        [
        R                  S	5        g ! [         a     GM  f = f! [         a    S n Nf = f)
N)linuxandroidfreebsdnetbsdgnukfreebsd)daytimeqotddomain)echor  r  tcp   udp   r  r  )rO  rx   ry   
startswithr   r6   getservbynamer;   r   
is_androidandroid_ver	api_levelgetservbyportr@  r  )r   eqservicesservicer   port2udpports          r   testGetServBy GeneralModuleTests.testGetServBy  s   
 LL##HJ Jx 5H4HG++GU;   M ""x';';'='G'G"'L((1EtO	**7E:G w ""x';';'='G'G"'Lv##E*G4
6e,g6v##GU3W=-)=)=rB-)=)=uE5    	G	s$   F=?G =
GGGGc                    U R                  [        R                  " 5       S 5        [        R                  " 5        nU R                  UR                  5       S 5        S S S 5        [	        S5         U R                  [        R                  " 5       S5        [        R                  " 5        nU R                  UR                  5       S5        S S S 5        [        R
                  " S 5        U R                  [        R                  " 5       S 5        [        R                  " 5        nU R                  UR                  5       S 5        S S S 5        S S S 5        U R                  [        [        R
                  S5        U R                  [        [        R
                  S5        g ! , (       d  f       GNJ= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)N
   r  spam)	rO  r6   rl   
gettimeoutrp   rm   r@  
ValueErrorr   )r   rE   r  s      r   testDefaultTimeout%GeneralModuleTests.testDefaultTimeout  s7    	113T:]]_Q\\^T2  &b)V557<D  !2B7 ! $$T*V557>D  !2D9 ! * 	*f&>&>C 	)V%=%=vF' _ ! ! *)sH   !F/;G*!F1AG#!GG
F.1
F?	;G
G	G
G!	inet_atonztest needs socket.inet_aton()c                     U R                  S[        R                  " S5      5        U R                  S[        R                  " S5      5        g )N       0.0.0.0   r  )rO  r6   r  r   s    r   testIPv4_inet_aton_fourbytes/GeneralModuleTests.testIPv4_inet_aton_fourbytes+  s;    
 	F$4$4Y$?@F$4$45F$GHr   	inet_ptonztest needs socket.inet_pton()c                   ^ ^^ SSK JnJmJm  UU4S jnU 4S jnT R	                  SU" S5      5        T R	                  SU" S5      5        T R	                  S	U" S
5      5        T R	                  SU" S5      5        T R	                  SU" S5      5        [
        (       d	  U" US5        U" US5        U" US5        U" US5        U" US5        T R	                  SU" S5      5        T R	                  SU" S5      5        T R	                  S	U" S
5      5        T R	                  SU" S5      5        U" US5        U" US5        U" US5        U" US5        U" US5        g )Nr   )r  r  r   c                    > T" TU 5      $ r   r   )ar   r  s    r   r   5GeneralModuleTests.testIPv4toString.<locals>.<lambda>7      i+r   c                 <   > TR                  [        [        4X5      $ r   r@  r;   r  r  r"  r   s     r   r   r#  9      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)r6   r  r  r   rO  r   )r   r   gassertInvalidr   r  s   `   @@r   testIPv4toString#GeneralModuleTests.testIPv4toString3  sI    	>=+
 	,a	l;,a.>?,a0A.BC,a	l;,a0A.BCs!X&a%a#a%a,a	l;,a.>?,a0A.BC,a0A.BCa"a%a#a%ar   c                   ^ ^^^  SSK JmJmJn  U(       d  T R	                  S5        [        R                  S:X  a
   T" TS5        UU4S	 jmUU 4S
 jnT R                  ST" S5      5        T R                  ST" S5      5        T R                  ST" S5      5        T R                  ST" S5      5        T R                  ST" S5      5        T R                  ST" S5      5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        U" S5        [        (       d  U" S5        T R                  ST" S5      5        T R                  S T" S!5      5        T R                  S"T" S#5      5        U" S$5        U" S%5        U" S&5        U" S'5        U" S(5        U" S)5        g ! [
         a    T R	                  S5         GNf = f! [         a,  nUR                  S:X  a  T R	                  S5         S nAGNS nAff = f)*Nr   )r  r  rR  IPv6 not available+could not import needed symbols from socketrr   ::&'  IPv6 might not be supportedc                    > T" TU 5      $ r   r   )r"  r  r  s    r   r   5GeneralModuleTests.testIPv6toString.<locals>.<lambda>e      i!,r   c                 >   > TR                  [        [        4TU 5      $ r   r&  r"  r   r   s    r   r   r7  f      $"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)r6   r  r  rR  r   ImportErrorrx   ry   r;   winerrorrO  r   )r   rR  r   r-  r  r   r  s   `   @@@r   testIPv6toString#GeneralModuleTests.testIPv6toStringT  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%)*s,-;	
 	C%&	
 	O23	
 	'(n%m$-.m$/0o  	IMMGH	I  A::&MM"?@As(   "F0 	G 0GG
H!HH	inet_ntopztest needs socket.inet_ntop()c                 x  ^ ^^ SSK JnJmJm  UU4S jnU 4S jnT R	                  SU" S5      5        T R	                  SU" S5      5        T R	                  S	U" S
5      5        T R	                  SU" S5      5        U" US5        U" US5        U" US5        T R	                  SU" [        S5      5      5        T R	                  SU" S5      5        T R	                  SU" S5      5        T R	                  S	U" S
5      5        U" US5        U" US5        U" US5        T R	                  SU" [        S5      5      5        g )Nr   )	inet_ntoarA  r   c                    > T" TU 5      $ r   r   )r"  r   rA  s    r   r   5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>  r$  r   c                 <   > TR                  [        [        4X5      $ r   r&  r'  s     r   r   rE    r(  r   z1.0.1.0s     z170.85.170.85s   UUr  r  r*  r)  s      s        r<  )r6   rC  rA  r   rO  	bytearray)r   r   r,  r-  r   rA  s   `   @@r   testStringToIPv4#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                 ^  ^ ^^^  SSK JmJmJn  U(       d  T R	                  S5        [        R                  S:X  a
   T" TS5        UU4S	 jmUU 4S
 jnT R                  ST" S5      5        T R                  ST" S5      5        T R                  ST" S5      5        T R                  ST" [        S5      5      5        U" S5        U" S5        U" S5        g ! [
         a    T R	                  S5         Nf = f! [         a+  nUR                  S:X  a  T R	                  S5         S nANS nAff = f)Nr   )rA  r  rR  r1  r2  rr   r<  r4  r5  c                    > T" TU 5      $ r   r   )r"  r  rA  s    r   r   5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>  r8  r   c                 >   > TR                  [        [        4TU 5      $ r   r&  r:  s    r   r   rL    r;  r   r3  r+  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
 Ups   s   s   )r6   rA  r  rR  r   r=  rx   ry   r;   r>  rO  rG  )r   rR  r   r-  r  r   rA  s   `   @@@r   testStringToIPv6#GeneralModuleTests.testStringToIPv6  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 	C7 C43C47
D,!D''D,c                    [         R                   " [         R                  [         R                  5      nU R                  UR                  5        [
        R                  " 5        H,  n[        R                  " 5       n UR                  SU45          O   UR                  5       n [         R                  " [         R                  " 5       5      nU R#                  US   SW4SUS   -  5        U R%                  US   W5        g ! [         a0  nUR                  [        R                  :w  d  US:X  a  e  S nAM  S nAff = f! [         a    U R!                  S5         Nf = f)Nr     r  r   z
%s invalidr   )r6   r   ra   r   rB   	itertoolscountr   find_unused_portr   r;   r  
EADDRINUSEr)  r  r  r   r*  rO  )r   r  r   r   r   r  
my_ip_addrs          r   testSockName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*   =D%)D? 
D<%D77D<?EEc                 &   [         R                   " [         R                  [         R                  5      nU R                  UR                  5        UR                  [         R                  [         R                  5      nU R                  US:g  S5        g )Nr   zinitial mode is reuse)	r6   r   ra   r   rB   
getsockoptrT  rU  assertFalser   r  reuses      r   testGetSockOpt!GeneralModuleTests.testGetSockOpt  s_     }}V^^V-?-?@

# 1 163F3FG!%<=r   c                    [         R                   " [         R                  [         R                  5      nU R                  UR                  5        UR                  [         R                  [         R                  S5        UR                  [         R                  [         R                  5      nU R                  US:H  S5        g )Nr   r   zfailed to set reuse mode)
r6   r   ra   r   rB   rp  rT  rU  rZ  r[  r\  s      r   testSetSockOpt!GeneralModuleTests.testSetSockOpt  sy    }}V^^V-?-?@

#))6+>+>B 1 163F3FG!%?@r   c                    [         R                   " [         R                  [         R                  5       nUR                  S5        S S S 5        U R	                  [
        WR                  S5        g ! , (       d  f       N0= f)Nr      spam)r6   r   ra   r;  r@  r;   rW  r  s     r   testSendAfterClose%GeneralModuleTests.testSendAfterClose  sL    ]]6>>6+=+=>$OOA ?'499g6 ?>s   A00
A>c                    [         R                   " 5       nUR                  [         R                  S45        [         R                   " UR                  5       S9R	                  5          UR	                  5         U R                  S5        g ! [         aD  nU R                  UR                  [        R                  [        R                  45         S nAg S nAff = f)Nr   r+  z#close() should raise EBADF/ENOTSOCK)r6   r   
_LOCALHOSTr+  rB   r9  r;   r*  r  EBADFENOTSOCK)r   r  r  s      r   testCloseException%GeneralModuleTests.testCloseException  s    }}		6$$a()T[[]+113	=JJL
 II;<	  	DMM#))ekk5>>%BCC	Ds   (B
 

C:CCc                 @   [         R                   " [         R                  [         R                  5       nU R                  UR                  [         R                  5        [        [         S5      (       aL  U R                  UR                  [         R                  [         R                  -  [         R                  45        O*U R                  UR                  [         R                  5        U R                  UR                  S5        S S S 5        g ! , (       d  f       g = f)NSOCK_CLOEXECr   )
r6   r   ra   rO  r2  r5   r*  r  ro  r3  r  s     r   testNewAttributes$GeneralModuleTests.testNewAttributes  s     ]]6>>6+=+=>$T[[&..9v~..dii%11F4G4GG%1134   F,>,>?TZZ+ ?>>s   CD
Dc                 J   [         R                   " 5       nU R                  UR                  5        [        R                  " 5       nUS-   nUS-
  nU R                  [        UR                  [        U45        U R                  [        UR                  [        U45        [        R                  " 5        H0  n[        R                  " 5       n UR                  [        U45          g    g ! [         a0  nUR                  [        R                  :w  d  US:X  a  e  S nAMj  S nAff = f)Nr  rQ  )r6   r   rB   r   rT  r@  r  r   r(  rR  rS  r;   r  rU  )r   r  r   big_portneg_portr   r   s          r   test_getsockaddrarg&GeneralModuleTests.test_getsockaddrarg  s    }}

#--/%<%<-T84DE-T84DE "A 113D		4,'
  #  77e...!q& 39s   C((
D"2%DD"c                 2   U R                  [        [        R                  S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        U R                  [        [        S5      5        [        R                  " 5       nU R                  UR                  5        U R                  [        UR                  SS 5        UR                  [        R                  S5        g )Nr8   
SIO_RCVALL	RCVALL_ON
RCVALL_OFFSIO_KEEPALIVE_VALSr  )r   d   r|  )	r  r5   r6   r   rB   r@  r  r8   r{  r-  s     r   test_sock_ioctl"GeneralModuleTests.test_sock_ioctl2  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                 r   [         R                   " 5       nU R                  UR                  5         UR                  [         R                  S5        U R                  [        UR                  [         R                  S 5        g ! [
         a)  nSnUR                  U:X  a  U R                  S5        e S nAff = f)NTi='  zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version)
r6   r   rB   r8   r  r;   r>  r   r@  r   )r   rE   rR  WSAEOPNOTSUPPs       r   test_sio_loopback_fast_path.GeneralModuleTests.test_sio_loopback_fast_path>  s     MMO 	GGF1148 	)QWWf.K.KTR  	!M||}, L M	s    B 
B6$B11B6c           	      n    [         R                  " SS5        [         R                  " [        S 5       H  nU R                  [        U5      S5        M      [         R                  " SS5        [         R                  " SS5        [         R                  " S S5        [        R                  (       a  [         R                  " SS5        [        R                  (       a#  [        R                  " 5       R                  S:  d  [         R                  " [        S5        [         R                  " [        S5        [         R                  " [        S 5        [         R                  " [        S[         R                   [         R"                  5      nU H  u  pE    nU R                  U[         R                   5        U R                  [%        U5      S	UR&                  -  5        U R                  [)        U5      [)        UR&                  5      5        U R                  U[         R"                  5        U R                  [%        U5      S
UR&                  -  5        U R                  [)        U5      [)        UR&                  5      5        M     [         R                  " [        S S[         R"                  5      nU H(  u  pg    nU R                  U[         R"                  5        M*     [         R                  " [        S SS[         R*                  5        [         R                  " [        S SSS[         R,                  5        [         R                  " S S[         R.                  [         R"                  S[         R,                  5        [         R                  " [        S 5      n[         R                  " [        S S9n	U R                  X5        [         R                  " [        S [         R                   5      n[         R                  " [        S [         R                   S9n	U R                  X5        [         R                  " [        S S[         R"                  5      n[         R                  " [        S [         R"                  S9n	U R                  X5        [         R                  " [        S SS[         R*                  5      n[         R                  " [        S [         R*                  S9n	U R                  X5        [         R                  " [        S SSS[         R,                  5      n[         R                  " [        S [         R,                  S9n	U R                  X5        [         R                  " S S[         R.                  [         R"                  S[         R,                  5      n[         R                  " S S[         R.                  [         R"                  S[         R,                  S9n	U R                  X5        U R1                  [2        [         R                  SS5        [5        [         S5      (       a+   [         R                  " SS SSS[         R6                  5        g g ! [         R                   a5  nUR                  [         R                  :X  a  U R                  S5        e S nAff = f! [         R                   a     g f = f)N	localhostP   zbuggy libc versionrQ  r(  r+  r  http<AddressFamily.AF_INET: %r><SocketKind.SOCK_STREAM: %r>r   )r  r   r2  r  )r3  )flags)r  r   r2  r  r3  r  u   AI_NUMERICSERV)r6   getaddrinforB  r  EAI_SERVICEr   r(  rO  lenr   IPV6_ENABLEDr   r  ry   r  r  r   ra   rN  valuer  SOL_TCP
AI_PASSIVE	AF_UNSPECr@  UnicodeEncodeErrorr5   r  )
r   r  infoinfosr2  r  r   socktyper"  bs
             r   testGetaddrinfo"GeneralModuleTests.testGetaddrinfoN  s   	{B/ &&tT2DSY* 3 	;+;+4$%%ub) ""x';';'='G'G"'LtV,4$4&""4V^^V=O=OP%*!F!QVV^^4T&\+H6<<+WXS[#fll*;<T6#5#56T$Z)G$**)TUSYDJJ8 &+ ""4q&2D2DE$) AAqXv'9'9: %* 	4q!V^^<4q!Q0A0AB 	4F$4$4f6H6H!!,,	. tT*Dt4tT6>>:tT&..AtT1f.@.@AtT0B0BCtT1a@tT@tT1aF4E4EFtT1B1BCtQ(8(8&:L:La%002Dq9I9I$*$6$6a%+%6%68 	,f.@.@+xX 6+,, "";aA#)#8#8:	 -G  	yyF...23		R ?? s)   Y &)Z Z%0ZZZ43Z4c                    SSK JnJnJn   [        R
                  " S US-   [        R                  S9   [        R
                  " S US-   [        R                  S9   [        R
                  " S US-
  S-   [        R                  S9   [        R
                  " S US-
  [        R                  S9  [        R
                  " S S[        R                  S9  [        R
                  " S S[        R                  S9  g ! [         a    U R                  S5         N[        R                   a     Nf = f! [         a    U R                  S5         N[        R                   a     GNf = f! [         a    U R                  S5         N[        R                   a     GNf = f! [         a    U R                  S5         GN[        R                   a     GN!f = f)Nr   )	ULONG_MAXLONG_MAXLONG_MINr   r  z,Either no error or socket.gaierror expected.r  )
r  r  r  r  r6   r  ra   r  r9  rB  )r   r  r  r  s       r   "test_getaddrinfo_int_port_overflow5GeneralModuleTests.test_getaddrinfo_int_port_overflow  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^   'C7 'D- *E$ 'F 7D*D*)D*-E!
E! E!$FFFG9GGc                 P    U R                  [        [        R                  SS5        g )N)zmail.python.orgr   r   )r@  r;   r6   r  r   s    r   test_getnameinfo#GeneralModuleTests.test_getnameinfo  s    '6#5#57LaPr   networkznetwork is not enabledc                 V   [         R                  " S5         [        R                  " S5        S S S 5        Sn[        R                  " U5        [        R                  " U5        [        R
                  " US[        R                  [        R                  5        g ! , (       d  f       Nr= f)Nz
python.orgu!   испытание.pythontest.netr   )r   transient_internetr6   r  gethostbyname_exr  r  ra   )r   r  s     r   	test_idnaGeneralModuleTests.test_idna  sq    
 --l;  . < 5V$'6!F$4$4V5G5GH <;s   B
B(c                 j  ^  [        [        S5      (       a  [        [        S5      (       d  T R                  S5        U 4S jnU 4S jn[        R                  " 5       u  pE[        R                  " [        R
                  U5      n U(       a  UR                  S5        T R                  [        5         [        R                  " S5        UR                  S[        R                  -  5        S S S 5        U(       am  [        R                  " [        R
                  U5        [        R                  " S5        T R                  [        UR                  S[        R                  -  5        [        R                  " S	5        [        R                  " [        R
                  U5        UR                  5         UR                  5         g ! , (       d  f       N= f! [        R                  " S	5        [        R                  " [        R
                  U5        UR                  5         UR                  5         f = f)
Nalarmrs  z9signal.alarm and socket.socketpair required for this testc                  P   > TR                  [        [        R                  S5        g r'  r@  r  mathacoshr#   r   s    r   
ok_handler@GeneralModuleTests.check_sendall_interrupted.<locals>.ok_handler  s    j$**a8r   c                  Z   > TR                  [        [        R                  S5        SS-    g Nr   r   r  r  s    r   raising_handlerEGeneralModuleTests.check_sendall_interrupted.<locals>.raising_handler  s     j$**a8Fr   g      ?r      xr   )r5   signalr6   r   rs  SIGALRMr;  r@  ZeroDivisionErrorr  sendallr   SOCK_MAX_SIZETimeoutErrorrB   )r   with_timeoutr  r  crE   	old_alarms   `      r   check_sendall_interrupted,GeneralModuleTests.check_sendall_interrupted  sV   vw''wv|/L/LMMUV	9	   "MM&../B		S!""#45Q		$!6!667 6 fnnj9Q!!,		"&)>)>">@ LLOMM&..)4GGIGGI 65 LLOMM&..)4GGIGGIs&   -G 39G,A<G 
GG AH2c                 &    U R                  S5        g NFr  r   s    r   test_sendall_interrupted+GeneralModuleTests.test_sendall_interrupted  s    &&u-r   c                 &    U R                  S5        g )NTr  r   s    r   %test_sendall_interrupted_with_timeout8GeneralModuleTests.test_sendall_interrupted_with_timeout  s    &&t,r   c                    [         R                   " [         R                  [         R                  5      n[        U5      nU R	                  [
        5       nS n[        R                  " 5         S S S 5        U R                  U[        WR                  R                  S   5      5        [         R                   " [         R                  [         R                  5      nUR                  S5      n[        U5      nS n[        R                  " 5         U R	                  [
        5         S n[        R                  " 5         S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r2   )r6   r   ra   rN  assertWarnsResourceWarningr   r8  r*  r  warningr#   makefile)r   r  r<   rN  r   s        r   test_dealloc_warn$GeneralModuleTests.test_dealloc_warn  s    }}V^^V-?-?@Jo."D  / 	aRZZ__Q/01}}V^^V-?-?@MM$Jo.A  /. /. /.s   E!E
E
E!c                    [         R                   " [         R                  [         R                  5       nUR                  S5      nUR	                  5         U R                  [        U5      S5        S S S 5        g ! , (       d  f       g = f)Nr2   z<_io.BufferedReader name=-1>)r6   r   ra   r  rB   rO  rN  r   r  fps      r   test_name_closed_socketio,GeneralModuleTests.test_name_closed_socketio  sT    ]]6>>6+=+=>$t$BHHJT"X'EF ?>>s   =A::
Bc                    [         R                   " 5        nUR                  SSS9nU R                  UR                  5       5        U R	                  UR                  5       5        U R	                  UR                  5       5        UR                  5         U R                  [        UR                  5        U R                  [        UR
                  5        U R                  [        UR                  5        S S S 5        g ! , (       d  f       g = f)Nr2   r   )	buffering)
r6   r  r  readabler[  writableseekablerB   r@  r  r  s      r   test_unusable_closed_socketio0GeneralModuleTests.test_unusable_closed_socketio  s    ]]_tq1BOOBKKM*R[[]+R[[]+HHJj"++6j"++6j"++6 __s   CC==
Dc                 @   [         R                   " 5       n UR                  [        S45        [         R                  " UR	                  5       5        U R                  [        5         UR                  S5        S S S 5        U R                  [        5         UR                  5         S S S 5        U R                  [        5         [         R                  " S 5        S S S 5        U R                  [        5         [         R                  " S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! U R                  [        5         UR                  5         S S S 5        f ! , (       d  f       f = f= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r  )	r6   r   r(  rB   r+  r@  r;   r   r   r  s     r   test_socket_close$GeneralModuleTests.test_socket_close*  s    }}	IItQi LL'""7+A , ""7+

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

 ,++ *)''s`   AD: 'D9D: D)E>8F
D&"D: )
D7:E;E*!	E;*
E84E;>
F
Fc           	      f   S Hw  nU R                  US9   [        R                  " 5        nSU;   a  S OSnUR                  XS9 nU R                  UR                  U5        S S S 5        S S S 5        S S S 5        My     g ! , (       d  f       N#= f! , (       d  f       N,= f! , (       d  f       M  = f)N)r<   r2   rwwwbmoder  r   encoding)subTestr6   r  rO  r  )r   r  r  r  r  s        r   test_makefile_mode%GeneralModuleTests.test_makefile_mode:  s    .D4(]]_'*d{tHt?2(($7 @ % )( / @? %_ )(s:   B!BA?	"B*B!?
B	B
BB!!
B0	c           	      J   S Hi  nU R                  US9   [        R                  " 5        nU R                  [        S5         UR	                  U5        S S S 5        S S S 5        S S S 5        Mk     g ! , (       d  f       N#= f! , (       d  f       N,= f! , (       d  f       M  = f)N)rtr   +r"  r  zinvalid mode)r  r6   r  r  r  )r   r  r  s      r   test_makefile_invalid_mode-GeneralModuleTests.test_makefile_invalid_modeB  so    'D4(]]_//
NKd+ L % )( ( LK %_ )(s:   BBA1	BB1
A?;B
BB
B"	c                    [         R                   " 5       nU   [        [        R                  S-   5       H(  nU R	                  [
        [        R                  X5        M*     S S S 5        [        [        R                  S-   5       H  n[        R                  " [        R                  " [         R                  U5      5      nU R                  U[         R                  5        [        R                  " [        R                  " [         R                  U5      5      nU R                  U[         R                  5        M     g ! , (       d  f       N= fr  )r6   rangepickleHIGHEST_PROTOCOLr@  r   dumpsloadsr   rO  ra   )r   r  protocolr2  r  s        r   test_pickleGeneralModuleTests.test_pickleI  s    }}!&"9"9A"=>!!)V\\4J ?  f559:H\\&,,v~~x"HIFVV^^4<<V-?-? JKDT6#5#56	 ; Ts   A	D??
Ec                    S Hg  n[         R                   " [         R                  [         R                  5       nUR                  [        S45        UR                  U5        S S S 5        Mi     [         R                   " [         R                  [         R                  5       nUR                  [        S45        UR                  5         S S S 5        g ! , (       d  f       M  = f! , (       d  f       g = f)N)r   r  r   )r6   r   ra   r   r(  r   )r   backlogsrvs      r   test_listen_backlog&GeneralModuleTests.test_listen_backlogT  s    Gv~~v/A/ABc$#

7# CB 
 ]]6>>6+=+=>#HHdAYJJL ?>	 CB ?>s   )C!(C$
C!	$
C2c                 0   SS K n[        R                  " [        R                  [        R                  5       nUR	                  [
        S45        U R                  [        UR                  UR                  S-   5        S S S 5        g ! , (       d  f       g = fr  )
r  r6   r   ra   r   r(  r@  r  r   r  )r   r  r  s      r   test_listen_backlog_overflow/GeneralModuleTests.test_listen_backlog_overflow^  s^     	]]6>>6+=+=>#HHdAYmSZZ9J9JQ9NO ?>>s   AB
BIPv6 required for this test.c                 p   U R                  [        [        R                  [        R
                  SS4S5        [        R                  " [        R                  [        R                  5       nU R                  [        UR                  [        R
                  SS45        S S S 5        g ! , (       d  f       g = f)Nr   r  i)	r@  r  r6   r  r   r  r  ra   r   r-  s     r   test_flowinfo GeneralModuleTests.test_flowinfog  sw    -););(//J?	D]]6??F,>,>?1mQVVm6J6JAs5ST @??s   +3B''
B5c                     [         R                  " SS[         R                  [         R                  [         R                  5      u  Gt pU R                  US5        g )Nff02::1de:c0:face:8Dr   )ff02::1de:c0:face:8dr   r   r   )r6   r  r  rI   rZ  rO  )r   r   sockaddrs      r   test_getaddrinfo_ipv6_basic.GeneralModuleTests.test_getaddrinfo_ipv6_basicn  sH    ".."&//	
1 	#GHr   c                     U R                  [        R                  " 5       [        R                  " S5      5        U R                  [        R                  " 5       [        R                  " S5      5        g )Nr  r3  )rO  r6   r  r   s    r   test_getfqdn_filter_localhost0GeneralModuleTests.test_getfqdn_filter_localhostx  sB    )6>>)+DE)6>>$+?@r   rr   zdoes not work on WindowszSymbolic scope id does not workz test needs socket.if_nameindex()c                     [         R                  " 5       S   u  p[         R                  " SU-   S[         R                  [         R                  [         R
                  5      u  Gt p4U R                  USSSU45        g )Nr   ff02::1de:c0:face:8D%r   r
  )r6   r  r  r  rI   rZ  rO  )r   ifindextest_interfacer   r  s        r   &test_getaddrinfo_ipv6_scopeid_symbolic9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolic|  sn     %+$7$7$9!$<!"..#n4&//	
1 	$:D!W#MNr   z.Numeric scope id does not work or undocumentedc                     Sn[         R                  " S[        U5      -   S[         R                  [         R                  [         R
                  5      u  Gt p#U R                  USSSU45        g )N*   r  r   r
  r   )r6   r  r  r  rI   rZ  rO  )r   r  r   r  s       r   %test_getaddrinfo_ipv6_scopeid_numeric8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numeric  sa     "..#c'l2&//	
1 	$:D!W#MNr   c                     [         R                  " 5       S   u  pSSSU4n[         R                  " U[         R                  [         R                  -  5      nU R                  USU-   S45        g )Nr   r	  r   ff02::1de:c0:face:8d%1234)r6   r  r  NI_NUMERICHOSTNI_NUMERICSERVrO  )r   r  r  r  nameinfos        r   &test_getnameinfo_ipv6_scopeid_symbolic9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symbolic  sf     %+$7$7$9!$<!*D!W=%%h0E0EH]H]0]^$;n$Lf#UVr   c                     SnSSSU4n[         R                  " U[         R                  [         R                  -  5      nU R	                  US[        U5      -   S45        g )Nr  r	  r   r   r  r  )r6   r  r  r  rO  r  )r   r  r  r   s       r   %test_getnameinfo_ipv6_scopeid_numeric8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numeric  sY     *D!W=%%h0E0EH]H]0]^$;c'l$JF#STr   c                    [         R                   " [         R                  [         R                  5       nU R                  [	        UR
                  5      SUR
                  R                  -  5        U R                  [	        UR                  5      SUR                  R                  -  5        U R                  [        UR
                  5      [        UR
                  R                  5      5        U R                  [        UR                  5      [        UR                  R                  5      5        S S S 5        g ! , (       d  f       g = f)Nr  r  )	r6   r   ra   rO  rN  r2  r  r  r  r-  s     r   test_str_for_enums%GeneralModuleTests.test_str_for_enums  s     ]]6>>6+=+=>!T!((^-JQXX^^-[\T!&&\+IAFFLL+XYS]C,?@S[#affll*;<	 ?>>s   C=D::
Ec                    [        [        SS5      n[        [        SS5      n[        R                  U-  U-  n[        R                  " [        R                  U5       nU R	                  UR
                  [        R                  5        UR                  S5        U R	                  UR
                  [        R                  5        UR                  S5        U R	                  UR
                  [        R                  5        UR                  S5        U R	                  UR
                  [        R                  5        UR                  S5        U R	                  UR
                  [        R                  5        S S S 5        g ! , (       d  f       g = f)NSOCK_NONBLOCKr   ro  r   TF)r   r6   ra   r   rO  r  r;  setblocking)r   r*  ro  	sock_typerE   s        r    test_socket_consistent_sock_type3GeneralModuleTests.test_socket_consistent_sock_type  s   ;v~q9&&6E	]]6>>95QVVV%7%78LLOQVVV%7%78LLOQVVV%7%78MM$QVVV%7%78MM% QVVV%7%78 655s   DE>>
Fc                 t   [         R                   " [         R                  [         R                  5      nUR                  5       n[	        [         R
                  R                  R                  5       5      S-   n[	        S [         R                  R                  R                  5        5       5      S-   n[         R                   " X4SUS9 nU R                  UR                  U5        U R                  UR                  U5        U R                  UR                  SS15        S S S 5        g ! , (       d  f       g = f)Nr   c              3   :   #    U  H  u  pUS ;  d  M  Uv   M     g7f)>   ro  r*  Nr   )r   r  kinds      r   r  EGeneralModuleTests.test_unknown_socket_family_repr.<locals>.<genexpr>  s$      
C
<< DCs   	r  )r2  r  r3  r+  r   )r6   r   ra   detachmaxAddressFamily__members__values
SocketKindr  rO  r2  r  r*  r3  )r   r  fdunknown_familyunknown_typerE   s         r   test_unknown_socket_family_repr2GeneralModuleTests.test_unknown_socket_family_repr  s     }}V^^V-?-?@[[]V11==DDFG!K 
$//;;AAC
 
 	 ]]%QXX~6QVV\2MM!''Ar7+  s   	AD))
D7sendfileztest needs os.sendfile()c                     " S S5      n[         R                   " 5        n[        R                  " [        R                  [        R                  5      n[        R
                  " U5        U R                  [         R                  5         UR                  U" U5      5        S S S 5        U R                  [        5         UR                  U" SS-  5      5        S S S 5        U R                  [        5         UR                  U" S 5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N]= f! , (       d  f       N9= f! , (       d  f       g = f)Nc                        \ rS rSrS rS rSrg)<GeneralModuleTests.test__sendfile_use_sendfile.<locals>.Filei  c                     Xl         g r   r9  )r   r9  s     r   r   EGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.__init__  s    r   c                     U R                   $ r   rC  r   s    r   r+  CGeneralModuleTests.test__sendfile_use_sendfile.<locals>.File.fileno  s    wwr   rC  N)r   r   r   r   r   r+  r   r   r   r   FilerA    s    r   rG  r0  r  )r6   osr7   curdirO_RDONLYrB   r@  _GiveupOnSendfile_sendfile_use_sendfiler  r   )r   rG  r  r9  s       r   test__sendfile_use_sendfile.GeneralModuleTests.test__sendfile_use_sendfile  s    	 	 ]]_BKK0BHHRL""6#;#;<++DH5 =""=1++DDM: 2""9-++DJ7 . _ =<11-- _sT   A)E	D!E>D0E6EE
D-	)E0
D>	:E
E	E
E c                    U R                  UR                  U5        U R                  UR                  U5        UR                  5       n[        R                  " US9nU R                  UR                  5        UR                  5         U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  5       U5        g Nrh  )rO  r2  r  r+  r6   r   rB   r3  )r   rE   r2  styper9  s2s         r   _test_socket_fileno&GeneralModuleTests._test_socket_fileno  s    6*'XXZ]]"%!	
F+%(b)r   c                    [         R                   " [         R                  [         R                  5      nU R                  UR                  5        UR                  [        R                  S45        U R                  U[         R                  [         R                  5        [        [         S5      (       a  [         R                   " [         R                  [         R                  5      nU R                  UR                  5        UR                  [        R                  S45        U R                  U[         R                  [         R                  5        [        R                  (       a  [         R                   " [         R                  [         R                  5      nU R                  UR                  5        UR                  [        R                  SSS45        U R                  U[         R                  [         R                  5        [        [         S5      (       a  [        R                  " 5       nU R                  [        R                   U5        [         R                   " [         R"                  [         R                  5      nU    UR                  U5        U R                  U[         R"                  [         R                  5        S S S 5        g g ! [$         a     Nf = f! , (       d  f       g = f)Nr   rI   r  )r6   r   ra   r   rB   r   r   r(  rS  r5   rI   r  r  r  r  r   r  r  rM  )r   rE   	unix_names      r   test_socket_fileno%GeneralModuleTests.test_socket_fileno  s   MM&..&*<*<= 	""A&'  FNNF4F4FG6<((fnnf.?.?@AOOAGG$FFM&&*+$$Q8I8IJ%%foov/A/ABAOOAGG$FFM((!Q23$$Q9K9KL69%%%==?IOOI,,i8fnnf.@.@AAAFF9% ,,Q-3-?-?A  & '  s0   K"K/K"
KK"KK""
K0c                     U R                  [        5         [        R                  " [        R                  [        R                  SS9  S S S 5        g ! , (       d  f       g = f)Ng     @E@rh  r@  r   r6   r   ra   r   s    r    test_socket_fileno_rejects_float3GeneralModuleTests.test_socket_fileno_rejects_float$  s6    y)MM&..&*<*<TJ *))   3A
A c                     U R                  [        5         [        R                  " [        R                  [        R                  SS9  S S S 5        g ! , (       d  f       g = f)Nr  rh  rZ  r   s    r   &test_socket_fileno_rejects_other_types9GeneralModuleTests.test_socket_fileno_rejects_other_types(  s6    y)MM&..&*<*<UK *))r]  c                     U R                  [        S5         [        R                  " [        R                  [        R                  SS9  S S S 5        g ! , (       d  f       g = f)Nnegative file descriptorr  rh  r  r  r6   r   ra   r   s    r   )test_socket_fileno_rejects_invalid_socket<GeneralModuleTests.test_socket_fileno_rejects_invalid_socket,  s:    ##J0JKMM&..&*<*<RH LKK   3A
A!zWindows disallows -1 onlyc                     U R                  [        S5         [        R                  " [        R                  [        R                  SS9  S S S 5        g ! , (       d  f       g = f)Nrb  irh  rc  r   s    r   #test_socket_fileno_rejects_negative6GeneralModuleTests.test_socket_fileno_rejects_negative0  s:    ##J0JKMM&..&*<*<SI LKKrf  c                 t   SnU R                  [        5       n[        R                  " [        R                  " 5       S9  S S S 5        U R                  WR                  R                  [        R                  U45        U R                  [        5       n[        R                  " [        R                  [        R                  [        R                  " 5       S9  S S S 5        U R                  UR                  R                  [        R                  U45        g ! , (       d  f       N= f! , (       d  f       NV= f)Ni6'  rh  )r@  r;   r6   r   make_bad_fdr*  rL  r  rj  r   ra   )r   WSAENOTSOCKrN  s      r   $test_socket_fileno_requires_valid_fd7GeneralModuleTests.test_socket_fileno_requires_valid_fd5  s    w'2MM!6!6!89 (bll((5;;*DEw'2MM"" ,,.0 (
 	bll((5;;*DE (' ('s   (DAD)
D&)
D7c                 J   [         R                  " 5        nU R                  [        5         [        R                  " UR                  5       S9  S S S 5        U R                  [        5       n[        R                  " [        R                  [        R                  UR                  5       S9  S S S 5        U R                  WR                  R                  [        R                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N\= f! , (       d  f       g = frP  )tempfileNamedTemporaryFiler@  r;   r6   r+  r   ra   rO  rL  r  rk  )r   afilerN  s      r   %test_socket_fileno_requires_socket_fd8GeneralModuleTests.test_socket_fileno_requires_socket_fdB  s    ((*e""7+U\\^4 , ""7+rNN&& <<>+ ,
 R\\//@ +*++ ,+	 +*s;   D#C2D,AD-<D2
D 	<D
D	D
D"c                     SS K nSS KnUR                  UR                  SSS US9nUR	                  U[
        R                  5        g )Nr   r5  r6   c                 R    U R                  5       =(       a    U R                  S5      $ )NAF_isupperr  Cs    r   r   <GeneralModuleTests.test_addressfamily_enum.<locals>.<lambda>R      !))+=!,,u*==r   source)r  enum_old_convert_IntEnum_test_simple_enumr6   r5  )r   r  r  CheckedAddressFamilys       r   test_addressfamily_enum*GeneralModuleTests.test_addressfamily_enumN  sE    #11ox=  2  
 	3V5I5IJr   c                     SS K nSS KnUR                  UR                  SSS US9nUR	                  U[
        R                  5        g )Nr   r8  r6   c                 R    U R                  5       =(       a    U R                  S5      $ )NSOCK_rx  rz  s    r   r   9GeneralModuleTests.test_socketkind_enum.<locals>.<lambda>[  s    !))+?!,,w*??r   r~  )r  r  r  r  r  r6   r8  )r   r  r  CheckedSocketKinds       r   test_socketkind_enum'GeneralModuleTests.test_socketkind_enumW  sE     ..lH? / 
 	0&2C2CDr   c                     SS K nSS KnUR                  UR                  SSS US9nUR	                  U[
        R                  5        g )Nr   MsgFlagr6   c                 R    U R                  5       =(       a    U R                  S5      $ )NMSG_rx  rz  s    r   r   6GeneralModuleTests.test_msgflag_enum.<locals>.<lambda>d  s    !))+>!,,v*>>r   r~  )r  r  r  IntFlagr  r6   r  )r   r  r  CheckedMsgFlags       r   test_msgflag_enum$GeneralModuleTests.test_msgflag_enum`  sA    ++i> , 
 	~v~~>r   c                     SS K nSS KnUR                  UR                  SSS US9nUR	                  U[
        R                  5        g )Nr   AddressInfor6   c                 R    U R                  5       =(       a    U R                  S5      $ )NAI_rx  rz  s    r   r   :GeneralModuleTests.test_addressinfo_enum.<locals>.<lambda>m  r}  r   r~  )r  r  r  r  r  r6   r  )r   r  r  CheckedAddressInfos       r   test_addressinfo_enum(GeneralModuleTests.test_addressinfo_enumi  sE    !//mX= 0   	163E3EFr   r   )er   r   r   r   r!   
skipUnlessr  r  r#  r.  r5  r<  rD  rO  rV  r\  rH  r  rh  skipIfr   is_wasirs  rx   ry   r   r  r  r  r  r  r5   r6   r  r  r  r  r  r  r  cpython_onlyr  r  r  r  r  r.  r?  rH  rN  rW  r^  ra  re  rl  rp  ru  r}  r  r  r  r  is_resource_enabledr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r!  r$  r'  r-  r<  rM  rS  rW  r[  r_  rd  rh  rm  rs  r  r  r  r  r   r   r   r   r  r    sB   ,.CD# E#
+ ,.CD
, E
,3"(6T  D*<= > __W__&EF
> G
> 13HI335RS T J:v&?+" 79Z[79Z[& \ \&$ 8?A*A* )9:AC5C5" )9:ACGCG m479B9B: __Y$&(<=> > >.-F^G2 58:I:I 58: : > 58:<1:<1| 58:M:M0 58:#:#D(:>A7
=,( D*<=	: >	: D*<=)ABLNSN >SM^ __Y$&(<=.B >.B`Q 44Y?13
I3
I>.-!"G	7 8,	7 __Y$&(<=P > P 335STU UU 335STI UIA 335ST__S\\W,.HI__S;<8:\]
O ^ = J U
O 335ST8:O: UO 335ST__S\\W,.HI__S;<8:\]W ^ = J UW 335ST#,,'18:U: UU=9 ,2 Z02LM8 N8"*A@KLI __RWW_&ABJ CJF
AKE?Gr   r  z!SocketCan required for this test.c                   ,   \ rS rSrS r\R                  " \" \S5      S5      S 5       r	S r
\R                  " \" \S5      S5      S 5       rS rS	 r\R                  " \" \S
5      S5      S 5       r\R                  " \" \S5      S5      S 5       rSrg)BasicCANTestir  c                 d    [         R                    [         R                    [         R                    g r   )r6   AF_CANr?   rA   r   s    r   rV  !BasicCANTest.testCrucialConstantsu  s    r   CAN_BCM&socket.CAN_BCM required for this test.c                    [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                     [         R"                    [         R$                    [         R&                    [         R(                    [         R*                    [         R,                    [         R.                    [         R0                    g r   )r6   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_FRAMEr   s    r   testBCMConstantsBasicCANTest.testBCMConstantsz  s     	 	      !!  !!!! 	!!""""######&&))))##r   c                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   r6   r?   r@   rA   r-  s     r   testCreateSocketBasicCANTest.testCreateSocket  0    ]]6==&//6>>Ja KJJ   A
Ac                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r?   rI   r  r-  s     r   testCreateBCMSocket BasicCANTest.testCreateBCMSocket  s5     ]]6==&*;*;V^^LPQ MLLr  c                 "   [         R                   " [         R                  [         R                  [         R                  5       nSnUR	                  U5        U R                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f)N)rG  )r6   r?   r@   rA   r   rO  r)  )r   rE   addresss      r   testBindAnyBasicCANTest.testBindAny  sS    ]]6==&//6>>JaGFF7OQ]]_g6 KJJs   4B  
Bc                     [         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        SUR                  S5        S S S 5        g ! , (       d  f       g = f)Ninterface name too long)   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r6   r?   r@   rA   r  r;   r   r-  s     r   testTooLongInterfaceName%BasicCANTest.testTooLongInterfaceName  sI    ]]6==&//6>>Ja""7,E#$66=: KJJs   #A//
A=CAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c           	         [         R                   " [         R                  [         R                  [         R                  5       nS Hp  nUR	                  [         R
                  [         R                  U5        U R                  UUR                  [         R
                  [         R                  5      5        Mr     S S S 5        g ! , (       d  f       g = f)N)r   r   )	r6   r?   r@   rA   rp  SOL_CAN_RAWr  rO  rZ  )r   rE   loopbacks      r   testLoopbackBasicCANTest.testLoopback  s     ]]6==&//6>>Ja"V//1H1H%'  LL!3!3V5L5LMO # KJJs   A7C
CCAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c           	      >   Su  p[         R                  " SX5      n[        R                  " [        R                  [        R                  [        R
                  5       nUR                  [        R                  [        R                  U5        U R                  UUR                  [        R                  [        R                  S5      5        UR                  [        R                  [        R                  [        U5      5        S S S 5        g ! , (       d  f       g = f)N)   i   z=IIr   )r9   packr6   r?   r@   rA   rp  r  r  rO  rZ  rG  )r   can_idcan_mask
can_filterrE   s        r   
testFilterBasicCANTest.testFilter  s     ([[9
]]6==&//6>>JaLL++V-B-BJOZLL!3!3V5J5JANPLL++V-B-BIjDYZ	 KJJs   B'D
Dr   N)r   r   r   r   rV  r!   r  r5   r6   r  r  r  r  r  r  r  r   r   r   r   r  r  r  s    
 3AC$C$< 3ACC7: );<JLOLO )9:HJ[J[r   r  c                       \ rS rSrSS jr\S 5       r\S 5       rS rS r	S r
S rS	 rS
 r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       rSrg)CANTesti  c                 *    [         R                  XS9  g r   )r  r   r   s     r   r   CANTest.__init__  r`  r   c                     [        U5      nUR                  SS5      n[        R                  " U R                  XU5      $ )zBuild a CAN frame.r       )r  ljustr9   r  r   )clsr  datacan_dlcs       r   build_can_frameCANTest.build_can_frame  s6     d)zz!W%{{3,,ftDDr   c                 X    [         R                  " U R                  U5      u  p#nX#USU 4$ )zDissect a CAN frame.N)r9   r:   r   )r  framer  r  r  s        r   dissect_can_frameCANTest.dissect_can_frame  s0     !'c.?.? Ghw00r   c                     U R                   R                  U R                  5      u  pU R                  U R                  U5        U R                  US   U R
                  5        g r'  )rE   rn  r   rO  cfr   r   r  rd  s      r   testSendFrameCANTest.testSendFrame  sF    66??4<<0"%a$..1r   c                 |    U R                  SS5      U l        U R                  R                  U R                  5        g )Nr   s   r  r  r   rW  r   s    r   _testSendFrameCANTest._testSendFrame  s+    &&t-DEdggr   c                     U R                   R                  U R                  5      u  pU R                  U R                  U5        g r   )rE   rn  r   rO  r  r  s      r   testSendMaxFrameCANTest.testSendMaxFrame  s.    66??4<<0"%r   c                 |    U R                  SS5      U l        U R                  R                  U R                  5        g )Nr   s   r  r   s    r   _testSendMaxFrameCANTest._testSendMaxFrame  s*    &&t[9dggr   c                    U R                   R                  U R                  5      u  pU R                  U R                  U5        U R                   R                  U R                  5      u  pU R                  U R
                  U5        g r   )rE   rn  r   rO  cf1cf2r  s      r   testSendMultiFramesCANTest.testSendMultiFrames  sZ    66??4<<02&66??4<<02&r   c                     U R                  SS5      U l        U R                  R                  U R                  5        U R                  SS5      U l        U R                  R                  U R                  5        g )N   s   D3"   s   "3)r  r  r   rW  r  r   s    r   _testSendMultiFramesCANTest._testSendMultiFrames  sS    ''.ABdhh''o>dhhr   r  r  c                 "   U R                   R                  U R                  5      u  pU R                  U R                  U5        U R                  U5      u  p4nU R                  U R                  U5        U R                  U R                  U5        g r   )r   rn  r   rO  r  r  r  r  )r   r  rd  r  r  r  s         r   _testBCMCANTest._testBCM  so     88$$T\\2"% $ 6 6r :f-D)r   c                    [         R                   " [         R                  [         R                  [         R                  5      nU R	                  UR
                  5        UR                  U R                  45        SU l        [        / SQ5      U l
        U R                  U R                  U R                  5      U l        [         R                  nSnSnS=n=n=pxSn	Sn
[        R                  " U R                   UUUUUUUU	U
5
      nXR                  -   nUR#                  U5      nU R%                  U['        U5      5        g )N#  )         r   i"  r   )r6   r?   rI   r  r   rB   rG  r   r  bytesr  r  r  r  r9   r  r   rW  rO  r  )r   bcmopcoder  rS  ival1_seconds
ival1_usecival2_seconds
ival2_usec
bcm_can_idnframesheaderheader_plus_frame
bytes_sents                 r   testBCMCANTest.testBCM	  s    mmFMM6+<+<fnnM		"T^^%&,-	&&t{{DII>''BCCC
C]
T11!!
 #WW,XX/0
S):%;<r   )r  r  r  r  r  Nr  )r   r   r   r   r   classmethodr  r  r  r  r   r  r  r  r!   r  r5   r6   r  r#  r   r   r   r   r  r    s    D E E 1 1
2
&'  3AC*C* 3AC=C=r   r  z!CAN ISOTP required for this test.c                      ^  \ rS rSrU 4S jrS rS r\R                  " \	" \
S5      S5      S 5       rS rS	 rS
rU =r$ )	ISOTPTesti!	  c                 4   > [         TU ]  " U0 UD6  SU l        g Nr   r  r   r   r  s      r   r   ISOTPTest.__init__$	      $)&) r   c                     [         R                    [         R                    [         R                    [         R                    g r   )r6   r  r?   rJ   rI   r   s    r   rV  ISOTPTest.testCrucialConstants(	  s"    r   c                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   r  r-  s     r   r  ISOTPTest.testCreateSocket.	  r  r  rJ   z(socket.CAN_ISOTP required for this test.c                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r?   rI   rJ   r-  s     r   testCreateISOTPSocketISOTPTest.testCreateISOTPSocket2	  7     ]]6==&*;*;V=M=MNRS ONNr  c                 >   [         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        S5         UR                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  )r  r   r0  )r6   r?   rI   rJ   r  r;   r   r-  s     r   r  "ISOTPTest.testTooLongInterfaceName8	  sc    ]]6==&*;*;V=M=MNRS''1JK)* L ONKK ONs$   BA=,B=
B	B
Bc                     [         R                   " [         R                  [         R                  [         R                  5       nU R                  SS4nUR                  U5        U R                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f! [         aG  nUR                  [        R                  :X  a#  U R                  SU R                  -  5         S nAg e S nAff = f)Nr  iV  r   )r6   r?   rI   rJ   r   r   rO  r)  r;   r  ENODEVr   r   rE   rd  r   s       r   testBindISOTPTest.testBind>	  s    
	v}}f.?.?AQAQRVW~~ue3t  $7 SRR  	ww%,,&E>>* + + 	s=   AB ABB 
BB B 
C0)<C+*C++C0r   )r   r   r   r   r   rV  r  r!   r  r5   r6   r2  r  r:  r   r  r  s   @r   r'  r'  !	  sN    ! 5CEE+ r   r'  z!CAN J1939 required for this test.c                      ^  \ rS rSrU 4S jr\R                  " \" \S5      S5      S 5       r	\R                  " \" \S5      S5      S 5       r
S rSrU =r$ )		J1939TestiL	  c                 4   > [         TU ]  " U0 UD6  SU l        g r)  r*  r  s      r   r   J1939Test.__init__O	  r,  r   rN   z(socket.CAN_J1939 required for this test.c                    [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                    [         R                     [         R"                    [         R$                    [         R&                    [         R(                    [         R*                    [         R,                    [         R.                    [         R0                    g r   )r6   rN   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_MAXr   s    r   testJ1939ConstantsJ1939Test.testJ1939ConstantsS	  s     	%%  ((**!! 	!!  """"!!$$!!%%r   c                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r?   rI   rN   r-  s     r   testCreateJ1939SocketJ1939Test.testCreateJ1939Socketv	  r4  r  c                 <    [         R                   " [         R                  [         R                  [         R                  5       nU R                  [         R
                  [         R                  [         R                  4nUR                  U5        U R                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f! [         aG  nUR                  [        R                  :X  a#  U R                  SU R                  -  5         S nAg e S nAff = fr   )r6   r?   rI   rN   r   rE  rK  rD  r   rO  r)  r;   r  r8  r   r9  s       r   r:  J1939Test.testBind|	  s    
	v}}f.?.?AQAQRVW~~v';';V=P=PRXRfRfft  $7 SRR  	ww%,,&E>>* + + 	s=   AC
 A,B90C
 9
CC
 C
 

D<DDDr<  )r   r   r   r   r   r!   r  r5   r6   rY  r\  r:  r   r  r  s   @r   r>  r>  L	  sm    ! 5CE E B 5CEE r   r>  z#RDS sockets required for this test.c                   &    \ rS rSrS rS rS rSrg)BasicRDSTesti	  c                 D    [         R                    [         R                    g r   )r6   AF_RDSrQ   r   s    r   rV  !BasicRDSTest.testCrucialConstants	  s    r   c                     [         R                   " [         R                  [         R                  S5       n S S S 5        g ! , (       d  f       g = fr'  )r6   rQ   rR   r-  s     r   r  BasicRDSTest.testCreateSocket	  s.    ]]6==&*?*?Cq DCCs   A  
Ac                 `   Sn[         R                   " [         R                  [         R                  S5       nUR                  [         R                  [         R
                  U5        UR                  [         R                  [         R                  U5        S S S 5        g ! , (       d  f       g = f)Ni @  r   )r6   rQ   rR   rp  rT  	SO_RCVBUF	SO_SNDBUF)r   r   rE   s      r   testSocketBufferSize!BasicRDSTest.testSocketBufferSize	  sh    ]]6==&*?*?CqLL**F,<,<gFLL**F,<,<gF DCCs   AB
B-r   N)r   r   r   r   rV  r  rj  r   r   r   r   ra  ra  	  s    Gr   ra  c                      ^  \ rS rSrSS jrU 4S jrS rS rS rS r	\
" \R                  S5      S	 5       r\
" \R                  S
5      S 5       rS rS rS rS rSrU =r$ )RDSTesti	  c                 *    [         R                  XS9  g r   )r#  r   r   s     r   r   RDSTest.__init__	  r`  r   c                 V   > [         TU ]  5         [        R                  " 5       U l        g r   )r  r   r   r   evtr  s    r   r   RDSTest.setUp	  s    ??$r   c                     U R                   R                  U R                  5      u  pU R                  U R                  U5        U R                  U R
                  U5        g r   )r   rn  r   rO  r  r*  r   r  rd  s      r   testSendAndRecvRDSTest.testSendAndRecv	  sD    YY''5
D)-r   c                     SU l         U R                  R                  U R                   S[        U R                  45        g Nrd  r   r  r   rK  r(  r   r   s    r   _testSendAndRecvRDSTest._testSendAndRecv	  *    			1tTYY&78r   c                 .   U R                   R                  U R                  [        R                  5      u  pU R                  U R                  U5        U R                   R                  U R                  5      u  pU R                  U R                  U5        g r   )r   rn  r   r6   MSG_PEEKrO  r  rt  s      r   testPeekRDSTest.testPeek	  sd    YY''fooF
D)YY''5
D)r   c                     SU l         U R                  R                  U R                   S[        U R                  45        g rx  ry  r   s    r   	_testPeekRDSTest._testPeek	  r|  r   recvmsgc                     U R                   R                  U R                  5      u  pp4U R                  U R                  U5        g r   )r   r  r   rO  r  )r   r  ancdata	msg_flagsrd  s        r   testSendAndRecvMsgRDSTest.testSendAndRecvMsg	  s3    )-):):4<<)H&yD)r   sendmsgc                     SU l         U R                  R                  U R                   /SS[        U R                  45        g )Ns<   hello hello hello hello hello hello hello hello hello hello r   r   )r  r   r  r(  r   r   s    r   _testSendAndRecvMsgRDSTest._testSendAndRecvMsg	  s0    "	$))b!dDII->?r   c                    U R                   R                  U R                  5      u  pU R                  U R                  U5        U R                   R                  U R                  5      u  pU R                  U R
                  U5        g r   )r   rn  r   rO  data1data2rt  s      r   testSendAndRecvMultiRDSTest.testSendAndRecvMulti	  s^    YY''5
T*YY''5
T*r   c                     SU l         U R                  R                  U R                   S[        U R                  45        SU l        U R                  R                  U R
                  S[        U R                  45        g )Ns   baconr   s   egg)r  r   rK  r(  r   r  r   s    r   _testSendAndRecvMultiRDSTest._testSendAndRecvMulti	  sR    


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

Adii'89r   c                    [         R                   " U R                  // / S5      u  pnU R                  U R                  U5        U R                  R                  U R                  5      u  pEU R                  U R                  U5        g )Ng      @)selectr   r*  rn  r   rO  r  )r   r<   r  r   r  rd  s         r   
testSelectRDSTest.testSelect	  s`    --RS9adii#YY''5
D)r   c                     SU l         U R                  R                  U R                   S[        U R                  45        g )Ns   selectr   ry  r   s    r   _testSelectRDSTest._testSelect	  s*    			1tTYY&78r   )r  r  r  rq  r  )r   r   r   r   r   r   ru  rz  r  r  r  r6   r  r  r  r  r  r  r   r  r  s   @r   rm  rm  	  s{    D%.
9*9 &--+* ,* &--+@ ,@+:*9 9r   rm  z'QIPCRTR sockets required for this test.c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
BasicQIPCRTRTesti	  c                 $    [         R                    g r   )r6   rZ   r   s    r   rV  %BasicQIPCRTRTest.testCrucialConstants	  s    r   c                     [         R                   " [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   rZ   rI   r-  s     r   r  !BasicQIPCRTRTest.testCreateSocket	  s.    ]]6,,f.?.?@A A@@	   ?
Ac                     [         R                   " [         R                  [         R                  5       nU R                  UR	                  5       S   S5        S S S 5        g ! , (       d  f       g = fNr   r   )r6   rZ   rI   rO  r)  r-  s     r   testUnboundBasicQIPCRTRTest.testUnbound	  sF    ]]6,,f.?.?@AQ]]_Q/3 A@@s   $A!!
A/c                 .   [         R                   " [         R                  [         R                  5       n[        R                  " XR                  5       S   S9  U R                  UR                  5       S   S5        S S S 5        g ! , (       d  f       g = f)Nr   r  r   )r6   rZ   rI   r   r   r)  assertNotEqualr-  s     r   testBindSockBasicQIPCRTRTest.testBindSock	  s_    ]]6,,f.?.?@A##AMMOA,>? 2A6 A@@s   A	B
Bc                     [         R                   " [         R                  [         R                  5       nU R                  [        [
        R                  USS9  S S S 5        g ! , (       d  f       g = f)Nr  r  )r6   rZ   rI   r@  r;   r   r   r-  s     r   testInvalidBindSock$BasicQIPCRTRTest.testInvalidBindSock	  sH    ]]6,,f.?.?@Ag}'>'>K A@@s   %A""
A0c                    [         R                   " [         R                  [         R                  5       nUR                  S5        U R	                  UR                  5       S   S5        S S S 5        g ! , (       d  f       g = f)N){   r  r   r   )r6   rZ   rI   rG  r  r)  r-  s     r   testAutoBindSock!BasicQIPCRTRTest.testAutoBindSock	  sR    ]]6,,f.?.?@AIIj! 2A6 A@@s   5A22
B r   N)r   r   r   r   rV  r  r  r  r  r  r   r   r   r   r  r  	  s!    47
L7r   r  c                   ,    \ rS rSrS rS rS rS rSrg)BasicVSOCKTesti	  c                 $    [         R                    g r   )r6   r8  r   s    r   rV  #BasicVSOCKTest.testCrucialConstants	  s	    r   c                    [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    [         R                    [         R                    g r   )	r6   SO_VM_SOCKETS_BUFFER_SIZESO_VM_SOCKETS_BUFFER_MIN_SIZESO_VM_SOCKETS_BUFFER_MAX_SIZEr9  VMADDR_PORT_ANYrE  VM_SOCKETS_INVALID_VERSIONr1   r   s    r   testVSOCKConstants!BasicVSOCKTest.testVSOCKConstants 
  sJ    ((,,,,))--r   c                     [         R                   " [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r8  ra   r-  s     r   r  BasicVSOCKTest.testCreateSocket

  s,    ]]6??F,>,>?1 @??r  c                 d   [         R                   " [         R                  [         R                  5       nUR                  [         R                  [         R                  5      nUR                  [         R                  [         R
                  5      nUR                  [         R                  [         R                  5      nUR                  [         R                  [         R                  US-  5        UR                  [         R                  [         R
                  US-  5        UR                  [         R                  [         R                  US-  5        U R                  US-  UR                  [         R                  [         R                  5      5        U R                  US-  UR                  [         R                  [         R
                  5      5        U R                  US-  UR                  [         R                  [         R                  5      5        S S S 5        g ! , (       d  f       g = fNr0  )	r6   r8  ra   rZ  r  r  r  rp  rO  )r   rE   orig_maxr  orig_mins        r   rj  #BasicVSOCKTest.testSocketBufferSize
  s   ]]6??F,>,>?1||FOO$*$H$HJH<< & @ @BD||FOO$*$H$HJH LL==x!|MLL994!8ELL==x!|M X\\\&//#AACD TAX\\&//#==?@ X\\\&//#AACD+ @??s   G$H!!
H/r   N)	r   r   r   r   rV  r  r  rj  r   r   r   r   r  r  	  s    
.Dr   r  z)Bluetooth sockets required for this test.c                      \ rS rSrS rS r\R                  " \R                  S:H  S5      S 5       r
\R                  " \R                  S:H  S5      S 5       r\R                  " \R                  S:H  =(       d    \R                  R                  S	5      S
5      S 5       r\R                  " \S5      S 5       r\R                  " \S5      S 5       rS rS r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       r\R                  " \" \S5      S5      S 5       rSrg)BasicBluetoothTesti)
  c                 x   [         R                    [         R                    [         R                    [         R                    [
        R                  S:w  af  [         R                    [         R                    [         R                    [
        R                  R                  S5      (       d  [         R                    g g g )Nrr   r  )r6   
BDADDR_ANYBDADDR_LOCALr`   rb   rx   ry   BTPROTO_HCISOL_HCIre   r  BTPROTO_SCOr   s    r   testBluetoothConstants)BasicBluetoothTest.testBluetoothConstants-
  ss    <<7"NN  <<**955"" 6 #r   c                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r`   ra   rb   r-  s     r   testCreateRfcommSocket)BasicBluetoothTest.testCreateRfcommSocket;
  s7    ]]6..0B0BFDYDYZ^_ [ZZr  rr   z&windows does not support L2CAP socketsc                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r`   rR   re   r-  s     r   testCreateL2capSocket(BasicBluetoothTest.testCreateL2capSocket?
  s7    ]]6..0E0EvG[G[\`a ]\\r  z$windows does not support HCI socketsc                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r`   r@   r  r-  s     r   testCreateHciSocket&BasicBluetoothTest.testCreateHciSocketD
  s5    ]]6..ASASTXY UTTr  r  z.windows and freebsd do not support SCO socketsc                     [         R                   " [         R                  [         R                  [         R                  5       n S S S 5        g ! , (       d  f       g = fr   )r6   r`   rR   r  r-  s     r   testCreateScoSocket&BasicBluetoothTest.testCreateScoSocketI
  s9     ]]6..0E0EvGYGYZ^_ [ZZr  z.Bluetooth L2CAP sockets required for this testc                 f   [         R                   " [         R                  [         R                  [         R                  5       nSnUR	                  [         R
                  U45        UR                  5       nU R                  U[         R
                  U45        S S S 5        g ! , (       d  f       g = f)N  )r6   r`   rR   re   r   r  r)  rO  )r   r   psmrd  s       r   testBindBrEdrL2capSocket+BasicBluetoothTest.testBindBrEdrL2capSocketO
  sv    ]]6..0E0EvG[G[\`aCFFF%%s+,==?DTF$5$5s#;< ]\\s   AB""
B0c                    [         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        5         UR                  [         R                  SS45        S S S 5        U R	                  [
        5         UR                  [         R                  45        S S S 5        U R	                  [
        5         UR                  [         R                  5        S S S 5        U R	                  [
        5         UR                  [         R                  R                  5       S45        S S S 5        U R	                  [
        5         UR                  S5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nz= f! , (       d  f       N\= f! , (       d  f       g = f)Nr   r  )   r  )	r6   r`   rR   re   r@  r;   r   r  encode)r   r   s     r   testBadL2capAddr#BasicBluetoothTest.testBadL2capAddrX
  s)   ]]6..0E0EvG[G[\`a""7+))1a01 ,""7+))+, ,""7+v(() ,""7+))002F;< ,""7+)* , ]\++++++++++ ]\s   G#F<G!F:G F'7G0F8G!G	3G
F	G
F$	 G'
F5	1G8
G	G	
G	G
G(c                    [         R                   " [         R                  [         R                  [         R                  5       nSn UR	                  [         R
                  U45        UR                  5       nU R                  U[        R                  U45        U R!                  US   S5        [        R                  S:w  a"  U R                  U[         R
                  U45        S S S 5        [         R                   " [         R                  [         R                  [         R                  5       nUR	                  W5        UR                  5       nU R                  XT5        S S S 5        g ! [         aD  n[        R                  S:X  a*  UR                  S:X  a  U R                  [        U5      5        e S nAff = f! , (       d  f       N= f! , (       d  f       g = f)Nr   rr   iB'  z"(?i)[0-9a-f]{2}(?::[0-9a-f]{2}){4})r6   r`   ra   rb   r   r  r;   rx   ry   r>  r   r  r)  rO  r   ANYassertRegex)r   rE   channelr  rd  addr2s         r   testBindRfcommSocket'BasicBluetoothTest.testBindRfcommSocketf
  sT   ]]6..0B0BFDYDYZ^_G))734
 ==?DTDHHg#67T!W&KL||w&  (9(97'CD [ ]]6..0B0BFDYDYZ^_FF4LMMOEU) [Z  <<7*s||u/DMM#c(+	 [Z [Zs=   F<!E+(A=F</3G+
F95?F44F99F<<
G

Gc                 j   [         R                   " [         R                  [         R                  [         R                  5       nSnU R	                  [
        5         UR                  [         R                  R                  5       U45        S S S 5        U R	                  [
        5         UR                  [         R                  45        S S S 5        U R	                  [
        5         UR                  [         R                  US45        S S S 5        U R	                  [
        5         UR                  [         R                  S-   U45        S S S 5        U R	                  [
        5         UR                  S5        S S S 5        U R	                  [
        5         UR                  SU45        S S S 5        S S S 5        g ! , (       d  f       GN8= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nn= f! , (       d  f       g = f)Nr    r  invalid)	r6   r`   ra   rb   r@  r;   r   r  r  )r   rE   r  s      r   testBadRfcommAddr$BasicBluetoothTest.testBadRfcommAddry
  sb   ]]6..0B0BFDYDYZ^_G""7+))002G<= ,""7+))+, ,""7+))7A67 ,""7+))D0':; ,""7+x  ,""7+	7+, , [Z++++++++++++ [Zs   H$0F<H$(!G	H$&#G 	H$&%G1H$(H:H$H+H$<
G	H$
G	H$ 
G.	*H$1
G?	;H$
H	H$
H!	H$$
H2r  z,Bluetooth HCI sockets required for this testc                    [         R                   " [         R                  [         R                  [         R                  5       n[        R
                  R                  S5      (       aP  UR                  [         R                  5        UR                  5       nU R                  U[         R                  5        O6Sn UR                  U45        UR                  5       nU R                  X#5        S S S 5        g ! [         aN  nUR                  [        R                  [        R                  4;   a  U R                  [!        U5      5        e S nAff = f! , (       d  f       g = f)Nr  	dragonflyr  r   )r6   r`   r@   r  rx   ry   r  r   r  r)  rO  r;   r  EINVALr8  r   r  )r   rE   rd  devr  s        r   testBindHciSocket$BasicBluetoothTest.testBindHciSocket
  s    ]]6..ASASTXY||&&'IJJv(()}}  v'8'89FFC6N
 }}  + UT  yyU\\5<<$@@c#h/ UTs2   A7E;C7!E7
EA	E

EE
E c                     [         R                   " [         R                  [         R                  [         R                  5       n[        R
                  R                  S5      (       Ga  U R                  [        5         UR                  [         R                  R                  5       5        S S S 5        U R                  [        5         UR                  [         R                  45        S S S 5        U R                  [        5         UR                  [         R                  S-   5        S S S 5        U R                  [        [        45         UR                  [         R                  S-   5        S S S 5        U R                  [        5         UR                  S5        S S S 5        U R                  [        5         UR                  S5        S S S 5        U R                  [        5         UR                  S5        S S S 5        GOSnU R                  [        5         UR                  S5        S S S 5        U R                  [        5         UR                  US45        S S S 5        U R                  [        5         UR                  U5        S S S 5        U R                  [        5         UR                  [         R                  5        S S S 5        U R                  [        5         UR                  [         R                  R                  5       5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNX= f! , (       d  f       GN*= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GN}= f! , (       d  f       GN^= f! , (       d  f       GNA= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)	Nr  r  zd                                                                                                    r  r     invalidr   r   )r6   r`   r@   r  rx   ry   r  r@  r;   r   r  r  r  )r   rE   r  s      r   testBadHciAddr!BasicBluetoothTest.testBadHciAddr
  sl   ]]6..ASASTXY||&&'IJJ&&w/FF6,,3356 0&&w/FFF--/0 0&&w/FF6,,t34 0&&
G'<=FF6,,w67 >&&w/FF8$ 0&&w/FF9% 0&&w/FF:& 0/ &&w/FF2J 0&&w/FFC8$ 0&&w/FF3K 0&&w/FF6,,- 0&&w/FF6,,3356 05 UT//////==////// 0/////////5 UTs,  ;O?>.L),O?	!L;*O?#M*#O?#M0O?M1O?<NO?+N=!O?N&0O?N8!O?>O
O?- OO?*.O.O?)
L8	3O?;
M
	O?
M	O?
M.	)O?1
N 	;O?
N	O?
N#	O?&
N5	0O?8
O	O?

O	O?
O+	&O?.
O<	8O??
Pr  z,Bluetooth SCO sockets required for this testc                    [         R                   " [         R                  [         R                  [         R                  5       nUR	                  [         R
                  5        UR                  5       nU R                  U[         R
                  5        S S S 5        [         R                   " [         R                  [         R                  [         R                  5       nUR	                  [         R
                  R                  5       5        UR                  5       nU R                  U[         R
                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr   )	r6   r`   rR   r  r   r  r)  rO  r  )r   rE   rd  s      r   testBindScoSocket$BasicBluetoothTest.testBindScoSocket
  s    ]]6..0E0EvGYGYZ^_FF6$$%==?DT6#4#45 [
 ]]6..0E0EvGYGYZ^_FF6$$++-.==?DT6#4#45 [Z [Z
 [Zs   AEAE
E
E#c                    [         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        5         UR                  [         R                  45        S S S 5        U R	                  [
        5         UR                  [         R                  R                  5       45        S S S 5        U R	                  [        5         UR                  [         R                  S-   5        S S S 5        U R	                  [        5         UR                  [         R                  R                  5       S-   5        S S S 5        U R	                  [        5         UR                  S5        S S S 5        U R	                  [
        5         UR                  S5        S S S 5        U R	                  [
        5         UR                  S5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNE= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  r  r  r  r  )r6   r`   rR   r  r@  r;   r   r  r  r  r  r-  s     r   testBadScoAddr!BasicBluetoothTest.testBadScoAddr
  s   ]]6..0E0EvGYGYZ^_""7+))+, ,""7+))00245 ,"":.v((4/0 /"":.v((//1E9: /""#56x  7""7+y! ,""7+z" , [Z++++....66++++ [Zs   I,!G2:I,/HI,##HI,#1H(I,1H9I, I
2I,I!I,2
H	<I,
H	I,
H%	 I,(
H6	2I,9
I	I,

I	I,
I)	%I,,
I:r   N)r   r   r   r   r  r  r!   r  rx   ry   r  r  r  r  r  HAVE_SOCKET_BLUETOOTH_L2CAPr  r  r  r  r5   r6   r  r  r  r  r   r   r   r   r  r  )
  s   # __S\\W,.VW X __S\\W,.TU V __S\\W,R0G0G	0REGG 46fg= h= 46fg+ h+*&-  79gh, i," 79gh7 i7< 79gh	6 i	6 79gh# i#r   r  z'Hyper-V sockets required for this test.c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)BasicHyperVTesti
  c                 D   [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    [         R                    [         R                    [         R                    [         R                    g r   )r6   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_PARENTr   s    r   testHyperVConstants#BasicHyperVTest.testHyperVConstants
  s\    ''++))--  r   c                     SnU R                  [        U5         [        R                  " [        R                  [        R                  5        S S S 5        g ! , (       d  f       g = f)Nz\[WinError 10041\])r  r;   r6   rh   ra   )r   r4  s     r   -testCreateHyperVSocketWithUnknownProtoFailure=BasicHyperVTest.testCreateHyperVSocketWithUnknownProtoFailure
  s=    (##GX6MM&**F,>,>? 766s   4A
A$c                    Sn[         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        [        R                  " U5      5         UR                  [         R                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nz3connect(): AF_HYPERV address must be tuple, not str
r6   rh   ra   ri   r  r   reescaperG  r  r   r4  rE   s      r   )testCreateHyperVSocketAddrNotTupleFailure9BasicHyperVTest.testCreateHyperVSocketAddrNotTupleFailure
  sw    H]]6++V-?-?AWAWX\]''	299X3FG		&--. H YXGG YXs$   +B20 B!B2!
B/	+B22
C c                    Sn[         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        [        R                  " U5      5         UR                  [         R                  45        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N9AF_HYPERV address must be a str tuple (vm_id, service_id)r  r  s      r   0testCreateHyperVSocketAddrNotTupleOf2StrsFailure@BasicHyperVTest.testCreateHyperVSocketAddrNotTupleOf2StrsFailure
  sz    N]]6++V-?-?AWAWX\]''	299X3FG		6..01 H YXGG YXs$   +B30!B"B3"
B0	,B33
Cc                 j   Sn[         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        [        R                  " U5      5         UR                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  )r   r0  )	r6   rh   ra   ri   r  r   r  r  rG  r  s      r   /testCreateHyperVSocketAddrNotTupleOfStrsFailure?BasicHyperVTest.testCreateHyperVSocketAddrNotTupleOfStrsFailure
  sq    N]]6++V-?-?AWAWX\]''	299X3FG		&! H YXGG YXs$   +B$0BB$
B!	B$$
B2c                    Sn[         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        [        R                  " U5      5         UR                  S[         R                  45        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nz=connect(): AF_HYPERV address vm_id is not a valid UUID string00
r6   rh   ra   ri   r  r  r  r  rG  r  r  s      r   1testCreateHyperVSocketAddrVmIdNotValidUUIDFailureABasicHyperVTest.testCreateHyperVSocketAddrVmIdNotValidUUIDFailure   s|    R]]6++V-?-?AWAWX\]''
BIIh4GH		4!4!456 I YXHH YX$   +B40"B#B4#
B1	-B44
Cc                    Sn[         R                   " [         R                  [         R                  [         R                  5       nU R	                  [
        [        R                  " U5      5         UR                  [         R                  S45        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NzBconnect(): AF_HYPERV address service_id is not a valid UUID stringr%  r&  r  s      r   6testCreateHyperVSocketAddrServiceIdNotValidUUIDFailureFBasicHyperVTest.testCreateHyperVSocketAddrServiceIdNotValidUUIDFailure  s|    W]]6++V-?-?AWAWX\]''
BIIh4GH		6..56 I YXHH YXr)  r   N)r   r   r   r   r  r  r  r  r"  r'  r+  r   r   r   r   r  r  
  s&    
@
/2"77r   r  c                   8   \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS r\R.                  \R2                  " \SL S5      S 5       5       r\R.                  \R2                  " \SL S5      S 5       5       rS rS rSrg)BasicTCPTesti  c                 *    [         R                  XS9  g r   r]  r   r   s     r   r   BasicTCPTest.__init__      $$T$Ar   c                 f    U R                   R                  S5      nU R                  U[        5        g rJ  )rb  rL  rO  rP  rC  s     r   testRecvBasicTCPTest.testRecv  s&    mm  &c"r   c                 B    U R                   R                  [        5        g r   ri  rW  rP  r   s    r   	_testRecvBasicTCPTest._testRecv      C r   c                     U R                   R                  [        [        5      S-
  5      nU R                   R                  S5      nX-   nU R	                  U[        5        g N   rK  )rb  rL  r  rP  rO  )r   seg1seg2rQ  s       r   testOverFlowRecvBasicTCPTest.testOverFlowRecv  sI    }}!!#c(Q,/}}!!$'kc"r   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testOverFlowRecvBasicTCPTest._testOverFlowRecv!  r:  r   c                 j    U R                   R                  S5      u  pU R                  U[        5        g rJ  )rb  rn  rO  rP  r   rQ  rd  s      r   testRecvFromBasicTCPTest.testRecvFrom$  s(    MM**40	c"r   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testRecvFromBasicTCPTest._testRecvFrom)  r:  r   c                     U R                   R                  [        [        5      S-
  5      u  pU R                   R                  S5      u  p2X-   nU R	                  U[        5        g r<  )rb  rn  r  rP  rO  )r   r>  rd  r?  rQ  s        r   testOverFlowRecvFrom!BasicTCPTest.testOverFlowRecvFrom,  sM    ]]++CHQJ7
]]++D1
kc"r   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testOverFlowRecvFrom"BasicTCPTest._testOverFlowRecvFrom3  r:  r   c                     Sn U R                   R                  S5      nU(       d  OX-  nM)  U R                  US5        g )Nr   rK     ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)rb  rL  rO  )r   rQ  reads      r   testSendAllBasicTCPTest.testSendAll6  sB    ==%%d+DKC	 
 	k*r   c                 >    SnU R                   R                  U5        g )NrS  )ri  r  )r   	big_chunks     r   _testSendAllBasicTCPTest._testSendAll@  s    	y)r   c                 d   U R                   R                  5       n[        R                  " U[        R                  [        R
                  5      nU R                  UR                  5        U R                  U[        R                  5        UR                  S5      nU R                  U[        5        g rJ  )rb  r+  r6   fromfdr   ra   r   rB   r"  rL  rO  rP  )r   r9  r  rQ  s       r   
testFromFdBasicTCPTest.testFromFdD  sq    ]]!!#}}R1C1CD

#dFMM2iioc"r   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testFromFdBasicTCPTest._testFromFdM  r:  r   c                     U R                   R                  5       nU R                  UR                  5        UR	                  S5      nU R                  U[        5        g rJ  )rb  dupr   rB   rL  rO  rP  )r   r  rQ  s      r   testDupBasicTCPTest.testDupP  sA    }}  "

#iioc"r   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testDupBasicTCPTest._testDupW  r:  r   c                     U R                   R                  S5      nU R                  U[        5        U R                  R                  5         g rJ  )rb  rL  rO  rP  r   r   rC  s     r   check_shutdownBasicTCPTest.check_shutdownZ  s6    mm  &c" 			r   c                 $    U R                  5         g r   rj  r   s    r   testShutdownBasicTCPTest.testShutdownc  s    r   c                 x    U R                   R                  [        5        U R                   R                  S5        g r  )ri  rW  rP  rq  r   s    r   _testShutdownBasicTCPTest._testShutdownf  s&    C "r   Nr  c                 $    U R                  5         g r   rm  r   s    r   testShutdown_overflow"BasicTCPTest.testShutdown_overflowj  s     	r   c                 f   SS K nU R                  R                  [        5        U R	                  [
        U R                  R                  UR                  S-   5        U R	                  [
        U R                  R                  SUR                  S-   -   5        U R                  R                  S5        g )Nr   r   r0  )	r  ri  rW  rP  r@  r  rq  r  UINT_MAXr   r  s     r   _testShutdown_overflow#BasicTCPTest._testShutdown_overflowo  s     	C -)@)@#++a/	1-)@)@y11A56	8"r   c                 J   U R                   R                  5       nU R                   R                  5       nU R                  X!5        U R	                  U R                   R
                  5        U R                  [        U R                   R                  S5        U R                   R                  5         [        R                  " [        R                  [        R                  US9nU R                  UR                  5        UR                  S5      nU R                  U[        5        g )NrK  rh  )rb  r+  r3  rO  r  _closedr@  r;   rL  rB   r6   r   ra   r   rP  )r   r+  r   r  rQ  s        r   
testDetachBasicTCPTest.testDetach{  s    %%'MM  "#--.'4==#5#5t< }}V^^V-?-?J

#iioc"r   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testDetachBasicTCPTest._testDetach  r:  r   r   r  ) r   r   r   r   r   r4  r8  r@  rC  rG  rJ  rM  rP  rU  rY  r]  r`  rd  rg  rj  rn  rq  r   r  r!   r  r  rt  ry  r}  r  r   r   r   r   r.  r.    s    B#
!#!#
!#!+*#!#!# __Y$&(<= >  __Y$&(<=# > ## !r   r.  c                   B    \ rS rSrSS jrS rS rS rS rS r	S r
S	rg
)BasicUDPTesti  c                 *    [         R                  XS9  g r   )r  r   r   s     r   r   BasicUDPTest.__init__  r`  r   c                     U R                   R                  [        [        5      5      nU R	                  U[        5        g r   r   rL  r  rP  rO  rC  s     r   testSendtoAndRecvBasicUDPTest.testSendtoAndRecv  (    iinnSX&c"r   c                 f    U R                   R                  [        S[        U R                  45        g r'  r   rK  rP  r(  r   r   s    r   _testSendtoAndRecvBasicUDPTest._testSendtoAndRecv      Qtyy 12r   c                     U R                   R                  [        [        5      5      u  pU R	                  U[        5        g r   r   rn  r  rP  rO  rF  s      r   rG  BasicUDPTest.testRecvFrom  ,    II&&s3x0	c"r   c                 f    U R                   R                  [        S[        U R                  45        g r'  r  r   s    r   rJ  BasicUDPTest._testRecvFrom  r  r   c                 Z    U R                  [        U R                  R                  S5        g Nr  r@  r  r   rn  r   s    r   testRecvFromNegative!BasicUDPTest.testRecvFromNegative      *dii&8&8"=r   c                 f    U R                   R                  [        S[        U R                  45        g r'  r  r   s    r   _testRecvFromNegative"BasicUDPTest._testRecvFromNegative  r  r   r   Nr  r   r   r   r   r   r  r  rG  rJ  r  r  r   r   r   r   r  r    s&    D#
3#
3>3r   r  c                   B    \ rS rSrSS jrS rS rS rS rS r	S r
S	rg
)BasicUDPLITETesti  c                 *    [         R                  XS9  g r   )r  r   r   s     r   r   BasicUDPLITETest.__init__  s    !**4*Gr   c                     U R                   R                  [        [        5      5      nU R	                  U[        5        g r   r  rC  s     r   r  "BasicUDPLITETest.testSendtoAndRecv  r  r   c                 f    U R                   R                  [        S[        U R                  45        g r'  r  r   s    r   r  #BasicUDPLITETest._testSendtoAndRecv  r  r   c                     U R                   R                  [        [        5      5      u  pU R	                  U[        5        g r   r  rF  s      r   rG  BasicUDPLITETest.testRecvFrom  r  r   c                 f    U R                   R                  [        S[        U R                  45        g r'  r  r   s    r   rJ  BasicUDPLITETest._testRecvFrom  r  r   c                 Z    U R                  [        U R                  R                  S5        g r  r  r   s    r   r  %BasicUDPLITETest.testRecvFromNegative  r  r   c                 f    U R                   R                  [        S[        U R                  45        g r'  r  r   s    r   r  &BasicUDPLITETest._testRecvFromNegative  r  r   r   Nr  r  r   r   r   r  r    s&    H#
3#
3>3r   r  c                      ^  \ rS rSr\R
                  rU 4S jrS rSr	S r
S rS rS rS	rS
 H  r\\" \\S	5      -  rM     S	rS	rS	rSS jrSrU =r$ )SendrecvmsgBasei  c                 V   > [         R                  " 5       U l        [        TU ]  5         g r   )r   r   
misc_eventr  r   r  s    r   r   SendrecvmsgBase.setUp  s    #//+r   c                 8    U R                   R                  U5      $ r   )cli_sockrW  rC  s     r   sendToServerSendrecvmsgBase.sendToServer  s    }}!!#&&r   r   c                 d    U R                   R                  " XR                  [        U5      S  -   6 $ r   )r  r  sendmsg_to_server_defaultsr  r   r#   s     r   sendmsgToServerSendrecvmsgBase.sendmsgToServer  s4    
 }}$$44SYZ@@C 	Cr   c                 N    UR                   " U/UQ76 nU R                  U5        U$ r   )r  registerRecvmsgResult)r   r  r   r#   results        r   	doRecvmsgSendrecvmsgBase.doRecvmsg   s*     g--""6*r   c                     g r   r   r   r  s     r   r  %SendrecvmsgBase.registerRecvmsgResult
  s     	r   c                 &    U R                  X5        g r   rO  r   addr1r  s      r   checkRecvmsgAddress#SendrecvmsgBase.checkRecvmsgAddress  s     	&r   r   )
MSG_CTRUNCMSG_OOBc                 l   U R                   nU R                  nU(       a  X`R                  -  nXpR                  -  nOUb  X`R                  -  nXpR                  -  nXd) -  nXs) -  nX6-  nXG-  nX4-  U) -  nU(       a  [	        SR                  U5      5      eX4-  U) -  n	U R                  X-  X9-  5        g )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  rO  )
r   r  eorcheckset
checkunsetignore
defaultsetdefaultunsetinbothr  s
             r   
checkFlagsSendrecvmsgBase.checkFlags%  s    8 ..
22666J<<<L_:::J888L 	k!
	! 	"
&&0 %%+VF^5 5 %&0x7r   )r  )Nr   r   r   )r   r   r   r   r   r<  fail_timeoutr   r  r  r  r  r  r  r  r  r   r6   r  r  r  r  r   r  r  s   @r   r  r    s    
 ++L' "$C' )'&$":: *    #$48 48r   r  c                       \ rS rSrS rSrg)RecvmsgIntoMixini\  c                     [        U5      nUR                  " U//UQ76 nU R                  U5        U R                  US   S5        U R	                  US   U5        [        US US    5      4USS  -   $ r  )rG  recvmsg_intor  assertGreaterEqualassertLessEqualr  )r   r  r   r#   bufr  s         r   r  RecvmsgIntoMixin.doRecvmsg_  s|     ""C5040""6*q	1-VAY0c*6!9o&(6!":55r   r   N)r   r   r   r   r  r   r   r   r   r  r  \  s    6r   r  c                   2   ^  \ rS rSr\U 4S j5       rSrU =r$ )SendrecvmsgDgramFlagsBaseih  c                 :   > [         TU ]  [        R                  -  $ r   )r  r  r6   	MSG_TRUNCr  s    r   r  5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicatork  s    w2V5E5EEEr   r   )r   r   r   r   propertyr  r   r  r  s   @r   r  r  h  s     F Fr   r  c                   2   ^  \ rS rSr\U 4S j5       rSrU =r$ )SendrecvmsgSCTPFlagsBaseip  c                 :   > [         TU ]  [        R                  -  $ r   )r  r  r6   MSG_EORr  s    r   r  0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicators  s    w.??r   r   )r   r   r   r   r  r  r   r  r  s   @r   r  r  p  s     @ @r   r  c                   J    \ rS rSr\S 5       r\S 5       r\S 5       rS rSr	g)SendrecvmsgConnectionlessBaseix  c                     U R                   $ r   )r   r   s    r   	serv_sock'SendrecvmsgConnectionlessBase.serv_sock}  s    yyr   c                     U R                   $ r   r  r   s    r   r  &SendrecvmsgConnectionlessBase.cli_sock  s    xxr   c                 "    / / SU R                   4$ r'  )r  r   s    r   r  8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaults  s    B4>>**r   c                 L    U R                   R                  XR                  5      $ r   )r  rK  r  rC  s     r   r  *SendrecvmsgConnectionlessBase.sendToServer  s    }}##C88r   r   N)
r   r   r   r   r  r  r  r  r  r   r   r   r   r  r  x  sC    
     + +9r   r  c                   :    \ rS rSr\S 5       r\S 5       rS rSrg)SendrecvmsgConnectedBasei  c                     U R                   $ r   )rb  r   s    r   r  "SendrecvmsgConnectedBase.serv_sock  s    }}r   c                     U R                   $ r   )ri  r   s    r   r  !SendrecvmsgConnectedBase.cli_sock  s    ~~r   c                     g r   r   r  s      r   r  ,SendrecvmsgConnectedBase.checkRecvmsgAddress       	r   r   N)	r   r   r   r   r  r  r  r  r   r   r   r   r  r    s/        r   r  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )SendrecvmsgServerTimeoutBasei  c                 l   > [         TU ]  5         U R                  R                  U R                  5        g r   )r  r   r  r;  r  r  s    r   r   "SendrecvmsgServerTimeoutBase.setUp  s$    !!$"3"34r   r   )r   r   r   r   r   r   r  r  s   @r   r  r    s    5 5r   r  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS r\" \S5      S 5       r\R*                  S 5       rS rS rS rS rSrg)SendmsgTestsi  c                 |    U R                  U R                  R                  [        [        5      5      [        5        g r   rO  r  rL  r  rP  r   s    r   testSendmsgSendmsgTests.testSendmsg  %    ,,SX6<r   c                 j    U R                  U R                  [        /5      [        [        5      5        g r   rO  r  rP  r  r   s    r   _testSendmsgSendmsgTests._testSendmsg  s#    --se4c#h?r   c                 |    U R                  U R                  R                  [        [        5      5      [        5        g r   r  r   s    r   testSendmsgDataGenerator%SendmsgTests.testSendmsgDataGenerator  r  r   c                 x    U R                  U R                  S [        4 5       5      [        [        5      5        g )Nc              3   $   #    U  H  ov   M     g 7fr   r   r  s     r   r  9SendmsgTests._testSendmsgDataGenerator.<locals>.<genexpr>  s     .@%Qq%r  r  r   s    r   _testSendmsgDataGenerator&SendmsgTests._testSendmsgDataGenerator  s,    --.@3%.@AS	#r   c                 |    U R                  U R                  R                  [        [        5      5      [        5        g r   r  r   s    r   testSendmsgAncillaryGenerator*SendmsgTests.testSendmsgAncillaryGenerator  r  r   c                 z    U R                  U R                  [        /S S 5       5      [        [        5      5        g )Nc              3   $   #    U  H  ov   M     g 7fr   r   r  s     r   r  >SendmsgTests._testSendmsgAncillaryGenerator.<locals>.<genexpr>  s     _Aar  r   r  r   s    r   _testSendmsgAncillaryGenerator+SendmsgTests._testSendmsgAncillaryGenerator  s,    --se__ES	#r   c                 |    U R                  U R                  R                  [        [        5      5      [        5        g r   r  r   s    r   testSendmsgArraySendmsgTests.testSendmsgArray  r  r   c                     U R                  U R                  [        R                  " S[        5      /5      [	        [        5      5        g )NB)rO  r  arrayrP  r  r   s    r   _testSendmsgArraySendmsgTests._testSendmsgArray  s2    --u{{3/D.EFS	#r   c                 |    U R                  U R                  R                  [        [        5      5      [        5        g r   r  r   s    r   testSendmsgGatherSendmsgTests.testSendmsgGather  r  r   c                     U R                  U R                  [        S S [        SS  /5      [        [        5      5        g Nr=  r  r   s    r   _testSendmsgGatherSendmsgTests._testSendmsgGather  s2    --s2AwAB.@A3s8Lr   c                 Z    U R                  U R                  R                  S5      S5        g Nr     donerO  r  rL  r   s    r   testSendmsgBadArgsSendmsgTests.testSendmsgBadArgs  !    ,,T2G<r   c           	         U R                  [        U R                  R                  5        U R                  [        U R                  S5        U R                  [        U R                  [        5       5        U R                  [        U R                  [        5       /5        U R                  [        U R                  [        [        5       /5        U R                  [        U R                  [        /[        5       5        U R                  [        U R                  [        // [        5       5        U R                  [        U R                  [        // S[        5       5        U R                  S5        g )Ns   not in an iterabler   r5  )r@  r   r  r  r  objectrP  r  r   s    r   _testSendmsgBadArgs 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    U R                  U R                  R                  S5      S5        g r4  r6  r   s    r   testSendmsgBadCmsgSendmsgTests.testSendmsgBadCmsg  r9  r   c           	      X   U R                  [        U R                  [        /[	        5       /5        U R                  [        U R                  [        /[	        5       SS4/5        U R                  [        U R                  [        /S[	        5       S4/5        U R                  [        U R                  [        /SS[	        5       4/5        U R                  [        U R                  [        /S/5        U R                  [        U R                  [        /S/5        U R                  S5        g )Nr      data)r   r   )r   r   rB  r  r5  r@  r   r  rP  r;  r  r   s    r   _testSendmsgBadCmsg 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    U R                  U R                  R                  S5      S5        g r4  r6  r   s    r   testSendmsgBadMultiCmsg$SendmsgTests.testSendmsgBadMultiCmsg  s#     	,,T2G<r   c                     U R                  [        U R                  [        // SQ5        U R                  [        U R                  [        /S[	        5       /5        U R                  S5        g )Nr   r   r   r5  rC  r   s    r   _testSendmsgBadMultiCmsg%SendmsgTests._testSendmsgBadMultiCmsg  sU    )T%9%9%	.)T%9%9%+vx!8	:'"r   c                 Z    U R                  U R                  R                  S5      S5        g r4  r6  r   s    r   testSendmsgExcessCmsgReject(SendmsgTests.testSendmsgExcessCmsgReject
  s#     	,,T2G<r   c                 *   [        [        S5      (       d\  U R                  [        5       nU R	                  [
        /SS/5        S S S 5        U R                  WR                  R                  5        U R                  S5        g ! , (       d  f       NE= f)NrF  rK  r5  )
r5   r6   r@  r;   r  rP  assertIsNonerL  r  r  r   rN  s     r   _testSendmsgExcessCmsgReject)SendmsgTests._testSendmsgExcessCmsgReject  sj    v|,,""7+r$$cU[+,FG ,bll001'" ,+s   B
Bc                     g r   r   r   s    r   testSendmsgAfterClose"SendmsgTests.testSendmsgAfterClose  s    r   c                     U R                   R                  5         U R                  [        U R                  [
        /5        g r   )r  rB   r@  r;   r  rP  r   s    r   _testSendmsgAfterClose#SendmsgTests._testSendmsgAfterClose  s,    '4#7#7#?r   r   N)r   r   r   r   r  r  r  r  r  r"  r%  r*  r-  r1  r7  r<  r?  rD  r  r6   rH  r   rL  rO  rT  rW  rZ  r   r   r   r   r
  r
    s    =@=#=#=#=M=#$=# &,'= (=
 ((# )#=
#@r   r
  c                       \ rS rSrS rS rS rS r\" \	R                  S;  S5      S 5       r\R                  S	 5       rS
rg)SendmsgStreamTestsi   c                 |    U R                  U R                  R                  [        [        5      5      [        5        g r   r  r   s    r   testSendmsgExplicitNoneAddr.SendmsgStreamTests.testSendmsgExplicitNoneAddr$  r  r   c                 p    U R                  U R                  [        // SS 5      [        [        5      5        g r'  r  r   s    r   _testSendmsgExplicitNoneAddr/SendmsgStreamTests._testSendmsgExplicitNoneAddr(  s)    --seRDA3s8Lr   c                     U R                  U R                  R                  S5      S5        U R                  U R                  R                  U R                  S95        g Nr     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarn   rO  r  rL  r  r  r   r  r   s    r   testSendmsgTimeout%SendmsgStreamTests.testSendmsgTimeout+  sE    ,,S18<,,T5F5F,GHr   c                 \    U R                   R                  S5          U R                  S/5        M  ! [         a     O5[
         a)  nUR                  [        R                  :w  a  e  S nAOS nAff = fU R                  R                  5         g ! U R                  R                  5         f = f)NQ?rf  )
r  r;  r  r9  r  r;   r  ENOMEMr  r   r   rR  s     r   _testSendmsgTimeout&SendmsgStreamTests._testSendmsgTimeout0  s    	"MM$$T*5(((4   99, - OO!DOO!s6   B 3 
A1B 	A1A,'B ,A11B B+>   r  r  z<MSG_DONTWAIT not known to work on this platform when sendingc                     U R                  U R                  R                  S5      S5        U R                  U R                  R                  U R                  S95        g re  rh  r   s    r   testSendmsgDontWait&SendmsgStreamTests.testSendmsgDontWaitG  sG    
 	,,S18<,,T5F5F,GHr   c                     U R                  [        5       n U R                  S// [        R                  5        M$  ! , (       d  f       O= fU R                  WR                  R                  [        R                  [        R                  [        R                  45        U R                  R                  5         g ! U R                  R                  5         f = fNrf  )r@  r;   r  r6   MSG_DONTWAITr*  rL  r  EAGAINEWOULDBLOCKrm  r  r   rS  s     r   _testSendmsgDontWait'SendmsgStreamTests._testSendmsgDontWaitO  s    		"""7+r(((R9L9LM  ,+
 MM",,,, <<):):ELLIK OO!DOO!s   B< &=
AAB< <Cr   N)r   r   r   r   r_  rb  ri  ro  r  rx   ry   rr  r   ry  r   r   r   r   r]  r]     s^    =MI
". cll*>> !I!I
 $$
" %
"r   r]  c                        \ rS rSrS rS rSrg)SendmsgConnectionlessTestsi]  c                     g r   r   r   s    r   testSendmsgNoDestAddr0SendmsgConnectionlessTests.testSendmsgNoDestAddrb  r  r   c                     U R                  [        U R                  R                  [        /5        U R                  [        U R                  R                  [        // SS 5        g r'  )r@  r;   r  r  rP  r   s    r   _testSendmsgNoDestAddr1SendmsgConnectionlessTests._testSendmsgNoDestAddrg  sJ    '4==#8#8%	!'4==#8#8%Q	.r   r   N)r   r   r   r   r~  r  r   r   r   r   r|  r|  ]  s    

.r   r|  c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS r\" \S5      S 5       r\R.                  S 5       r\" \R*                  S5      S 5       r\R.                  S 5       rSrg)RecvmsgGenericTestsin  c                    U R                  U R                  [        [        5      5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R	                  U/ 5        U R                  USS9  g NTr  r  r  r  rP  rO  r  r*  r  r   rQ  r  r  rd  s        r   testRecvmsgRecvmsgGenericTests.testRecvmsgr  sa    $(NN4>>3s8$L!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  rP  r   s    r   _testRecvmsg RecvmsgGenericTests._testRecvmsgz      #r   c                    U R                  U R                  [        [        5      SS5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R	                  U/ 5        U R                  USS9  g )Nr   Tr  r  r  s        r   testRecvmsgExplicitDefaults/RecvmsgGenericTests.testRecvmsgExplicitDefaults}  si    $(NN4>>36s8Q%C!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgExplicitDefaults0RecvmsgGenericTests._testRecvmsgExplicitDefaults  r  r   c                    U R                  U R                  [        [        5      S-   5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R	                  U/ 5        U R                  USS9  g )Nr  Tr  r  r  s        r   testRecvmsgShorter&RecvmsgGenericTests.testRecvmsgShorter  si    $(NN4>>36s8b=%B!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgShorter'RecvmsgGenericTests._testRecvmsgShorter  r  r   c                    U R                  U R                  [        [        5      S-
  5      u  pp4U R	                  U[        S S 5        U R                  X@R                  5        U R	                  U/ 5        U R                  USS9  g )Nr=  Fr  r  r  s        r   testRecvmsgTrunc$RecvmsgGenericTests.testRecvmsgTrunc  so    $(NN4>>36s8a<%A!ec#2h'  }}5"%5)r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgTrunc%RecvmsgGenericTests._testRecvmsgTrunc  r  r   c                    U R                  U R                  [        [        5      S5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R	                  U/ 5        U R                  USS9  g )Nr   Tr  r  r  s        r   testRecvmsgShortAncillaryBuf0RecvmsgGenericTests.testRecvmsgShortAncillaryBuf  sg    $(NN4>>36s8Q%@!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgShortAncillaryBuf1RecvmsgGenericTests._testRecvmsgShortAncillaryBuf  r  r   c                    U R                  U R                  [        [        5      S5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R	                  U/ 5        U R                  USS9  g )N (  Tr  r  r  s        r   testRecvmsgLongAncillaryBuf/RecvmsgGenericTests.testRecvmsgLongAncillaryBuf  sg    $(NN4>>36s8U%D!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgLongAncillaryBuf0RecvmsgGenericTests._testRecvmsgLongAncillaryBuf  r  r   c                     U R                   R                  5         U R                  [        U R                  U R                   S5        g rJ  )r  rB   r@  r;   r  r   s    r   testRecvmsgAfterClose)RecvmsgGenericTests.testRecvmsgAfterClose  s.    '4>>4>>4Hr   c                     g r   r   r   s    r   _testRecvmsgAfterClose*RecvmsgGenericTests._testRecvmsgAfterClose  r{  r   c                      U R                   R                  S5        U R                  [        U R                  U R                   [        [        5      5        U R                  R                  5         g ! U R                  R                  5         f = f)Nrl  )	r  r;  r@  r  r  r  rP  r  r   r   s    r   testRecvmsgTimeout&RecvmsgGenericTests.testRecvmsgTimeout  s`    	"NN%%d+l"nndnnc#hH OO!DOO!s   AA1 1Bc                 h    U R                  U R                  R                  U R                  S95        g Nrg  )r  r  r   r  r   s    r   _testRecvmsgTimeout'RecvmsgGenericTests._testRecvmsgTimeout  s&    ,,T5F5F,GHr   r~  c           	      j   U R                  U R                  [        [        5      S-
  S[        R
                  5      u  pp4U R                  U[        S S 5        U R                  X@R                  5        U R                  U/ 5        U R                  US[        [        SS5      S9  U R                  U R                  [        [        5      S[        R
                  5      u  pp4U R                  U[        5        U R                  X@R                  5        U R                  U/ 5        U R                  USS9  U R                  U R                  [        [        5      5      u  pp4U R                  U[        5        U R                  X@R                  5        U R                  U/ 5        U R                  USS9  g )	Nr=  r   r  Fr  r  r  Tr  )r  r  r  rP  r6   r~  rO  r  r*  r  r   r  s        r   testRecvmsgPeek#RecvmsgGenericTests.testRecvmsgPeek  sa    %)NN4>>36s8a<39??%D!e 	c#2h'  }}5"%
 	5&v{A> 	 	@ %)NN4>>36s8Q39??%D!e 	c"  }}5"%4( %)NN4>>3s8$L!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgPeek$RecvmsgGenericTests._testRecvmsgPeek  s    #r   r  c                 L   U R                   R                  U R                  5        U R                  U R                   [	        [
        5      5      u  pp4U R                  U[
        5        U R                  X@R                  5        U R                  U/ 5        U R                  USS9  g r  )
r  r;  r  r  r  rP  rO  r  r*  r  r  s        r   testRecvmsgFromSendmsg*RecvmsgGenericTests.testRecvmsgFromSendmsg  s{     	!!$"3"34$(NN4>>3s8$L!ec"  }}5"%4(r   c                     U R                  U R                  [        S S [        SS  /5      [        [        5      5        g r0  r  r   s    r   _testRecvmsgFromSendmsg+RecvmsgGenericTests._testRecvmsgFromSendmsg  s2    --s2AwAB.@A3s8Lr   r   N)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6   r  r   r  r  r  r   r   r   r   r  r  n  s    )))*))I
"I &*% ) & )D    ! &--+) ,) ''M (Mr   r  c                   ,    \ rS rSrS rS rS rS rSrg)RecvmsgGenericStreamTestsi  c                     U R                  U R                  S5      u  pp4U R                  US5        U R                  X@R                  5        U R                  U/ 5        U R                  US S9  g )NrK  r   r  )r  r  rO  r  r*  r  r  s        r   testRecvmsgEOF(RecvmsgGenericStreamTests.testRecvmsgEOF  s]    $(NN4>>4$H!ec"  }}5"%4(r   c                 8    U R                   R                  5         g r   )r  rB   r   s    r   _testRecvmsgEOF)RecvmsgGenericStreamTests._testRecvmsgEOF  s    r   c                    U R                  U R                  [        [        5      S-
  5      u  pp4U R	                  X@R
                  5        U R                  U/ 5        U R                  USS9  U R                  U R                  S5      u  pRp4U R	                  X@R
                  5        U R                  U/ 5        U R                  USS9  X-   nU R                  U[        5        g )Nr=  Fr  rK  T)r  r  r  rP  r  r*  rO  r  )r   r>  r  r  rd  r?  rQ  s          r   testRecvmsgOverflow-RecvmsgGenericStreamTests.testRecvmsgOverflow  s    %)^^DNN47HqL&B"u  }}5"%5)%)^^DNND%I"u  }}5"%4(kc"r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgOverflow.RecvmsgGenericStreamTests._testRecvmsgOverflow#  r  r   r   N)	r   r   r   r   r  r  r  r  r   r   r   r   r  r    s    )# r   r  c                        \ rS rSrS rS rSrg)RecvmsgTestsi'  c                    U R                  [        U R                  R                  5        U R                  [        U R                  R                  SSS5        U R                  [        U R                  R                  [        [        5      SS5        U R                  [        U R                  R                  [        S5      /SS5        U R                  [        U R                  R                  [        5       SS5        U R                  [        U R                  R                  [        [        5      [        5       S5        U R                  [        U R                  R                  [        [        5      S[        5       5        U R                  R                  [        [        5      SS5      u  pp4U R                  U[        5        U R                  X@R                  5        U R                  U/ 5        U R                  USS9  g )Nr  r   r  Tr  )r@  r   r  r  r  r  rP  rG  r;  rO  r  r*  r  r  s        r   testRecvmsgBadArgsRecvmsgTests.testRecvmsgBadArgs*  sk   )T^^%;%;<*dnn&<&<a	$*dnn&<&<c(B	+)T^^%;%;$R=/1a	1)T^^%;%; (Aq	*)T^^%;%;c(FHa	1)T^^%;%;c(Avx	1 %)NN$:$:3s8Q$J!ec"  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgBadArgs RecvmsgTests._testRecvmsgBadArgs@  r  r   r   N)r   r   r   r   r  r  r   r   r   r   r  r  '  s    ),r   r  c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)RecvmsgIntoTestsiD  c                    [        [        [        5      5      nU R                  [        U R
                  R                  5        U R                  [        U R
                  R                  [        [        5      SS5        U R                  [        U R
                  R                  USS5        U R                  [        U R
                  R                  [        5       /SS5        U R                  [        U R
                  R                  S/SS5        U R                  [        U R
                  R                  U[        5       /SS5        U R                  [        U R
                  R                  U/SS5        U R                  [        U R
                  R                  U/[        5       S5        U R                  [        U R
                  R                  U/S[        5       5        U R
                  R                  U/SS5      u  p#pEU R                  U[        [        5      5        U R                  U[        [        5      5        U R                  XPR                  5        U R                  U/ 5        U R                  USS9  g )Nr   s   I'm not writabler  Tr  )rG  r  rP  r@  r   r  r  r;  r  rO  r  r*  r  r   r  nbytesr  r  rd  s         r   testRecvmsgIntoBadArgs'RecvmsgIntoTests.testRecvmsgIntoBadArgsG  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-  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgIntoBadArgs(RecvmsgIntoTests._testRecvmsgIntoBadArgsc  r  r   c                 v   [        [        [        5      5      nU R                  R	                  S U4 5       5      u  p#pEU R                  U[        [        5      5        U R                  U[        [        5      5        U R                  XPR                  5        U R                  U/ 5        U R                  USS9  g )Nc              3   $   #    U  H  ov   M     g 7fr   r   r  s     r   r  <RecvmsgIntoTests.testRecvmsgIntoGenerator.<locals>.<genexpr>j  s     1Qr  Tr  )	rG  r  rP  r  r  rO  r  r*  r  r  s         r   testRecvmsgIntoGenerator)RecvmsgIntoTests.testRecvmsgIntoGeneratorf  s    C!'+~~'B'B( $S*in-  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgIntoGenerator*RecvmsgIntoTests._testRecvmsgIntoGeneratorq  r  r   c                    [         R                   " SS/[        [        5      -  5      nU R                  R	                  U/5      u  p#pEU R                  U[        [        5      5        U R                  UR                  5       [        5        U R                  XPR                  5        U R                  U/ 5        U R                  USS9  g )Nr(  r   Tr  )
r)  r  rP  r  r  rO  tobytesr  r*  r  r  s         r   testRecvmsgIntoArray%RecvmsgIntoTests.testRecvmsgIntoArrayt  s    kk#sSX~.'+~~'B'BC5'I$S*,  }}5"%4(r   c                 .    U R                  [        5        g r   r  r   s    r   _testRecvmsgIntoArray&RecvmsgIntoTests._testRecvmsgIntoArray~  r  r   c                    [        S5      n[        S5      n[        S5      nU R                  R                  U[        U5      SS U/5      u  pEpgU R	                  U[        S5      5        U R	                  U[        S5      5        U R	                  U[        S5      5        U R	                  U[        S	5      5        U R                  XpR                  5        U R	                  U/ 5        U R                  US
S9  g )Ns   ----s
   0123456789s   --------------r0  	      Mary had a little lambs   Marys
   01 had a 9s   little lamb---Tr  )	rG  r  r  
memoryviewrO  r  r  r*  r  )r   b1b2b3r  r  r  rd  s           r   testRecvmsgIntoScatter'RecvmsgIntoTests.testRecvmsgIntoScatter  s    w}%()'+~~'B'BB!$b)(+$%>!?@Yw/0Y}56Y'89:  }}5"%4(r   c                 &    U R                  S5        g )Nr  )r  r   s    r   _testRecvmsgIntoScatter(RecvmsgIntoTests._testRecvmsgIntoScatter  s    34r   r   N)r   r   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r  r  D  s*    )8	)))5r   r  c                       \ rS rSr SSKr\" S\R                  5      r\	" \
S5      S 5       r\	" \
S5      S 5       rS	rg! \ a    Sr N+f = f)
CmsgMacroTestsi  r   NiCMSG_LENc                    U R                   [        R                  " S5      -
  S-   n[        [	        S5      5      [        [	        US-
  U5      5      -   nU R                  [        R                  " S5      [        R                  " S5      R                  S-  5        U H]  n[        R                  " U5      nU R                  U[        R                  " S5      -
  U5        U R                  X@R                   5        M_     U R                  [        [        R                  S5        U R                  [        [        R                  U5        U R                  [        [        R                  [        R                  5        g )Nr   r     r   r0  r  )socklen_t_limitr6   r  listr  r  r)  itemsizerO  r  r@  r  rx   maxsize)r   toobigr7  nrets        r   testCMSG_LEN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  &:&:;	  	-"= 	-&A-#++Fr   rF  c                 l   U R                   [        R                  " S5      -
  S-   n[        [	        S5      5      [        [	        US-
  U5      5      -   n[        R                  " S5      nU R                  U[        R                  " S5      R                  S-  5        U H  n[        R                  " U5      nU R                  XS5        U R                  U[        R                  " U5      5        U R                  XT[        R                  " S5      -   5        U R                  XPR                   5        UnM     U R                  [        [        R                  S5        U R                  [        [        R                  U5        U R                  [        [        R                  [        R                  5        g )Nr   r
  r   r   r0  r  )r  r6   rF  r  r  r  r)  r  r  r  r  r@  r  rx   r  )r   r  r7  lastr  r  s         r   testCMSG_SPACECmsgMacroTests.testCMSG_SPACE  sA    %%(9(9!(<<q@eCj!Dv|V)D$EE  #4S!1!:!:Q!>?A##A&C##C.##C);<##CV__Q-?)?@  &:&:;D  	-):):B? 	-):):FC-):):CKKHr   r   )r   r   r   r   r  minr  r  r=  r  r6   r  r  r   r   r   r   r  r    sl    = j)*;*;<&*%G &G( &,'I (I7  %$%s   A   A
Ar  c                   f   \ rS rSrSrS rS rS rS rS r	S7S jr
S	 rS
 rS rS r\" \S5      S 5       r\R$                  S 5       rS rS r\R.                  " \S5      \R.                  " \S5      \" \S5      S 5       5       5       r\R$                  \R.                  " \S5      \R.                  " \S5      S 5       5       5       r\R.                  " \S5      \R.                  " \S5      \" \S5      S 5       5       5       r\R$                  \R.                  " \S5      \R.                  " \S5      S 5       5       5       rS r\R.                  " \S5      S 5       rS r S r!S r"\" \S5      S 5       r#\#R$                  S 5       r$S8S jr%\&" \'RP                  S :H  S!5      S" 5       r)\)R$                  S# 5       r*\&" \'RP                  S :H  S!5      S$ 5       r+\+R$                  S% 5       r,\&" \'RP                  S :H  S!5      S& 5       r-\-R$                  S' 5       r.\&" \'RP                  S :H  S!5      S( 5       r/\/R$                  S) 5       r0\&" \'RP                  S :H  S!5      S* 5       r1\1R$                  S+ 5       r2S8S, jr3\&" \'RP                  S :H  S!5      S- 5       r4\4R$                  S. 5       r5\&" \'RP                  S :H  S!5      S/ 5       r6\6R$                  S0 5       r7\&" \'RP                  S :H  S!5      S1 5       r8\8R$                  S2 5       r9\&" \'RP                  S :H  S!5      S3 5       r:\:R$                  S4 5       r;S5r<g6)9SCMRightsTesti  ic                 Z   / n[        U5       H  n[        R                  " 5       u  pEU R                  [        R
                  U5        U R                  [        R                  U5        [        R                  " U[        U5      R                  5       5        UR                  U5        M     U$ r   )r  rp  mkstempr   rH  r  rB   writer  r  append)r   r  fdsr   r9  r  s         r   newFDsSCMRightsTest.newFDs  su     qA'')HBOOBIIt,OOBHHb)HHRQ)JJrN  
r   c                     [        U5       Hi  u  p#[        R                  " US[        R                  5        U R	                  [        R
                  " US5      [        U5      R                  5       5        Mk     g )Nr   rK  )	enumeraterH  lseekSEEK_SETrO  rT  r  r  )r   r  r  r9  s       r   checkFDsSCMRightsTest.checkFDs  sM     s^EAHHRBKK(RWWR.A@ $r   c                 <    U R                  U R                  U5        g r   )r   closeRecvmsgFDsr  s     r   r  #SCMRightsTest.registerRecvmsgResult  s    ,,f5r   c           	      P   US    H  u  p#nU[         R                  :X  d  M  U[         R                  :X  d  M2  [        R                  " S5      nUR	                  US [        U5      [        U5      UR                  -  -
   5        U H  n[        R                  " U5        M     M     g )Nr   r   )	r6   rT  
SCM_RIGHTSr)  	frombytesr  r  rH  rB   )r   recvmsg_result
cmsg_level	cmsg_type	cmsg_datar  r9  s          r   r)  SCMRightsTest.closeRecvmsgFDs  s     1?q0A,J9f///!2!22kk#&i )II#i.3<<*GHJ KBHHRL  1Br   c                     U R                  U R                  [        /[        R                  [        R
                  [        R                  " SU R                  U5      5      4/5      [        [        5      5        g )Nr   )	rO  r  rP  r6   rT  r,  r)  r   r  )r   r  s     r   createAndSendFDsSCMRightsTest.createAndSendFDs  sb     	  ##)#4#4#)#4#4#(;;sDKKN#C#E "FG H	r   c                    Uu  pVpxU R                  U[        5        U R                  XR                  5        U R	                  US[
        R                  US9  U R                  U[        5        U R                  [        U5      U5        [        R                  " S5      n	U H  n
U R                  U
[        5        U
u  pnU R                  U[
        R                  5        U R                  U[
        R                  5        U R                  U[        5        U R                  [        U5      [         -  S5        U	R#                  U5        M     U R                  [        U	5      U5        U R%                  U	5        g )NTr  r  r  r   r   )rO  rP  r  r*  r  r6   r  r"  r  r  r  r)  tuplerT  r,  r  
SIZEOF_INTr-  r&  )r   numfdsr  maxcmsgsignoreflagsrQ  r  r  rd  r  itemr/  r0  r1  s                 r   checkRecvmsgFDsSCMRightsTest.checkRecvmsgFDs  s+    %+!ec"  }}54F4E4E* 	 	, 	gt,S\84kk#D!!$./3,J9Z):):;Y(9(9:!!)U3S^j8!<MM)$  	S6*cr   c           	      x    U R                  SU R                  U R                  [        [        5      S5      5        g )Nr   r  r>  r  r  r  rP  r   s    r   testFDPassSimpleSCMRightsTest.testFDPassSimple  .    Qt~~/23x!@ 	Ar   c                    U R                  U R                  [        /[        R                  [        R
                  [        R                  " SU R                  S5      5      R                  5       4/5      [        [        5      5        g )Nr   r   )
rO  r  rP  r6   rT  r,  r)  r   r  r  r   s    r   _testFDPassSimpleSCMRightsTest._testFDPassSimple#  sh      ####++c4;;q>2::<> ?@
 H	r   c           	      x    U R                  SU R                  U R                  [        [        5      S5      5        g )NrJ  r  rA  r   s    r   testMultipleFDPass SCMRightsTest.testMultipleFDPass,  rD  r   c                 &    U R                  S5        g NrJ  r4  r   s    r   _testMultipleFDPass!SCMRightsTest._testMultipleFDPass1      a r   rF  c                     U R                  SU R                  U R                  [        [        5      [
        R                  " S[        -  5      5      5        g rL  )r>  r  r  r  rP  r6   rF  r9  r   s    r   testFDPassCMSG_SPACE"SCMRightsTest.testFDPassCMSG_SPACE4  s@     	t~~dnnc#h$//J?A	Br   c                 &    U R                  S5        g rL  rM  r   s    r   _testFDPassCMSG_SPACE#SCMRightsTest._testFDPassCMSG_SPACE;      a r   c                     U R                  SU R                  U R                  [        [        5      [
        R                  " S[        -  5      5      [
        R                  S9  g )Nr   rJ  r<  )	r>  r  r  r  rP  r6   r  r9  r  r   s    r   testFDPassCMSG_LEN SCMRightsTest.testFDPassCMSG_LEN?  sK    Q!^^DNNCH,2OOA
N,KM
 *0):): 	 	<r   c                 &    U R                  S5        g r  rM  r   s    r   _testFDPassCMSG_LEN!SCMRightsTest._testFDPassCMSG_LENI  rP  r   zskipping, see issue #12958zskipping, see issue #22397c           	      v    U R                  SU R                  U R                  [        [        5      S5      SS9  g )Nr0  r  )r;  rA  r   s    r   testFDPassSeparate SCMRightsTest.testFDPassSeparateL  s4     	Q!^^DNNCHeL&' 	 	)r   c                 j   U R                  S5      u  pU R                  U R                  [        /[        R
                  [        R                  [        R                  " SU/5      4[        R
                  [        R                  [        R                  " SU/5      4/5      [        [        5      5        g Nr0  r   	r   rO  r  rP  r6   rT  r,  r)  r  r   fd0fd1s      r   _testFDPassSeparate!SCMRightsTest._testFDPassSeparateV       ;;q>  #&*;*;*0*;*;*/++cC5*A*C +1*;*;*0*;*;*/++cC5*A*C)D E H	r   c                    SnU R                  UU R                  U R                  [        [        5      [
        R                  " [        5      [
        R                  " [        U-  5      -   5      S[
        R                  S9  g )Nr0  )r;  r<  )
r>  r  r  r  rP  r6   rF  r9  r  r  )r   num_fdss     r   testFDPassSeparateMinSpace(SCMRightsTest.testFDPassSeparateMinSpaced  sj     W!^^DNNCH,2,=,=j,I,2OOJ<P,Q-RS '(V5F5F	 	 	Hr   c                 j   U R                  S5      u  pU R                  U R                  [        /[        R
                  [        R                  [        R                  " SU/5      4[        R
                  [        R                  [        R                  " SU/5      4/5      [        [        5      5        g rc  rd  re  s      r   _testFDPassSeparateMinSpace)SCMRightsTest._testFDPassSeparateMinSpaceq  rj  r   c                      U R                  U/U5      nU R                  U[        U5      5        g ! [         a<  nU R                  UR                  [        5        U R                  U/5      n S nAN]S nAff = fr   )r  r;   r"  r  r  rO  r  )r   rQ  r  r  r   s        r   sendAncillaryIfPossible%SCMRightsTest.sendAncillaryIfPossible  si    	1))3%9F
 	S*	  	1!!!''3/))3%0F	1s   1 
A72A22A7c           	          U R                  SU R                  U R                  [        [        5      S5      [
        R                  S9  g )Nr   r  rY  )r>  r  r  r  rP  r6   r  r   s    r   testFDPassEmptySCMRightsTest.testFDPassEmpty  s=     	Qt~~/23x!@)/):): 	 	<r   c                 p    U R                  [        [        R                  [        R                  S4/5        g Nr   )rs  rP  r6   rT  r,  r   s    r   _testFDPassEmptySCMRightsTest._testFDPassEmpty  s0    $$SF,=,=,2,=,=,/,1 +2 	3r   c                 
   U R                  U R                  [        [        5      S5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R                  US[        R                  S9  U R                  [        U5      S5        U He  u  pVnU R	                  U[        R                  5        U R	                  U[        R                  5        U R                  [        U5      [        5        Mg     g )Nr  Tr  r   )r  r  r  rP  rO  r  r*  r  r6   r  r  rT  r,  
assertLessr9  r   rQ  r  r  rd  r/  r0  r1  s           r   testFDPassPartialInt"SCMRightsTest.testFDPassPartialInt  s    $(NN4>>36s8U%D!ec"  }}540A0ABS\1-07,J9Z):):;Y(9(9:OOC	NJ7 18r   c           	          U R                  [        [        R                  [        R                  [
        R
                  " SU R                  /5      R                  5       S S 4/5        g )Nr   r  )rs  rP  r6   rT  r,  r)  badfdr  r   s    r   _testFDPassPartialInt#SCMRightsTest._testFDPassPartialInt  sS    $$kk#

|,446s;= >	?r   c           	         U R                  U R                  [        [        5      S5      u  pp4U R	                  U[        5        U R                  X@R                  5        U R                  US[        R                  S9  U R                  [        U5      S5        [        R                  " S5      nU H|  u  pgnU R	                  U[        R                  5        U R	                  U[        R                  5        UR                  US [        U5      [        U5      UR                  -  -
   5        M~     U R                  [        U5      S5        U R!                  U5        g )Nr  Tr  r0  r   )r  r  r  rP  rO  r  r*  r  r6   r  r  r)  rT  r,  r-  r  r&  )	r   rQ  r  r  rd  r  r/  r0  r1  s	            r   testFDPassPartialIntInMiddle*SCMRightsTest.testFDPassPartialIntInMiddle  s    %)NN4>>36s8U%D!ec"  }}540A0ABS\1-kk#07,J9Z):):;Y(9(9:MM) %E	Nc)ns||&CDF G 18
 	SXq)cr   c           
      d   U R                  S5      u  pU R                  [        [        R                  [        R
                  [        R                  " SXR                  /5      R                  5       S S 4[        R                  [        R
                  [        R                  " SU/5      4/5        g )Nr0  r   r  )	r   rs  rP  r6   rT  r,  r)  r  r  re  s      r   _testFDPassPartialIntInMiddle+SCMRightsTest._testFDPassPartialIntInMiddle  s    ;;q>$$kk#ZZ0199;CR@B kk#u%'(	)r   c                     Uu  p4pVU R                  U[        5        U R                  X`R                  5        U R                  U/ 5        U R	                  US[
        R                  US9  g )NTr  r  r  )rO  rP  r  r*  r  r6   r  )r   r  r<  rQ  r  r  rd  s          r   checkTruncatedHeader"SCMRightsTest.checkTruncatedHeader  s`     %+!ec"  }}5"%4&2C2C* 	 	,r   rs   z#80931c                     U R                  U R                  U R                  [        [        5      5      [
        R                  S9  g NrY  r  r  r  r  rP  r6   r  r   s    r   testCmsgTruncNoBufSize$SCMRightsTest.testCmsgTruncNoBufSize  s8     	!!$..S"J /5.?.?	 	" 	Ar   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTruncNoBufSize%SCMRightsTest._testCmsgTruncNoBufSize  rW  r   c                     U R                  U R                  U R                  [        [        5      S5      [
        R                  S9  g )Nr   rY  r  r   s    r   testCmsgTrunc0SCMRightsTest.testCmsgTrunc0  s8     	!!$..S1"M.4.?.? 	" 	Ar   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTrunc0SCMRightsTest._testCmsgTrunc0  rW  r   c                 v    U R                  U R                  U R                  [        [        5      S5      5        g r  )r  r  r  r  rP  r   s    r   testCmsgTrunc1SCMRightsTest.testCmsgTrunc1  s%    !!$..S1"MNr   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTrunc1SCMRightsTest._testCmsgTrunc1  rW  r   c                     U R                  U R                  U R                  [        [        5      [
        S-  5      5        g r  )r  r  r  r  rP  r9  r   s    r   testCmsgTrunc2IntSCMRightsTest.testCmsgTrunc2Int  s2    
 	!!$..S1;a#A 	Br   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTrunc2Int SCMRightsTest._testCmsgTrunc2Int  rW  r   c           	          U R                  U R                  U R                  [        [        5      [
        R                  " S5      S-
  5      5        g r  )r  r  r  r  rP  r6   r  r   s    r   testCmsgTruncLen0Minus1%SCMRightsTest.testCmsgTruncLen0Minus1  s:    !!$..S171Ca1G#I 	Jr   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTruncLen0Minus1&SCMRightsTest._testCmsgTruncLen0Minus1  rW  r   c                 P   [        5          U R                  U R                  [        [        5      U5      u  pEpgS S S 5        U R                  W[        5        U R                  WU R                  5        U R                  WS[        R                  S9  US:X  a  W/ :X  a  g U R                  [        W5      S5        US   u  pn
U R                  U[        R                  5        U R                  U	[        R                  5        U R                  [        U
5      U5        U R                  [        U
5      U5        [        R                  " S5      nUR!                  U
S [        U
5      [        U
5      UR"                  -  -
   5        U R%                  U5        g ! , (       d  f       GNd= f)NTr  r  r   r   r   )r~   r  r  r  rP  rO  r  r*  r  r6   r  rT  r,  r  r  r)  r-  r  r&  )r   ancbufmaxdatamindatarQ  r  r  rd  r/  r0  r1  r  s               r   checkTruncatedArray!SCMRightsTest.checkTruncatedArray  sM   
 ./(,t~~7:3x)I%C% 0 	c"  t}}54&2C2CDa<GrMWq)+21:(
yV%6%67F$5$56I8S^W5kk#i !AI#i.3<<"?@B 	Cc% 0/s   .F
F%c                 L    U R                  [        R                  " S5      SS9  g )Nr   r  r  r  r6   r  r   s    r   testCmsgTruncLen0SCMRightsTest.testCmsgTruncLen0(  s      (:A Fr   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTruncLen0 SCMRightsTest._testCmsgTruncLen0,  rW  r   c                 R    U R                  [        R                  " S5      S-   SS9  g )Nr   r   r  r  r   s    r   testCmsgTruncLen0Plus1$SCMRightsTest.testCmsgTruncLen0Plus10  s#      (:Q(> Jr   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTruncLen0Plus1%SCMRightsTest._testCmsgTruncLen0Plus14  rW  r   c                 \    U R                  [        R                  " [        5      [        S9  g )Nr  r  r6   r  r9  r   s    r   testCmsgTruncLen1SCMRightsTest.testCmsgTruncLen18  s#      
(C)3 	! 	5r   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTruncLen1 SCMRightsTest._testCmsgTruncLen1=  rW  r   c                 t    U R                  [        R                  " S[        -  5      S-
  S[        -  S-
  S9  g )Nr0  r   r  r  r   s    r   testCmsgTruncLen2Minus1%SCMRightsTest.testCmsgTruncLen2Minus1B  s5      J(G!(K*+j.A)= 	! 	?r   c                 &    U R                  S5        g r  rM  r   s    r   _testCmsgTruncLen2Minus1&SCMRightsTest._testCmsgTruncLen2Minus1G  rW  r   r   N)r   r   r   )=r   r   r   r   r  r   r&  r  r)  r4  r>  rB  rF  rI  rN  r  r6   rR  r   rU  rZ  r]  r!   r  r   r   r`  rh  rm  rp  rs  rv  rz  r  r  r  r  r  r/   rx   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    sC    E
A6
!6A
A
! &,'B (B %%! &!<! __X;<__S67&,') ( 8 =) ##__X;<__S67	 8 = $	 __X;<__S67&,'H ( 8 =H  ++__X;<__S67	 8 = ,		+ __X;<< =<3
8? &,' ($ "--	) .	), CLLH4h?A @A ''! (! CLLH4h?A @A
 !  ! CLLH4h?O @O !  ! CLLH4h?B @B ""! #! CLLH4h?J @J ((! )!2 CLLH4h?G @G ""! #! CLLH4h?K @K ''! (! CLLH4h?5 @5 ""! #! CLLH4h?? @? ((! )!r   r  c            	          \ rS rSrSrSrS rS5S jr\" \	SS5      S 5       r
\
R                  S	 5       r\" \	S
SS5      S 5       r\R                  S 5       r\" \	R                  S5      \" \	SS5      S 5       5       r\R                  S 5       r  S5S jr\" \	SSSS5      S 5       r\R                  S 5       r\" \	S
SSSS5      S 5       r\R                  S 5       r\" \	R                  S5      \" \	S
SSSS5      S 5       5       r\R                  S 5       r\" \	R                  S5      \" \	S
SSSS5      S 5       5       r\R                  S 5       rS6S jr\" \	SS5      S 5       r\R                  S 5       r\" \	SS5      S 5       r\R                  S 5       r\" \	SS5      S  5       r\R                  S! 5       r \" \	SS5      S" 5       r!\!R                  S# 5       r"\" \	SS5      S$ 5       r#\#R                  S% 5       r$\" \	SS5      S& 5       r%\%R                  S' 5       r&S6S( jr'\" \	S
SSSS5      S) 5       r(\(R                  S* 5       r)\" \	S
SSSS5      S+ 5       r*\*R                  S, 5       r+\" \	S
SSSS5      S- 5       r,\,R                  S. 5       r-\" \	S
SSSS5      S/ 5       r.\.R                  S0 5       r/\" \	S
SSSS5      S1 5       r0\0R                  S2 5       r1S3r2g4)7RFC3542AncillaryTestiL  r0  r  c                 R    0 nU H  u  p4nU R                  X44U5        XRX44'   M      U$ r   )r,  )r   r  dr/  r0  r1  s         r   ancillaryMapping%RFC3542AncillaryTest.ancillaryMapping]  s=     07,J9j4a8)2z%& 18 r   c                    U R                   R                  [        R                  [        R                  S5        U R
                  R                  5         U R                  U R                   [        [        5      U5      u  pEpgU R                  U[        5        U R                  XpR                  5        U R                  US[        R                  US9  U R                  [        U5      S5        U R                  US   [         5        US   u  pn
U R                  U[        R                  5        U R                  U	[        R"                  5        U R                  U
[$        5        U R                  [        U
5      [&        5        [(        R(                  " S5      nUR+                  U
5        U R-                  US   S5        U R/                  US   U5        g )Nr   Tr7  r   r   )r  rp  r6   r[  r  r  r   r  r  rP  rO  r  r*  r  r  r"  r8  r  r  r9  r)  r-  r  r  )r   
ancbufsizemaxhopr<  rQ  r  r  rd  r/  r0  r1  r"  s               r   checkHopLimit"RFC3542AncillaryTest.checkHopLimitg  sj   
 	!!&"5"5"(":":A	?$(NN4>>36s8Z%I!e 	c"  }}54F4E4E* 	 	, 	Wq)gaj%0+21:(
yV%8%89F$8$89i/Y4KK	I!a(QqT6*r   r  r  c                 "    U R                  SS9  g Nr  r  )r  r   s    r   testRecvHopLimit%RFC3542AncillaryTest.testRecvHopLimit  s     	e,r   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r  r   r  r  rP  r   s    r   _testRecvHopLimit&RFC3542AncillaryTest._testRecvHopLimit  s6    
 	,,T5F5F,GH#r   rF  c                 R    U R                  [        R                  " [        5      S9  g )Nr  )r  r6   rF  r9  r   s    r   testRecvHopLimitCMSG_SPACE/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACE  s      	f&7&7
&CDr   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testRecvHopLimitCMSG_SPACE0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACE  4    ,,T5F5F,GH#r   r  c                 8    U R                  SU R                  S9  g Nr  )r  r  )r  	hop_limitr   s    r   testSetHopLimit$RFC3542AncillaryTest.testSetHopLimit  s    
 	eDNNCr   c                 P   U R                  U R                  R                  U R                  S95        U R	                  U R                  [        /[        R                  [        R                  [        R                  " SU R                  /5      4/5      [        [        5      5        g Nrg  r   )r  r  r   r  rO  r  rP  r6   r[  r  r)  r  r  r   s    r   _testSetHopLimit%RFC3542AncillaryTest._testSetHopLimit  s    ,,T5F5F,GH  ##)#6#68L8L#(;;sT^^4D#E#G "HI H		r   c                    U R                   R                  [        R                  [        R                  S5        U R                   R                  [        R                  [        R
                  S5        U R                  R                  5         U R                  U R                   [        [        5      U5      u  pEpgU R                  U[        5        U R                  XpR                  5        U R                  US[        R                  US9  U R                  [        U5      S5        U R!                  U5      nU[        R                  [        R"                  4   n	U R                  [        U	5      [$        5        [&        R&                  " S5      n
U
R)                  U	5        U R+                  U
S   S5        U R-                  U
S   S5        U[        R                  [        R.                  4   nU R                  [        U5      [$        5        [&        R&                  " S5      n
U
R)                  U5        U R+                  U
S   S5        U R-                  U
S   U5        g )Nr   Tr7  r0  r   r   r  )r  rp  r6   r[  r  r  r  r   r  r  rP  rO  r  r*  r  r  r  ry  r9  r)  r-  r  r  r  )r   r  r  r<  rQ  r  r  rd  ancmaptcdatar"  hldatas               r   checkTrafficClassAndHopLimit1RFC3542AncillaryTest.checkTrafficClassAndHopLimit  s    	!!&"5"5"(":":A	?!!&"5"5"("8"8!	=$(NN4>>36s8Z%I!e 	c"  }}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  ry  c                 "    U R                  SS9  g r  )r  r   s    r   testRecvTrafficClassAndHopLimit4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimit  s     	))U);r   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r    _testRecvTrafficClassAndHopLimit5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimit  r  r   c                 X    U R                  [        R                  " [        5      S-  S9  g Nr0  r  )r  r6   rF  r9  r   s    r   )testRecvTrafficClassAndHopLimitCMSG_SPACE>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACE  s*    
 	))((4q8 	* 	:r   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   *_testRecvTrafficClassAndHopLimitCMSG_SPACE?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACE  r  r   c                 8    U R                  SU R                  S9  g r  r  r  r   s    r   testSetTrafficClassAndHopLimit3RFC3542AncillaryTest.testSetTrafficClassAndHopLimit  s!     	))U15 	* 	Ar   c                    U R                  U R                  R                  U R                  S95        U R	                  U R                  [        /[        R                  [        R                  [        R                  " SU R                  /5      4[        R                  [        R                  [        R                  " SU R                  /5      4/5      [        [        5      5        g r  )r  r  r   r  rO  r  rP  r6   r[  ry  r)  traffic_classr  r  r  r   s    r   _testSetTrafficClassAndHopLimit4RFC3542AncillaryTest._testSetTrafficClassAndHopLimit  s    ,,T5F5F,GH  ##)#6#68J8J#(;;sT5G5G4H#I#K#)#6#68L8L#(;;sT^^4D#E#G"HI
 H	r   c                 8    U R                  SU R                  S9  g r  r
	  r   s    r   testOddCmsgSize$RFC3542AncillaryTest.testOddCmsgSize  s!     	))U15 	* 	Ar   c                    U R                  U R                  R                  U R                  S95         U R	                  [
        /[        R                  [        R                  [        R                  " SU R                  /5      R                  5       S-   4[        R                  [        R                  [        R                  " SU R                  /5      4/5      ng ! [         a  nU R                  UR                   ["        5        U R	                  [
        /[        R                  [        R                  [        R                  " SU R                  /5      4[        R                  [        R                  [        R                  " SU R                  /5      4/5      nU R%                  U['        [
        5      5         S nAg S nAff = f)Nrg  r   r  )r  r  r   r  r  rP  r6   r[  ry  r)  r	  r  r  r  r;   r"  r  r  rO  r  )r   r  r   s      r   _testOddCmsgSize%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                    U R                   R                  [        R                  [        R                  S5        U R
                  R                  5         Uc  SOU4nU R                  " U R                   [        [        5      /UQ76 u  pEpgU R                  U[        5        U R                  XpR                  5        U R                  U/ 5        U R                  US[        R                  US9  g )Nr   r   Tr  )r  rp  r6   r[  r  r  r   r  r  rP  rO  r  r*  r  r  )r   r  r<  r#   rQ  r  r  rd  s           r   checkHopLimitTruncatedHeader1RFC3542AncillaryTest.checkHopLimitTruncatedHeader  s     	!!&"5"5"(":":A	?'rj]$(NN4>>36s8%D>B%D!e 	c"  }}5"%4&2C2C* 	 	,r   c                 @    U R                  S [        R                  S9  g )Nr  r<  r	  r6   r  r   s    r   r  +RFC3542AncillaryTest.testCmsgTruncNoBufSize3  s%     	))T
 7=6G6G 	* 	Ir   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   r  ,RFC3542AncillaryTest._testCmsgTruncNoBufSize>  r  r   c                 @    U R                  S[        R                  S9  g )Nr   r	  r	  r   s    r   testSingleCmsgTrunc0)RFC3542AncillaryTest.testSingleCmsgTrunc0C  s#     	))Q6<6G6G 	* 	Ir   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSingleCmsgTrunc0*RFC3542AncillaryTest._testSingleCmsgTrunc0J  r  r   c                 "    U R                  SS9  g )Nr   r  )r	  r   s    r   testSingleCmsgTrunc1)RFC3542AncillaryTest.testSingleCmsgTrunc1R  s    ))Q)7r   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSingleCmsgTrunc1*RFC3542AncillaryTest._testSingleCmsgTrunc1V  r  r   c                 0    U R                  S[        -  S9  g r	  )r	  r9  r   s    r   testSingleCmsgTrunc2Int,RFC3542AncillaryTest.testSingleCmsgTrunc2Int[  s    ))Q^)Dr   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSingleCmsgTrunc2Int-RFC3542AncillaryTest._testSingleCmsgTrunc2Int_  r  r   c                 P    U R                  [        R                  " S5      S-
  S9  g )Nr   r   r  )r	  r6   r  r   s    r   testSingleCmsgTruncLen0Minus12RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1d  s!    ))V__Q5G!5K)Lr   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSingleCmsgTruncLen0Minus13RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1h  r  r   c                 8   U R                   R                  [        R                  [        R                  S5        U R
                  R                  5         [        5          U R                  U R                   [        [        5      [        R                  " [        5      S-
  5      u  pp4S S S 5        U R                  W[        5        U R                  WU R                  5        U R!                  WS[        R"                  S9  U R%                  [        W5      S5        U(       ah  US   u  pVnU R                  U[        R                  5        U R                  U[        R&                  5        U R)                  [        U5      [        5        g g ! , (       d  f       N= f)Nr   Tr  r   )r  rp  r6   r[  r  r  r   r~   r  r  rP  r  r9  rO  r  r*  r  r  r  r  r}  r~  s           r   testSingleCmsgTruncInData.RFC3542AncillaryTest.testSingleCmsgTruncInDatam  s$   
 	!!&"5"5"(":":A	?-/(,C&//**E*I)K%C% 0 	c"  t}}54&2C2CDS\1-/6qz,J9Z)<)<=Y(<(<=OOC	NJ7	  0/s   A	F
Fc                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSingleCmsgTruncInData/RFC3542AncillaryTest._testSingleCmsgTruncInData  r  r   c                    U R                   R                  [        R                  [        R                  S5        U R                   R                  [        R                  [        R
                  S5        U R                  R                  5         U R                  U R                   [        [        5      U5      u  p4pVU R                  U[        5        U R                  X`R                  5        U R                  US[        R                  US9  U R                  [        U5      S5        US   u  pxn	U R                  U[        R                  5        U R!                  U[        R"                  [        R$                  15        U R                  [        U	5      [&        5        [(        R(                  " S5      n
U
R+                  U	5        U R-                  U
S   S5        U R/                  U
S   S5        g )Nr   Tr  r   r   r  )r  rp  r6   r[  r  r  r  r   r  r  rP  rO  r  r*  r  r  r*  ry  r  r9  r)  r-  r  r  )r   r  r<  rQ  r  r  rd  r/  r0  r1  r"  s              r   checkTruncatedSecondHeader/RFC3542AncillaryTest.checkTruncatedSecondHeader  st    	!!&"5"5"(":":A	?!!&"5"5"("8"8!	=$(NN4>>36s8Z%I!e 	c"  }}54&2C2C* 	 	, 	Wq)+21:(
yV%8%89i&"4"4f6J6J!KLY4KK	I!a(QqT3'r   c                 p    U R                  [        R                  " [        5      [        R                  S9  g r  )r?	  r6   rF  r9  r  r   s    r   testSecondCmsgTrunc0)RFC3542AncillaryTest.testSecondCmsgTrunc0  s.     	''(9(9*(E4:4E4E 	( 	Gr   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSecondCmsgTrunc0*RFC3542AncillaryTest._testSecondCmsgTrunc0  r  r   c                 \    U R                  [        R                  " [        5      S-   5        g r  r?	  r6   rF  r9  r   s    r   testSecondCmsgTrunc1)RFC3542AncillaryTest.testSecondCmsgTrunc1  s"     	''(9(9*(E(IJr   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSecondCmsgTrunc1*RFC3542AncillaryTest._testSecondCmsgTrunc1  r  r   c                 j    U R                  [        R                  " [        5      S[        -  -   5        g r  rH	  r   s    r   testSecondCmsgTrunc2Int,RFC3542AncillaryTest.testSecondCmsgTrunc2Int  s+     	''(9(9*(E()J)7 	8r   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSecondCmsgTrunc2Int-RFC3542AncillaryTest._testSecondCmsgTrunc2Int  r  r   c                     U R                  [        R                  " [        5      [        R                  " S5      -   S-
  5        g r  )r?	  r6   rF  r9  r  r   s    r   testSecondCmsgTruncLen0Minus12RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1  s9     	''(9(9*(E(.(:);=>)? 	@r   c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSecondCmsgTruncLen0Minus13RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1  r  r   c           	      r   U R                   R                  [        R                  [        R                  S5        U R                   R                  [        R                  [        R
                  S5        U R                  R                  5         [        5          U R                  U R                   [        [        5      [        R                  " [        5      [        R                  " [        5      -   S-
  5      u  pp4S S S 5        U R                  W[        5        U R!                  WU R"                  5        U R%                  WS[        R&                  S9  [        R(                  [        R*                  1nWR-                  S5      u  pgnU R                  U[        R                  5        UR/                  U5        U R                  [        U5      [        5        [0        R0                  " S5      n	U	R3                  U5        U R5                  U	S   S5        U R7                  U	S   S5        U(       ad  UR-                  S5      u  pgnU R                  U[        R                  5        UR/                  U5        U R9                  [        U5      [        5        U R                  U/ 5        g ! , (       d  f       GN= f)Nr   Tr  r   r   r  )r  rp  r6   r[  r  r  r  r   r~   r  r  rP  rF  r9  r  rO  r  r*  r  r  ry  r  popremover)  r-  r  r  r}  )
r   rQ  r  r  rd  
cmsg_typesr/  r0  r1  r"  s
             r   testSecondCmsgTruncInData.RFC3542AncillaryTest.testSecondCmsgTruncInData  s   
 	!!&"5"5"(":":A	?!!&"5"5"("8"8!	=-/(,C!!*-
0KKaO)Q%C% 0
 	c"  t}}54&2C2CD((&*>*>?
+2;;q>(
yV%8%89)$Y4KK	I!a(QqT3'/6{{1~,J9Z)<)<=i(OOC	NJ7"%5 0/s   A$J''
J6c                     U R                  U R                  R                  U R                  S95        U R	                  [
        5        g r  r  r   s    r   _testSecondCmsgTruncInData/RFC3542AncillaryTest._testSecondCmsgTruncInData  r  r   r   N)r  r   r  )3r   r   r   r   r  r	  r  r  r  r6   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	  r3	  r6	  r9	  r<	  r?	  rB	  rE	  rI	  rL	  rO	  rR	  rU	  rX	  r^	  ra	  r   r   r   r   r  r  L  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"&H ** +r   r  c                       \ rS rSrSrg)SendrecvmsgUDPTestBasei  r   Nr   r   r   r   r   r   r   r   rd	  rd	         	r   rd	  r  c                       \ rS rSrSrg)SendmsgUDPTesti  r   Nre	  r   r   r   rh	  rh	        r   rh	  r  c                       \ rS rSrSrg)RecvmsgUDPTesti  r   Nre	  r   r   r   rk	  rk	    ri	  r   rk	  r  c                       \ rS rSrSrg)RecvmsgIntoUDPTesti  r   Nre	  r   r   r   rm	  rm	    ri	  r   rm	  c                       \ rS rSrS rSrg)SendrecvmsgUDP6TestBasei  c                 4    U R                  US S US S 5        g r  r  r  s      r   r  +SendrecvmsgUDP6TestBase.checkRecvmsgAddress        	sU3BZ0r   r   Nr   r   r   r   r  r   r   r   r   ro	  ro	    s    1r   ro	  r  r  rI   c                       \ rS rSrSrg)SendmsgUDP6Testi  r   Nre	  r   r   r   ru	  ru	         	r   ru	  c                       \ rS rSrSrg)RecvmsgUDP6Testi#  r   Nre	  r   r   r   rx	  rx	  #  rv	  r   rx	  c                       \ rS rSrSrg)RecvmsgIntoUDP6Testi)  r   Nre	  r   r   r   rz	  rz	  )  rv	  r   rz	  r[  c                       \ rS rSrSrg)RecvmsgRFC3542AncillaryUDP6Testi/  r   Nre	  r   r   r   r|	  r|	  /       	r   r|	  c                       \ rS rSrSrg)#RecvmsgIntoRFC3542AncillaryUDP6Testi7  r   Nre	  r   r   r   r	  r	  7  s     	r   r	  c                       \ rS rSrSrg)SendrecvmsgUDPLITETestBaseiA  r   Nre	  r   r   r   r	  r	  A  s    
 	r   r	  c                       \ rS rSrSrg)SendmsgUDPLITETestiH  r   Nre	  r   r   r   r	  r	  H  rv	  r   r	  c                       \ rS rSrSrg)RecvmsgUDPLITETestiN  r   Nre	  r   r   r   r	  r	  N  rv	  r   r	  c                       \ rS rSrSrg)RecvmsgIntoUDPLITETestiT  r   Nre	  r   r   r   r	  r	  T  rv	  r   r	  c                       \ rS rSrS rSrg)SendrecvmsgUDPLITE6TestBasei[  c                 4    U R                  US S US S 5        g r  r  r  s      r   r  /SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressa  rr	  r   r   Nrs	  r   r   r   r	  r	  [  s    1r   r	  c                       \ rS rSrSrg)SendmsgUDPLITE6Testif  r   Nre	  r   r   r   r	  r	  f  r}	  r   r	  c                       \ rS rSrSrg)RecvmsgUDPLITE6Testin  r   Nre	  r   r   r   r	  r	  n  r}	  r   r	  c                       \ rS rSrSrg)RecvmsgIntoUDPLITE6Testiv  r   Nre	  r   r   r   r	  r	  v  r}	  r   r	  c                       \ rS rSrSrg)#RecvmsgRFC3542AncillaryUDPLITE6Testi~  r   Nre	  r   r   r   r	  r	  ~  s     	r   r	  c                       \ rS rSrSrg)'RecvmsgIntoRFC3542AncillaryUDPLITE6Testi  r   Nre	  r   r   r   r	  r	    s     	r   r	  c                       \ rS rSrSrg)SendrecvmsgTCPTestBasei  r   Nre	  r   r   r   r	  r	    ri	  r   r	  c                       \ rS rSrSrg)SendmsgTCPTesti  r   Nre	  r   r   r   r	  r	    ri	  r   r	  c                       \ rS rSrSrg)RecvmsgTCPTesti  r   Nre	  r   r   r   r	  r	    rf	  r   r	  c                       \ rS rSrSrg)RecvmsgIntoTCPTesti  r   Nre	  r   r   r   r	  r	    rf	  r   r	  c                       \ rS rSrSrg)SendrecvmsgSCTPStreamTestBasei  r   Nre	  r   r   r   r	  r	    rf	  r   r	  z6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr   ra   r  c                       \ rS rSrSrg)SendmsgSCTPStreamTesti  r   Nre	  r   r   r   r	  r	    rv	  r   r	  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )RecvmsgSCTPStreamTesti  c                    >  [         [        U ]  5         g ! [         a:  nUR                  [        R
                  :w  a  e U R                  S5         S nAg S nAff = fNz4sporadic ENOTCONN (kernel issue?) - see issue #13876)r  r	  r  r;   r  ENOTCONNr   r   r   r  s     r   r  $RecvmsgSCTPStreamTest.testRecvmsgEOF  sL    	R'=? 	Rww%..(MMPQQ	R    
A0AAr   r   r   r   r   r  r   r  r  s   @r   r	  r	        R Rr   r	  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )RecvmsgIntoSCTPStreamTesti  c                    >  [         [        U ]  5         g ! [         a:  nUR                  [        R
                  :w  a  e U R                  S5         S nAg S nAff = fr	  )r  r	  r  r;   r  r	  r   r	  s     r   r  (RecvmsgIntoSCTPStreamTest.testRecvmsgEOF  sL    	R+TAC 	Rww%..(MMPQQ	Rr	  r   r	  r  s   @r   r	  r	    r	  r   r	  c                       \ rS rSrSrg)SendrecvmsgUnixStreamTestBasei  r   Nre	  r   r   r   r	  r	    ri	  r   r	  r  c                       \ rS rSrSrg)SendmsgUnixStreamTesti  r   Nre	  r   r   r   r	  r	    rf	  r   r	  c                       \ rS rSrSrg)RecvmsgUnixStreamTesti  r   Nre	  r   r   r   r	  r	    rv	  r   r	  c                       \ rS rSrSrg)RecvmsgIntoUnixStreamTesti  r   Nre	  r   r   r   r	  r	    rv	  r   r	  rT  r,  c                       \ rS rSrSrg)RecvmsgSCMRightsStreamTesti  r   Nre	  r   r   r   r	  r	    rf	  r   r	  c                       \ rS rSrSrg)RecvmsgIntoSCMRightsStreamTesti  r   Nre	  r   r   r   r	  r	    rv	  r   r	  c                   |   ^  \ rS rSrU 4S jr\R                  r\" \	S5      (       a  Sr
S rSrU =r$ Sr
S rSrU =r$ )	InterruptedTimeoutBasei  c                    > [         TU ]  5         [        R                  " [        R                  S 5      nU R	                  [        R                  [        R                  U5        g )Nc                     SS-  $ r  r   )signumr  s     r   r   .InterruptedTimeoutBase.setUp.<locals>.<lambda>  s    Ar   )r  r   r  r  r   )r   orig_alrm_handlerr  s     r   r   InterruptedTimeoutBase.setUp  s>    "MM&..*EGv~~7HIr   	setitimerg?c                 N    [         R                  " [         R                  U5        g r   )r  r	  ITIMER_REALr   secondss     r   setAlarmInterruptedTimeoutBase.setAlarm	  s    V//9r   r0  c                 0    [         R                  " U5        g r   )r  r  r	  s     r   r	  r	    s    LL!r   r   )r   r   r   r   r   r   r<  rn   r5   r  
alarm_timer	  r   r  r  s   @r   r	  r	    sE    
J &&G
 v{##
	: 	: 
	" 	"r   r	  siginterruptr  r	  z+Don't have signal.alarm or signal.setitimerc                      ^  \ rS rSrU 4S jrS rS rS rS rS r	\
" \R                  S5      S	 5       r\
" \R                  S
5      S 5       rSrU =r$ )InterruptedRecvTimeoutTesti  c                 l   > [         TU ]  5         U R                  R                  U R                  5        g r   )r  r   r   r;  rn   r  s    r   r    InterruptedRecvTimeoutTest.setUp  s"    		T\\*r   c                      U R                  U R                  5        U R                  [        5       nU" U0 UD6  S S S 5        U R                  S5        g ! , (       d  f       N = f! U R                  S5        f = fr'  )r	  r	  r@  r  r   r  r#   r  rN  s        r   checkInterruptedRecv/InterruptedRecvTimeoutTest.checkInterruptedRecv   s`    	MM$//*""#45d%f% 6 MM! 65 MM!s!   0A& 	AA& 
A#A& &A9c                 P    U R                  U R                  R                  S5        g rJ  )r	  r   rL  r   s    r   testInterruptedRecvTimeout5InterruptedRecvTimeoutTest.testInterruptedRecvTimeout*  s    !!$))..$7r   c                 b    U R                  U R                  R                  [        S5      5        g rJ  )r	  r   	recv_intorG  r   s    r   testInterruptedRecvIntoTimeout9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeout-  s     !!$))"5"5yGr   c                 P    U R                  U R                  R                  S5        g rJ  )r	  r   rn  r   s    r   testInterruptedRecvfromTimeout9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeout0  s    !!$))"4"4d;r   c                 b    U R                  U R                  R                  [        S5      5        g rJ  )r	  r   ro  rG  r   s    r   "testInterruptedRecvfromIntoTimeout=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeout3  s     !!$))"9"99T?Kr   r  c                 P    U R                  U R                  R                  S5        g rJ  )r	  r   r  r   s    r   testInterruptedRecvmsgTimeout8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeout6  s    !!$))"3"3T:r   r  c                 d    U R                  U R                  R                  [        S5      /5        g rJ  )r	  r   r  rG  r   s    r   !testInterruptedRecvmsgIntoTimeout<InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout:  s#    !!$))"8"89T?:KLr   r   )r   r   r   r   r   r	  r	  r	  r	  r	  r  r6   r	  r	  r   r  r  s   @r   r	  r	    sc    +8H<L &--+; ,; &--0M 1Mr   r	  c                      ^  \ rS rSrU 4S jrS rS r\R                  " SS5      S 5       r	\R                  " SS5      S 5       r
\R                  " SS5      \" \R                  S	5      S
 5       5       rSrU =r$ )InterruptedSendTimeoutTestiA  c                   > [         TU ]  5         U R                  5       U l        U R	                  U R                  R
                  5        [        R                  " U R                  S9nUR                  5         U R                  R                  5       u  U l        nU R	                  U R                  R
                  5        UR                  5         U R                  R                  U R                  5        g )N)target)r  r   r  ri  r   rB   r   Thread	doConnectstartr   r=  rb  r  r;  rn   )r   
cli_threadrd  r  s      r   r    InterruptedSendTimeoutTest.setUpI  s    ),,- %%T^^<
"ii..0t++,!!$,,/r   c                 N    U R                   R                  U R                  5        g r   )ri  rG  r  r   s    r   r	  $InterruptedSendTimeoutTest.doConnectW  s    t~~.r   c                      U R                  [        5       n U R                  U R                  5        U" U0 UD6  M%  ! , (       d  f       O= fU R                  S5        g ! U R                  S5        f = fr'  )r@  r  r	  r	  r	  s        r   checkInterruptedSend/InterruptedSendTimeoutTest.checkInterruptedSendZ  sa    	""#45MM$//2$)&)  65
 MM!DMM!s   A! '>
AA! !A4r  r  c                 P    U R                  U R                  R                  S5        g ru  )r	  ri  rW  r   s    r   testInterruptedSendTimeout5InterruptedSendTimeoutTest.testInterruptedSendTimeoutg  s    !!$.."5"5x@r   c                 f    U R                  U R                  R                  SU R                  5        g ru  )r	  ri  rK  r  r   s    r   testInterruptedSendtoTimeout7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutk  s'     	!!$.."7"7"&..	2r   r  c                 R    U R                  U R                  R                  S/5        g ru  )r	  ri  r  r   s    r   testInterruptedSendmsgTimeout8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeoutt  s      	!!$.."8"88*Er   rm  )r   r   r   r   r   r	  r	  r   requires_mac_verr	  r	  r  r6   r	  r   r  r  s   @r   r	  r	  A  s    0/
 b!$A %A b!$2 %2 b!$&--+F , %Fr   r	  c                        \ rS rSrS rS rSrg)TCPCloserTestiz  c                 T   U R                   R                  5       u  pUR                  5         U R                  n[        R                  " U// / S5      u  pEnU R                  XC/5        U R                  UR                  S5      S5        UR                  5         UR                  5         g )N      ?r   r   )r   r=  rB   r   r  rO  rL  )r   r>  rd  sdrT  r  r  s          r   	testCloseTCPCloserTest.testClose|  s    YY%%'


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



r   c                     U R                   R                  [        U R                  45        [        R
                  " S5        g Nr
  )r   rG  r(  r   rC  rD  r   s    r   
_testCloseTCPCloserTest._testClose  s(    $		*+

3r   r   N)r   r   r   r   r
  r

  r   r   r   r   r
  r
  z  s    r   r
  c                   H    \ rS rSrSS jrS rS rS rS rS r	S r
S	 rS
rg)BasicSocketPairTesti  c                 *    [         R                  XS9  g r   )ro  r   r   s     r   r   BasicSocketPairTest.__init__  s    <r   c                    U R                  U[        R                  5        [        [        S5      (       a+  U R                  UR                  [        R
                  5        O*U R                  UR                  [        R                  5        U R                  UR                  [        R                  5        U R                  UR                  S5        g )Nr  r   )
r"  r6   r5   rO  r2  r  r   r  ra   r3  r  s     r   _check_defaults#BasicSocketPairTest._check_defaults  s    dFMM269%%T[[&..9T[[&..9F$6$67Q'r   c                 :    U R                  U R                  5        g r   )r
  r   r   s    r   _testDefaults!BasicSocketPairTest._testDefaults  s    TXX&r   c                 :    U R                  U R                  5        g r   )r
  r   r   s    r   testDefaults BasicSocketPairTest.testDefaults  s    TYY'r   c                 f    U R                   R                  S5      nU R                  U[        5        g rJ  r   rL  rO  rP  rC  s     r   r4  BasicSocketPairTest.testRecv  $    iinnT"c"r   c                 B    U R                   R                  [        5        g r   r   rW  rP  r   s    r   r8  BasicSocketPairTest._testRecv      cr   c                 B    U R                   R                  [        5        g r   r   rW  rP  r   s    r   testSendBasicSocketPairTest.testSend      		sr   c                 f    U R                   R                  S5      nU R                  U[        5        g rJ  r   rL  rO  rP  rC  s     r   	_testSendBasicSocketPairTest._testSend  $    hhmmD!c"r   r   Nr  )r   r   r   r   r   r
  r
  r
  r4  r8  r#
  r(
  r   r   r   r   r
  r
    s*    =('(##r   r
  c                   $  ^  \ rS rSrS rU 4S jrU 4S jrS rS rS r	S r
S	 rS
 r\R                  " \" \S5      (       + =(       d    \" \S5      (       + S5      \R"                  " \R&                  S5      S 5       5       rS rS rS rSrU =r$ )PurePythonSocketPairTesti  c                      [         R                  " [         R                  5      $ ! [         a'    [         R                  " [         R                  5      s $ f = fr   )r6   rs  r  r;   r   r   s    r   rs  #PurePythonSocketPairTest.socketpair  s@    	5$$V__55 	5$$V^^44	5s   #& .AAc                    > [        [        S5      (       a/  [        R                  U l        [        R
                  [        l        OS U l        [        TU ]  5         g )Nrs  )r5   r  r6   rs  _orig_sp_fallback_socketpairr  r   r  s    r   r   PurePythonSocketPairTest.setUp  s?    7L))"--DM !' ; ;F !DMr   c                 h   > [         TU ]  5         U R                  b  U R                  [        l        g g r   )r  r   r0
  r6   rs  r  s    r   r   !PurePythonSocketPairTest.tearDown  s)    ==$ $F %r   c                 f    U R                   R                  S5      nU R                  U[        5        g rJ  r
  rC  s     r   	test_recv"PurePythonSocketPairTest.test_recv  r
  r   c                 B    U R                   R                  [        5        g r   r
  r   s    r   
_test_recv#PurePythonSocketPairTest._test_recv  r 
  r   c                 B    U R                   R                  [        5        g r   r"
  r   s    r   	test_send"PurePythonSocketPairTest.test_send  r%
  r   c                 f    U R                   R                  S5      nU R                  U[        5        g rJ  r'
  rC  s     r   
_test_send#PurePythonSocketPairTest._test_send  r*
  r   c                     [         R                  " [         R                  5      u  pUR                  5         UR                  5         g r   )r6   rs  r   rB   r   r   r  s      r   	test_ipv4"PurePythonSocketPairTest.test_ipv4  s*    $$V^^4				r   c                     g r   r   r   s    r   
_test_ipv4#PurePythonSocketPairTest._test_ipv4  r{  r   r[  IPV6_V6ONLY IPV6_V6ONLY option not supportedrv  c                     [         R                  " [         R                  5      u  pUR                  5         UR                  5         g r   )r6   rs  r  rB   rB
  s      r   	test_ipv6"PurePythonSocketPairTest.test_ipv6  s,    
 $$V__5				r   c                     g r   r   r   s    r   
_test_ipv6#PurePythonSocketPairTest._test_ipv6  r{  r   c                   ^^ [         R                   R                  mS mUU4S jnS =p# U[         R                   l        U R                  [        5         [         R                  " 5       u  p#S S S 5        T[         R                   l        T(       a  TR                  5         U(       a  UR                  5         U(       a  UR                  5         g g ! , (       d  f       Nj= f! T[         R                   l        T(       a  TR                  5         U(       a  UR                  5         U(       a  UR                  5         f f = f)Nc                   > T" U 5      nTcj  [         R                   " [         R                  [         R                  5      mTR                  S5         TR	                  US S 5        TR                  S5        U$ ! [
        [        4 a     N%f = f)NFr0  T)r6   r   ra   r+  rG  BlockingIOErrorInterruptedError)r   rM  inject_sockorig_getsocknames     r   inject_getsocketname[PurePythonSocketPairTest.test_injected_authentication_failure.<locals>.inject_getsocketname  s    '-H "$mmFNNF<N<NO''.''!5 ''-O ()9: s   A9 9BB)r6   r)  r@  r;   rs  rB   )r   rV
  sock1sock2rT
  rU
  s       @@r   $test_injected_authentication_failure=PurePythonSocketPairTest.test_injected_authentication_failure  s    !==44	 	(<FMM%""7+%002 , )9FMM%!!#  ,+ )9FMM%!!# s$   *C! C,C! 
CC! !AD>c                     g r   r   r   s    r   %_test_injected_authentication_failure>PurePythonSocketPairTest._test_injected_authentication_failure  s    
 	r   )r0
  )r   r   r   r   rs  r   r   r6
  r9
  r<
  r?
  rC
  rF
  r!   r  r5   r  r  r   r  rK
  rN
  rZ
  r]
  r   r  r  s   @r   r,
  r,
    s    
5	.##
 __.99 9 -8879 335RS T9
B r   r,
  c                   X   \ rS rSrSS jrS rS rS r\R                  \
R                  " \SL S5      S 5       5       r\R                  " \5      r\
R                  " \" \S	5      S
5      \R$                  " SSS5      S 5       5       rS rS rS rS rS rS rS rS rS rS rS rSrg)NonBlockingTCPTestsi  c                 ^    [         R                  " 5       U l        [        R	                  XS9  g r   )r   r   eventr   r   r   s     r   r   NonBlockingTCPTests.__init__  s!    __&
&&t&Cr   c                    U R                  U R                  R                  5       U5        US:g  nU R                  UR                  5       U5        [        bj  US L n[        R                  " U[        R
                  [        R                  5      nU R                  [        U[        R                  -  5      (       + U5        g g )N        )	rO  r   r  getblockingr4   F_GETFLrH  
O_NONBLOCKbool)r   r  rn   blockingfd_blockingflags         r   assert_sock_timeout'NonBlockingTCPTests.assert_sock_timeout!  s    --/9sN))+X6 #d?K;;tU]]BMMBDdR]]&:!;;[I r   c                    U R                   R                  S5        U R                  U R                   S 5        U R                   R                  S5        U R                  U R                   S5        U R                   R                  S 5        U R                  U R                   S 5        U R                   R                  S5        U R                  U R                   S5        U R                   R                  S5        U R                  U R                   S5        U R                   R                  S5        U R                  U R                   S5        g )NTFre
  r   r  )r   r+  rm
  r;  r   s    r   testSetBlocking#NonBlockingTCPTests.testSetBlocking2  s    		d#  D1		e$  C0		T"  D1		Q  A.		R   B/		Q  A.r   c                     g r   r   r   s    r   _testSetBlocking$NonBlockingTCPTests._testSetBlockingF  r{  r   Nr  c                    SS K nUR                  UR                  :  a  U R                  S5        U R                  R                  S5        U R                  U R                  R                  5       S5        U R                  R                  UR                  S-   5        U R                  U R                  R                  5       5        g )Nr   zneeds UINT_MAX < ULONG_MAXFre
  r   )	r  rw  r  r   r   r+  rO  r  rR  rx  s     r   testSetBlocking_overflow,NonBlockingTCPTests.testSetBlocking_overflowI  s     	!4!44MM67		e$--/5		i00145$))..01r   r*  ztest needs socket.SOCK_NONBLOCKr0     r  c                    U R                   R                  5         [        R                  " [        R                  [        R                  [        R
                  -  5      U l         U R                  U R                   S5        g r'  )r   rB   r6   r   ra   r*  rm
  r   s    r   testInitNonBlocking'NonBlockingTCPTests.testInitNonBlockingY  sQ    
 			MM&.."("4"4v7K7K"KM	  A.r   c                     g r   r   r   s    r   _testInitNonBlocking(NonBlockingTCPTests._testInitNonBlockingc  r{  r   c                 0   [        S 5         U R                  R                  S5        U R                  R                  5       u  pU R	                  UR
                  5        U R                  UR                  5       5        S S S 5        g ! , (       d  f       g = f)Nr  )rp   r   r;  r=  r   rB   rR  r  rc  s      r   testInheritFlagsBlocking,NonBlockingTCPTests.testInheritFlagsBlockingf  sc     &d+II  $))+JDOODJJ'doo/0	 ,++s   A2B
Bc                 Z    U R                   R                  [        U R                  45        g r   r   rG  r(  r   r   s    r   _testInheritFlagsBlocking-NonBlockingTCPTests._testInheritFlagsBlockingo      $		*+r   c                 6   Sn[        U5         U R                  R                  S5        U R                  R                  5       u  p#U R	                  UR
                  5        U R                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f)Ng      4@r  )rp   r   r;  r=  r   rB   rO  r  )r   default_timeoutr>  rd  s       r   testInheritFlagsTimeout+NonBlockingTCPTests.testInheritFlagsTimeoutr  sj     %o6II  $))+JDOODJJ'T__.@	 766s   A3B


Bc                 Z    U R                   R                  [        U R                  45        g r   r
  r   s    r   _testInheritFlagsTimeout,NonBlockingTCPTests._testInheritFlagsTimeout}  r
  r   c                    U R                   R                  S5        [        R                  " 5       nU R	                  [
        5         U R                   R                  5       u  p#S S S 5        [        R                  " 5       U-
  nU R                  US5        U R                  R                  5         [        R                  " U R                   // / [        R                  5      u  pVnU R                   U;  a  U R                  S5        U R                   R                  5       u  p#U R                  UR                  5        U R!                  UR#                  5       5        g ! , (       d  f       N= f)NFr
  z'Error trying to do accept after select.)r   r+  rC  	monotonicr@  rR
  r=  r}  rb
  r   r  r   LONG_TIMEOUTr9  r   rB   rR  r  )r   
start_timer>  rd  dtrT  r  r  s           r   
testAcceptNonBlockingTCPTests.testAccept  s    		e$ ^^%
/))+JD 0^^
*C 

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

#$//+, 0/s   E
E*c                     U R                   R                  5         U R                  R                  [        U R
                  45        g r   )rb
  r   r   rG  r(  r   r   s    r   _testAcceptNonBlockingTCPTests._testAccept  s-     	

$		*+r   c                 L   U R                   R                  5       u  pU R                  UR                  5        UR	                  S5        U R                  [        5         UR                  [        [        5      5      nS S S 5        U R                  R                  5         [        R                  " U// / [        R                  5      u  pEnX;  a  U R                  S5        UR                  [        [        5      5      nU R!                  U[        5        g ! , (       d  f       N= f)NFz0Error during select call to non-blocking socket.)r   r=  r   rB   r+  r@  rR
  rL  r  rP  rb
  r   r  r   r
  r9  rO  )r   r>  rd  rQ  rT  r  r  s          r   r4  NonBlockingTCPTests.testRecv  s    YY%%'


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

!==$R9M9MNSIIHI iiC!c" 0/s   D
D#c                     U R                   R                  [        U R                  45        U R                  R                  5         U R                   R                  [        5        g r   )r   rG  r(  r   rb
  r   r  rP  r   s    r   r8  NonBlockingTCPTests._testRecv  sA    $		*+ 	

 	r   c                 ,   [         b  [         R                  S-   nOSnU R                  R                  5       u  p#U R	                  UR
                  5         UR                  U5        UR                  [        [        5      5      ng ! [         a     g f = fNr   l        )r  r  r   r=  r   rB   r;  r  rL  r  rP  )r   large_timeoutr>  rd  rQ  s        r   testLargeTimeout$NonBlockingTCPTests.testLargeTimeout  s      %--1M&M YY%%'


#	OOM*
 iiC!	  	 	s   B 
BBc                 *   [         b  [         R                  S-   nOSnU R                  R                  [        U R
                  45         U R                  R                  U5        U R                  R                  [        5        g ! [         a     g f = fr
  )
r  r  r   rG  r(  r   r;  r  r  rP  )r   r
  s     r   _testLargeTimeout%NonBlockingTCPTests._testLargeTimeout  sw     %--1M&M$		*+	HH. 	  		s   
B 
BB)rb
  r   r  ) r   r   r   r   r   rm
  rp
  rs
  r   r  r!   r  r  rv
  _testSetBlocking_overflowr  r5   r6   requires_linux_versionrz
  r}
  r
  r
  r
  r
  r
  r
  r4  r8  r
  r
  r   r   r   r   r`
  r`
    s    DJ"/( __Y$&(<=
2 > 
2 !( 4 45E F9:<##Aq"-/ .</1,	A,-,,#("(r   r`
  c                       \ rS rSrSrSrSrSrSrSr	\
rSr\
rS#S	 jrS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S  r%S! r&S"r'g)$FileObjectClassTestCasei  aS  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.
r  r   strictNr2   r  c                 *    [         R                  XS9  g r   r0  r   s     r   r    FileObjectClassTestCase.__init__  r2  r   c                 p   [        S5       Vs/ s H  n[        R                  " 5       PM     snu  U l        U l        U l        U l        [        R                  U 5        U R                  R                  U R                  U R                  U R                  U R                  U R                  S9U l        g s  snf )NrJ  r  errorsnewline)r  r   r   evt1evt2serv_finishedcli_finishedr]  r   rb  r  	read_moder   r  r
  r
  	read_file)r   r   s     r   r   FileObjectClassTestCase.setUp  s    ',QxG1'/!IOOxG1C	49d0$2C!!$'//NNDLL}}[[ll	 0 $G1s   B3c                     U R                   R                  5         U R                  R                  5         U R	                  U R                  R
                  5        S U l        [        R                  U 5        g r   )r
  r   r
  rB   r  closedr]  r   r   s    r   r    FileObjectClassTestCase.tearDown   sO     --.$$T*r   c                     [         R                  U 5        U R                  R                  U R                  U R
                  U R                  U R                  U R                  S9U l	        g )Nr
  )
r]  r   ri  r  
write_moder   r  r
  r
  
write_filer   s    r   r   #FileObjectClassTestCase.clientSetUp  sM    ''-..11OOT\\}}[[ll	 2 $r   c                     U R                   R                  5         U R                  R                  5         U R	                  U R                  R
                  5        S U l        [        R                  U 5        g r   )r
  r   r
  rB   r  r
  r]  r   r   s    r   r   &FileObjectClassTestCase.clientTearDown  sO    ../**40r   c                    U R                   R                  S5        U R                  R                  S5        U R	                  [
        U R                  R                  S5        U R	                  [        5       nU R                  R                  S5        S S S 5        U R                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr   r=  z!cannot read from timed out object)
rb  r;  r
  rT  r@  r  r;   r*  r  rL  )r   ctxs     r   testReadAfterTimeout,FileObjectClassTestCase.testReadAfterTimeout  s     	  #A,(;(;Q?w'3NN" (93s}};MN ('s   7C
Cc                     U R                   R                  U R                  SS 5        U R                   R                  5         U R                  R                  5         g )Nr   r=  )r
  r  	write_msgflushr
  r   r   s    r   _testReadAfterTimeout-FileObjectClassTestCase._testReadAfterTimeout"  sA    dnnQq12!r   c                     U R                   R                  [        U R                  5      S-
  5      nU R                   R                  S5      nX-   nU R	                  X0R                  5        g r0  )r
  rT  r  read_msgrO  )r   	first_seg
second_segrQ  s       r   testSmallRead%FileObjectClassTestCase.testSmallRead'  sR    NN''DMM(:1(<=	^^((+
$mm,r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   r
  r  r
  r
  r   s    r   _testSmallRead&FileObjectClassTestCase._testSmallRead.  (    dnn-r   c                 n    U R                   R                  5       nU R                  XR                  5        g r   )r
  rT  rO  r
  rC  s     r   testFullRead$FileObjectClassTestCase.testFullRead2  s&    nn!!#mm,r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   )r
  r  r
  rB   r   s    r   _testFullRead%FileObjectClassTestCase._testFullRead7  r
  r   c                     [        U R                  5      " 5       n U R                  R                  S5      nU(       d  OX-  nM)  U R	                  XR                  5        g r  )r  r
  r
  rT  rO  )r   r  chars      r   testUnbufferedRead*FileObjectClassTestCase.testUnbufferedRead;  sP    4==!#>>&&q)DKC	 
 	mm,r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   r
  r   s    r   _testUnbufferedRead+FileObjectClassTestCase._testUnbufferedReadE  r
  r   c                 n    U R                   R                  5       nU R                  XR                  5        g r   )r
  readlinerO  r
  r   lines     r   testReadline$FileObjectClassTestCase.testReadlineI  s&    ~~&&(}}-r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   r
  r   s    r   _testReadline%FileObjectClassTestCase._testReadlineN  r
  r   c                     U R                   R                  5         U R                  R                  5       nU R	                  XR
                  5        g r   )rb  rB   r
  rT  rO  r
  rC  s     r   testCloseAfterMakefile.FileObjectClassTestCase.testCloseAfterMakefileR  s6    nn!!#mm,r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   r
  r   s    r   _testCloseAfterMakefile/FileObjectClassTestCase._testCloseAfterMakefileY  r
  r   c                    U R                   R                  5         U R                  R                  [	        [
        5      5      n[        U R                  [        5      (       a  UR                  5       nU R                  XR                  5        g r   )r
  rB   rb  rL  r  rP  r  r
  r  decoderO  rC  s     r   testMakefileAfterMakefileClose6FileObjectClassTestCase.testMakefileAfterMakefileClose]  sX    mm  S*dmmS))**,Cmm,r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   r
  r   s    r   _testMakefileAfterMakefileClose7FileObjectClassTestCase._testMakefileAfterMakefileClosed  r
  r   c                 X    U R                  U R                  R                  (       + 5        g r   )r  r
  r
  r   s    r   testClosedAttr&FileObjectClassTestCase.testClosedAttrh  s    DNN1112r   c                 X    U R                  U R                  R                  (       + 5        g r   )r  r
  r
  r   s    r   _testClosedAttr'FileObjectClassTestCase._testClosedAttrk  s    DOO2223r   c                     U R                  U R                  R                  U R                  5        U R                  U R                  R                  U R
                  R                  5       5        g r   )rO  r
  r  r
  r  rb  r+  r   s    r   testAttributes&FileObjectClassTestCase.testAttributesn  sG    ,,dnn=,,dmm.B.B.DEr   c                     U R                  U R                  R                  U R                  5        U R                  U R                  R                  U R
                  R                  5       5        g r   )rO  r
  r  r
  r  ri  r+  r   s    r   _testAttributes'FileObjectClassTestCase._testAttributesr  sG    --t?--t~~/D/D/FGr   c                    U R                   R                  5         U R                  [        U R                   R                  5        U R
                  R                  5         U R                  [        U R
                  R                  5        g r   )r
  rB   r@  r  r+  rb  r;   r)  r   s    r   testRealClose%FileObjectClassTestCase.testRealClosev  sV    *dnn&;&;<'4==#<#<=r   c                     g r   r   r   s    r   _testRealClose&FileObjectClassTestCase._testRealClose|  r{  r   )r
  r
  r
  r
  r
  r
  r  )(r   r   r   r   r   r   r  r
  r
  r
  rP  r
  r
  r
  r   r   r   r   r   r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r   r  r  r   r   r   r   r
  r
    s    	 GHFGIHJIB$+$1
O"
- -
 - .
 - - 34FH>r   r
  c                       \ rS rSrSrSrS rS rS rS r	\
R                  " \" \S5      S	5      S
 5       rS rS rS rS rS rSrg)!UnbufferedFileObjectClassTestCasei  as  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                 *   U R                   R                  5       nU R                  USU R                  -   5        U R                  R                  SS5      U l         U R                   R                  5       nU R                  USU R                  -   5        g )N   A. r2   r      B. )r
  r
  rO  r
  rb  r  r
  s     r   testUnbufferedReadline8UnbufferedFileObjectClassTestCase.testUnbufferedReadline  sp    ~~&&(v67//a8~~&&(v67r   c                     U R                   R                  SU R                  -   5        U R                   R                  SU R                  -   5        U R                   R                  5         g )Nr  r  r
  r   s    r   _testUnbufferedReadline9UnbufferedFileObjectClassTestCase._testUnbufferedReadline  sH    ft~~56ft~~56r   c                 .   U R                   R                  5         U R                   R                  S5      nU R                  XR                  5        U R
                  R                  5         U R                  [        U R                   R                  S5        g rJ  )rb  rB   rL  rO  r
  r
  r@  r;   rC  s     r   testMakefileClose3UnbufferedFileObjectClassTestCase.testMakefileClose  sd    mm  &mm,'4==#5#5t<r   c                     U R                   R                  U R                  5        U R                   R                  5         g r   r
  r   s    r   _testMakefileClose4UnbufferedFileObjectClassTestCase._testMakefileClose  r
  r   r  r  c                     [         R                  " U R                  5      nU R                  R	                  5         [         R                  " U R                  5      nU R                  US-
  U5        g r  )rx   r  rb  r
  rB   rO  )r   refcount_beforerefcount_afters      r   testMakefileCloseSocketDestroy@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroy  sM     //$--871,n=r   c                     g r   r   r   s    r   _testMakefileCloseSocketDestroyAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroy  r{  r   c                    U R                   R                  S5        U R                  U R                  R	                  [        S5      5      S 5        U R                  U R                  R                  [        U R                  5      S-
  5      S 5        U R                  R                  5         U R                  R                  S5        U R                  R                  [        U R                  5      S-
  5      nUcG  [        R                  " S5        U R                  R                  [        U R                  5      S-
  5      n[        S5      nU R                  R	                  U5      nU R                  US5        XS U -   nU R                  X@R                  5        U R                  U R                  R	                  [        S5      5      S 5        U R                  U R                  R                  S5      S 5        g )NFr  r=  r
  g      ?r  r   )rb  r+  rO  r
  readintorG  rT  r  r
  r
  r   r
  r   rC  rD  )r   r
  r  r  rQ  s        r   testSmallReadNonBlocking:UnbufferedFileObjectClassTestCase.testSmallReadNonBlocking  se   !!%(002?F,,S-?!-CDdK				sNN''DMM(:Q(>?	JJsO++C,>,BCImNN##C(Abq'!mm,002?F,,Q/6r   c                 "   U R                   R                  S5        U R                  R                  U R                  5        U R                  R                  5         U R                  R                  5         U R                  R                  S5        g )Nr
        @)	r
  r   r
  r  r
  r
  r
  r   r
  r   s    r   _testSmallReadNonBlocking;UnbufferedFileObjectClassTestCase._testSmallReadNonBlocking  s[    		sdnn-		 	$r   c                     U R                   R                  S5        U R                  (       a  U R                  U R                  5        g g )Nr%  )r
  r   serv_skippedr   r   s    r   testWriteNonBlocking6UnbufferedFileObjectClassTestCase.testWriteNonBlocking  s8    s# MM$++, r   c                 b   S U l         U R                  R                  S5        S[        R                  -  nSnU R
                  R                  U5      nU R                  US5        [        U5       H5  nU R
                  R                  U5      nUc    g U R                  US5        M7     SU l         g )NFr  r  r   z$failed to saturate the socket buffer)	r)  ri  r+  r   r  r
  r  r  r  )r   BIGLIMITr  r   s        r   _testWriteNonBlocking7UnbufferedFileObjectClassTestCase._testWriteNonBlocking  s     ""5)W***OO!!#&1a uA%%c*Ayq!$  !GDr   )r
  r)  N)r   r   r   r   r   r   r  r  r  r  r!   r  r5   rx   r  r  r"  r&  r*  r/  r   r   r   r   r	  r	    sg    < G8 
=  m479>9>7&%-Gr   r	  c                       \ rS rSrSrSrg)#LineBufferedFileObjectClassTestCasei  r   r   Nr   r   r   r   r   r   r   r   r   r2  r2        Gr   r2  c                       \ rS rSrSrSrg)$SmallBufferedFileObjectClassTestCasei  r0  r   Nr3  r   r   r   r6  r6    r4  r   r6  c                   J    \ rS rSrSrSr\R                  S5      rSr	\r
SrSrg)	"UnicodeReadFileObjectClassTestCasei  =Tests for socket.makefile() in text mode (rather than binary)r<   r   r  rG  r   Nr   r   r   r   r   r
  rP  r
  r
  r
  r
  r
  r   r   r   r   r8  r8    s'    GIzz'"HJIGr   r8  c                   J    \ rS rSrSrSr\rSr\R                  S5      r
SrSrg)	#UnicodeWriteFileObjectClassTestCasei  r9  r2   r  r   rG  r   N)r   r   r   r   r   r
  rP  r
  r
  r
  r
  r
  r   r   r   r   r<  r<    s'    GIHJ

7#IGr   r<  c                   h    \ rS rSrSrSr\R                  S5      rSr	\R                  S5      r
SrSrg)	'UnicodeReadWriteFileObjectClassTestCasei  r9  r<   r   r  rG  r   Nr:  r   r   r   r>  r>    s0    GIzz'"HJ

7#IGr   r>  c                       \ rS rSrSrS rSrg)NetworkConnectionTesti  zProve network connection.c                 |    [         R                  " [        U R                  45      U l        U R                  U l        g r   )r6   create_connectionr(  r   r   ri  r   s    r   r   !NetworkConnectionTest.clientSetUp  s*     ++T499,=>r   )r   ri  N)r   r   r   r   r   r   r   r   r   r   r@  r@    s
    #"r   r@  c                       \ rS rSrSrSrg)BasicTCPTest2i  zLTests that NetworkConnection does not break existing TCP functionality.
    r   N)r   r   r   r   r   r   r   r   r   rE  rE    s    r   rE  c                       \ rS rSr " S S\R                  5      r\R                  S 5       r\	R                  S 5       r\	R                  S 5       rS rS rS	rg
)NetworkConnectionNoServeri#  c                       \ rS rSrS rSrg)$NetworkConnectionNoServer.MockSocketi%  c                     [        S5      e)Nz	timed out)r  r  s     r   rG  ,NetworkConnectionNoServer.MockSocket.connect&  s    {++r   r   N)r   r   r   r   rG  r   r   r   r   
MockSocketrI  %  s    	,r   rL  c              #      #    [         R                   nU R                  [         l          Sv   U[         l         g! U[         l         f = f7f)z*Return a socket which times out on connectN)r6   rL  )r   
old_sockets     r   mocked_socket_module.NetworkConnectionNoServer.mocked_socket_module)  s1      ]]
	'&FMJFMs   &A	9 A	AA	c                    [         R                  " 5       n[        R                  " [        R                  [        R                  5      nU R                  UR                  5        U R                  [        5       nUR                  [        U45        S S S 5        U R                  WR                  R                  [        R                  5        g ! , (       d  f       NC= fr   )r   rT  r6   r   ra   r   rB   r@  r;   rG  r(  rO  rL  r  ECONNREFUSED)r   r   r   rN  s       r   test_connect&NetworkConnectionNoServer.test_connect3  s    --/mmFNNF,>,>?		"w'2KKt% (++U-?-?@ ('s   9C
Cc                 :   [         R                  " 5       nU R                  [        5       n[        R
                  " [        U45        S S S 5        [         R                  " 5       nU R                  WR                  R                  U5        g ! , (       d  f       NJ= fr   )r   rT  r@  r;   r6   rB  r(  get_socket_conn_refused_errsr*  rL  r  )r   r   rN  expected_errnoss       r   test_create_connection0NetworkConnectionNoServer.test_create_connection<  sj     --/w'2$$dD\2 (" (DDFbll((/:% ('s   B
Bc                    [         R                  " 5       n [        R                  " [        U4SS9  U R                  S5        U R                  W[        5        UR                   H  nU R                  U[        5        M     [        R                  " SUS[        R                  5      nU R                  [        U5      [        UR                  5      5        g ! [         a  nUn S nANS nAff = f)NT)
all_errorszexpected connection to failr  r   )r   rT  r6   rB  r(  r9  ExceptionGroupr"  
exceptionsr;   r  ra   rO  r  )r   r   r   eg	addressess        r   !test_create_connection_all_errors;NetworkConnectionNoServer.test_create_connection_all_errorsU  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                 `   U R                  5           [        R                  " [        S45        U R	                  S5        S S S 5        g ! [
         a     N[         a>  n[        R                  (       d  UR                  [        R                  :w  a  e  S nANWS nAff = f! , (       d  f       g = f)Nr   zTimeoutError not raised)rO  r6   rB  r(  r9  r  r;   r   r  r  EAFNOSUPPORTrn  s     r   test_create_connection_timeout8NetworkConnectionNoServer.test_create_connection_timeoutg  s     &&(5(($6 		34 )(     --e>P>P1P 2Q )(s?   BA	B	
BB	B4BBBB
B-r   N)r   r   r   r   r6   rL  r+   contextmanagerrO  r   skip_if_tcp_blackholerS  rX  r`  rd  r   r   r   r   rG  rG  #  sl    ,V]] , ' ' ((A )A ((; );0=$5r   rG  c                   p    \ rS rSrSrSS jrS rS rS r\r	S r
\rS r\rS	 r\rS
 r\rS r\rS rSrg)NetworkConnectionAttributesTestiv  Nc                 T    [         R                  XS9  [        R                  U 5        g r   r   r   s     r   r   (NetworkConnectionAttributesTest.__init__y  r   r   c                 8    [         R                  " 5       U l        g r   )r   rT  source_portr   s    r   r   +NetworkConnectionAttributesTest.clientSetUp}  s    (99;r   c                     U R                   b  U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   .NetworkConnectionAttributesTest.clientTearDown  s/    88HHNN%%d+r   c                 \    U R                   R                  5       u  pUR                  5         g r   )r   r=  rB   rc  s      r   _justAccept+NetworkConnectionAttributesTest._justAccept  s    YY%%'


r   c                 
   [         R                  " [        U R                  4[        R
                  S9U l        U R                  U R                  R                  5        U R                  U R                  R                  S5        g )Nrg  r0  )r6   rB  r(  r   r   r<  r   r   rB   rO  r2  r   s    r   _testFamily+NetworkConnectionAttributesTest._testFamily  sT    ++T499,=$+$<$<>'!,r   c                 F   [         R                  " [        U R                  4[        R
                  SU R                  4S9U l        U R                  U R                  R                  5        U R                  U R                  R                  5       S   U R                  5        g )NrG  )rn   source_addressr   )r6   rB  r(  r   r   r<  rm  r   r   rB   rO  r)  r   s    r   _testSourceAddress2NetworkConnectionAttributesTest._testSourceAddress  su    ++T499,=$+$<$<,.0@0@+AC 	'--/2D4D4DEr   c                    U R                  [        R                  " 5       S L 5        [        R                  " S5         [        R                  " [
        U R                  45      U l        U R                  U R                  R                  5        [        R                  " S 5        U R                  U R                  R                  5       S5        g ! [        R                  " S 5        f = f)Nr  r  r6   rl   rm   rB  r(  r   r   r   rB   rO  r  r   s    r   _testTimeoutDefault3NetworkConnectionAttributesTest._testTimeoutDefault  s    002d:;  $	+//tyy0ABDHOODHHNN+$$T*,,.3 $$T*s   AC C'c                    U R                  [        R                  " 5       S L 5        [        R                  " S5         [        R                  " [
        U R                  4S S9U l        U R                  U R                  R                  5        [        R                  " S 5        U R                  U R                  R                  5       S 5        g ! [        R                  " S 5        f = fN   rg  r|  r   s    r   _testTimeoutNone0NetworkConnectionAttributesTest._testTimeoutNone  s    002d:;  $	+//tyy0A4PDHOODHHNN+$$T*,,.5 $$T*s   AC C&c                     [         R                  " [        U R                  4SS9U l        U R                  U R                  R                  5       S5        g r  )r6   rB  r(  r   r   rO  r  r   s    r   _testTimeoutValueNamed6NetworkConnectionAttributesTest._testTimeoutValueNamed  s<    ++T499,=rJ,,.3r   c                     [         R                  " [        U R                  4S5      U l        U R                  U R                  R                  5        U R                  U R                  R                  5       S5        g )Nr  )	r6   rB  r(  r   r   r   rB   rO  r  r   s    r   _testTimeoutValueNonamed8NetworkConnectionAttributesTest._testTimeoutValueNonamed  sP    ++T499,=rB',,.3r   )r   rm  r  )r   r   r   r   r   r   r   r   rr  
testFamilyru  testSourceAddressry  testTimeoutDefaultr}  testTimeoutNoner  testTimeoutValueNamedr  testTimeoutValueNonamedr  r   r   r   r   ri  ri  v  sh    
C&<, J- $F %	4 "O	6 (4 *4r   ri  c                   @    \ rS rSrS
S jrS rS rS r\rS r	S r
Srg	)NetworkConnectionBehaviourTesti  c                 T    [         R                  XS9  [        R                  U 5        g r   r   r   s     r   r   'NetworkConnectionBehaviourTest.__init__  r   r   c                     g r   r   r   s    r   r   *NetworkConnectionBehaviourTest.clientSetUp  r{  r   c                 p    U R                   R                  5         S U l         [        R                  U 5        g r   r  r   s    r   r   -NetworkConnectionBehaviourTest.clientTearDown  r  r   c                     U R                   R                  5       u  pU R                  UR                  5        [        R
                  " S5        UR                  S5        g )Nr=     done!)r   r=  r   rB   rC  rD  rW  rc  s      r   testInsideTimeout0NetworkConnectionBehaviourTest.testInsideTimeout  s=    YY%%'


#

1		(r   c                     [         R                  " [        U R                  45      =U l        nUR                  S5      nU R                  US5        g )NrQ  r  )r6   rB  r(  r   r   rL  rO  )r   r  r  s      r   _testInsideTimeout1NetworkConnectionBehaviourTest._testInsideTimeout  s?     22D$))3DEE4yy|x(r   c                    ^ [         R                  " [        U R                  4SS9=U l        mU R                  [        U4S j5        g )Nr   rg  c                  &   > T R                  S5      $ )NrQ  )rL  r  s   r   r   DNetworkConnectionBehaviourTest._testOutsideTimeout.<locals>.<lambda>  s    		!r   )r6   rB  r(  r   r   r@  r  r  s    @r   _testOutsideTimeout2NetworkConnectionBehaviourTest._testOutsideTimeout  s6     22D$))3DaPP4,(<=r   r  Nr  )r   r   r   r   r   r   r   r  testOutsideTimeoutr  r  r   r   r   r   r  r    s(    &,

 +)
>r   r  c                   `    \ rS rSrS rS r\R                  " \" \	S5      S5      S 5       r
Srg)	TCPTimeoutTesti  c                 @   ^  U 4S jnT R                  [        US5        g )Nc                  p   > TR                   R                  S5        TR                   R                  5         g r	
  )r   r;  r=  r#   r  r   s     r   raise_timeout4TCPTimeoutTest.testTCPTimeout.<locals>.raise_timeout  s%    II  %IIr   z*Error generating a timeout exception (TCP)r@  r  r   r  s   ` r   testTCPTimeoutTCPTimeoutTest.testTCPTimeout  s     	 	,J	Lr   c                 (   Sn U R                   R                  S5        U R                   R                  5       nU(       d  U R	                  S5        g g ! [         a    U R	                  S5         N7[
         a    Sn ND  U R	                  S5         NX= f)NFre
  z%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r   r;  r=  r  r9  r;   r   okr  s      r   testTimeoutZeroTCPTimeoutTest.testTimeoutZero  s    	;II  %))""$C IIKL   	?II=> 	B	;II9:s   5A B0B=Br  ztest needs signal.alarm()c           
      V  ^ U R                   R                  S5         " S S[        5      mU4S jn[        R                  " [        R                  U5      n  [        R
                  " S5        U R                   R                  5       nU R                  S5        [        R
                  " S5        [        R                  " [        R                  U5        g ! [         a    U R                  S5         NYT a     N`[         aC  nU R                  S[        U5      < S	U< S
[        R                  " 5       < 35         S nANS nAff = f! [        R
                  " S5        f = f! T a    U R                  S5         Nf = f! [        R                  " [        R                  U5        f = f)Nr%  c                       \ rS rSrSrg)4TCPTimeoutTest.testInterruptedTimeout.<locals>.Alarmi  r   Nre	  r   r   r   Alarmr    s    r   r  c                    > Ter   r   )r  r  r  s     r   alarm_handler<TCPTimeoutTest.testInterruptedTimeout.<locals>.alarm_handler  s    Kr   r0  znothing caughtzcaught timeout instead of Alarmz)caught other exception instead of Alarm: (z):
r   zgot Alarm in wrong place)r   r;  r  r  r  r  r=  r9  r  r   r  	traceback
format_exc)r   r  r  r  r   r  s        @r   testInterruptedTimeout%TCPTimeoutTest.testInterruptedTimeout  s/    			S!	I 		MM&..-@		5 Qii&&( 		*+Q
 MM&..)4!   =		;<   @		7Ay';';'=? @ @@ Q 	2II01	2 MM&..)4sr   0C 	E	 E$ E1E	 3E8E	 :	E9E<E	 EE	 	E!!E$ $E>;F =E>>F 'F(r   N)r   r   r   r   r  r  r!   r  r5   r  r  r   r   r   r   r  r    s9    LM 146565r   r  c                        \ rS rSrS rS rSrg)UDPTimeoutTesti  c                 @   ^  U 4S jnT R                  [        US5        g )Nc                  r   > TR                   R                  S5        TR                   R                  S5        g Nr
  rK  r   r;  rL  r  s     r   r  4UDPTimeoutTest.testUDPTimeout.<locals>.raise_timeout  %    II  %IINN4 r   z*Error generating a timeout exception (UDP)r  r  s   ` r   testUDPTimeoutUDPTimeoutTest.testUDPTimeout  s     	! 	,J	Lr   c                 *   Sn U R                   R                  S5        U R                   R                  S5      nU(       d  U R	                  S5        g g ! [         a    U R	                  S5         N7[
         a    Sn ND  U R	                  S5         NX= f)NFre
  rK  z%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)1recv() returned success when we did not expect itr   r;  rL  r  r9  r;   r  s      r   r  UDPTimeoutTest.testTimeoutZero   s    	;II  %))..&C IIIJ   	?II=> 	B	;II9:   6A B1B>Br   N)r   r   r   r   r  r  r   r   r   r   r  r    s    LKr   r  c                        \ rS rSrS rS rSrg)UDPLITETimeoutTesti.  c                 @   ^  U 4S jnT R                  [        US5        g )Nc                  r   > TR                   R                  S5        TR                   R                  S5        g r  r  r  s     r   r  <UDPLITETimeoutTest.testUDPLITETimeout.<locals>.raise_timeout3  r  r   z.Error generating a timeout exception (UDPLITE)r  r  s   ` r   testUDPLITETimeout%UDPLITETimeoutTest.testUDPLITETimeout2  s     	! 	,N	Pr   c                 *   Sn U R                   R                  S5        U R                   R                  S5      nU(       d  U R	                  S5        g g ! [         a    U R	                  S5         N7[
         a    Sn ND  U R	                  S5         NX= f)NFre
  rK  z)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)r  r  r  s      r   r  "UDPLITETimeoutTest.testTimeoutZero9  s    	?II  %))..&C IIIJ   	CIIAB 	B	?II=>r  r   N)r   r   r   r   r  r  r   r   r   r   r  r  .  s    PKr   r  c                        \ rS rSrS rS rSrg)TestExceptionsiG  c                    U R                  [        [        [        5      5        U R                  [        [        R
                  [        5      5        U R                  [        [        R                  [        5      5        U R                  [        [        R                  [        5      5        U R                  [        R                  [        5        U R                  [        R                  [        5        g r   )r  
issubclassr;   r  r6   rA  rB  rn   assertIserrorr  r   s    r   testExceptionTree TestExceptions.testExceptionTreeI  s~    
7I67
6==':;
6??G<=
6>>7;<fllG,fnnl3r   c                    [         R                   " [         R                  [         R                  S5      n[         R                   " [         R                  [         R                  SUR                  5       5      nUR	                  5         U R                  UR                  5        U R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr   F)
r6   r   ra   r+  rB   r   r3  r@  r;   r+  )r   sock0r  s      r   test_setblocking_invalidfd)TestExceptions.test_setblocking_invalidfdQ  s     fnnf.@.@!D}}NNF..5<<>C$w'U# (''s   8C
C!r   N)r   r   r   r   r  r  r   r   r   r   r  r  G  s    4
$r   r  r  r  zLinux specific testc                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestLinuxAbstractNamespacei^  l   c                    Sn[         R                   " [         R                  [         R                  5       nUR                  U5        UR	                  5         [         R                   " [         R                  [         R                  5       nUR                  UR                  5       5        UR                  5       S    nU R                  UR                  5       U5        U R                  UR                  5       U5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Ns    python-test-hello r   )
r6   r  ra   r   r   rG  r)  r=  rO  rm  )r   r  s1rR  s3s        r   testLinuxAbstractNamespace5TestLinuxAbstractNamespace.testLinuxAbstractNamespacec  s    2]]6>>6+=+=>"GGGIIKv~~v/A/ABb

2>>+,YY[^r$$R^^%5w?$$R^^%5w? $ C ?>
 $^ CB ?>s=   AD:3D)>AD?D)D:
D&"D))
D7	3D::
Ec                 *   SSU R                   S-
  -  -   n[        R                  " [        R                  [        R                  5       nUR	                  U5        U R                  UR                  5       U5        S S S 5        g ! , (       d  f       g = f)Nr     hr   )UNIX_PATH_MAXr6   r  ra   r   rO  r)  r   r  rE   s      r   testMaxName&TestLinuxAbstractNamespace.testMaxNamen  sc    DD$6$6$:;;]]6>>6+=+=>!FF7OQ]]_g6 ?>>s   	2B
Bc                    SSU R                   -  -   n[        R                  " [        R                  [        R                  5       nU R	                  [
        UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr  h)r  r6   r  ra   r@  r;   r   r  s      r   testNameOverflow+TestLinuxAbstractNamespace.testNameOverflowt  sS    3!3!333]]6>>6+=+=>!gqvvw7 ?>>s   "A11
A?c                    [         R                   " [         R                  [         R                  5      n UR                  S5        U R	                  UR                  5       S5        UR                  5         g ! UR                  5         f = f)Nz python test     python test )r6   r  ra   r   rO  r)  rB   r-  s     r   testStrName&TestLinuxAbstractNamespace.testStrNamey  sX    MM&..&*<*<=	FF+,Q]]_.GHGGIAGGIs   1A7 7B	c                    [         R                   " [         R                  [         R                  5       nUR                  [	        S5      5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)Nr  )r6   r  ra   r   rG  rO  r)  r-  s     r   testBytearrayName,TestLinuxAbstractNamespace.testBytearrayName  sQ    ]]6>>6+=+=>!FF9678Q]]_.GH ?>>s   ;A88
Bc                 \   Sn[         R                   " [         R                  [         R                  5       nUR                  S5        U R	                  UR                  5       U5        [         R                   " [         R                  [         R                  5       nUR                  S5        U R	                  UR                  5       U5        U R                  UR                  5       UR                  5       5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ns   ^ [0-9a-f]{5}rG  )r6   r  ra   r   r  r)  r  )r   abstract_addressr  rR  s       r   testAutobind'TestLinuxAbstractNamespace.testAutobind  s     -]]6>>6+=+=>"GGBKR^^-/?@v~~v/A/ABb  !13CD##BNN$4bnn6FG C	 ?> CB	 ?>s%   A%DA D;D
D	D
D+r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   r   r   r  r  ^  s*     M	@78
IHr   r  ztest needs socket.AF_UNIXc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\R                  " \R                   S;   S5      S 5       rSrg)TestUnixDomaini  c                 t    [         R                   " [         R                  [         R                  5      U l        g r   )r6   r  ra   r  r   s    r   r   TestUnixDomain.setUp  s    MM&..&2D2DE	r   c                 8    U R                   R                  5         g r   )r  rB   r   s    r   r   TestUnixDomain.tearDown  s    		r   c                      [         R                  " U5      $ ! [         a7    U R                  SR	                  U[
        R                  " 5       5      5         g f = f)NzBPathname {0!a} cannot be represented in file system encoding {1!r})rH  fsencoder  r   r  rx   getfilesystemencodingr   r  s     r   encodedTestUnixDomain.encoded  sN    	8;;t$$! 	8MM((.#335)78	8s    >AAc                      [         R                  " X5        g ! [         a:  n[        U5      S:X  a%  U R	                  SR                  U5      5         S nAg e S nAff = f)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)r   r  r;   r  r   r  )r   r  r  r   s       r   r   TestUnixDomain.bind  sT    	**46 	1v00LVD\# # 	s    
A/AAAc                 X    U R                  U R                  R                  5       S5        g )N)rG  N)r*  r  r)  r   s    r   r  TestUnixDomain.testUnbound  s    dii++-z:r   c                 *   [         R                  R                  [        R                  5      nU R                  U R                  U5        U R                  [        R                  U5        U R                  U R                  R                  5       U5        g r   )rH  r  abspathr   TESTFNr   r  r   r  rO  r)  r  s     r   testStrAddrTestUnixDomain.testStrAddr  s]    wwy//0		$))T"	(($/..0$7r   c                 H   [         R                  R                  [        R                  5      nU R                  U R                  U R                  U5      5        U R                  [        R                  U5        U R                  U R                  R                  5       U5        g r   )rH  r  r  r   r  r   r  r  r   r  rO  r)  r  s     r   testBytesAddrTestUnixDomain.testBytesAddr  sf    wwy//0		$))T\\$/0	(($/..0$7r   c                 l   [         R                  R                  [        R                  5      nU R                  U5      nU R                  U R                  UR                  SS5      5        U R                  [        R                  U5        U R                  U R                  R                  5       U5        g )Nasciisurrogateescape)rH  r  r  r   TESTFN_UNICODEr  r   r  r
  r   r  rO  r)  )r   r  r  s      r   testSurrogateescapeBind&TestUnixDomain.testSurrogateescapeBind  sy     wwy778LL		$))QXXg/@AB	(($/..0$7r   c                 n   [         R                  c  U R                  S5        [        R                  R                  [         R                  5      nU R                  U R                  U5        U R                  [         R                  U5        U R                  U R                  R                  5       U5        g )Nz!No unencodable filename available)r   TESTFN_UNENCODABLEr   rH  r  r  r   r  r   r  rO  r)  r  s     r   testUnencodableAddr"TestUnixDomain.testUnencodableAddr  sx     ''/MM=>wwy;;<		$))T"	(($/..0$7r   r  z6Linux behavior is tested by TestLinuxAbstractNamespacec                 Z    U R                  [        U R                  R                  S5        g )NrG  )r@  r;   r  r   r   s    r   testEmptyAddressTestUnixDomain.testEmptyAddress  s     	'499>>26r   r  N)r   r   r   r   r   r   r  r   r  r  r  r   r$  r!   r  rx   ry   r'  r   r   r   r   r  r    s^    F	8
;8888 __S\\%99MO7O7r   r  c                   x    \ rS rSrSrSS jrS rS rS r\r	S r
\rS rS	 rS
 r\rS r\rS rS rS r\rSrg)BufferIOTesti  z>
Test the buffer versions of socket.recv() and socket.send().
c                 *    [         R                  XS9  g r   r0  r   s     r   r   BufferIOTest.__init__  r2  r   c                 8   [         R                   " SS/[        [        5      -  5      nU R                  R	                  U5      nU R                  U[        [        5      5        UR                  5       nUS [        [        5       nU R                  U[        5        g Nr(  r   )r)  r  rP  rb  r	  rO  r  r   r  r  rQ  s       r   testRecvIntoArrayBufferIOTest.testRecvIntoArray  sn    kk#sSX~.((-S*kkm)3s8nc"r   c                 X    [        [        5      nU R                  R                  U5        g r   r  rP  ri  rW  r   r  s     r   _testRecvIntoArrayBufferIOTest._testRecvIntoArray      CjC r   c                     [        S5      nU R                  R                  U5      nU R                  U[	        [
        5      5        US [	        [
        5       nU R                  U[
        5        g rJ  )rG  rb  r	  rO  r  rP  r/  s       r   testRecvIntoBytearray"BufferIOTest.testRecvIntoBytearray  sR    o((-S*)3s8nc"r   c                     [        S5      nU R                  R                  [        U5      5      nU R	                  U[        [        5      5        US [        [        5       nU R	                  U[        5        g rJ  )rG  rb  r	  r  rO  r  rP  r/  s       r   testRecvIntoMemoryview#BufferIOTest.testRecvIntoMemoryview  sV    o((C9S*)3s8nc"r   c                 <   [         R                   " SS/[        [        5      -  5      nU R                  R	                  U5      u  p#U R                  U[        [        5      5        UR                  5       nUS [        [        5       nU R                  U[        5        g r.  )r)  r  rP  rb  ro  rO  r  r   r  r  rd  rQ  s        r   testRecvFromIntoArray"BufferIOTest.testRecvFromIntoArray  sp    kk#sSX~.}}2237S*kkm)3s8nc"r   c                 X    [        [        5      nU R                  R                  U5        g r   r3  r4  s     r   _testRecvFromIntoArray#BufferIOTest._testRecvFromIntoArray  r7  r   c                     [        S5      nU R                  R                  U5      u  p#U R                  U[	        [
        5      5        US [	        [
        5       nU R                  U[
        5        g rJ  )rG  rb  ro  rO  r  rP  r?  s        r   testRecvFromIntoBytearray&BufferIOTest.testRecvFromIntoBytearray  sT    o}}2237S*)3s8nc"r   c                     [        S5      nU R                  R                  [        U5      5      u  p#U R	                  U[        [        5      5        US [        [        5       nU R	                  U[        5        g rJ  )rG  rb  ro  r  rO  r  rP  r?  s        r   testRecvFromIntoMemoryview'BufferIOTest.testRecvFromIntoMemoryview  sX    o}}22:c?CS*)3s8nc"r   c                 r    [        S5      nU R                  [        U R                  R                  US5        g )Nr   rK  )rG  r@  r  rb  ro  r4  s     r   testRecvFromIntoSmallBuffer(BufferIOTest.testRecvFromIntoSmallBuffer%  s)    l*dmm&A&A3Mr   c                 B    U R                   R                  [        5        g r   r7  r   s    r   _testRecvFromIntoSmallBuffer)BufferIOTest._testRecvFromIntoSmallBuffer*  r:  r   c                     [        5       nU R                  R                  U5        U R                  R                  US5        g r'  )rG  rb  ro  r4  s     r   testRecvFromIntoEmptyBuffer(BufferIOTest.testRecvFromIntoEmptyBuffer-  s/    k##C(##C+r   r   Nr  )r   r   r   r   r   r   r0  r5  r9  _testRecvIntoBytearrayr<  _testRecvIntoMemoryviewr@  rC  rF  _testRecvFromIntoBytearrayrI  _testRecvFromIntoMemoryviewrL  rO  rR  _testRecvFromIntoEmptyBufferr   r   r   r   r*  r*    sm    B#!# 0# 1#!# "8# #9N
!,
 $: r   r*  i        c                     [        [        S5      (       d  g [        SSS9n U    U  H#  nUR                  S5      (       d  M    SSS5        g   SSS5        g! [        [        [
        4 a     gf = f! , (       d  f       g= f)	z|Check if the TIPC module is loaded

The TIPC module is not loaded automatically on Ubuntu and probably
other Linux distros.
AF_TIPCFz/proc/modulesr   r  ztipc NT)r5   r6   r7   FileNotFoundErrorIsADirectoryErrorrM  r  )r   r
  s     r   isTipcAvailabler_  9  s     69%%73
 
Dw'' 
 
  0/B   
 s(   
A A2A2A2A/.A/2
B z6TIPC module is not loaded, please 'sudo modprobe tipc'c                       \ rS rSrS rSrg)TIPCTestiM  c                 &   [         R                   " [         R                  [         R                  5      n[         R                   " [         R                  [         R                  5      nU R                  UR                  5        U R                  UR                  5        UR                  [         R                  [         R                  S5        [         R                  [        [        [        4nUR                  U5        [         R                  [        [        [        [        [        -
  S-  5      -   S4nUR                  [         U5        UR#                  S5      u  pVU R%                  UR'                  5       U5        U R%                  U[         5        g )Nr   r0  r   rK  )r6   r\  rS  r   rB   rp  rT  rU  TIPC_ADDR_NAMESEQ
TIPC_STYPE
TIPC_LOWER
TIPC_UPPERr   TIPC_ADDR_NAMEr  rK  rP  rn  rO  r)  )r   r  r   srvaddrsendaddrrQ  recvaddrs          r   testRDMTIPCTest.testRDMP  s   mmFNNFOO<mmFNNFOO<		"		"v((&*=*=qA++ZJ()):S*z"9Q!>??D

3!T**H5c"r   r   N)r   r   r   r   rk  r   r   r   r   ra  ra  M  s    #r   ra  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
TIPCThreadableTestie  c                 h    [         R                  R                  XS9  [        R                  U 5        g r   r4  r   s     r   r   TIPCThreadableTest.__init__h  s'    ""4"A%r   c                    [         R                   " [         R                  [         R                  5      U l        U R	                  U R                  R
                  5        U R                  R                  [         R                  [         R                  S5        [         R                  [        [        [        4nU R                  R                  U5        U R                  R                  5         U R                  5         U R                  R!                  5       u  U l        U l        U R	                  U R"                  R
                  5        g r  )r6   r\  ra   r  r   rB   rp  rT  rU  rc  rd  re  rf  r   r   r   r=  r>  r?  )r   rh  s     r   r   TIPCThreadableTest.setUpl  s    ==1C1CD'F--v/B/BAF++ZJ(g  "#'88??#4 	4=		(r   c                    [         R                  " S5        [        R                  " [        R                  [        R                  5      U l        U R                  U R
                  R                  5        [        R                  [        [        [        [        [        -
  S-  5      -   S4nU R
                  R                  U5        U R
                  R                  5       U l        g )NrB  r0  r   )rC  rD  r6   r\  ra   r   r   rB   rg  rd  re  r  rf  rG  r)  cliaddr)r   rd  s     r   r   TIPCThreadableTest.clientSetUpx  s     	

3==1C1CD'%%zS*z"9Q!>??Dxx++-r   c                     U R                   R                  S5      nU R                  U[        5        U R                  U R                  U R
                  5        g rJ  )r>  rL  rO  rP  rt  r?  rC  s     r   rS  TIPCThreadableTest.testStream  s<    iinnT"c"t}}5r   c                 v    U R                   R                  [        5        U R                   R                  5         g r   rV  r   s    r   rX  TIPCThreadableTest._testStream  rZ  r   )r   rt  r>  r?  r  Nr  r[  r   r   r   rn  rn  e  s    &
)
.6
r   rn  c                   2    \ rS rSrS rS rS rS rS rSr	g)	ContextManagersTesti  c                 X   [         R                   " 5        nU R                  UR                  5        S S S 5        U R                  WR                  5        [         R                   " 5        nUR	                  5         S S S 5        U R                  UR                  5        [         R                   " 5        nU R                  [        UR                  S5        S S S 5        U R                  UR                  5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NL= fNrH  )r6   r[  r|  r  rB   r@  r;   r  r  s     r   _testSocketClass$ContextManagersTest._testSocketClass  s    ]]_T\\* %]]_JJL %]]_gt||V< % _ _ _s#   C9*D
3"D9
D

D
D)c                     U R                   R                  5       u  pU R                  UR                  5        UR	                  S5      nUR                  U5        g rJ  r   r=  r   rB   rL  r  r   r>  rd  r  s       r   testCreateConnectionBase,ContextManagersTest.testCreateConnectionBase  ?    YY%%'


#yyTr   c                 h   U R                   R                  5       n[        R                  " U5       nU R	                  UR
                  5        UR                  S5        U R                  UR                  S5      S5        S S S 5        U R                  WR
                  5        g ! , (       d  f       N*= f)NrH  rK  )
r   r)  r6   rB  r[  r|  r  rO  rL  r  r   r  r  s      r   _testCreateConnectionBase-ContextManagersTest._testCreateConnectionBase  sz    ))'')%%g.$T\\*LL TYYt_f5 / 	%	 /.s   AB##
B1c                     U R                   R                  5       u  pU R                  UR                  5        UR	                  S5      nUR                  U5        g rJ  r  r  s       r   testCreateConnectionClose-ContextManagersTest.testCreateConnectionClose  r  r   c                 0   U R                   R                  5       n[        R                  " U5       nUR	                  5         S S S 5        U R                  WR                  5        U R                  [        UR                  S5        g ! , (       d  f       NK= fr}  )
r   r)  r6   rB  rB   r  r|  r@  r;   r  r  s      r   _testCreateConnectionClose.ContextManagersTest._testCreateConnectionClose  sa    ))'')%%g.$JJL /%'4<<8 /.s   B
Br   N)
r   r   r   r   r~  r  r  r  r  r   r   r   r   r{  r{    s    &&9r   r{  c                      \ rS rSr\R
                  " \" \S5      S5      \R                  " SSS5      S 5       5       r
S rS	 rS
 r\R                  " \SL S5      S 5       r\R                  " \SL S5      S 5       rS rSrg)InheritanceTesti  ro  zSOCK_CLOEXEC not definedr0  rx
  r  c                 R   [         R                   " [         R                  [         R                  [         R                  -  5       nU R	                  UR
                  [         R                  5        U R                  UR                  5       5        S S S 5        g ! , (       d  f       g = fr   )r6   r   ra   ro  rO  r  r[  get_inheritabler-  s     r   test_SOCK_CLOEXEC!InheritanceTest.test_SOCK_CLOEXEC  sr     ]]6>>!--0C0CCEHIQVVV%7%78Q..01E E Es   A
B
B&c                     [         R                   " 5       nU   U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = fr  )r6   rO  r  r  s     r   test_default_inheritable(InheritanceTest.test_default_inheritable  s3    }}T113U; TTs   !A
Ac                    [         R                   " 5       nU   UR                  5       nUR                  5         U   U R                  UR	                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr  )r6   rc  rB   rO  r  )r   r  newsocks      r   test_dupInheritanceTest.test_dup  s\    }}hhjGJJL  !8!8!:EB  T  Ts"   #A>!A-A>-
A;	7A>>
Bc                 *   [         R                   " 5       nU   UR                  S5        U R                  UR                  5       S5        UR                  S5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)NTF)r6   set_inheritablerO  r  r  s     r   test_set_inheritable$InheritanceTest.test_set_inheritable  sh    }}  &T113T:  'T113U; TTs   A#B
BNr/  c                    [         R                   " 5       nU   UR                  5       nU R                  UR                  5       S5        [        R                  " U[        R
                  5      nU[        R                  ) -  n[        R                  " U[        R                  U5        U R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)NFT)r6   r+  rO  r  r4   F_GETFD
FD_CLOEXECF_SETFD)r   r  r9  r  s       r   test_get_inheritable_cloexec,InheritanceTest.test_get_inheritable_cloexec  s    }}BT113U; KKEMM2Ee&&&&EKKEMM51T113T: TTs   B0C
Cc                    [         R                   " 5       nU   UR                  5       nU R                  [        R                  " U[        R                  5      [        R
                  -  [        R
                  5        UR                  S5        U R                  [        R                  " U[        R                  5      [        R
                  -  S5        S S S 5        g ! , (       d  f       g = f)NTr   )r6   r+  rO  r4   r  r  r  )r   r  r9  s      r   test_set_inheritable_cloexec,InheritanceTest.test_set_inheritable_cloexec  s    }}BU[[U]];e>N>NN"--/   &U[[U]];e>N>NN  TTs   B<C
C+c                    [         R                  " 5       u  pU R                  UR                  5        U R                  UR                  5        U R	                  UR                  5       S5        U R	                  UR                  5       S5        g r  )r6   rs  r   rB   rO  r  )r   r  rR  s      r   test_socketpairInheritanceTest.test_socketpair  sd    ""$!!++-u5++-u5r   r   )r   r   r   r   r!   r  r5   r6   r   r
  r  r  r  r  r  r4   r  r  r  r   r   r   r   r  r    s    835##Aq"-2 .52<
C< __Ud]L1; 2; __Ud]L1	  2	 6r   r  r*  zSOCK_NONBLOCK not definedc                   R    \ rS rSrS	S jr\R                  " SSS5      S 5       rSrg)
NonblockConstantTesti  c                 T   U(       a  U R                  UR                  [        R                  5        U R                  UR	                  5       U5        U R                  [        R                  " U[        R                  [        R                  5      [        R                  -  5        US:X  a   U R                  UR                  5       5        g U R                  UR                  5       5        g U R                  UR                  [        R                  5        U R                  UR	                  5       S 5        U R                  [        R                  " U[        R                  [        R                  5      [        R                  -  5        U R                  UR                  5       5        g r'  )rO  r  r6   ra   r  r  r4   rg
  rH  rh
  r[  rf
  )r   rE   nonblockrn   s       r   checkNonblock"NonblockConstantTest.checkNonblock   s   QVVV%7%78Q\\^W5OOAu}}bmm<r}}LN!|  1 0QVVV%7%78Q\\^T2Au}}bmm<r}}LNOOAMMO,r   r0  rx
  r  c                 :   [         R                   " [         R                  [         R                  [         R                  -  5       nU R	                  U5        UR                  S5        U R	                  USS9  UR                  S5        U R	                  U5        UR                  S 5        U R	                  USS9  UR                  S5        U R	                  USS9  UR                  S5        U R	                  USS9  S S S 5        [         R                  " 5       n[         R                  " S5        [         R                   " 5        nU R	                  U5        S S S 5        [         R                  " S 5        [         R                   " 5        nU R	                  US5        S S S 5        [         R                  " S5        [         R                   " 5        nU R	                  USS9  S S S 5        [         R                  " S 5        [         R                   " 5        nU R	                  US5        S S S 5        [         R                  " U5        g ! , (       d  f       GNP= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nk= f)NTF)r  g       @rg  re
  )	r6   r   ra   r*  r  r+  r;  rl   rm   )r   rE   ts      r   test_SOCK_NONBLOCK'NonblockConstantTest.test_SOCK_NONBLOCK  s    ]]6>>!--0D0DDFIJq!MM$q51MM% q!LLq51LLq#.MM$q51F $$&  %]]_q!   &]]_q%(   %]]_q#.   &]]_q%(   #7F F  _ _ _ _s=   B8II
I*I;J
I
I'*
I8;
J	
Jr   N)Tre
  )	r   r   r   r   r  r   r
  r  r   r   r   r   r  r    s*    -2 ##Aq"-$ .$r   r  r^  r_  zneed multiprocessingc                   B    \ rS rSr\S 5       rS rS rS rS r	S r
Srg	)
TestSocketSharingi;  c                     UR                  5       nUR                  5       n[        R                  " U5      nUR                  5       u  pVUR	                  U5        UR                  5         UR                  5         g r   )r   r6   	fromsharer=  r  rB   )r  qsdatarv   rE   rR  r  s          r   remoteProcessServer%TestSocketSharing.remoteProcessServer@  sW     %%'U#
 	

7

		r   c                    [         R                  " 5       n[         R                  " U R                  U4S9nUR	                  5         U R
                  R                  UR                  5      nU R
                  R                  5       nU R
                  R                  5         UR                  U5        SnUR                  U5        [        R                  " U5      n/ n UR                  S5      nU(       d  OUR                  U5        M,  UR                  5         SR                  U5      nU R!                  X5        UR                  5         g )Nr	  r#   s
   slapmahfror|  r   )multiprocessingr   Processr  r	  r   sharepidr)  rB   r   r6   rB  rL  r  r  rO  )	r   r  r;  r  rd  rv   rE   mreceiveds	            r   	testShareTestSocketSharing.testShareN  s    
 !!###4+C+C1$O		 yyquu% yy$$&			d  	g $$T*66#;DHHTN	 
 	
	88A;+	r   c                     U R                   R                  [        R                  " 5       5      nU R	                  [
        [        R                  US S 5        U R	                  [
        [        R                  US-   5        g )Nr  rH  )r   r  rH  getpidr@  r  r6   r  )r   r  s     r   testShareLength!TestSocketSharing.testShareLengthq  sT    yyryy{+*f&6&6Sb	B*f&6&6VDr   c                    U R                  UR                  5       S 5        U R                  UR                  5       UR                  5       5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        UR                  S:w  a'  U R                  UR                  UR                  5        g g r'  )rO  r  r2  r  r3  )r   orgothers      r   compareSockets TestSocketSharing.compareSocketsv  s     	)40)5+;+;+=>U\\25::. 99>SYY4 r   c                    U R                   R                  [        R                  " 5       5      n[        R
                  " U5      n U R                  U R                   U5        UR                  5         g ! UR                  5         f = fr   )r   r  rH  r  r6   r  r  rB   )r   r  rE   s      r   testShareLocal TestSocketSharing.testShareLocal  sV    yyryy{+T"			1-GGIAGGIs   A3 3Bc                 (   [         R                  [         R                  /n[         R                  [         R                  /nU H  nU H  n [         R                   " X45      n UR                  [        R                  " 5       5      n[         R                  " U5      n U R                  XW5        UR                  5          UR                  5         M     M     g ! [
         a     M  f = f! UR                  5         f = f! UR                  5         f = fr   )r6   r   r  ra   rI   r;   r  rH  r  r  r  rB   )r   familiestypesr   r  r  r  shareds           r   	testTypesTestSocketSharing.testTypes  s    NNFOO4##V%6%67A#]]10F#!<<		4D#--d3F'++F;LLN     LLNs6   C#:C?C*/C?
C'&C'*C<<C??Dr   N)r   r   r   r   r%  r  r  r  r  r  r  r   r   r   r   r  r  ;  s1    
  !FE
5 #r   r  c                       \ rS rSrSrSrSrSr\R                  r
\S 5       r\S 5       rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S  r&S!r'g")#SendfileUsingSendTesti  z6
Test the send() implementation of socket.sendfile().
i   r   r   c                 B   S nSR                  [        U R                  5       Vs/ s H5  n[        R                  " [
        R                  5      R                  5       PM7     sn5      n[        [        R                  S5       nU" U R                  U R                  5       H  nUR                  U5        M     S S S 5        [        [        R                  S5       nUR                  5       U l        S S S 5        g s  snf ! , (       d  f       NL= f! , (       d  f       g = f)Nc              3   L   #    X:  a  Uv   X-  n X:  a  M  U (       a  U v   g g 7fr   r   )totalsteps     r   chunks0SendfileUsingSendTest.setUpClass.<locals>.chunks  s,     ,
 ,  s   $$r   r  r2   )r  r  BUFSIZErandomchoicestringascii_lettersr  r7   r   r  FILESIZEr  rT  FILEDATA)r  r  r   chunkr   csizes         r   
setUpClass SendfileUsingSendTest.setUpClass  s    	 #(#57#5a !--(<(<=DDF#57 8)""D)Qckk: ; * )""D)Q668CL *)7)) *)s   <C:6C?D?
D
Dc                 L    [         R                  " [         R                  5        g r   )r   r  r  )r  s    r   tearDownClass#SendfileUsingSendTest.tearDownClass  s    ))*r   c                     U R                   R                  [        R                  5        U R                   R	                  5       u  pUR                  U R
                  5        U R                  UR                  5        U$ r   )r   r;  r   r
  r=  TIMEOUTr   rB   rc  s      r   accept_conn!SendfileUsingSendTest.accept_conn  sS    		W112YY%%'
%

#r   c                     / n UR                  U R                  5      nU(       d  OUR                  U5        M6  SR                  U5      $ ry  )rL  r  r  r  )r   r>  r  r  s       r   	recv_dataSendfileUsingSendTest.recv_data  sD    IIdll+EOOE"	 
 xx!!r   c                     [        US5      $ )N_sendfile_use_sendr   r  s     r   meth_from_sock$SendfileUsingSendTest.meth_from_sock  s     t122r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " U5       o2 nU R                  U5      nU" U5      nU R                  XPR                  5        U R                  UR                  5       U R                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   r   r)  r7   r   r  r6   rB  r  rO  r  tellr   r  filer  methsents         r   _testRegularFile&SendfileUsingSendTest._testRegularFile  s    ))'')I$$d+%%g.$&&t,D:DT==1TYY[$--8	 9=....s%   CAB=,C=
C	C
Cc                     U R                  5       nU R                  U5      nU R                  [        U5      U R                  5        U R                  X R
                  5        g r   r  r  rO  r  r  r  r   r>  r  s      r   testRegularFile%SendfileUsingSendTest.testRegularFile  H    !~~d#TDMM2}}-r   c                    U R                   R                  5       n[        R                  " U R                  5      n[
        R                  " U5       o2 nUR                  U5      nU R                  X@R                  5        U R                  UR                  5       U R                  5        U R                  [
        R                  UR                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr   )r   r)  ioBytesIOr  r6   rB  r>  rO  r  r  r@  rK  rL  )r   r  r  r  r  s        r   _testNonRegularFile)SendfileUsingSendTest._testNonRegularFile  s    ))'')zz$--(%%g.$==&DT==1TYY[$--8f66"994A	 9=....s%   C7BC&C7&
C4	0C77
Dc                     U R                  5       nU R                  U5      nU R                  [        U5      U R                  5        U R                  X R
                  5        g r   r  r  s      r   testNonRegularFile(SendfileUsingSendTest.testNonRegularFile  r  r   c                 .   U R                   R                  5       n[        R                  S-   n[	        US5         U R                  [        R                  U5        S S S 5        [	        US5      n[        R                  " U5       oC nU R                  U5      nU" U5      nU R                  US5        U R                  UR                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)N2r  r2   r   )r   r)  r   r  r7   r   r  r6   rB  r  rO  r  )r   r  filenamer  r  r  r  s          r   _testEmptyFileSend(SendfileUsingSendTest._testEmptyFileSend  s    ))'')##c)(D!OOI,,h7 "Hd#%%g.$&&t,D:DT1%TYY[!,	 9=.. "! 9=..s0   !C$DAC5D$
C25
D	?D
Dc                 j    U R                  5       nU R                  U5      nU R                  US5        g ry  )r  r  rO  r  s      r   testEmptyFileSend'SendfileUsingSendTest.testEmptyFileSend	  s.    !~~d#s#r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " U5       o2 nU R                  U5      nU" USS9nU R                  XPR                  S-
  5        U R                  UR                  5       U R                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2     )offsetr  r   s         r   _testOffset!SendfileUsingSendTest._testOffset  s    ))'')I$$d+%%g.$&&t,DT*DT==4#78TYY[$--8	 9=....s%   CA!B?.C?
C		C
Cc                     U R                  5       nU R                  U5      nU R                  [        U5      U R                  S-
  5        U R                  X R
                  SS  5        g )Nr  r  r  s      r   
testOffset SendfileUsingSendTest.testOffset  sT    !~~d#TDMMD$89}}TU34r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " U[        R                  S9nU   U   SnU R                  U5      nU" X$S9nU R                  Xd5        U R                  UR                  5       U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   rg  GKL rS  r   r)  r7   r   r  r6   rB  r   r<  r  rO  r  r   r  r  r  rS  r  r  s          r   
_testCount SendfileUsingSendTest._testCount!  s    ))'')I$$d+''070H0HJ4E&&t,D*DT)TYY[%0 TT44TT%   C
AB9(C
9
C	C


Cc                     SnU R                  5       nU R                  U5      nU R                  [        U5      U5        U R                  X0R                  S U 5        g )Nr%  r  r  rO  r  r  r   rS  r>  r  s       r   	testCountSendfileUsingSendTest.testCount-  sP    !~~d#TE*}}Ve45r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " U[        R                  S9nU   U   SnU R                  U5      nU" X$S9nU R                  Xd5        U R                  UR                  5       U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   rg  r   r&  r'  r(  s          r   _testCountSmall%SendfileUsingSendTest._testCountSmall6  s    ))'')I$$d+''070H0HJ4E&&t,D*DT)TYY[%0 TT44TTr+  c                     SnU R                  5       nU R                  U5      nU R                  [        U5      U5        U R                  X0R                  S U 5        g r  r-  r.  s       r   testCountSmall$SendfileUsingSendTest.testCountSmallB  sP    !~~d#TE*}}Ve45r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " USS9 o2 nSnU R                  U5      nU" USUS9nU R                  Xd5        U R                  UR                  5       US-   5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   r0  rg  駆   )r  rS  )
r   r)  r7   r   r  r6   rB  r  rO  r  r(  s          r   _testCountWithOffset*SendfileUsingSendTest._testCountWithOffsetK  s    ))'')I$$d+%%gq9T44E&&t,DT7DT)TYY[%$,7 DH994499s%   
B>AB-B>-
B;	7B>>
Cc                     SnU R                  5       nU R                  U5      nU R                  [        U5      U5        U R                  X0R                  SUS-    5        g )Nr8  r9  r-  r.  s       r   testCountWithOffset)SendfileUsingSendTest.testCountWithOffsetU  sT    !~~d#TE*}}T%*=>r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " U5       o2 nUR                  S5        U R                  U5      nU R                  [        XB5        U R                  [        UR                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   F)r   r)  r7   r   r  r6   rB  r+  r  r@  r  r>  r   r  r  r  r  s        r   _testNonBlocking&SendfileUsingSendTest._testNonBlocking^  s    ))'')I$$d+%%g.$U#&&t,Dj$5j$-->	 9=....s%   C	AB8'C	8
C	C		
Cc                 t    U R                  5       nUR                  S5      (       a  U R                  S5        g g )Nr   z$was not supposed to receive any data)r  rL  r9  r   r>  s     r   testNonBlocking%SendfileUsingSendTest.testNonBlockingg  s/    !99T??II<= r   c                    U R                   R                  5       n[        [        R                  S5      n[
        R                  " U[        R                  S9nU   U   U R                  U5      nU" U5      nU R                  XPR                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   rg  )r   r)  r7   r   r  r6   rB  r   r<  r  rO  r  r   s         r   _testWithTimeout&SendfileUsingSendTest._testWithTimeoutn  s    ))'')I$$d+''070H0HJ4&&t,D:DT==1 TT44TTs$   B45B#B4#
B1	-B44
Cc                     U R                  5       nU R                  U5      nU R                  [        U5      U R                  5        U R                  X R
                  5        g r   r  r  s      r   testWithTimeout%SendfileUsingSendTest.testWithTimeoutx  r  r   c                 p   U R                   R                  5       n[        [        R                  S5       n[
        R                  " U5       nUR                  S5        U R                  U5      nU R                  [        XB5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr2   g{Gz?)r   r)  r7   r   r  r6   rB  r;  r  r@  r  r@  s        r   _testWithTimeoutTriggeredSend3SendfileUsingSendTest._testWithTimeoutTriggeredSend  s    ))''))""D)T))'2d%**40!!,; 3 *)22 *)s#   B'9BB'
B$	 B''
B5c                 r    U R                  5       nUR                  S5        [        R                  " S5        g )NiX r   )r  rL  rC  rD  rD  s     r   testWithTimeoutTriggeredSend2SendfileUsingSendTest.testWithTimeoutTriggeredSend  s'    !		%

1r   c                     g r   r   r   s    r   _test_errors"SendfileUsingSendTest._test_errors  r{  r   c           
         [        [        R                  S5       n[        R                  " [        R                  S9 nU R                  U5      nU R                  [        SX15        S S S 5        S S S 5        [        [        R                  SS9 n[        R                  " 5        nU R                  U5      nU R                  [        SX15        S S S 5        S S S 5        [        [        R                  S5       n[        R                  " 5        nU R                  U5      nU R                  [        SX1SS	9  U R                  [        SX1S
S	9  U R                  [        SX1SS	9  U R                  [        SX1SS	9  S S S 5        S S S 5        g ! , (       d  f       GN)= f! , (       d  f       GN3= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N]= f! , (       d  f       g = f)Nr2   r  ra   r   r  zbinary modezpositive integerr  r&  rB  r   r  )	r7   r   r  r6   rI   r  r  r  r   )r   r  rE   r  s       r   test_errors!SendfileUsingSendTest.test_errors  s   )""D)TF$5$56!**1-&&t; 7 *
 )""W5A**1-&&t; ! 6
 )""D)TA**1-&&y2D'+ ' >&&y2D'+ ' >&&z3E'+ ' <&&z3E'+ ' = ! *) 76 *) ! 65 ! *)sk   #F)F	'FF>%)F-F>8G A*G8G 	
F	F
F*-
F;	7F>>
G
G	G  
G.r   N)(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/  r2  r5  r:  r=  rA  rE  rH  rK  rN  rQ  rT  rW  r   r   r   r   r  r    s     !HGH&&G5 5$ + +"39.A.
-$95
16
168??>2.<=r   r  r>  z%os.sendfile() required for this test.c                       \ rS rSrSrS rSrg)SendfileUsingSendfileTesti  z:
Test the sendfile() implementation of socket.sendfile().
c                     [        US5      $ )NrL  r  r  s     r   r  (SendfileUsingSendfileTest.meth_from_sock  s    t566r   r   N)r   r   r   r   r   r  r   r   r   r   rZ  rZ    s    7r   rZ  zAF_ALG requiredc                       \ rS rSrS r\R                  " SS5      S 5       rS r\R                  " SS5      S 5       r	\R                  " SS	5      S
 5       r
\R                  " SS5      S 5       rS rS rSrg)LinuxKernelCryptoAPIi  c                    [         R                   " [         R                  [         R                  S5      n UR                  X45        U$ ! [         a5  nUR                  5         [        R                  " [        U5      X5      eS nAff = fr'  )	r6   rW   rR   r   r]  rB   r!   r"   r  )r   typr  r  r   s        r   
create_algLinuxKernelCryptoAPI.create_alg  sj    }}V]]F,A,A1E	IIsk" K ! 	7JJL##CFC66	7s   A
 

B	0BB	rJ  rQ  c                    [         R                  S5      nU R                  SS5       nUR                  5       u  p4U   UR	                  S5        U R                  UR                  S5      U5        S S S 5        UR                  5       u  p4U   UR                  S[        R                  5        UR                  S[        R                  5        UR                  S[        R                  5        UR                  S	5        U R                  UR                  S5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)
N@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adhashsha256s   abcr     a   b   cr   )
r  fromhexra  r=  r  rO  rL  rW  r6   MSG_MORE)r   r4  algoopr   s        r   test_sha256 LinuxKernelCryptoAPI.test_sha256  s    == ": ;__VX.$KKMEB

6"  x8  KKMEBfoo.foo.foo.  x8  /.
  /.s;   E3D00EBEE0
D>	:E
E	E
E c                    SnSn[         R                  S5      nU R                  SS5       nUR                  [        R
                  [        R                  U5        UR                  5       u  pVU   UR                  U5        U R                  UR                  S5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ns   Python loves AF_ALGs   what do ya want for nothing?(193dbb43c6297b47ea6277ec0ce67119a3f3aa66re  z
hmac(sha1)r  )r  rj  ra  rp  r6   SOL_ALGALG_SET_KEYr=  r  rO  rL  )r   keyr  r4  rl  rm  r   s          r   test_hmac_sha1#LinuxKernelCryptoAPI.test_hmac_sha1  s     %.==!KL__V\2dOOFNNF,>,>DKKMEB

4   x8  32  32s$   AC03B4#C4
C	>C
Cr=  c                    [         R                  S5      n[         R                  S5      nSn[         R                  S5      n[        U5      nU R                  SS5       nUR	                  [
        R                  [
        R                  U5        UR                  5       u  pxU   UR                  [
        R                  U[
        R                  S9  UR                  U5        U R                  UR                  U5      U5        S S S 5        UR                  5       u  pxU   UR                  U/[
        R                  US9  U R                  UR                  U5      U5        S S S 5        S	n	U/U	-  n
UR                  5       u  pxU   UR                  U
[
        R                  US9  UR                  XY-  5      nS S S 5        U R                  [        W5      XY-  5        U R                  US U U5        UR                  5       u  pxU   UR                  U/[
        R                  US9  UR                  XY-  5      nS S S 5        U R                  [        W5      XY-  5        U R                  XU	-  5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN4= f! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       g = f)
N 06a9214036b8a15b512e03d534120006 3dafba429d9eb430b422da802c9fac41s   Single block msg e353779c1079aeb82708942dbe77181askcipherzcbc(aes))rm  ivr  )rm  r|  rK  )r  rj  r  ra  rp  r6   rr  rs  r=  sendmsg_afalgALG_OP_ENCRYPTrk  r  rO  rL  ALG_OP_DECRYPT)r   rt  r|  rQ  
ciphertextmsglenrl  rm  r   
multiplierlongmsgencdecs                r   test_aes_cbc!LinuxKernelCryptoAPI.test_aes_cbc  sE   mm>?]]=>!]]#EF
S__Z4OOFNNF,>,>DKKMEB  F$9$9b'- ! 8

3  *=	  KKMEB  *$*$9$9b ! B  #6  Jej(GKKMEB  $*$9$9b ! Bggf12  SXv':;S&\:6KKMEB  #$*$9$9b ! Bggf12  SXv':;S
"23A 54    7 54sp   AK#A I<KAJ!$K3J 8AK4J1:9K<
J	K
J	K 
J.	*K1
J?	;K
Kr  c                 	   [         R                  " S5      nUb  US:  a  US:  a  U R                  S5        [        R	                  S5      n[        R	                  S5      n[        R	                  S5      n[        R	                  S5      n[        R	                  S	5      n[        R	                  S
5      n[        U5      n[        U5      n	U R                  SS5       n
U
R                  [        R                  [        R                  U5        U
R                  [        R                  [        R                  S U5        U
R                  5       u  pU   UR                  [        R                  UU	[        R                  S9  UR!                  U[        R                  5        UR!                  U5        UR#                  U	[        U5      -   U-   5      nU R%                  XmX*  5        U R%                  X}U* S  5        S S S 5        U
R                  5       u  pU   XT-   nUR                  U/[        R                  UU	S9  UR#                  U	[        U5      -   U-   5      nU R%                  XmX*  5        U R%                  X}U* S  5        S S S 5        [&        R(                  " S5      R*                  nU
R                  5       u  pU   XT-   nUR-                  U/[        R                  [        R.                  U" [        R                  5      /[        R                  [        R0                  U" [        U5      5      U-   /[        R                  [        R2                  U" U	5      /45        UR#                  [        U5      U-   5      nU R%                  XmX*  5        U R%                  X}U* S  5        S S S 5        U
R                  5       u  pU   XV-   U-   nUR                  U/[        R4                  UU	S9  UR#                  [        U5      U-
  5      nU R%                  XMU	S  5        S S S 5        S S S 5        g ! , (       d  f       GN?= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       NL= f! , (       d  f       g = f)NLinux)rx
  r  )rx
  r  zupstream Linux kernel issue c939cc13397c1d37de6ae0e1cb7c423cb3d8cc017cbb89b39e0f67e2 c3b3c41f113a31b73d9a5cd432103069 24825602bd12a984e0092d3e448eda5f 93fe7d9e9bfd10348a5606e5cafa7354 0032a1dc85f1c9786925a2e71d8272ddaeadzgcm(aes))rm  r|  assoclenr  )rm  r|  r  r3   )r   _get_kernel_versionr   r  rj  r  ra  rp  r6   rr  rs  ALG_SET_AEAD_AUTHSIZEr=  r}  r~  rk  r  rL  rO  r9   Structr  r  
ALG_SET_OP
ALG_SET_IVALG_SET_AEAD_ASSOCLENr  )r   kernel_versionrt  r|  plainassocexpected_ctexpected_tagtaglenr  rl  rm  r   resrQ  pack_uint32s                   r   test_aead_aes_gcm&LinuxKernelCryptoAPI.test_aead_aes_gcm  s    44W=%(^g-E;<mm>?]]56@A@Amm$FG}}%GH\"u:__VZ0DOOFNNF,>,>DOOFNNF,H,H &* KKMEB  F$9$9b*2&// ! K

5&//2

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

Ennf&7&7VEZEZ9[\nnf&7&7SW9MPR9RSnnf&B&BKPXDYZ ggc#h/0  (7.CD  F78}=  KKMEB)L8  #6+@+@R*2 ! 4ggc#h/0  HI7 Y 10    Y 10sq   A4Q8B)P2:Q8A/Q<Q8C*Q+Q8AQ'!Q82
Q	<Q8
Q	Q8
Q$	 Q8'
Q5	1Q88
Rc                    U R                  SS5       n[        R                  " S5      nUR                  [        R
                  [        R                  U5        UR                  5       u  p4U   UR                  S5      nU R                  [        U5      S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrngdrbg_pr_sha256r  )ra  rH  urandomrp  r6   rr  rs  r=  rL  rO  r  )r   rl  
extra_seedrm  r   rns         r   test_drbg_pr_sha256(LinuxKernelCryptoAPI.test_drbg_pr_sha256T  s     __U$45BJOOFNNF,>,>
KKKMEBWWR[  R"- 	 65 	 65s$   AB<--B+B<+
B9	5B<<
C
c                 R   [         R                   " [         R                  [         R                  S5      nU   U R                  [        5         UR                  5         S S S 5        U R                  [        5         UR                  S S9  S S S 5        U R                  [        5         UR                  S5        S S S 5        U R                  [        5         UR                  [         R                  S S9  S S S 5        U R                  [        5         UR                  [         R                  SS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N[= f! , (       d  f       g = f)Nr   )rm  r   )rm  r  r  )r6   rW   rR   r@  r   r}  r~  r  s     r   test_sendmsg_afalg_args,LinuxKernelCryptoAPI.test_sendmsg_afalg_args_  s   }}V]]F,A,A1E""9-""$ . ""9-""d"+ . ""9-""1% . ""9-""f&;&;d"K . ""9-""f&;&;b"I . T-- .- .- .- .- Ts   FEF;EF(E%:FE66FF2F
E	F
E"	F%
E3	/F6
F	 F
F	F
F&c                    [         R                   " [         R                  [         R                  S5      nU R                  UR                  5        U R                  [        5         UR                  S5        S S S 5        U R                  [        S5         UR                  S5        S S S 5        U R                  [        5         UR                  S5        S S S 5        U R                  [        S5         UR                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Na= f! , (       d  f       g = f)Nr   )tttttttttttttr  ztype too long)ttttttttttttttr  )r  ?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnzname too long)r  @nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn)
r6   rW   rR   r   rB   r@  r]  r   r  r  r  s     r   test_length_restriction,LinuxKernelCryptoAPI.test_length_restrictionq  s    }}V]]F,A,A1E

# 01II() 2##J@II() A 01II() 2##J@II() A@ 21@@ 21@@s0   %DD D14E
D 
D.1
D?
Er   N)r   r   r   r   ra  r   r
  rn  ru  r  r  r  r  r  r   r   r   r   r^  r^    s    	 ##Aq)9 *9"9 ##Aq)&4 *&4P ##Aq)B8 *B8H ##Aq). *.J$*r   r^  rs   ru  c                       \ rS rSrS rSrg)TestMacOSTCPFlagsi  c                 B    U R                  [        R                  5        g r   )r  r6   TCP_KEEPALIVEr   s    r   test_tcp_keepalive$TestMacOSTCPFlags.test_tcp_keepalive  s    ,,-r   r   N)r   r   r   r   r  r   r   r   r   r  r    s    .r   r  winzrequires Windowsc                   "    \ rS rSr1 SkrS rSrg)TestMSWindowsTCPFlagsi  >   
TCP_MAXSEGTCP_KEEPCNTTCP_NODELAYTCP_FASTOPENTCP_KEEPIDLETCP_KEEPINTVLc                     [        [        5       Vs/ s H  oR                  S5      (       d  M  UPM     nnU Vs/ s H  oU R                  ;  d  M  UPM     nnU R	                  / US5        g s  snf s  snf )NTCPzANew TCP flags were discovered. See bpo-32394 for more information)dirr6   r  knownTCPFlagsrO  )r   rE   providedunknowns       r   test_new_tcp_flags(TestMSWindowsTCPFlags.test_new_tcp_flags  sa    "6{B{!ll5.AA{B&Fh43E3E*E1hFWO	Q CFs   A.A.A3A3r   N)r   r   r   r   r  r  r   r   r   r   r  r    s    MQr   r  c                   t   \ rS rSrS rS rS r\R                  " \	" \
S5      (       + =(       d    \	" \
S5      (       + S5      \R                  " \R                  S5      S	 5       5       r\R                  " \R                   " 5       (       + S
5      \R                  " \R                  S5      S 5       5       rSrg)CreateServerTesti  c                 T   [         R                  " 5       n[        R                  " SU45       nU R	                  UR                  5       S   S5        U R	                  UR                  5       S   U5        S S S 5        [         R                  (       au  [        R                  " SU4[        R                  S9 nU R	                  UR                  5       S   S5        U R	                  UR                  5       S   U5        S S S 5        g g ! , (       d  f       N= f! , (       d  f       g = f)Nr(  r   r   r+  r  )r   rT  r6   create_serverrO  r)  r  r  r   r   r  s      r   test_addressCreateServerTest.test_address  s    --/!!;"56$T--/2K@T--/2D9 7 %%%%udm-3__>AE  !1!1!3A!6>  !1!1!3A!6=> > & 76> >s   AD7AD
D
D'c                 Z   [         R                  " S5       nU R                  UR                  [         R                  5        U R                  UR
                  [         R                  5        S S S 5        [        R                  (       a  [         R                  " S[         R                  S9 nU R                  UR                  [         R                  5        U R                  WR
                  [         R                  5        S S S 5        g g ! , (       d  f       N= f! , (       d  f       g = f)Nr'  r+  r   r  )
r6   r  rO  r2  r   r  ra   r   r  r  )r   r  rE   s      r   test_family_and_type%CreateServerTest.test_family_and_type  s    !!"23tT[[&..9TYY(:(:; 4 %%%%jIQ  6??;  F,>,>? JI & 43 JIs   AD,AD
D
D*c                 v   [        [        S5      (       d4  U R                  [        5         [        R                  " SSS9  S S S 5        g [        R                  " S5       nUR                  [        R                  [        R                  5      nU R                  US5        S S S 5        [        R                  " SSS9 nUR                  [        R                  [        R                  5      nU R                  US5        S S S 5        g ! , (       d  f       g = f! , (       d  f       N~= f! , (       d  f       g = f)NSO_REUSEPORT)r  r   T)
reuse_portr   )
r5   r6   r@  r  r  rZ  rT  r  rO  r  )r   r  r  s      r   test_reuse_port CreateServerTest.test_reuse_port  s    v~.."":.$$%5$G /. %%&674oof&7&79L9LM  a( 8 %%&64HDoof&7&79L9LM##C+ IH /. 87 IHs%   D AD>AD*
D
D'*
D8r[  rH
  rI
  rv  c                 ~    [         R                  " S[         R                  S9 nS S S 5        g ! , (       d  f       g = f)Nr  r  )r6   r  r  r  s     r   test_ipv6_only_default'CreateServerTest.test_ipv6_only_default  s$    
 !!*V__EEEEs   .
<dualstack_ipv6 not supportedc                     [         R                  " S[         R                  SS9 nU R                  UR                  [         R                  5        S S S 5        g ! , (       d  f       g = f)Nr  Tr2  dualstack_ipv6)r6   r  r  rO  r2  r  s     r   test_dualstack_ipv6_family+CreateServerTest.test_dualstack_ipv6_family  sH     !!*V__157:>T[[&//:7 7 7s   +A
A'r   N)r   r   r   r   r  r  r  r!   r  r5   r  r  r   r  r  r6   has_dualstack_ipv6r  r   r   r   r   r  r    s    	>@
, __.99 9 -8879 335RSL T9L __224435335RS; T5;r   r  c                      \ rS rSr\R
                  rS rS rS r	\
R                  " \R                  S5      S 5       r\
R                  " \R"                  " 5       (       + S5      \
R                  " \R                  S5      S 5       5       r\
R                  " \R"                  " 5       (       + S5      \
R                  " \R                  S5      S	 5       5       rS
rg)CreateServerFunctionalTesti  c                 .  ^ ^ UU 4S jn[         R                  " 5       mUR                  T R                  5        [         R                  " X!4S9nUR
                  " 5         T R                  UR                  T R                  5        TR                  5         g )Nc                 F  > U    U R                  5       u  pU   TR                  TR                  5        UR                  S5      nU(       d   S S S 5        S S S 5        g UR	                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frJ  )r=  r   rn   rL  r  )r  r>  r   rQ  rb
  r   s       r   run3CreateServerFunctionalTest.echo_server.<locals>.run  sm    ++-JJt||,))D/C	   LL%  T s.   B5BBB0B
B	B
B r  )	r   r   r;  rn   r	  r	  r   r  r   )r   r  r  r   rb
  s   `   @r   echo_server&CreateServerFunctionalTest.echo_server  s`    	& !%!!8<T\\2		r   c                    [         R                   " US9 nUR                  U R                  5        UR                  U5        UR	                  S5        U R                  UR                  S5      S5        S S S 5        g ! , (       d  f       g = f)Nr  rH  rK  )r6   r;  rn   rG  r  rO  rL  )r   rd  r2  r  s       r   echo_client&CreateServerFunctionalTest.echo_client  s\    ]]&)TOODLL)LLLL TYYt_f5	 *))s   AA==
Bc                     [         R                  " 5       n[        R                  " SU45       nU R	                  U5        U R                  SU4[        R                  5        S S S 5        g ! , (       d  f       g = f)NrG  r(  )r   rT  r6   r  r  r  r   r  s      r   	test_tcp4$CreateServerFunctionalTest.test_tcp4  sW    --/!!2t*-T"k40&..A .--s   4A++
A9rv  c                    [         R                  " 5       n[        R                  " SU4[        R                  S9 nU R                  U5        U R                  SU4[        R                  5        S S S 5        g ! , (       d  f       g = f)NrG  r  r+  r   rT  r6   r  r  r  r  r  s      r   	test_tcp6$CreateServerFunctionalTest.test_tcp6  sd    --/!!2t*)/:=AT"eT]FOO<: : :s   4A88
Br  c                    [         R                  " 5       n[        R                  " SU4[        R                  SS9 nU R                  U5        U R                  SU4[        R                  5        S S S 5        g ! , (       d  f       g = f)NrG  Tr  r(  )r   rT  r6   r  r  r  r  r   r  s      r   test_dual_stack_client_v44CreateServerFunctionalTest.test_dual_stack_client_v4  si     --/!!2t*V__157:>T"k40&..A7 7 7   4A99
Bc                    [         R                  " 5       n[        R                  " SU4[        R                  SS9 nU R                  U5        U R                  SU4[        R                  5        S S S 5        g ! , (       d  f       g = f)NrG  Tr  r+  r  r  s      r   test_dual_stack_client_v64CreateServerFunctionalTest.test_dual_stack_client_v6	  sh     --/!!2t*V__157:>T"eT]FOO<7 7 7r  r   N)r   r   r   r   r   r<  rn   r  r  r  r!   r  r   r  r  r  r6   r  r  r  r   r   r   r   r  r    s    &&G$6B 335RS= T= __224435335RSB T5B __224435335RS= T5=r   r  send_fdsrecv_fdsc                       \ rS rSrS rSrg)SendRecvFdsTestsi  c           	      D   S nS n[        S5       Vs/ s H  n[        R                  " 5       PM     nnU R                  X5        U VVs/ s H  u  pVUPM	     nnn[        R
                  " [        R                  [        R                  5      u  pU   U	   [        R                  " U[        /U5        [        R                  " U	[        [        5      S-  [        U5      S-  5      u  ppU R                  X+5        S S S 5        S S S 5        U R                  W
[        5        U R                  [        W5      [        U5      5        U R                  WS5        [        U5       H7  u  pUu  pV[        R                  " U[        U5      R!                  5       5        M9     [        U5       HE  u  p[        R"                  " US5      nU R                  U[        U5      R!                  5       5        MG     g s  snf s  snnf ! , (       d  f       GN	= f! , (       d  f       GN= f)Nc                 r    U  H1  u  p[         R                  " U5        [         R                  " U5        M3     g r   rH  rB   )pipesrg  fd2s      r   close_pipes8SendRecvFdsTests.testSendAndRecvFds.<locals>.close_pipes  s$    ! "r   c                 B    U  H  n[         R                  " U5        M     g r   r  )r  r9  s     r   	close_fds6SendRecvFdsTests.testSendAndRecvFds.<locals>.close_fds  s     r   r  r0  r   r|  )r  rH  piper   r6   rs  r  ra   r  rP  r  r  rO  r#  r  r  r  rT  )r   r  r
  r   r  rfdwfdr  rX
  rY
  rQ  fds2r  rd  r  r  s                   r   testSendAndRecvFds#SendRecvFdsTests.testSendAndRecvFds  s   	
	
 %*"I.IqI.+#()5xss5) ((9K9KLEOOEC5#.%+__UCHqL#c(UV,%W"CuOOI,	 U 	c"TCH-" $E*JEHCHHS#e*++-. + $D/JE773$DTCJ$5$5$78 *- /) EUUs0   G3G8HA&G><H>
H	H
Hr   N)r   r   r   r   r  r   r   r   r   r  r    s    #9r   r  c                  x    [         R                  " 5       n [        R                  " [         R                  /U Q76   g r   )r	   threading_setupr!   addModuleCleanupthreading_cleanup)thread_infos    r   setUpModuler  =  s*    "224K.@@O;Or   __main__)r!   r   testr   test.supportr   r   r   r   r	   _threadr   r)  r+   r  r  r  rR  r  rH  r  ry   r   r  r  r  r  r6   r  r9   rx   rp  r   rC  r  rz   weakrefr
   r  r=  r4   r  requires_working_socketr(  r  rP  rF  r:  systemr   releaseWSLr  r/   r=   rF   rK   rO   rS   rX   r[   r^   rc   rf   rj   rf  rp   r~   HAVE_SOCKET_CANHAVE_SOCKET_CAN_ISOTPHAVE_SOCKET_CAN_J1939HAVE_SOCKET_RDSHAVE_SOCKET_ALGHAVE_SOCKET_QIPCRTRHAVE_SOCKET_VSOCKr5   r  r  r  HAVE_SOCKET_UDPLITEHAVE_SOCKET_BLUETOOTHr  HAVE_SOCKET_HYPERVr  r9  r5  r   r   r   r   r   r   r   r  r  r  r  r#  r  r2  r]  ro  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r>  ra  rm  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	  rh	  rk	  rm	  ro	  r  ru	  rx	  rz	  r|	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r
  r
  r,
  r`
  r
  r	  r2  r6  r8  r<  r>  r;  r@  rE  rG  ri  r  r  r  r  r  r  r  r*  rd  re  rf  r_  ra  rn  r{  r  r  r  r  r  rZ  r^  r  r  r  r  r  r  r  r   mainr   r   r   <module>r,     s           	 	   	     	      
         t ,)009 	oo5 ("2"2"44:(
 . .  " #$.0 .0 "$"$*, &(  F%& KIH$8$8$:$D$Dr$IJ  /0 :< (*  [[&&
	H%% 	H%% 7 70+H%% 0+f7H%% 7 m m^,M> ,,M> , 
(
35, 1> ,5,,M> ,(,M> ,, 
$-	<=	&
13	WY!^DF#H$5$5~ #F3 > .#J3/ 3B,X&& ,H1X&& 10~ ,nn ,<!!76!!H3 3A' A
6> 
6A, A@, @Xl X2\ 2 L  
A= AY} Y/.F3>fG** fGR' 
_&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k#** k#Bk#\ 
'>@/7h'' /7@/7d!& !D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z!0 z!zq7 ql	6:4k	
 fmmY'	/1G 	 (	 fmmY'	\#9 	 (	 fmm^,	)+A 	 -	17;5|1 fmmY'	]//1OPz<(	02I 	 ) Q (	 fmmY'	]//1OPz<(	l$; 	 ) Q (	 fmm^,	]//1OPz<(	*,C 	 ) Q -	 fmmY'	]//1OPfn%z<(	&:&=	 ) & Q (	 fmm^,	]//1OPfn%z<(	*:*>*A	 ) & Q -	 
(
35	!::4o	5	
 
(
35fmmY'	35O 	 (5	 
(
35fmmY'	'A 	 (5	 
(
35fmm^,	-/I 	 -5	 
(
351";;57G151 fmmY'	]//1OP	(
35z<(	46Q 	 )5 Q (
	 fmmY'	]//1OP	(
35z<(	,(C 	 )5 Q (
	 fmm^,	]//1OP	(
35z<(	.0K 	 )5 Q -
	 fmmY'	]//1OP	(
35fn%z<(	*>&A	 ) &5 Q (	 fmm^,	]//1OP	(
35fn%z<(	.>*>*E	 ) &5 Q -		55{	 fmmY'	')? 	 (	 fmmY'	\#<+	 (	 fmm^,	)+D/	 -	
	$<$<$<n	
 fmmY'	NOy-8	.0M 	 9 P (	 fmmY'	NOy-8	RL*C9	R 9 P (	R fmm^,	NOy-8	R 02K =	R 9 P -	R	$<$<n	 fmmY'fi 	.0M 	 ! (	 fmmY'fi 	L*C9	 ! (	 fmm^,fi 	 02K =	 ! -	 fmmY	2fi|<	0M 	 = 3	 fmmY7fi|<	%5}%B	 = 8	" "@ fn%	WVW-M1MBD$M!7 $MD &$MR fn%	WVW-M1MBD3F!7!9;3FD &3Fl) ( #.  #Fg~ gT/ D`1 `FkG(? kG\*A 
+B 
)@ *A .E "F ")< P5 1 1 P5fF4m^ F4R>]N >>75] 75rK] K. 
(
35K* K5K.$X&& $. 
S\\%99;PQ4H!2!2 4H R4Hn 
WVY/1LMH7X&& H7 NH7VP:& P:f 


( 
_&MO#x   #O#, 
_&MO$**N $O$N)9/ )9X@6h'' @6F 
WV_5029$8,, 9$29$x 
RWW_&89	_&<=b# b# > :b#JF=1 F=R 
WR,<>7 5 7>7 
_&78J*8,, J* 9J*Z 
S\\X-/DE.)) . F.
 
S\\,,U35GHQH-- Q IQ,0;x(( 0;f>=!2!2 >=@ fj!fj!fi $9x(( $9 ! " "$9NP
 zMMO `  O  E  I   Gs\   
AK8 AL AL 2AL% K8ALLALLALLALLAL"L!AL"L%AL1L0AL1