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

3==&2D2DE'i6))6+@+@AA"C#y)*r@   c                     	 | j                   j                  d      }| j                  t               y # t        $ r$}| j                  t	        |             Y d }~?d }~ww xY wN   )r   recvPermissionErrorry   reprassertEqualMSG)r[   msgexcs      r   
testStreamz(ThreadedVSOCKSocketStreamTest.testStream  sP    	%))..&C 	c"  	%MM$s)$$	%s   4 	A!AA!c                 v    | j                   j                  t               | j                   j                          y r=   r   sendr   r"   rZ   s    r   _testStreamz)ThreadedVSOCKSocketStreamTest._testStream       cr@   Nr   rb   rc   rd   r   r\   r   r   r  re   r@   r   r   r     s    &)+#r@   r   c                   .    e Zd Z	 ddZd Zd Zd Zd Zy)SocketConnectedTestc                 2    t         j                  | |       y r   )r   r   r   s     r   r   zSocketConnectedTest.__init__      &&t
&Cr@   c                     t         j                  |        | j                          | j                  j	                         \  }}|| _        y r=   )r   r\   r   rV   r   cli_connr[   r   addrs      r   r\   zSocketConnectedTest.setUp  s;    ##D) 	  "YY%%'
dr@   c                 p    | j                   j                          d | _         t        j                  |        y r=   )r
  r"   r   r_   rZ   s    r   r_   zSocketConnectedTest.tearDown"  s'    &&t,r@   c                     t         j                  |        | j                  j                  t        | j
                  f       | j                  | _        y r=   )r   r   r   r   r   rX   	serv_connrZ   s    r   r   zSocketConnectedTest.clientSetUp'  s6    ))$/$		*+r@   c                 p    | j                   j                          d | _         t        j                  |        y r=   )r  r"   r   r   rZ   s    r   r   z"SocketConnectedTest.clientTearDown,  s'    ,,T2r@   Nr   )rb   rc   rd   r   r\   r_   r   r   re   r@   r   r  r    s!    D-
"
3r@   r  c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	SocketPairTestc                     t         j                  j                  | |       t        j                  |        d | _        d | _        y r   )r   r   r   r   r   rV   r   s     r   r   zSocketPairTest.__init__3  s7    ""4J"?%	r@   c                 *    t        j                         S r=   )r   
socketpairrZ   s    r   r  zSocketPairTest.socketpair9  s      ""r@   c                 >    | j                         \  | _        | _        y r=   )r  rV   r   rZ   s    r   r\   zSocketPairTest.setUp=  s    "oo/	48r@   c                 ^    | j                   r| j                   j                          d | _         y r=   r^   rZ   s    r   r_   zSocketPairTest.tearDown@  s    99IIOO	r@   c                      y r=   re   rZ   s    r   r   zSocketPairTest.clientSetUpE      r@   c                     | j                   r| j                   j                          d | _         t        j                  |        y r=   r   rZ   s    r   r   zSocketPairTest.clientTearDownH  s,    88HHNN%%d+r@   Nr   )	rb   rc   rd   r   r  r\   r_   r   r   re   r@   r   r  r  1  s     #0
,r@   r  c                        e Zd Z	 d Zd Zd Zy)SocketTestBasec                     | j                         | _        | j                  | j                         | j	                          y r=   )	newSocketrV   rv   close_server
bindServerrZ   s    r   r\   zSocketTestBase.setUp^  s,    NN$	))*r@   c                 F    | j                   j                          d | _         y r=   r^   rZ   s    r   r  zSocketTestBase.close_serverc  r`   r@   c                 z    	 | j                  | j                         | j                  j                         | _        y r=   )bindSockrV   r   	serv_addrrZ   s    r   r   zSocketTestBase.bindServerg  s)    Gdii ..0r@   N)rb   rc   rd   r\   r  r   re   r@   r   r  r  U  s    
1r@   r  c                         e Zd Z	  fdZ xZS )SocketListeningTestMixinc                 V    t         |           | j                  j                          y r=   )superr\   rV   rY   r[   	__class__s    r   r\   zSocketListeningTestMixin.setUpp  s    		r@   rb   rc   rd   r\   __classcell__r*  s   @r   r&  r&  m  s    / r@   r&  c                   8     e Zd Z	  fdZd Zd Zd Zd Z xZS )ThreadedSocketTestMixinc                 N    t        |   |i | t        j                  |        y r=   )r(  r   r   r[   argskwargsr*  s      r   r   z ThreadedSocketTestMixin.__init__|  s#    $)&)%r@   c                 N    | j                         | _        | j                          y r=   )newClientSocketr   
bindClientrZ   s    r   r   z#ThreadedSocketTestMixin.clientSetUp  s    '')r@   c                 $    	 | j                         S r=   )r  rZ   s    r   r5  z'ThreadedSocketTestMixin.newClientSocket  s    4~~r@   c                 z    	 | j                  | j                         | j                  j                         | _        y r=   )r#  r   r   r   rZ   s    r   r6  z"ThreadedSocketTestMixin.bindClient  s)    Fdhh,,.r@   c                 p    | j                   j                          d | _         t        j                  |        y r=   r   rZ   s    r   r   z&ThreadedSocketTestMixin.clientTearDown  r   r@   )	rb   rc   rd   r   r   r5  r6  r   r,  r-  s   @r   r/  r/  u  s!    & /
,r@   r/  c                   >     e Zd Z	  fdZ fdZ fdZ fdZ xZS )ConnectedStreamTestMixinc                     t         |           | j                          | j                  j	                         \  }}|| _        y r=   )r(  r\   r   rV   r   r
  )r[   r   r  r*  s      r   r\   zConnectedStreamTestMixin.setUp  s7     	  "YY%%'
dr@   c                 d    | j                   j                          d | _         t        |           y r=   )r
  r"   r(  r_   r)  s    r   r_   z!ConnectedStreamTestMixin.tearDown  s%    r@   c                     t         |           | j                  j                  | j                         | j                  | _        y r=   )r(  r   r   r   r$  r  r)  s    r   r   z$ConnectedStreamTestMixin.clientSetUp  s/    (r@   c                     	 | j                   j                          d | _         t        |           y # t        $ r Y w xY wr=   )r  r"   r#   r(  r   r)  s    r   r   z'ConnectedStreamTestMixin.clientTearDown  s@    	NN  "!DN 	   		s   !3 	??)rb   rc   rd   r\   r_   r   r   r,  r-  s   @r   r;  r;    s!    
"
! !r@   r;  c                       e Zd Z	 d Zy)UnixSocketTestBasec                     t        j                         }| j                  t        j                  |       t        j
                  ||       y r=   )r   create_unix_domain_namerv   r   unlinkbind_unix_socket)r[   sockpaths      r   r#  zUnixSocketTestBase.bindSock  s4    446	(($/&&tT2r@   N)rb   rc   rd   r#  re   r@   r   rA  rA    s
    23r@   rA  c                       e Zd Z	 d Zy)UnixStreamBasec                 f    t        j                   t         j                  t         j                        S r=   )r   AF_UNIXrC   rZ   s    r   r  zUnixStreamBase.newSocket      }}V^^V-?-?@@r@   Nrb   rc   rd   r  re   r@   r   rI  rI    s    7Ar@   rI  c                   *     e Zd Z	 eZ fdZd Z xZS )InetTestBasec                 J    t         |           | j                  d   | _        y Nr
   )r(  r\   r$  rX   r)  s    r   r\   zInetTestBase.setUp  s    NN1%	r@   c                 F    t        j                  || j                         y )Nhost)r   rW   rT  r[   rF  s     r   r#  zInetTestBase.bindSock  s    4995r@   )rb   rc   rd   r   rT  r\   r#  r,  r-  s   @r   rO  rO    s    +D&6r@   rO  c                       e Zd Z	 d Zy)TCPTestBasec                 f    t        j                   t         j                  t         j                        S r=   )r   rU   rC   rZ   s    r   r  zTCPTestBase.newSocket  rL  r@   NrM  re   r@   r   rW  rW        -Ar@   rW  c                       e Zd Z	 d Zy)UDPTestBasec                 f    t        j                   t         j                  t         j                        S r=   )r   rU   r)   rZ   s    r   r  zUDPTestBase.newSocket  s    }}V^^V->->??r@   NrM  re   r@   r   r[  r[    s    -@r@   r[  c                       e Zd Z	 d Zy)UDPLITETestBasec                     t        j                   t         j                  t         j                  t         j                        S r=   )r   rU   r)   rP   rZ   s    r   r  zUDPLITETestBase.newSocket  s%    }}V^^V->->@V@VWWr@   NrM  re   r@   r   r^  r^    s    1Xr@   r^  c                       e Zd Z	 d Zy)SCTPStreamBasec                     t        j                   t         j                  t         j                  t         j                        S r=   )r   rU   rC   IPPROTO_SCTPrZ   s    r   r  zSCTPStreamBase.newSocket  s*    }}V^^V-?-?#002 	2r@   NrM  re   r@   r   ra  ra    s
    E2r@   ra  c                   &    e Zd Z	 ej                  Zy)Inet6TestBaseN)rb   rc   rd   r   HOSTv6rT  re   r@   r   re  re    s    +Dr@   re  c                       e Zd Z	 d Zy)UDP6TestBasec                 f    t        j                   t         j                  t         j                        S r=   )r   AF_INET6r)   rZ   s    r   r  zUDP6TestBase.newSocket  s    }}V__f.?.?@@r@   NrM  re   r@   r   rh  rh    rY  r@   rh  c                       e Zd Z	 d Zy)UDPLITE6TestBasec                     t        j                   t         j                  t         j                  t         j                        S r=   )r   rj  r)   rP   rZ   s    r   r  zUDPLITE6TestBase.newSocket  s%    }}V__f.?.?AWAWXXr@   NrM  re   r@   r   rl  rl    s    1Yr@   rl  c                 ,    	 d fd}d }| r|S |S )Nc                       y r=   re   )r2  r3  s     r   client_passz%skipWithClientIf.<locals>.client_pass  r  r@   c                 r     t        j                        |       }t        | t              s
fd|_        |S )Nc                     S r=   re   )r   rp  s    r   <lambda>z3skipWithClientIf.<locals>.skipdec.<locals>.<lambda>  s    ;r@   )r   skip
isinstancetypeclient_skip)objretvalrp  reasons     r   skipdecz!skipWithClientIf.<locals>.skipdec  s/    &v&s+#t$!6Fr@   c                 N    t        | t              st        | d      sd | _        | S )Nrw  c                     | S r=   re   )r   s    r   rs  z5skipWithClientIf.<locals>.noskipdec.<locals>.<lambda>  s    r@   )ru  rv  r   rw  )rx  s    r   	noskipdecz#skipWithClientIf.<locals>.noskipdec  s!    3%m)D)CO
r@   re   )	conditionrz  r{  r~  rp  s    `  @r   skipWithClientIfr    s&    
  7.Y.r@   c                     	 |D cg c]  }t        | |      r| }}t        |ddj                  d |D              z         S c c}w )Ndon't have , c              3       K   | ]  }|  y wr=   re   .0names     r   	<genexpr>zrequireAttrs.<locals>.<genexpr>#  s     *DGD4G   )r   r  join)rx  
attributesr  missings       r   requireAttrsr    sT     !+E
'#t2Dt
GE*DG*D!DDF F Fs
   AAc            	         	 d }| D cg c]$  }t        |t              rt        t        |      s|& }}|rddj	                  d |D              z   }nR| D cg c]$  }t        |t              rt        t        |      n|& }}	 t        j                  | }|j                          t        |d udj                  dj	                  d | D              |            S c c}w c c}w # t        $ r}t        |      }Y d }~Wd }~ww xY w)Nr  r  c              3       K   | ]  }|  y wr=   re   r  s     r   r  z requireSocket.<locals>.<genexpr>1  s     'Ar  zcan't create socket({0}): {1}c              3   2   K   | ]  }t        |        y wr=   )strr  os     r   r  z requireSocket.<locals>.<genexpr>?  s     +dc!fds   )
ru  r  r   r   r  r   r"   r   r  format)r2  errrx  r  callargsr%   r   s          r   requireSocketr  &  s    C" Bds#s#GFC,@ dG Bdii'A'AAA  $%# -7sC,@GFC(cI# 	 %	x(A
 GGI4'..II+d++S	23 3B
%  	a&C	s#   )C)CC! !	C?*C::C?c            	       
   e Zd Z ej                  edud      d        Zd Zd Z ej                  edud      d        Z	d Z
d Zd	 Zd
 Zd Z ej                  ej                   dk(  d      d        Z ej$                  ej(                  d      d        Z ej                  ej.                  dk(  d       ej                  ej2                  d      d               Zd Zd Zd Z ej                   eed      d       ej                   eed      d      d               Z  ej                   eed      d      d        Z! ej                   eed       d!      d"        Z" ej                   eed#      d$      d%        Z# ej                   eed&      d'      d(        Z$d) Z%d* Z&ejN                  d+        Z(d, Z)d- Z* ej                   eed.      d/      d0        Z+ ej                   eed1      d2      d3        Z, ej                   eed1      d2      d4        Z- ej                   eed5      d6      d7        Z. ej                   eed5      d6      d8        Z/d9 Z0d: Z1d; Z2d< Z3d= Z4d> Z5d? Z6 ej                  ej                   dk(  d      d@        Z7 ej                  ej                   dk(  d       ej                   eedA      dB      dC               Z8dD Z9dE Z:dF Z; ej                   ejx                  dG      dH      dI        Z=dJ Z>dK Z?dL Z@dM ZAdN ZBdO ZCdP ZDdQ ZEdR ZFdS ZGdT ZHejN                  dU        ZI ej                  ej2                  dV      dW        ZJ ej                  ej2                  dV      dX        ZKdY ZL ej                  ej2                  dV       ej$                  ej.                  dZk(  d[       ej$                  eMd\       ej                   eed      d]      d^                             ZN ej                  ej2                  dV       ej                  ej.                  dZk(  d_      d`               ZO ej                  ej2                  dV       ej$                  ej.                  dZk(  d[       ej$                  eMd\       ej                   eed      d]      da                             ZP ej                  ej2                  dV       ej                  ej.                  dZk(  d_      db               ZQdc ZRdd ZSde ZT ej                   eedf      dg      dh        ZUdi ZVdj ZWdk ZXdl ZYdm ZZ ej$                  ej                   dk(  dn      do        Z[dp Z\dq Z]dr Z^ds Z_dt Z`du Zay)vGeneralModuleTestsNzneed _socket modulec                     | j                  t        j                  t        j                               | j                  t        d      5  dt        j                  _        d d d        y # 1 sw Y   y xY w)N	immutabler
   )
assertTruegc
is_tracked_socketr   assertRaisesRegexr   foorZ   s    r   test_socket_typez#GeneralModuleTests.test_socket_typeG  sC    gnn56##I{;!"GNN <;;s   	A((A1c                     dd l }| j                  t        j                  |j                  u        t        j                         }| j	                  |t        j                         |j                          y r   )r  r  r   
SocketTypeassertIsInstancer"   )r[   r  r%   s      r   test_SocketType_is_socketobjectz2GeneralModuleTests.test_SocketType_is_socketobjectM  sJ    ))W^^;<MMOa!2!23		r@   c                 2   t        j                   t         j                  t         j                        }|5  | j                  d|j	                         z  t        |             | j                  dt         j                  z  t        |             | j                  dt         j                  z  t        |             | j                  dt        |             | j                  dt        |             |j                  d       | j                  dt        |             | j                  t        |j                               t        |             d d d        | j                  dt        |             | j                  dt        |             y # 1 sw Y   @xY w)	Nzfd=%iz	family=%sztype=%szproto=0raddr	127.0.0.1r   laddrz[closed])
r   rU   rC   assertInfilenor   assertNotInrw   r  r   r[   r%   s     r   	test_reprzGeneralModuleTests.test_reprT  s   MM&..&*<*<=MM'AHHJ.Q8MM+6Q@MM)f&8&88$q'BMM)T!W-Wd1g.FF#$MM'47+MM#ammo.Q8  	j$q'*$q'* Qs   DFFc           	         t        j                  t         j                  t         j                        }d|j	                         d|j
                  d|j                  d|j                  d	}| j                  t        |      |       |j                          d|j
                  d|j                  d|j                  d}| j                  t        |      |       y # |j                          w xY w)Nz<socket object, fd=z	, family=z, type=z, proto=>z<socket object, fd=-1, family=)r  r   rU   rC   r  familyrv  protor   r   r"   )r[   r%   expecteds      r   test_csocket_reprz$GeneralModuleTests.test_csocket_reprb  s    NN7??G,?,?@	88:qxxBHT!Wh/GGIxx2a(+ GGIs   AC C1c                    t        j                   t         j                  t         j                        5 }t        |      }| j	                  |j                         |j                                d d d        d }t        j                          	 j                          | j                  d       y # 1 sw Y   BxY w# t        $ r Y y w xY w)NzSocket proxy still exists)
r   rU   rC   r   r   r  r   
gc_collectfailReferenceError)r[   r%   ps      r   test_weakrefzGeneralModuleTests.test_weakrefo  s    ]]6>>6+=+=>!aAQXXZ4 ? 	3HHJ II12 ?>  		s   :B.B: .B7:	CCc                 <   d}| j                  t        |dz        5  t        # 1 sw Y   nxY w| j                  t        |dz        5  t        j                  # 1 sw Y   nxY w| j                  t        |dz        5  t        j                  # 1 sw Y   y xY w)Nz$Error raising socket exception (%s).r   r   zsocket.herrorzsocket.gaierror)assertRaisesr   r   herrorgaierrorr[   r   s     r   testSocketErrorz"GeneralModuleTests.testSocketError|  s    4wC)O<M =<wC/,AB-- CBwC2C,CD//! EDs    $-
AA$BBc                    t        j                   t         j                  t         j                        }| j                  |j                         |j                  d       |j                         }| j                  t              5 }|j                  d|       d d d        | j                  t        j                        d       | j                  t              5 }|j                  d|       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  dd        d d d        | j                  dt        |j                               | j                  t              5 }|j                  dd|       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  dd|       d d d        | j                  t        |j                        d       | j                  t              5 }|j                  ddd        d d d        | j                  dt        |j                               | j                  t              5 }|j                  dd	|       d d d        | j                  t              5 }|j                  dd d        d d d        | j                  t              5 }|j                  d       d d d        | j                  d
t        |j                               | j                  t              5 }|j                  dd|d       d d d        | j                  dt        |j                               y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ~xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N) r   u   ☠z*a bytes-like object is required, not 'str'y              @z.a bytes-like object is required, not 'complex'   fooznot NoneTyper   barz	(1 given)   z	(4 given))r   rU   r)   rv   r"   rw   r   r  r   sendtor   r  	exceptionr  )r[   r%   socknamecms       r   testSendtoErrorsz#GeneralModuleTests.testSendtoErrors  s   MM&..&*;*;< 	w==?y)RHHXx( *R\\*E	Gy)RHHR" *R\\*I	Ky)RHHVT" *nS%67y)RHHXq(+ *R\\*E	Gy)RHHRH% *R\\*I	Ky)RHHVQ% *nc",,&78y)RHHVUH- *y)RHHVT4( * y)RHHV *k3r||#45y)RHHVQ!, *k3r||#45C *) *) *) *) *) *) *))) *) *)sx   M>N.NN%N2/N?O6O'O&;O2>NNN"%N/2N<?O	OO#&O/2O;c                 D   t         j                   t         j                  rt         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   t         j                   t         j                   y r=   )r   rU   has_ipv6rj  rC   r)   r    SOCK_RDMr3   
SOL_SOCKETSO_REUSEADDRrZ   s    r   testCrucialConstantsz'GeneralModuleTests.testCrucialConstants  sR    ??OOr@   c                     t         j                   t         j                   t         j                  rt         j                   y y r=   )r   IPPROTO_TCPIPPROTO_UDPr  IPPROTO_IPV6rZ   s    r   testCrucialIpProtoConstantsz.GeneralModuleTests.testCrucialIpProtoConstants  s)    ?? r@   ntWindows specificc                    t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   t         j                   y r=   )	r   IPPROTO_ICLFXBM
IPPROTO_STIPPROTO_CBTIPPROTO_IGPIPPROTO_RDPIPPROTO_PGMIPPROTO_L2TPrc  rZ   s    r   testWindowsSpecificConstantsz/GeneralModuleTests.testWindowsSpecificConstants  sJ    r@   zWASI is missing these methodsc                 z    g d}|D ]2  }t        t        j                  |      r| j                  d| d       4 y )N)_acceptrw   r   
connect_exgetpeernamer   rY   recvfromrecvfrom_intor  
setsockoptshutdownzsocket method z is missing)r   r   r  )r[   namesr  s      r   test_socket_methodsz&GeneralModuleTests.test_socket_methods  s8    

 D6==$/		N4&<= r@   darwinmacOS specific testIPv6 required for this testc                 b    h d}|D ]&  }| j                  t        t        |      d| d       ( y )N>   
IPV6_RTHDRIPV6_TCLASSIPV6_DSTOPTSIPV6_HOPOPTSIPV6_NEXTHOPIPV6_PATHMTUIPV6_PKTINFOIPV6_CHECKSUMIPV6_DONTFRAGIPV6_HOPLIMITIPV6_RECVRTHDRIPV6_RECVTCLASSIPV6_RECVDSTOPTSIPV6_RECVHOPOPTSIPV6_RECVPATHMTUIPV6_RECVPKTINFOIPV6_USE_MIN_MTUIPV6_RECVHOPLIMITIPV6_RTHDRDSTOPTSIPV6_RTHDR_TYPE_0zMissing RFC3542 socket option '')r  r   r   )r[   optsopts      r   test3542SocketOptionsz(GeneralModuleTests.test3542SocketOptions  s7    
, COO$(GuA&N r@   c                    t        j                         }	 t        j                  |      }| j                  j                  d      dk\  d       	 t        j                  |      \  }}}|gz   }t        j                  |      }||vr"| j                  d|dt        |      d       y y # t        $ r | j	                  d       Y w xY w# t        $ r | j	                  d       Y w xY w)Nname lookup failurer   r   zError resolving host to ip.z1Error testing host resolution mechanisms. (fqdn: z, all: ))r   gethostnamegethostbynamer   ry   r  findgethostbyaddrgetfqdnr  r   )r[   hostnameiphnamealiasesipaddrsall_host_namesfqhns           r   testHostnameResz"GeneralModuleTests.testHostnameRes  s    %%'	1%%h/B 	)+HI	1&,&:&:2&>#E7G #E*W4~~b!~%IIY]_cdr_stu &  	1MM/0	1  	1MM/0	1s#   B, C ,C	C	C)(C)c                     t         j                  ddfD ]'  }| j                  t        j                  |      |       ) t         j                  fD ]*  }| j                  |t        j                  |      d          , y )Nz10.0.0.1255.255.255.255r   )r   HOSTv4r   r   r  r  r  )r[   r  rT  s      r   test_host_resolutionz'GeneralModuleTests.test_host_resolution  si    ")):7HIDV11$7> J
 #))*DMM$ 4 4T :1 => +r@   c                    d}dD ]l  }| j                  t        |      5  t        j                  |       d d d        | j                  t        |      5  t        j                  |       d d d        n y # 1 sw Y   AxY w# 1 sw Y   xY w)Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r  )r  r   r   r  r  )r[   explanationr  s      r    test_host_resolution_bad_addressz3GeneralModuleTests.test_host_resolution_bad_address  su    3 	*D""7"5$$T* 6""7"<$$T* =<	*55<<s   A5B5A>	B
	sethostnameztest needs socket.sethostname()r  ztest needs socket.gethostname()c                    t        j                         }	 t        j                  d       	 | j                  t        j                         d       t        j                  d       | j                  t        j                         d       t        j                  |       y # t        $ r:}|j                  t        j
                  k(  r| j                  d       n Y d }~d }~ww xY w# t        j                  |       w xY w)Nnewztest should be run as roots   barr  )r   r  r!  r   errnoEPERMry   r   )r[   oldhnr   s      r   test_sethostnamez#GeneralModuleTests.test_sethostname'  s     ""$	u%	&V//159v&V//159u%  	ww%++%:; <	 u%s#   B AC% 	C"(0CC"%C<if_nameindexz$socket.if_nameindex() not available.c                    t        j                         }|D ]  \  }}| j                  |t               | j                  |t               | j                  |d       t        j                  |      }| j                  |t               | j                  ||       t        j                  |      }| j                  |t               | j                  ||        y r   )	r   r(  r  intr  assertGreaterif_nametoindexr   if_indextoname)r[   
interfacesindexr  _index_names         r   testInterfaceNameIndexz)GeneralModuleTests.testInterfaceNameIndex;  s     ((*
%KE4!!%-!!$,ua(**40F!!&#.UF+))%0E!!%-T5) &r@   r-  z&socket.if_indextoname() not available.c                    | j                  t        t        j                  d       | j                  t        t        j                  d       | j                  t        t        j                  ddz         | j                  t
        t        j                  d       t        t        d      rt        t        j                               }|D ]E  }|dz   }||vs| j                  t        t        f      5  t        j                  |       d d d        G dD ]@  }||vs| j                  t        t        f      5  t        j                  |       d d d        B y y # 1 sw Y   xY w# 1 sw Y   ZxY w)	Nr   r     	_DEADBEEFr(          )    l    )	r  r   r   r-  OverflowErrorr   r   dictr(  )r[   indicesr/  index2s       r   testInvalidInterfaceIndexToNamez2GeneralModuleTests.testInvalidInterfaceIndexToNameK  s!    	'6#8#8!<-)>)>C-)>)>4H)V%:%:KH6>*6..01G (**M7+CD--f5 ED !
 *'**M7+CD--e4 ED * +
 ED EDs   /E4E"E	"E+	r,  z&socket.if_nametoindex() not available.c                     | j                  t        t        j                  d       | j                  t        t        j                  d       y )Nr   r6  )r  r   r   r,  r   rZ   s    r   testInvalidInterfaceNameToIndexz2GeneralModuleTests.testInvalidInterfaceNameToIndex^  s4     	)V%:%:A>'6#8#8+Fr@   getrefcounttest needs sys.getrefcount()c                     	 t        j                  t              }t        j                  t        d       y # t
        $ r2 t        j                  t              k7  r| j                  d       Y y Y y w xY w)Nr   z$socket.getnameinfo loses a reference)sysr@  rb   r   getnameinfor   r  )r[   origs     r   testRefCountGetNameInfoz*GeneralModuleTests.testRefCountGetNameInfod  sZ    	B??8,Dx* 	Bx(D0		@A 1	Bs   36 6A10A1c                 P    	 t        j                  dd       y # t        $ r Y y w xY w)N)rq   r   r   r   r   )r   rD  r   rZ   s    r   testInterpreterCrashz'GeneralModuleTests.testInterpreterCrashp  s)    	~q1 		s    	%%c                    t         j                  dt         j                  dt         j                  dt         j                  di}|j                         D ]o  \  }}d|z  dz
  }dD ])  }| j                  ||z   | |||z              |z         +  ||      }| j                  ||z  |       | j                  t        |d       q y )N       r
   )r   r
     i  r   igE#i2Tvl        )	r   htonlntohlhtonsntohsitemsr   r  r9  )r[   sizesfuncsizemaskrQ   swappeds          r   testNtoHzGeneralModuleTests.testNtoHx  s     r6<<r6<<5++-JD$tGq=DG  T4QtV+=+DE H 4jGWt^T2mT59 (r@   c                    dd l }g d}|dgz   }dddddz  g}||j                  dz
  |j                  dz   gz   d	|j                  gz   }|D ],  }t        j                  |       t        j
                  |       . |D ],  }t        j                  |       t        j                  |       . |D ]L  }| j                  t        t        j                  |       | j                  t        t        j
                  |       N |D ]L  }| j                  t        t        j                  |       | j                  t        t        j                  |       N y )
Nr   )r   r
   r   rL  r8  r4  r7  r
   r5     )
	_testcapiINT_MININT_MAXr   rP  rO  rN  rM  r  r9  )r[   r[  s_good_valuesl_good_valuesl_bad_valuess_bad_valuesks          r   testNtoHErrorsz!GeneralModuleTests.testNtoHErrors  s   )%4Bq$w/q )"3"3A"567i''() 	
 ALLOLLO  ALLOLLO  AmV\\1=mV\\1=  AmV\\1=mV\\1= r@   c                 B   | j                   }t        j                  j                  d      st        j                  dv rd}nd}|D ]  }	 t	        j
                  |d      } n t        t        t        d      rt        j                         dk\  rt	        j
                  |      } |||       	 t	        j
                  |d      } |||       t        j                  s |t	        j                        |        |t	        j                  |d      |       | |t	        j                  |d      |       | j                  t        t        j                  d	       | j                  t        t        j                  d
       y # t        $ r Y Gw xY w# t        $ r d }Y w xY w)N)freebsdnetbsdgnukfreebsd)linuxr  )daytimeqotddomain)echori  rk  tcpgetandroidapilevel   udpr4  rZ  )r   rC  platform
startswithr   getservbynamer   r   rn  r   
is_androidgetservbyportr  r9  )r[   eqservicesservicerX   port2udpports          r   testGetServByz GeneralModuleTests.testGetServBy  sm    LL##$HI||22 5H4HG++GU;   M 12&&(B.((1EtUO	**7E:G w !!v##E*G4
6e,g6v##GU3W=-)=)=rB-)=)=uE5    	G	s$   	F .F  	FFFFc                    | j                  t        j                         d        t        j                         5 }| j                  |j                         d        d d d        t	        d      5  | j                  t        j                         d       t        j                         5 }| j                  |j                         d       d d d        t        j
                  d        | j                  t        j                         d        t        j                         5 }| j                  |j                         d        d d d        d d d        | j                  t        t        j
                  d       | j                  t        t        j
                  d       y # 1 sw Y   @xY w# 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   yxY w)N
   r4  spam)	r   r   rK   
gettimeoutrO   rL   r  
ValueErrorr   )r[   r%   rF  s      r   testDefaultTimeoutz%GeneralModuleTests.testDefaultTimeout  s7    	113T:]]_Q\\^T2  &b)V557<D  !2B7 ! $$T*V557>D  !2D9 ! * 	*f&>&>C 	)V%=%=vF' _ ! ! *)sH   !F-9F=&!F%AF=!F1=F=F"%F.	*F=1F:	6F==G	inet_atonztest needs socket.inet_aton()c                     | j                  dt        j                  d             | j                  dt        j                  d             y )N       0.0.0.0   r  )r   r   r  rZ   s    r   testIPv4_inet_aton_fourbytesz/GeneralModuleTests.testIPv4_inet_aton_fourbytes  s;    
 	F$4$4Y$?@F$4$45F$GHr@   	inet_ptonztest needs socket.inet_pton()c                     ddl m}mm fd} fd} j	                  d |d              j	                  d |d              j	                  d	 |d
              j	                  d |d              j	                  d |d             t
        s	 ||d        ||d        ||d        ||d        ||d        j	                  d |d              j	                  d |d              j	                  d	 |d
              j	                  d |d              ||d        ||d        ||d        ||d        ||d       y )Nr   )r  r  rU   c                      |       S r=   re   )arU   r  s    r   rs  z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>      i+r@   c                 >    j                  t        t        f| |      S r=   r  r   r  rS  r  r[   s     r   rs  z5GeneralModuleTests.testIPv4toString.<locals>.<lambda>      t'8'8j!4(
r@   r  r  s     z255.0.255.0s   z170.170.170.170   1.2.3.4r  r  z0.0.0.z	300.0.0.0za.0.0.0z	1.2.3.4.5::1)r   r  r  rU   r   r   )r[   r   gassertInvalidrU   r  s   `   @@r   testIPv4toStringz#GeneralModuleTests.testIPv4toString  sG    	>=+
 	,a	l;,a.>?,a0A.BC,a	l;,a0A.BC!X&a%a#a%a,a	l;,a.>?,a0A.BC,a0A.BCa"a%a#a%ar@   c                     	 ddl mmm} |s j	                  d       t        j                  dk(  r
	  d       fd	 fd
} j                  d d              j                  d d              j                  d d              j                  d d              j                  d d              j                  d d              |d        |d        |d        |d        |d        |d        |d        |d       t        s |d        j                  d d              j                  d  d!              j                  d" d#              |d$        |d%        |d&        |d'        |d(        |d)       y # t
        $ r  j	                  d       Y w xY w# t        $ r+}|j                  dk(  r j	                  d       Y d }~d }~ww xY w)*Nr   )r  rj  r  IPv6 not available+could not import needed symbols from socketwin32::&'  IPv6 might not be supportedc                      |       S r=   re   )r  rj  r  s    r   rs  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>      i!,r@   c                 >    j                  t        t        f|       S r=   r  r  r   r[   s    r   rs  z5GeneralModuleTests.testIPv6toString.<locals>.<lambda>      $"3"3j!1a#
r@                      z0::0s                  z1::s   Ev V$z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaes   B
    '  T zad42:abc::127:0:254:2s     
            z12:a::z0x20::z:::z::0::z1::abc::z1::abc::defz1:2:3:4:5:6z1:2:3:4:5:6:z1:2:3:4:5:6:7:8:0z1:2:3:4:5:6:7:8:s               *@z::254.42.23.64s    B        *@z42::a29b:254.42.23.64s    B   *@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z1::260.2.3.0z1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8)r   r  rj  r  ry   ImportErrorrC  rq  r   winerrorr   r   )r[   r  r   r  rj  r   r  s   `   @@@r   testIPv6toStringz#GeneralModuleTests.testIPv6toString  s   	I<<23 <<7"A(D)
 -
 	qw/qy13QuX>O45	
 	S%&	
 	;Qx[Ihegj!m$m$n%)*,-;	
 	C%&	
 	O23	
 	'(n%m$-.m$/0o  	IMMGH	I  A::&MM"?@As(   F# 	G #G G	G8 G33G8	inet_ntopztest needs socket.inet_ntop()c                 t    ddl m}mm fd} fd} j	                  d |d              j	                  d |d              j	                  d	 |d
              j	                  d |d              ||d        ||d        ||d        j	                  d |t        d                    j	                  d |d              j	                  d |d              j	                  d	 |d
              ||d        ||d        ||d        j	                  d |t        d                   y )Nr   )	inet_ntoar  rU   c                      |       S r=   re   )r  rU   r  s    r   rs  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>P  r  r@   c                 >    j                  t        t        f| |      S r=   r  r  s     r   rs  z5GeneralModuleTests.testStringToIPv4.<locals>.<lambda>Q  r  r@   z1.0.1.0s     z170.85.170.85s   UUr  r  r  r  s      s        r  )r   r  r  rU   r   	bytearray)r[   r   r  r  rU   r  s   `   @@r   testStringToIPv4z#GeneralModuleTests.testStringToIPv4L  s'    	>=+
 	A&9$:;!,?*@A*A.A,BCA&9$:;a%a%a&!I6I,J*KLA&9$:;!,?*@A*A.A,BCa%a%a&!I6I,J*KLr@   c                 H    	 ddl mmm} |s j	                  d       t        j                  dk(  r
	  d       fd	 fd
} j                  d d              j                  d d              j                  d d              j                  d t        d                    |d        |d        |d       y # t
        $ r  j	                  d       Y w xY w# t        $ r*}|j                  dk(  r j	                  d       Y d }~d }~ww xY w)Nr   )r  rj  r  r  r  r  r  r  r  c                      |       S r=   re   )r  rj  r  s    r   rs  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>w  r  r@   c                 >    j                  t        t        f|       S r=   r  r  s    r   rs  z5GeneralModuleTests.testStringToIPv6.<locals>.<lambda>x  r  r@   r  r  s                  z!aef:b01:506:1001:ffff:9997:55:170s   
 Ups   s   s   )r   r  rj  r  ry   r  rC  rq  r   r  r   r  )r[   r  r   r  rj  r   r  s   `   @@@r   testStringToIPv6z#GeneralModuleTests.testStringToIPv6f  s   	I<<23 <<7"A(L1
 -
 	q/"8 9:/QR	
 	),B"C DEl#l#k"3  	IMMGH	I  A::&MM"?@As(   C 	C. C+*C+.	D!7 DD!c                    t        j                   t         j                  t         j                        }| j                  |j                         t        j                         D ]+  }t        j                         }	 |j                  d|f        n |j                         }	 t        j                  t        j                               }| j#                  |d   dfd|d   z         | j%                  |d          y # t        $ r-}|j                  t        j                  k7  s|dk(  r Y d }~d }~ww xY w# t        $ r | j!                  d       Y w xY w)Nr     r  r   z
%s invalidr
   )r   rU   rC   rv   r"   	itertoolscountr   find_unused_portrw   r   r$  
EADDRINUSEr   r  r  ry   r  r   )r[   rF  rQ   rX   r   r  
my_ip_addrs          r   testSockNamezGeneralModuleTests.testSockName  s   }}V^^V-?-?@

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

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

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

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

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

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

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

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

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

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

#dFMM2iioc"r@   c                 B    | j                   j                  t               y r=   r  rZ   s    r   _testFromFdzBasicTCPTest._testFromFd{
  r  r@   c                     | j                   j                         }| j                  |j                         |j	                  d      }| j                  |t               y r   )r
  duprv   r"   r   r   r   )r[   rF  r   s      r   testDupzBasicTCPTest.testDup~
  sA    }}  "

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

#

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

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

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

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

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

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

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

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

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

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

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

5&//2

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

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

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