
    daf                        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mZ ej&                  dk(  ZesdndZd Z G d d	e j.                        Z G d
 dej2                        Z ej6                  edu d       G d dej8                               Z G d d      Z G d dej>                        Z  G d de       Z! G d de       Z"y# e$ r dZY w xY w)    N)support)utilsdarwin   @   c                  .    t        j                  d        y N)asyncioset_event_loop_policy     5/root/Python-3.12.4/Lib/test/test_asyncio/test_ssl.pytearDownModuler      s    !!$'r   c                   4    e Zd ZdZdZddZd Zd Zd Zd Z	y)MyBaseProtoNc                     d | _         d| _        d| _        |7t        j                  |      | _        t        j                  |      | _        y y )NINITIALr   loop)	transportstatenbytesr
   Future	connecteddoneselfr   s     r   __init__zMyBaseProto.__init__'   sB    
$^^6DND1DI r   c                     || _         | j                  dk(  sJ | j                         d| _        | j                  r| j                  j                  d        y y )Nr   	CONNECTED)r   r   r   
set_resultr   r   s     r   connection_madezMyBaseProto.connection_made/   sI    "zzY&2

2& 
>>NN%%d+ r   c                     | j                   dk(  sJ | j                          | xj                  t        |      z  c_        y )Nr    )r   r   lenr   datas     r   data_receivedzMyBaseProto.data_received6   s/    zz[(4$**4(s4y r   c                 R    | j                   dk(  sJ | j                          d| _         y )Nr    EOF)r   r   s    r   eof_receivedzMyBaseProto.eof_received:   s$    zz[(4$**4(
r   c                     | j                   dv sJ | j                          d| _         | j                  r| j                  j                  d        y y )N)r    r*   CLOSED)r   r   r!   r   excs     r   connection_lostzMyBaseProto.connection_lost>   sC    zz11=4::=1
99II  & r   r	   )
__name__
__module____qualname__r   r   r   r#   r(   r,   r1   r   r   r   r   r   #   s%    ID2,!'r   r   c                       e Zd Zd Zd Zy)MessageOutFilterc                     || _         y r	   msg)r   r9   s     r   r   zMessageOutFilter.__init__F   s	    r   c                 6    | j                   |j                   v ryy)NFTr8   )r   records     r   filterzMessageOutFilter.filterI   s    88vzz!r   N)r2   r3   r4   r   r<   r   r   r   r6   r6   E   s    r   r6   zNo ssl modulec                       e Zd ZdZej
                  Z fdZ fdZe	j                  dej                  ddddZe	j                  ej                  fd	Zd
 Zd Zd+dZdddZej&                  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,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. xZ/S )-TestSSLi  c                     t         |           t        j                         | _        | j                  | j                         | j                  | j                  j                         y r	   )supersetUpr
   new_event_loopr   set_event_loop
addCleanupcloser   	__class__s    r   rA   zTestSSL.setUpU   sB    **,	DII&		(r   c                     | j                   j                         st        j                  | j                          | j	                          t        j                          t        | !          y r	   )	r   	is_closed
test_utilsrun_briefly
doCleanupsr   
gc_collectr@   tearDownrF   s    r   rN   zTestSSL.tearDown[   sF    yy""$""499-r   N   
   )familyaddrtimeoutbacklogmax_clientsc                   |@|t        t        dd       k(  r*t        j                         5 }|j                  }d d d        nd}t        j                  |t        j
                        }|t        d      |dk  rt        d      |j                  |       	 |j                  |       |j                  |       t        | ||||      S # 1 sw Y   xY w# t        $ r}	|j                          |	d }	~	ww xY w)NAF_UNIX	127.0.0.1r   timeout is requiredr   #only blocking sockets are supported)getattrsockettempfileNamedTemporaryFilenameSOCK_STREAMRuntimeError
settimeoutbindlistenOSErrorrE   TestThreadedServer)
r   server_progrQ   rR   rS   rT   rU   tmpsockexs
             r   
tcp_serverzTestSSL.tcp_serverd   s     <D99002 $c88D$ $ (}}VV%7%78?455a<DEE 	IIdOKK 
 "$Wk; 	;)$ $   	JJLH	s#   C"C C	C3C..C3c                     t        j                   |t         j                        }|t        d      |dk  rt        d      |j                  |       t	        | |||      S )NrZ   r   r[   )r]   ra   rb   rc   TestThreadedClient)r   client_progrQ   rS   rj   s        r   
tcp_clientzTestSSL.tcp_client   s`     }}VV%7%78?455a<DEE !$W. 	.r   c                 F     | j                   |dt        j                  i|S NrQ   )rl   r]   rW   r   argskwargss      r   unix_serverzTestSSL.unix_server   !    tFV^^FvFFr   c                 F     | j                   |dt        j                  i|S rr   )rp   r]   rW   rs   s      r   unix_clientzTestSSL.unix_client   rw   r   c                     t        j                  t         j                        }|xj                  t         j                  z  c_        |j                  ||       |S r	   )ssl
SSLContextPROTOCOL_TLS_SERVERoptionsOP_NO_SSLv2load_cert_chain)r   certfilekeyfile
sslcontexts       r   _create_server_ssl_contextz"TestSSL._create_server_ssl_context   sA    ^^C$;$;<
coo-""8W5r   Tdisable_verifyc                j    t        j                         }d|_        |rt         j                  |_        |S NF)r{   create_default_contextcheck_hostname	CERT_NONEverify_mode)r   r   r   s      r   _create_client_ssl_contextz"TestSSL._create_client_ssl_context   s-    //1
$)
!%(]]J"r   c              #      K   t        j                  d      }t        d      }|j                  |       	 d  |j	                  |       y # |j	                  |       w xY ww)Nr
   zhas no effect when using ssl)logging	getLoggerr6   	addFilterremoveFilter)r   loggerr<   s      r   _silence_eof_received_warningz%TestSSL._silence_eof_received_warning   sU      ""9-!"@A 	('F's   2A!A A!AA!c                     	 | j                   j                          | j                  |       y # | j                  |       w xY wr	   )r   stopfailr   rk   s     r   _abort_socket_testzTestSSL._abort_socket_test   s,    	IINNIIbMDIIbMs	   . Ac                 *    t        j                         S r	   )r
   rB   r+   s    r   new_loopzTestSSL.new_loop   s    %%''r   c                 *    t        j                         S r	   )r
   DefaultEventLoopPolicyr+   s    r   
new_policyzTestSSL.new_policy   s    --//r   c                    K   t        |t        j                        sy 	 |j                          d {    y 7 # t        t
        f$ r Y y w xY wwr	   )
isinstancer
   StreamWriterwait_closedBrokenPipeErrorConnectionError)r   objs     r   r   zTestSSL.wait_closed   sD     #w334	//###1 		s1   A: 8: A: A	AAAc                    	
 ddt         j                  dt        z  dt        z   j                  t        j
                  t        j                         j                         g 	 fd
	 fd
 fd} j                         5   j                  j                   |              d d d         j                         	D ]  }|j                           y # 1 sw Y   3xY w)Nr         AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBc                   K   | j                  t                     d {   }j                  |       |j                  d       | j                  t                     d {   }j                  |       |j	                  dt        d      t        d      g       |j                          d {    |j                          dz  y 7 7 l7 wN   OKs   SP   A   MrO   	readexactlyr%   assertEqualwrite
writelines	bytearray
memoryviewdrainrE   readerwriterr'   A_DATAB_DATACNTr   s      r   handle_clientz7TestSSL.test_create_server_ssl_1.<locals>.handle_client          ++CK88DT6*LL++CK88DT6*uioz$7GHI,,.  LLN1HC 9 9 !5   CCAC&C'AC6C7CCCc                     K   t        j                          fd}j                  |      }|j                          j	                  |        d {    y 7 w)Nc                     	 | j                         | j                         | j                         | j                  d      }j	                  |d       | j                         | j                  d      }j	                  |d       | j                          j                  j                  j                  d        y # t        $ r0}j                  j                  j                  |       Y d }~y d }~ww xY w)N   r         SPAM)starttlsconnectsendrecv_allr   rE   r   call_soon_threadsafer!   	Exceptionset_exception)	rj   r'   rk   r   r   rR   client_sslctxfutr   s	      r   progzCTestSSL.test_create_server_ssl_1.<locals>.test_client.<locals>.prog   s    IMM-0LL&IIf%==+D$$T51IIf%==+D$$T73JJL
 II223>>4H ! JII2233D3DbIIJs   BC 	C=&C88C=r
   r   rp   startappend)	rR   r   clientr   r   r   r   clientsr   s	   `  @r   test_clientz5TestSSL.test_create_server_ssl_1.<locals>.test_client   sK     .."CI I( __T*FLLNNN6"IIs   AA#A!A#c                    K   i } t        t        j                        } t        j                  ddft
        j                  
d|  d {   }	 |j                  }	j                  |       |d   j                         }g }t              D ]  }|j                   |              t        j                  t        j                  |        d {    	j                  j                  |j                          |j#                          d {    y 7 7 D7 	# 	j                  j                  |j                          |j#                          d {  7   w xY ww)Nssl_handshake_timeoutrY   r   rQ   r{   )dictr   SHORT_TIMEOUTr
   start_serverr]   AF_INETsockets
assertTruegetsocknameranger   wait_forgatherr   	call_soonrE   r   )extrassrv	srv_socksrR   tasks_TIMEOUT	TOTAL_CNTr   r   sslctxr   s         r   r   z6TestSSL.test_create_server_ssl_1.<locals>.start_server  s.    F0E0EFF,,Q ~~	
  C(KK		* |//1y) 4ALLT!234 &&w~~u'=wGGG 		##CII.oo'''+" H ( 		##CII.oo'''s[   A	E DE BD DD 8E DE D E 9EEEE )r   LONG_TIMEOUTBUF_MULTIPLIERr   rJ   ONLYCERTONLYKEYr   r   r   run_until_completer   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   s   `  @@@@@@@@@@r   test_create_server_ssl_1z TestSSL.test_create_server_ssl_1   s    	&&~-~-00!3!3
 779	 	 	:	( 	(6 //1 	9II((8	9 	i( 	FKKM		9 	9s   !C00C9c                    	
  j                   j                  d        dddt        z  dt        z   j                  t        j
                  t        j                        
 j                          
fd	 fd} fd} 	fd} j                         5   ||       d d d         j                         5   ||       d d d        y # 1 sw Y   +xY w# 1 sw Y   y xY w)	Nr   r   r   r   c                 @   | j                  d       | j                  t                    }j                  |       | j	                  d       | j                  t                    }j                  |       | j	                  d       | j                          y )NTserver_sider   r   )r   r   r%   r   r   rE   )rj   r'   r   r   r   r   s     r   serverz4TestSSL.test_create_connection_ssl_1.<locals>.server3  s    MM   " ==V-DT6*IIe==V-DT6*IIgJJLr   c                   K   i }t        t        j                        }t        j                  | dd| d {   \  }}|j                         j                  |j                  d       d {   d       |j                         j                  |j                  d       d {   d       dz  |j                          j                  |       d {    y 7 7 t7 <7 w)	Nr    r{   server_hostnamer   r   r   r   rO   )
r   r   r   r
   open_connectionr   r   r   rE   r   )	rR   r   r   r   r   r   r   r   r   s	       r   r   z4TestSSL.test_create_connection_ssl_1.<locals>.clientB  s     F0E0EFF#*#:#:! "$ 	$ NFF LL 6#5#5a#88%@LL 6#5#5a#88'B 1HCLLN""6***! 9 9 +sE   8C.C&7C.3C(49C.-C*.2C. C,!C.(C.*C.,C.c                   K   t        j                          }|j                  |        t        j                  |d       d {   \  }}|j	                         j                  |j                  d       d {   d       |j	                         j                  |j                  d       d {   d       dz  |j                          j                  |       d {    |j                          y 7 7 7 L7 w)Nr   )rj   r{   r   r   r   r   r   rO   )	r]   r   r
   r   r   r   r   rE   r   )	rR   rj   r   r   r   r   r   r   r   s	       r   client_sockz9TestSSL.test_create_connection_ssl_1.<locals>.client_sockX  s     ==?DLL#*#:#:! "$$ $NFF
 LL 6#5#5a#88%@LL 6#5#5a#88'B 1HCLLN""6***JJL!$ 9 9 +sH   ADC?7D<D=9D6D72D)D*DDDDc                 (   dd }j                        5 }g }t              D ]#  }|j                   | |j                               % j                  j                   ||        d d d        j                         y # 1 sw Y   xY w)Nr   c                  B   K   t        j                  |   d {   S 7 wr	   r
   r   r   s    r   _gatherzBTestSSL.test_create_connection_ssl_1.<locals>.run.<locals>._gatherq  s     $^^U3333   rU   rT   rl   r   r   rR   r   r   r   	coror  r   r   r   r   r   r   r   s	        r   runz1TestSSL.test_create_connection_ssl_1.<locals>.runm  s    C4 -6)2 ! 4 >7:y) 1ALLchh01 		,,We_=> S),> >   ABB)	r   set_exception_handlerr   r   rJ   r   r   r   r   )r   r   r   r  r   r   r   r   r   r   r   s   `   @@@@@@@r   test_create_connection_ssl_1z$TestSSL.test_create_connection_ssl_1$  s    		''-	~-~-00
 779		+ 	+,	 	*	-& //1 	K	 //1 		 		 		 	s   *	C	C)C&)C2c                 p     j                          j                  j                  d        d } fd} j                  |dd      5 } j	                  t
        d      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)Nc                       y r	   r   rt   s    r   <lambda>zCTestSSL.test_create_connection_ssl_slow_handshake.<locals>.<lambda>      r   c                     	 | j                  d       | j                          y # t        $ r Y w xY w# | j                          w xY wN   r   ConnectionAbortedErrorrE   rj   s    r   r   zATestSSL.test_create_connection_ssl_slow_handshake.<locals>.server  s>    k* 

 *  

s   $ 	03 03 Ac                    K   t        j                  | ddd d {   \  }}|j                          j                  |       d {    y 7 17 w)Nr   g      ?r{   r   r   )r
   r   rE   r   rR   r   r   r   r   s      r   r   zATestSSL.test_create_connection_ssl_slow_handshake.<locals>.client  sV     #*#:#:! "&)	$+ +NFF
 LLN""6***+ +s!   AA+A
AAArO   r  zSSL handshake.*is taking longer)r   r   r
  rl   assertRaisesRegexr  r   rR   )r   r   r   r   r   s   `   @r   )test_create_connection_ssl_slow_handshakez1TestSSL.test_create_connection_ssl_slow_handshake  s    779 			''(:;		+ __V)*%&  ( 	?+.''*68 ? 		,,VCHH-=>	?		? 	?? ?		? 	?s$   B,#,B B, B)	%B,,B5c                      j                   j                  d         j                  t        j                  t        j
                         j                  d      fd} fd} j                  |dd      5 } j                  t        j                        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)Nc                       y r	   r   r  s    r   r  zGTestSSL.test_create_connection_ssl_failed_certificate.<locals>.<lambda>  r  r   Fr   c                     	 | j                  d       | j                          | j                          y # t        j                  t        f$ r Y ,w xY w# | j                          w xY w)NTr   )r   r   r{   SSLErrorrf   rE   )rj   r   s    r   r   zETestSSL.test_create_connection_ssl_failed_certificate.<locals>.server  s^     $  &  

 LL'*  

s!   #7 AA AA A(c                    K   t        j                  | dt        j                  d d {   \  }}|j	                          j                  |       d {    y 7 17 w)Nr   r  )r
   r   r   r   rE   r   r  s      r   r   zETestSSL.test_create_connection_ssl_failed_certificate.<locals>.client  s\     #*#:#:! "&-&;&;	$= =NFF
 LLN""6***= +s!   )A"A+A"A A" A"rO   r  )r   r
  r   rJ   r   r   r   rl   assertRaisesr{   SSLCertVerificationErrorr   rR   )r   r   r   r   r   r   s   `   @@r   -test_create_connection_ssl_failed_certificatez5TestSSL.test_create_connection_ssl_failed_certificate  s    		''(:;00
 77u7M			+ __V)*%&  ( 	?+.""3#?#?@ ?		,,VCHH-=>?		? 	?? ?		? 	?s$   ? C(,CC(C%	!C((C1c                     t        j                         g  j                  j                  fd       dfd} fd} j	                  |dd      5 } j                  t        j                        5   j                  j                   ||j                               d d d        d d d         j                          j                  g        y # 1 sw Y   5xY w# 1 sw Y   9xY w)Nc                 &    j                  |      S r	   )r   )r   ctxmessagess     r   r  z4TestSSL.test_ssl_handshake_timeout.<locals>.<lambda>  s    (//#:N r   Fc                     	 | j                  d       | j                          y # t        $ r dY w xY w# | j                          w xY w)Nr  Tr  )rj   server_side_aborteds    r   r   z2TestSSL.test_ssl_handshake_timeout.<locals>.server  sB    k* 

 * +&*#+ 

s   % 36 36 Ac           	         K   t        j                   j                  j                  t         j                  g| dddd       d {    y 7 w)Nr   g      $@r        ?)r
   r   r   create_connectionProtocol)rR   r   r   s    r   r   z2TestSSL.test_ssl_handshake_timeout.<locals>.client  sY     ""+		++$$00 &$&*.0   s   AAAArO   r  )rJ   simple_client_sslcontextr   r
  rl   r!  r
   TimeoutErrorr   rR   r   r   )r   r   r   r   r   r'  r)  s   `   @@@r   test_ssl_handshake_timeoutz"TestSSL.test_ssl_handshake_timeout  s     #;;= 		''(NO#		 __V)*%&  ( 	?+.""7#7#78 ?		,,VCHH-=>?		? 	+, 	2&? ?		? 	?s$    C&:,C&C&C#	C&&C/c                 6    t        j                          j                  j                  d        ddd } G fddt        j
                         fd} j                  |dd      5 } j                  t              5   j                  j                   ||j                               d d d        d d d        r&r j                  d	       y  j                  d
       y r j                  d       y y # 1 sw Y   NxY w# 1 sw Y   RxY w)Nc                      y r	   r   r   r&  s     r   r  z<TestSSL.test_ssl_handshake_connection_lost.<locals>.<lambda>  r  r   Fc                 F    | j                  d       | j                          y )Nr   )recvrE   r  s    r   r   z:TestSSL.test_ssl_handshake_connection_lost.<locals>.server  s    IIdOJJLr   c                   "    e Zd ZfdZ fdZy)?TestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProtoc                 
    dy NTr   )r   r   connection_made_calleds     r   r#   zOTestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProto.connection_made	  	    )-&r   c                 
    dy r9  r   )r   r0   connection_lost_calleds     r   r1   zOTestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProto.connection_lost  r;  r   N)r2   r3   r4   r#   r1   )r=  r:  s   r   ClientProtor7    s    ..r   r>  c                 f   K    j                   j                  g| dd d {   f y 7 w)Nr   r   )r   r,  )rR   r>  r   r   s    r   r   z:TestSSL.test_ssl_handshake_connection_lost.<locals>.client  sB     -$))--$$ " "	$ $ % $s   %1/1rO   r  z$unexpected call to connection_lost()zEunexpected call to connection_lost() withoutcalling connection_made()z$unexpected call to connection_made())rJ   r.  r   r
  r
   r-  rl   r!  ConnectionResetErrorr   rR   r   )r   r   r   r   r>  r   r=  r:  s   `   @@@@r   "test_ssl_handshake_connection_lostz*TestSSL.test_ssl_handshake_connection_lost  s     #;;= 			''(>?!&!&	
	.'** 	.	% __V)*%&  ( 	?+.""#78 ?		,,VCHH-=>?		? "%		@A		 6 7#II<= $? ?		? 	?s$   4D
,D6DD	DDc                 t   t         j                  }t        j                  |      }|j                  t        j
                  t        j                         t        |d      rd|_        t         j                  |_
        t        j                  |      }t        |d      rd|_        t         j                  |_
        y )Nr   F)r{   r}   r|   r   rJ   r   r   hasattrr   r   r   )r   protoserver_contextclient_contexts       r    test_ssl_connect_accepted_socketz(TestSSL.test_ssl_connect_accepted_socket(  s    ''.&&z':':J<N<NO>#34,1N)%(]]".>#34,1N)%(]]"r   c                    | j                    G fddt              }t        j                  t        j                        }|j	                  d       |j                  d       |j                         dd dfd}t        j                  |d	      }|j                          |j                         \  }} |
      _         i }	|rt        t        j                        }	j                   j                  fd|fd|i|	      }
j!                          |j#                          |j#                          |j%                  d       | j'                  |j)                                | j+                  j,                  d       | j+                  j.                  t1                     | j+                         |
j3                         \  }}|r&| j5                  d|j6                  j8                         |j#                          | j                   j;                  t=        j>                  d             y )Nc                   .     e Zd Z fdZ fdZ xZS )5TestSSL.test_connect_accepted_socket.<locals>.MyProtoc                 Z    t         |   |       j                  j                         y r	   )r@   r1   r   r   )r   r0   rG   r   s     r   r1   zETestSSL.test_connect_accepted_socket.<locals>.MyProto.connection_lost:  s     ',tyy)r   c                 Z    t         |   |       | j                  j                         y r	   )r@   r(   r   r   )r   r'   rG   expected_responses     r   r(   zCTestSSL.test_connect_accepted_socket.<locals>.MyProto.data_received>  s#    %d+$$%67r   )r2   r3   r4   r1   r(   __classcell__)rG   rM  r   s   @r   MyProtorJ  8  s    *8 8r   rO  rX   rO   s	   test datas   rogerc                  >   	 t        j                   t         j                        } j                  |       } | j                         | j	                         | j                  d      | j                          y # t        $ r}t        d|       Y d }~y d }~ww xY w)Nc   z8Failure in client thread in test_connect_accepted_socket)	r]   r   wrap_socketr   sendallr5  rE   r   print)csockr0   rR   
client_sslmessageresponses     r   r   z4TestSSL.test_connect_accepted_socket.<locals>.clientK  s    fnn5)&2259Ed#g& ::b> N s   A9A= =	BBBT)targetdaemonr   r   c                       S r	   r   rD  s   r   r  z6TestSSL.test_connect_accepted_socket.<locals>.<lambda>g  s     r   r{   r.   SSL皙?) r   r   r]   r   rd   re   r   	threadingThreadr   acceptr   r   r   create_taskconnect_accepted_socketrun_foreverrE   joinassertFalseis_aliver   r   r   r%   resultassertInrG   r2   r   r
   sleep)r   
server_sslrV  rO  lsockr   threadconnr   r   ftrrR   rM  r   rW  rD  rX  s     `         @@@@@@r   test_connect_accepted_socketz$TestSSL.test_connect_accepted_socket5  s   yy	8k 	8 fnn-

#$Q  "$	 !!=,,.aT"
0E0EFF(D((+5 	

A*+h/s7|4#45
AMM%!6!67

		$$W]]3%78r   c                 t     j                   j                  d        t        j                         t        j                         fd} fd} j                  |dd      5 } j                   j                   ||j                              }d d d         j                  d       y # 1 sw Y   xY w)Nc                      y r	   r   r3  s     r   r  z=TestSSL.test_start_tls_client_corrupted_ssl.<locals>.<lambda>|  r  r   c                 p   | j                         }	 | j                  d       | j                  d       | j                  d       |j	                  d       | j                          |j                          y # t
        j                  $ r Y 6w xY w# | j                          |j                          w xY w)NTr      A
rO   s!   please corrupt the SSL connection)dupr   rS  r   r   r{   r  rE   )rj   	orig_sockr   s     r   r   z;TestSSL.test_start_tls_client_corrupted_ssl.<locals>.server  s    
I" $  & V$a CD 

!	 <<  

!s$   AA: :BB BB "B5c                   K   t        j                  | dd d {   \  }}j                  |j                          d {   d       |j	                  d       j                  t        j                        5  |j                          d {    d d d        |j                          	 j                  |       d {    y7 7 7 ;# 1 sw Y   :xY w7 # t        j                  $ r Y yw xY ww)Nr   r   ru     BOK)
r
   r   r   readliner   r!  r{   r  rE   r   r  s      r   r   z;TestSSL.test_start_tls_client_corrupted_ssl.<locals>.client  s     #*#:#:! "$$ $NFF
 6??#44f=LL""3<<0 (oo'''(LLN&&v... $
 5 (( ( /<< s   C6C	%C6C9C6=CCCC6/C CC C6C6CCC6C C30C62C33C6rO   r  rz  )	r   r
  rJ   simple_server_sslcontextr.  rl   r   rR   r   )r   r   r   r   resr   r   s   `    @@r   #test_start_tls_client_corrupted_sslz+TestSSL.test_start_tls_client_corrupted_ssl{  s    		''(>?446";;=	"	" __V)*%&  ( 	A+.))..vchh/?@C		A 	d#	A 	As   ',B..B7c                     d j                   z  t        j                         t        j                          fd} G  fddt        j
                         fd} j                  | j                        5 } j                  j                  t	        j                   ||j                        t        j                               d d d        y # 1 sw Y   y xY w)N   1c                    | j                  j                         | j                  t                    }j	                  t        |      t                     | j                  d       | j                  d       | j                  t                    }j	                  t        |      t                     | j                          | j                          y NTr      O	rc   r   r   r%   r   r   rS  unwraprE   rj   r'   	HELLO_MSGr   rE  s     r   servez8TestSSL.test_start_tls_client_reg_proto_1.<locals>.serve  s    OODLL)==Y0DSYI7MM.dM;LL==Y0DSYI7KKMJJLr   c                   *    e Zd Zd Z fdZd Zd Zy)>TestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProtoc                 .    || _         || _        d| _        y Nr   on_dataon_eofcon_made_cntr   r  r  s      r   r   zGTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.__init__      &$$%!r   c                 h    | xj                   dz  c_         j                  | j                   d       y NrO   r  r   rD  rp  r   s     r   r#   zNTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.connection_made  *    ""a'"  !3!3Q7r   c                 :    | j                   j                  |       y r	   r  r!   r&   s     r   r(   zLTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.data_received      ''-r   c                 :    | j                   j                  d       y r9  r  r!   r+   s    r   r,   zKTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.eof_received      &&t,r   Nr2   r3   r4   r   r#   r(   r,   r+   s   r   r>  r        &
8
.-r   r>  c                   K   t        j                  d       d {    	j                  j                         	j                  j                          	j                  j                  fdg|   d {   \  }}|j                         	j                  j                  ||       d {   }	j                   d {   d       |j                          d {    |j                          y 7 7 7 N7 ;7 w)Nr+  c                              S r	   r   r>  r  r  s   r   r  zKTestSSL.test_start_tls_client_reg_proto_1.<locals>.client.<locals>.<lambda>      GV4 r   r  )	r
   rj  r   create_futurer,  r   	start_tlsr   rE   )
rR   rp  rD  new_trr  r  r>  r  rF  r   s
       @@r   r   z9TestSSL.test_start_tls_client_reg_proto_1.<locals>.client  s     --$$$ii--/GYY,,.F9dii994=7;= =IB HHY99..r5.IIF7]D1LL#LLLLN %
= J*sX   D
D AD
<D=8D
5D6D

DD
*D+D
D
D
D
D
rS   )PAYLOAD_SIZErJ   r|  r.  r
   r-  rl   r   r   r   r   rR   r   r   r   r  r   r   r>  r  rF  rE  s   `   @@@@r   !test_start_tls_client_reg_proto_1z)TestSSL.test_start_tls_client_reg_proto_1  s    4,,,	#<<>#<<>		-'** 	-"	$ __UDLL_9 	ASII((  !1)0)>)>@A	A 	A 	As   ACC%c                 R    d j                   z   j                  t        j                  t        j                         j                          fd} G  fddt        j                         fd} j                  | j                        5 } j                  j                  t        j                   ||j                        t        j                               d d d        t!        j"                         j%                                 y # 1 sw Y   5xY w)Nr  c                 @   | j                  j                         | j                  d       | j                  d       | j	                  t                    }j                  t        |      t                     | j                          | j                          y r  )	rc   r   r   rS  r   r%   r   r  rE   r  s     r   r  z9TestSSL.test_create_connection_memory_leak.<locals>.serve  sk    OODLL)MM.dM;LL==Y0DSYI7KKMJJLr   c                   *    e Zd Zd Z fdZd Zd Zy)?TestSSL.test_create_connection_memory_leak.<locals>.ClientProtoc                 .    || _         || _        d| _        y r  r  r  s      r   r   zHTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.__init__  r  r   c                 v    || _         | xj                  dz  c_        j                  | j                  d       y r  )rp  r  r   r  s     r   r#   zOTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.connection_made  s1    ""a'"  !3!3Q7r   c                 :    | j                   j                  |       y r	   r  r&   s     r   r(   zMTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.data_received  r  r   c                 :    | j                   j                  d       y r9  r  r+   s    r   r,   zLTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.eof_received	  r  r   Nr  r+   s   r   r>  r    s    &
8.-r   r>  c                   K   t        j                  d       d {    j                  j                         j                  j                          j                  j                  fdg| di d {   \  }}j                   d {   d       |j                          d {    |j                          y 7 7 O7 97 w)Nr+  c                              S r	   r   r  s   r   r  zLTestSSL.test_create_connection_memory_leak.<locals>.client.<locals>.<lambda>  r  r   r{   r  )r
   rj  r   r  r,  r   r   rE   )	rR   rp  rD  r  r  r>  r  rF  r   s	      @@r   r   z:TestSSL.test_create_connection_memory_leak.<locals>.client  s     --$$$ii--/GYY,,.F9dii994$7;$"$ $IB 7]D1HHYLLHHJ %
$ +sF   CCA C?C CCC7C8CCCCr  )r  r   rJ   r   r   r   r
   r-  rl   r   r   r   r   rR   r   r   weakrefrefassertIsNoner  s   `   @@@@r   "test_create_connection_memory_leakz*TestSSL.test_create_connection_memory_leak  s    4,,,	88!3!3588:
		-'** 	-&	  __UDLL_9 	ASII((  !1)0)>)>@A	A !^4.*+	A 	As   ADD&c                 
   	 d j                   z  t        j                         	t        j                         d 	fd} G fddt        j
                         G fddt        j                         fd} j                  | j                  	      5 } j                  j                  t	        j                   ||j                         j                  	             d d d        y # 1 sw Y   y xY w)
Nr  r   c                 Z   | j                  j                         | j                  t                    }j	                  t        |      t                     | j                  d       | j                  d       | j                  t                    }j	                  t        |      t                     | j                  d       | j                  t                    }j	                  t        |      t                     | j                          | j                          y )NTr   r     2r  r  s     r   r  z8TestSSL.test_start_tls_client_buf_proto_1.<locals>.serve.  s    OODLL)==Y0DSYI7MM.dM;LL==Y0DSYI7LL==Y0DSYI7KKMJJLr   c                   0    e Zd Zd Z fdZd Zd Zd Zy)CTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirstc                 2    || _         t        d      | _        y r  )r  r   buf)r   r  s     r   r   zLTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.__init__B  s    &$Q<r   c                     dz  y r  r   r   rp  client_con_made_callss     r   r#   zSTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.connection_madeF      %*%r   c                     | j                   S r	   )r  )r   sizehints     r   
get_bufferzNTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.get_bufferJ  s    xxr   c                 t    |dk(  sJ | j                   j                  t        | j                  d |              y r  )r  r!   bytesr  )r   nsizes     r   buffer_updatedzRTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.buffer_updatedM  s0    z!z''dhhv.>(?@r   c                      y r	   r   r+   s    r   r,   zPTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.eof_receivedQ  s    r   N)r2   r3   r4   r   r#   r  r  r,   r  s   r   ClientProtoFirstr  A  s    (+ Ar   r  c                   *    e Zd Zd Z fdZd Zd Zy)DTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecondc                 .    || _         || _        d| _        y r  r  r  s      r   r   zMTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.__init__U  r  r   c                     dz  y r  r   r  s     r   r#   zTTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.connection_madeZ  r  r   c                 :    | j                   j                  |       y r	   r  r&   s     r   r(   zRTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.data_received^  r  r   c                 :    | j                   j                  d       y r9  r  r+   s    r   r,   zQTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.eof_receiveda  r  r   Nr  r  s   r   ClientProtoSecondr  T  s    &
+.-r   r  c                   K   t        j                  d       d {    j                  j                         j                  j                         }j                  j                         } j                  j                  fdg|   d {   \  }}|j                  	       j                  j                  ||       d {   }j                   d {   d       |j                  	       |j                   ||             j                  | d {   d       |j                  	       | d {    |j                          j                  
d       y 7 P7 7 7 7 P7 2w)Nr+  c                              S r	   r   )r  on_data1s   r   r  zKTestSSL.test_start_tls_client_buf_proto_1.<locals>.client.<locals>.<lambda>l  s    (2 r   r  r  rO   )
r
   rj  r   r  r,  r   r  r   set_protocolrE   )rR   on_data2r  rp  rD  r  r  r  r  r  r  rF  r   s         @r   r   z9TestSSL.test_start_tls_client_buf_proto_1.<locals>.clientd  s7    --$$$yy..0Hyy..0HYY,,.F9dii992;59; ;IB HHY99..r5.IIF8^T2LL# 1(F CD8^T2LL#LLLLN
 2A63 %; J+ ,sk   E:E-A6E:E08E:E2E:"E4#AE:%E6&E:E8(E:0E:2E:4E:6E:8E:r  )r  rJ   r|  r.  r
   BufferedProtocolr-  rl   r   r   r   r   rR   )
r   r  r   r   r  r  r  r  rF  rE  s
   `   @@@@@@r   !test_start_tls_client_buf_proto_1z)TestSSL.test_start_tls_client_buf_proto_1&  s    4,,,	#<<>#<<> !	&	w77 	&	- 0 0 	- 	7 	78 __UDLL_9 	8SII((  !1)-78	8 	8 	8s   %AC99Dc                     d j                   z  t        j                          j                  j	                          fd} G  fddt
        j                         fd} j                  | j                        5 } j                  j                  t        j                   ||j                        t        j                               d d d        y # 1 sw Y   y xY w)Nr  c                    | j                  j                         | j                  t                    }j	                  t        |      t                     	 j
                  j                  j                  d        | j                  d      }| j                          y # t        $ r Y w xY w# | j                          w xY wr  )
rc   r   r   r%   r   r   r   r!   r  rE   )rj   r'   r  r   server_waits_on_handshakes     r   r  z8TestSSL.test_start_tls_slow_client_cancel.<locals>.serve  s    OODLL)==Y0DSYI7		..-88$@}}[1 

 *  

s$   7B$ $	B0-B3 /B00B3 3Cc                   *    e Zd Zd Z fdZd Zd Zy)>TestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProtoc                 .    || _         || _        d| _        y r  r  r  s      r   r   zGTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.__init__  r  r   c                 h    | xj                   dz  c_         j                  | j                   d       y r  r  r  s     r   r#   zNTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.connection_made  r  r   c                 :    | j                   j                  |       y r	   r  r&   s     r   r(   zLTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.data_received  r  r   c                 :    | j                   j                  d       y r9  r  r+   s    r   r,   zKTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.eof_received  r  r   Nr  r+   s   r   r>  r    r  r   r>  c                 .  K   t        j                  d       d {    j                  j                         j                  j                          j                  j                  fdg|   d {   \  }}|j                         	 d {    j                  t         j                        5  t        j                  j                  j                  ||      d       d {    d d d        y 7 7 7 j7 # 1 sw Y   y xY ww)Nr+  c                              S r	   r   r  s   r   r  zKTestSSL.test_start_tls_slow_client_cancel.<locals>.client.<locals>.<lambda>  r  r   )
r
   rj  r   r  r,  r   r!  r/  r   r  )
rR   rp  rD  r  r  r>  r  rF  r   r  s
      @@r   r   z9TestSSL.test_start_tls_slow_client_cancel.<locals>.client  s     --$$$ii--/GYY,,.F9dii994=7;= =IB HHY+++""7#7#78 &&II''E>B    %
=
 , s^   DDAD<D=DD#D>5D	3D4D	8
DDDD		DDr  )r  rJ   r.  r   r  r
   r-  rl   r   r   r   rR   r   r   )r   r  r   r   r>  r  rF  r  s   `   @@@@r   !test_start_tls_slow_client_cancelz)TestSSL.test_start_tls_slow_client_cancel  s    4,,,	#<<>$(II$;$;$=!		-'** 	-"	 	$ __UDLL_9 	ASII((  !1)0)>)>@A	A 	A 	As   AC##C,c                     d j                   z  t        j                         t        j                          fd G d dt        j
                         fd fd} j                  j                   |              y )Nr  c                 ^   | j                  j                         | j                  |       | j                  t	                    }j                  t	        |      t	                     | j                         | j                         | j                          | j                          y r	   )
rc   r   r   r   r%   r   r   rS  r  rE   )rj   rR   r'   r  rF  r   s      r   r   z/TestSSL.test_start_tls_server_1.<locals>.client  ss    OODLL)LL==Y0DSYI7MM.)LL#KKMJJLr   c                   *    e Zd Zd Zd Zd Zd Zd Zy)4TestSSL.test_start_tls_server_1.<locals>.ServerProtoc                 <    || _         || _        || _        d| _        y Nr   )on_conr  on_con_lostr'   )r   r  r  r  s       r   r   z=TestSSL.test_start_tls_server_1.<locals>.ServerProto.__init__  s    $$#. 	r   c                 :    | j                   j                  |       y r	   )r  r!   )r   rp  s     r   r#   zDTestSSL.test_start_tls_server_1.<locals>.ServerProto.connection_made  s    &&r*r   c                 .    | xj                   |z  c_         y r	   )r'   r&   s     r   r(   zBTestSSL.test_start_tls_server_1.<locals>.ServerProto.data_received  s    		T!	r   c                 :    | j                   j                  d       y r  r  r+   s    r   r,   zATestSSL.test_start_tls_server_1.<locals>.ServerProto.eof_received  s    &&q)r   c                 v    || j                   j                  d        y | j                   j                  |       y r	   )r  r!   r   r/   s     r   r1   zDTestSSL.test_start_tls_server_1.<locals>.ServerProto.connection_lost  s/    ;$$//5$$2237r   N)r2   r3   r4   r   r#   r(   r,   r1   r   r   r   ServerProtor    s     +"*8r   r  c                 p  K   | d {   }|j                         j                  | j                  d       j                  j	                  || dj
                         d {   }| d {    | d {    j                  | j                         |j                          y 7 7 G7 ?7 7w)Nr   T)r   r   )r   r   r'   r   r  r   rE   )	rD  r  r  r  rp  r  r  r   rE  s	         r   mainz-TestSSL.test_start_tls_server_1.<locals>.main  s     BHHYUZZ-99..E> &*ll / 4 4F
 LLUZZ3LLN 
4
 sF   B6B.AB6(B0)	B62B23	B6<B4=2B60B62B64B6c            	      x  K   	j                   j                         } 	j                   j                         }	j                   j                         } | ||      	j                   j                  fddd       d {   }|j                  d   j	                         	j                  fd	j                        5  t        j                   | ||      	j                         d {    d d d        |j                          |j                          d {    y 7 7 7# 1 sw Y   6xY w7 w)Nc                       S r	   r   r\  s   r   r  zCTestSSL.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>  s     r   rY   r   c                      |       S r	   r   )rj   rR   r   s    r   r  zCTestSSL.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>  s    fT4.@ r   r  )r   r  create_serverr   r   rp   r   r
   r   rE   r   )
r  r  r  r   rR   rD  r  r   r  r   s
       @@r   run_mainz1TestSSL.test_start_tls_server_1.<locals>.run_main  s    YY,,.FYY,,.F))113K<E9922{A/ /F>>!$002D!@)- ! 7 *&&< LL* * ** LLN$$&&&/** * 'sI   A<D:D(AD:.D,2D*3D,7+D:"D8#D:*D,,D51D:)r  rJ   r|  r.  r
   r-  r   r   )r   r  r  r  r   rF  r  rE  s   ` @@@@@@r   test_start_tls_server_1zTestSSL.test_start_tls_server_1  sf    4,,,	#<<>#<<>		8'** 	8,	 	'& 			$$XZ0r   c                    	
 ddt         j                  dt        z  dt        z   j                  t        j
                  t        j                         j                         	 j                  t        j
                  t        j                         j                         
g  fd G fddt        j                        fd	
 fd	 fd
} j                         5   j                  j                   |              d d d         j                         D ]  }|j                           y # 1 sw Y   3xY w)Nr   r   r   r   c                   K   | j                  t                     d {   }j                  |       |j                  d       | j                  t                     d {   }j                  |       |j	                  dt        d      t        d      g       |j                          d {    |j                          dz  y 7 7 l7 wr   r   r   s      r   r   z>TestSSL.test_create_server_ssl_over_ssl.<locals>.handle_client!  r   r   c                   "     e Zd Z fdZ xZS )?TestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocolc                     t               |j                          | j                  j                  | j                  j	                  || d            fd}j                  |       y )NTr   c                     	 j                         }j                  |       y # t        $ r}j                  |       Y d }~y d }~ww xY wr	   )rh  r#   r   r1   )r   rp  rk   r   super_s      r   cbz[TestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made.<locals>.cb8  sF    3 ZZ\ ..r2 % 3..r223s   % 	A	AA	)r@   pause_reading_looprb  r  add_done_callback)r   r   r  r   r  rG   sslctx_2s      @@r   r#   zOTestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made2  sa    '')jj,,TZZ-A-AtX4 .B .A B3 %%b)r   )r2   r3   r4   r#   rN  )rG   r  s   @r   ServerProtocolr   1  s    * *r   r	  c                  B    t        j                         }  |       }|S r	   )r
   StreamReader)r   protocolr	  r   s     r   server_protocol_factoryzHTestSSL.test_create_server_ssl_over_ssl.<locals>.server_protocol_factoryA  s"    ))+F%fm<HOr   c                     K   t        j                          	fd}	j                  |      }|j                          j	                  |        d {    y 7 w)Nc                     	  j                  
        j                         t        j                         t        j                         j	                        } fd} ||j
                          ||j                          ||j                  d      }j                  |d        ||j                  	       d}	  ||j                  d      }|sn||z  }j                  |d        ||j                          j                          j                  j                  j                  d        y # t        $ r@}j                  j                  j                  |        j                          Y d }~y d }~ww xY w)Nc                 8   	 	  | | }	 j                  rj                  j	                                |S # t         j                  $ rN j                  rj                  j	                                j                  j                  d             Y nw xY w)Ni   )r{   SSLWantReadErrorpendingr   readr   r5  )funcrt   rvincomingoutgoingrj   s      r   dozVTestSSL.test_create_server_ssl_over_ssl.<locals>.test_client.<locals>.prog.<locals>.doT  s    "A%)4[ %
 $++ IIhmmo6!	 $'#7#7 A#+#3#3$(IIhmmo$> (tyy/? @A	 #s   7 ABBr   r   r   r   r   )r   r   r{   	MemoryBIOwrap_biodo_handshaker   r  r   r  rE   r   r   r!   r   r   )rj   sslobjr  r'   chunkrk   r  r  r   r   rR   client_sslctx_1client_sslctx_2r   r   s   `     @@r   r   zJTestSSL.test_create_server_ssl_over_ssl.<locals>.test_client.<locals>.progI  s@   -ILL&MM/2  #}}H"}}H,55hIF" v**+v||V,fkk1-D$$T51v||V,D "6;; 2$!	 
 $$T73v}}%JJL II223>>4H	 ! !II2233D3DbIJJLL!s   DE   	F		6FF	r   )
rR   r   r   r   r   r   r  r  r   r   s
   `  @r   r   z<TestSSL.test_create_server_ssl_over_ssl.<locals>.test_clientF  sL     .."C.I .I` __T*FLLNNN6"IIs   AA$A"A$c                    K   i }  j                   j                  	ddft        j                  
d|  d {   }	 |j                  }j                  |       |d   j                         }g }t              D ]  }|j                   |              t        j                  t        j                  |        d {    j                   j                  |j                         |j                          d {    y 7 7 D7 	# j                   j                  |j                         |j                          d {  7   w xY ww)NrY   r   r   )r   r  r]   r   r   r   r   r   r   r
   r   r   r   rE   r   )r   r   r   rR   r   r   r   r   r   r  sslctx_1r   s         r   r   z=TestSSL.test_create_server_ssl_over_ssl.<locals>.start_server  s$    F/		//'Q ~~	
  C(KK		* |//1y) 4ALLT!234 &&w~~u'=wGGG 		##CII.oo'''+" H ( 		##CII.oo'''sW   6EDEBD
 DD
 8E>D?ED
 E
9E
EE

E)r   r   r   r   rJ   r   r   r   r
   StreamReaderProtocolr   r   r   r   r   )r   r   r   r   r   r   r	  r   r   r  r  r   r   r  r!  r  r   s   `  @@@@@@@@@@@@@@r   test_create_server_ssl_over_sslz'TestSSL.test_create_server_ssl_over_ssl  s"   	&&~-~-22!3!3599;22!3!3599;	 	*W99 	* 	
7	 7	r	( 	(4 //1 	9II((8	9 	i( 	FKKM		9 	9s   !EEc                 0    dddt         z   j                  t        j                  t        j                         j                          fd fd} fd} j                         5   ||       d d d        y # 1 sw Y   y xY w)Nr   r   r   c                     | j                  d       | j                  t                    }j                  |       | j	                  d       | j                          | j                          y )NTr   r   )r   r   r%   r   r   r  rE   )rj   r'   r   r   r   s     r   r   z-TestSSL.test_shutdown_cleanly.<locals>.server  s\    MM   " ==V-DT6*IIeKKMJJLr   c                   K   i }t        t        j                        }t        j                  | dd| d {   \  }}|j                         j                  |j                  d       d {   d       j                  |j                          d {   d       dz  |j                          j                  |       d {    y 7 7 b7 <7 w)Nr   r   r   r   r   r   rO   )r   r   r   r
   r   r   r   r   r  rE   r   )rR   r   r   r   r   r   r   r   s       r   r   z-TestSSL.test_shutdown_cleanly.<locals>.client  s     F0E0EFF#*#:#:! "$ 	$ NFF LL 6#5#5a#88%@6;;=0#6 1HCLLN""6*** 90 +sE   8CC7C3C4'CC2CCCCCCc                 (   dd }j                        5 }g }t              D ]#  }|j                   | |j                               % j                  j                   ||        d d d        j                         y # 1 sw Y   xY w)Nr   c                  B   K   t        j                  |   d {   S 7 wr	   r   r  s    r   r  z;TestSSL.test_shutdown_cleanly.<locals>.run.<locals>._gather  s     $^^U3333r  r  r  r  s	        r   r  z*TestSSL.test_shutdown_cleanly.<locals>.run  s    C4 -6)2 ! 4 %7:y) 1ALLchh01 		,,UO%% S),% %r	  )r   r   rJ   r   r   r   r   )	r   r   r  r   r   r   r   r   r   s	   `  @@@@@@r   test_shutdown_cleanlyzTestSSL.test_shutdown_cleanly  s    	~-00!3!35779		+*	-& //1 	K	 	 	s   :	BBc                 t   	 dd j                  t        j                  t        j                        	 j	                         d  	fd} fd} fd} j                   ||            5 } j                  j                   ||j                               d d d        y # 1 sw Y   y xY w)N       c                 >   | j                  d       j                  | j                  d      d       | j                  d       t	        j
                  d       | j                  z        }j                  t        |      z         | j                          y )NTr   r      ping   pongr+  )r   r   r   r   timerj  r%   rE   rj   r'   CHUNKSIZEr   r   s     r   r   z2TestSSL.test_flush_before_shutdown.<locals>.server  sv    MM&dM3T]]1-w7IIgJJsO==.DSY5JJLr   c                       fd}|S )Nc                     	  |        j                   j                  j                  d        y # t        $ r0}j                   j                  j                  |       Y d }~y d }~ww xY wr	   r   r   r!   r   r   rj   rk   futuremethr   s     r   wrapperz@TestSSL.test_flush_before_shutdown.<locals>.run.<locals>.wrapper  ]    LJ II2263D3DdK ! MII2263G3GLLM   2 	A+&A&&A+r   r9  r:  r8  r   s   ` r   r  z/TestSSL.test_flush_before_shutdown.<locals>.run      L Nr   c                   K   
j                   j                         	t        j                  | dd d {   \  }}|j                  j
                  }|j                  d       |j                  d       d {   }
j                  |d       |j                          t              D ]  }|j                  dz          |j                          |j                          
j                  |       d {    	 |j                          d {   }
j                  |d       	 d {    y 7 7 7 >7 '# t        $ r Y w xY w7 wNr   r   r.  r   r/     xr   )r   r  r
   r   r   _ssl_protocolr   r   r   pause_writingr   rE   resume_writingr   r  r@  )rR   r   r   sslprotocolr'   r   r2  r3  r   r8  r   s         r   r   z2TestSSL.test_flush_before_shutdown.<locals>.client   s-    YY,,.F#*#:#:! "$$ $NFF !**88KLL!++A..DT7+%%'4[ +TE\*+ LLN&&(""6***#[[]*  s+ LL-$ / +*' sw   4ED4AE:D6;A>E9D8:E?D< D:D< )E.E/E6E8E:D< <	EEEE	r   rJ   r   r   r   rl   r   r   rR   )
r   r   r  r   r   r2  r3  r   r8  r   s
   `    @@@@@r   test_flush_before_shutdownz"TestSSL.test_flush_before_shutdown  s    00!3!35779			 	6 __S[) 	;SII(()9:	; 	; 	;s   9,B..B7c                 2   	
 dd j                  t        j                  t        j                        
 j	                         d 	 
fd} 
fd}	 fd}	 fd} j                   ||            5 } j                  j                   ||j                               d d d         j                   ||            5 } j                  j                   ||j                               d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY w)Nr+  r,  c                 $   t        j                         }t        j                         }
j                  ||d      }	 	 |j                          |j                  r| j                  |j                                	 	 	 |j                  d      }	 	j                  |d       |j                  d       | j                  |j                                t        j                  d       	j                  t         j                        5  |j                          d d d        | j                  |j                                d}	 	 t        |j                  d            }||z  }!# t         j                  $ rN |j                  r| j                  |j                                |j                  | j                  d             Y nw xY w# t         j                  $ r# |j                  | j                  d             Y nw xY w# 1 sw Y   xY w# t         j                  $ r# |j                  | j                  d             Y t         j                   $ r Y nw xY w	j                  |z         |j                          | j#                          y )	NTr   i @  r   r.  r/  皙?r   )r{   r  r  r  r  r   r  r  r   r5  r   r0  rj  r!  r  r%   SSLZeroReturnErrorrE   )rj   r  r  r  r'   data_lenr  r2  r3  r   r   s          r   r   zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.server)  s   }}H}}H__XxT_JF	'')  ''		(--/2!;;q>D T7+LL!IIhmmo&JJsO ""3#7#78   IIhmmo& HE 23E%H = ++ 5''		(--/2NN499U#345  ++ 5NN499U#345     ++ 5NN499U#34--  Xut|4 MMOJJLsI    E" >G HH "AGG3G>=G>H3IIIc                 |   | j                  d       j                  | j                  d      d       | j                  d       t	        j
                  d       | j                  t        j                         | j                  z        }j                  t        |      z         | j                          y )NTr   r   r.  r/  rJ  )r   r   r   r   r0  rj  shutdownr]   SHUT_WRr%   rE   r1  s     r   
eof_serverzGTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.eof_server_  s    MM&dM3T]]1-w7IIgJJsO MM&..) ==.DSY5JJLr   c                 R  K   	j                   j                         t        j                  | dd d {   \  }}|j	                  d       |j                  d       d {   }	j                  |d       t              D ]   }|j                  j                  dz         " 	 |j                          d {   }	j                  |d        d {    |j                          	j                  |       d {    y 7 7 7 N# t        t        f$ r Y Kw xY w7 I7 "wr@  )r   r  r
   r   r   r   r   r   r   _test__append_write_backlogr  r   r@  rE   r   )
rR   r   r   r'   r   r2  r3  r   r8  r   s
        r   r   zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.cliento  s    YY,,.F#*#:#:! "$$ $NFF LL!++A..DT7+ 4[ K  <<TE\JK#[[]*  s+ LLLLN""6***+$
 / +#%9:   +sv   4D'D,D'$D
%AD'*D =D>D D'D#(D'D%D'
D'D D D'D  D'%D'c                       fd}|S )Nc                     	  |        j                   j                  j                  d        y # t        $ r0}j                   j                  j                  |       Y d }~y d }~ww xY wr	   r6  r7  s     r   r:  zQTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.run.<locals>.wrapper  r;  r<  r   r=  s   ` r   r  z@TestSSL.test_remote_shutdown_receives_trailing_data.<locals>.run  r>  r   rF  )r   r   rP  r   r  r   r2  r3  r   r8  r   s   `     @@@@@r   +test_remote_shutdown_receives_trailing_dataz3TestSSL.test_remote_shutdown_receives_trailing_data  s    00
 7794	l	 	+ 	+6	 __S[) 	;SII(()9:	; __S_- 	;II(()9:	; 	;	; 	;	; 	;s   ,D,DD
Dc                     t        j                   t         j                        }|j                  d       |j                          fd}|5  	  j	                  t
              5 } j                  j                   |              t        j                          t        j                          t        j                          d d d         j                  dj                  j                               d d d        y # 1 sw Y   <xY w# t        $ r%} j                  t        |      d       Y d }~>d }~ww xY w# 1 sw Y   y xY w)NrX   c                    K   	 t        j                   j                  j                  t         j                  g ddid       d {    j                  d       y 7 # t        t         j                  f$ r Y y w xY ww)Nr{   Tr^  TimeoutError is not raisedr
   r   r   r,  r-  r   ConnectionRefusedErrorr/  )rR   r   s   r   testz2TestSSL.test_connect_timeout_warning.<locals>.test  s     8&&/DII//0@0@ A15A;?A   		67 +G,@,@A ;   BAA# 
A!A# B!A# #A?<B>A??BzUnexpected ResourceWarning: {}zResourceWarning not triggered)r]   r   rd   r   assertWarnsResourceWarningr   r   gccollectr   formatwarningAssertionErrorr   str)r   sr[  cmerR   s   `    @r   test_connect_timeout_warningz$TestSSL.test_connect_timeout_warning  s    MM&..)	 }}		8  
	O	O%%o6 !"II008JJLJJLJJL	! 		:AA"**MN
	O 
	O! !
 " J  Q)HIIJ
	O 
	OsO   D;D
&AC>D
*D;>D	D

	D8D3.D;3D88D;;Ec                     t        j                   t         j                        }|j                  d       |j                  d       |j	                          fd}|5  t        j                         } j                  j                   ||             t        j                  |      }d d d         j                                 y # 1 sw Y    xY w)NrX   rO   c                   K   	 t        j                   j                  j                  t         j                  gd| id       d {    j                  d       y 7 # t        t         j                  f$ r Y y w xY ww)Nr{   r^  rX  rY  )r&  rR   r   s    r   r[  z9TestSSL.test_handshake_timeout_handler_leak.<locals>.test  s     8&&/DII//0@0@ 94 9479   		67 +G,@,@A r\  )r]   r   rd   re   r   r{   r   r   r   r  r  r  )r   re  r[  r&  rR   s   `   @r   #test_handshake_timeout_handler_leakz+TestSSL.test_handshake_timeout_handler_leak  s    MM&..)	 	}}		8  	#,,.CII((c3++c"C	# 	#% 	# 	#s    AC

Cc                      j                    fd} G fddt        j                        fd} j                  |      5 } j	                         }j                   ||j                  |             t        j                  |      }d d d        t        j                          t        j                          t        j                           j                                 y # 1 sw Y   \xY w)Nc                     j                  t        j                  t        j                        }|j	                  | d      } | j                  d       | j                          y )NTr   r,  )r   rJ   r   r   rR  r5  rE   )rj   r   r   s     r   r   z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.server  sP    44##""F %%d%=DIIbMJJLr   c                       e Zd Z fdZd Zy)<TestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocolc                 <    t        j                        | _        y Nr   )r
   r   r   r   s    r   r   zETestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocol.__init__  s    ">>t4r   c                 :    | j                   j                  d        y r	   )r   r!   r/   s     r   r1   zLTestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocol.connection_lost  s    ##D)r   N)r2   r3   r4   r   r1   r   s   r   r-  ro    s    5*r   r-  c                    K    j                   g| d|i d {   \  }}|j                          |j                   d {    y 7 ,7 w)Nr{   )r,  rE   r   )rR   r&  rp  prr-  r   s       r   r   z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.client  sH     1411(KTKsKKFBHHJ&&LL Ls!   AA
&AAAA)r   r
   r-  rl   r   r   rR   r  r  r_  r`  r  )r   r   r   r   r&  r-  r   s   `    @@r   "test_shutdown_timeout_handler_leakz*TestSSL.test_shutdown_timeout_handler_leak  s    yy		*w'' 	*	
 __V$ 	#113C##F388S$9:++c"C	# 	







 	#% 	# 	#s   AC**C3c                 8     j                   t        j                         d  fd} G fddt        j                         fd} j	                  |      5 }j                   ||j                               d d d        y # 1 sw Y   y xY w)Nc                    j                  t        j                  t        j                        }|j	                  | d      } | j                  d       | j                  d      dk(  sJ | j                  d       | j                  t        j                         j                  j                         | j                  d      dk(  sJ | j                          y )NTr      hellor      world   extra bytesr   )r   rJ   r   r   rR  r   r5  rN  r]   rO  r   setrE   )rj   r   eofr   r   s     r   r   z=TestSSL.test_shutdown_timeout_handler_not_set.<locals>.server  s    44##""F %%d%=DIIh99T?h...IIn%MM&..)%%cgg.99T?c)))JJLr   c                   .    e Zd ZfdZd Z fdZd Zy)?TestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocolc                 J    t        j                        | _        d | _        y rq  )r
   r   r   r   r   s    r   r   zHTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.__init__  s    ">>t4!%r   c                     || _         y r	   )r   r"   s     r   r#   zOTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.connection_made  s	    !*r   c                     |dk(  r6| j                   j                  d       | j                   j                          y |y )Nrx  ry  )r   r   r  )r   r'   extras     r   r(   zMTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.data_received  s4    8#NN((2NN002 !Er   c                 v    || j                   j                  d        y | j                   j                  |       y r	   )r   r!   r   r/   s     r   r1   zOTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.connection_lost  s+    ;HH''-HH**3/r   N)r2   r3   r4   r   r#   r(   r1   )r  r   s   r   r-  r~    s    &+!0r   r-  c                 "  K   j                         } j                  g| d|i d {   \  }}j                          d {    |j                          |j                   d {    |j                          dk(  sJ y 7 [7 B7  w)Nr{   rz  )r   r,  waitresume_readingr   rE   )	rR   r&  rp  rt  r-  r|  r  r   r   s	       r   r   z=TestSSL.test_shutdown_timeout_handler_not_set.<locals>.client"  s     113C1411(KTKsKKFB((*&&LLHHJN*** Ls3   *BB	BB	#B,B-BBB)r   r
   Eventr-  rl   r   rR   )r   r   r   r   r-  r|  r  r   s   `   @@@@r   %test_shutdown_timeout_handler_not_setz-TestSSL.test_shutdown_timeout_handler_not_set  sy    yymmo	 	0w'' 	0.	+ 	+ __V$ 	6##F388$45	6 	6 	6s   %"BBr	   )NN)0r2   r3   r4   r  r   r   r   rA   rN   r]   r   r   rl   rp   rv   ry   r   r   
contextlibcontextmanagerr   r   r   r   r   r   r  r  r#  r0  rA  rG  rq  r~  r  r  r  r  r  r#  r)  rG  rU  rh  rk  ru  r  rN  rG   s   @r   r>   r>   O   s,    L""G) !.."00!;B !.."00.GG <@  ( ((0]~`D?B#?J)'V/>b3D9L,$\;Az>,@]8~;AzL1\Ob@D9;vz;xO8!2%!N66r   r>   c                   4    e Zd Zd Zd ZdddddZd Zd	 Zy)
TestSocketWrapperc                     || _         y r	   )_TestSocketWrapper__sockr   rj   s     r   r   zTestSocketWrapper.__init__6  s	    r   c                     d}t        |      |k  r<| j                  |t        |      z
        }|dk(  rt        ||z  }t        |      |k  r<|S r  )r%   r5  r  )r   nr  r'   s       r   r   zTestSocketWrapper.recv_all9  sR    #hl99QS\*Ds{,,4KC	 #hl
 
r   FNTr   r   do_handshake_on_connectc                    t        |t        j                        sJ |j                  | j                  |||      }|r|j                          | j                  j                          || _        y )Nr  )r   r{   r|   rR  r  r  rE   )r   ssl_contextr   r   r  ssl_socks         r   r   zTestSocketWrapper.starttlsB  sd    
 +s~~666**KK[+$; + =
 !!#r   c                 .    t        | j                  |      S r	   )r\   r  )r   r`   s     r   __getattr__zTestSocketWrapper.__getattr__T  s    t{{D))r   c                 `    dj                  t        |       j                  | j                        S )Nz	<{} {!r}>)ra  typer2   r  r+   s    r   __repr__zTestSocketWrapper.__repr__W  s#    !!$t*"5"5t{{CCr   )r2   r3   r4   r   r   r   r  r  r   r   r   r  r  4  s'     #!%)-$*Dr   r  c                       e Zd Zd Zd Zd Zy)SocketThreadc                 2    d| _         | j                          y r   )_activere  r+   s    r   r   zSocketThread.stop]  s    		r   c                 &    | j                          | S r	   )r   r+   s    r   	__enter__zSocketThread.__enter__a  s    

r   c                 $    | j                          y r	   )r   r/   s     r   __exit__zSocketThread.__exit__e  s    		r   N)r2   r3   r4   r   r  r  r   r   r   r  r  [  s    r   r  c                       e Zd Zd Zd Zy)rn   c                     t         j                  j                  | d d d       d| _        || _        || _        d| _        || _        || _        y )Nztest-clientT)	r_  r`  r   rZ  _timeout_sockr  _prog_test)r   r[  rj   r   rS   s        r   r   zTestThreadedClient.__init__k  sF    !!$dMB


r   c                     	 | j                  t        | j                               y # t        t        f$ r  t
        $ r%}| j                  j                  |       Y d }~y d }~ww xY wr	   )r  r  r  KeyboardInterrupt
SystemExitBaseExceptionr  r   r   s     r   r  zTestThreadedClient.runu  sR    	.JJ(45!:. 	 	.JJ))"--	.s   $' A$AA$N)r2   r3   r4   r   r  r   r   r   rn   rn   i  s    .r   rn   c                   F     e Zd Zd Z fdZd Zd Zd Zed        Z	 xZ
S )rg   c                 >   t         j                  j                  | d d d       d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t        j                         \  | _        | _        | j                  j                  d       || _        y )Nztest-serverTr   F)r_  r`  r   rZ  _clients_finished_clients_max_clientsr  r  r  r  r]   
socketpair_s1_s2setblockingr  )r   r[  rj   r   rS   rU   s         r   r   zTestThreadedServer.__init__  s    !!$dMB!"'

#..0$(U#
r   c                     	 | j                   r9| j                   j                         dk7  r	 | j                   j                  d       t        |           y # t        $ r Y w xY w# t        |           w xY w)Ns   stop)r  filenor   rf   r@   r   rF   s    r   r   zTestThreadedServer.stop  sa    	xxDHHOO-3HHMM'* GLN   GLNs(   )A& A 	A# A& "A##A& &A6c                 x   	 | j                   5  | j                   j                  d       | j                          d d d        | j                  j	                          | j
                  j	                          y # 1 sw Y   >xY w# | j                  j	                          | j
                  j	                          w xY wr   )r  r  _runr  rE   r  r+   s    r   r  zTestThreadedServer.run  s{    	 

&&u-		 HHNNHHNN  HHNNHHNNs!   B ,A7B 7B <B 6B9c                     | j                   r| j                  | j                  k\  ry t        j                  | j                  | j
                  gg g | j                        \  }}}| j
                  |v ry | j                  |v rk	 | j                  j                         \  }}| xj                  dz  c_        |j                  | j                         	 |5  | j                  |       d d d        | j                   ry y # 1 sw Y   xY w# t        t        f$ r  t        $ r.}d| _         	  # | j                  j                  |       w xY wd }~ww xY w# t        $ r Y Zt         j"                  $ r | j                   sY y  w xY w)NrO   F)r  r  r  selectr  r  r  ra  rc   _handle_clientr  r  r  r  r   BlockingIOErrorr]   rS   )r   rwxrn  rR   rk   s          r   r  zTestThreadedServer._run  sC   ll}} 1 11mmTXX&B?GAq! xx1}zzQ>!%!2!2!4JD$ MMQ&MOODMM2
>! 6 //561 ll06 6-z: ( >',>! JJ99"=> ' ~~ <<	sZ   E D C:#D :D?D EE&D''EEE	E=E=;E=c                 8    | j                  t        |             y r	   )r  r  r  s     r   r  z!TestThreadedServer._handle_client  s    

$T*+r   c                 6    | j                   j                         S r	   )r  r   r+   s    r   rR   zTestThreadedServer.addr  s    zz%%''r   )r2   r3   r4   r   r   r  r  r  propertyrR   rN  r  s   @r   rg   rg   ~  s1    $">H, ( (r   rg   )#r
   r  r_  r   r  r]   sysr^   r_  r0  r  unittestr{   ImportErrorr[  r   test.test_asyncior   rJ   platformMACOSr   r   r-  r   Filterr6   skipIfTestCaser>   r  r`  r  rn   rg   r   r   r   <module>r     s  
   	    
       1 
	!"(''"" 'Dw~~  o.\6j!! \6 /\6H/$D $DN9## . .*P( P(U3  
Cs   C' 'C10C1