
    9bh                        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mZ ej(                  dk(  ZesdndZd Z G d d	e j0                        Z G d
 dej4                        Z ej8                  edu d       G d dej:                               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     D/opt/python-3.12.12/usr/lib/python3.12/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                 p    || _         d| _        | j                  r| j                  j                  d        y y )N	CONNECTED)r   r   r   
set_resultr   r   s     r   connection_madezMyBaseProto.connection_made0   s.    " 
>>NN%%d+ r   c                 @    | xj                   t        |      z  c_         y r	   )r   lenr   datas     r   data_receivedzMyBaseProto.data_received7   s    s4y r   c                     d| _         y )NEOF)r   r   s    r   eof_receivedzMyBaseProto.eof_received;   s	    
r   c                 b    d| _         | j                  r| j                  j                  d        y y )NCLOSED)r   r   r!   r   excs     r   connection_lostzMyBaseProto.connection_lost?   s'    
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__G   s	    r   c                 6    | j                   |j                   v ryy)NFTr8   )r   records     r   filterzMessageOutFilter.filterJ   s    88vzz!r   N)r2   r3   r4   r   r<   r   r   r   r6   r6   F   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.d+ Z/ xZ0S ).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.setUpV   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_servere   s     <D99002c88D 32 (}}VV%7%78?455a<DEE 	IIdOKK 
 "$Wk; 	;) 32   	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)ALLT!23 * &&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II((8 2 	i(FKKM  21s   !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>.server4  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>.clientC  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_sockY  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>._gatherr  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>.runn  s    C4 -6)2 ! 47:y)ALLchh0 * 		,,We_=4 S),4 4   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 2 //1 21 21 21s   *	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>      dr   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-=>	8	( (8 8	( (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-=> A	( ( A@	( (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    (//#:Nr   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-=> 9	( 	+, 	2& 98	( (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   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 r:  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   ClientProtor8  	  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-=> 9	( "%		@A		 6 7#II<= $ 98	( (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   rN  r   s   @r   MyProtorK  9  s    *8 8r   rP  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   sendallr6  rE   r   print)csockr0   rR   
client_sslmessageresponses     r   r   z4TestSSL.test_connect_accepted_socket.<locals>.clientL  s    fnn5)&2259Ed#g& ::b> N s   A9A= =	BBBT)targetdaemonr   r   c                       S r	   r   rE  s   r   r  z6TestSSL.test_connect_accepted_socket.<locals>.<lambda>h  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_sslrW  rP  lsockr   threadconnr   r   ftrrR   rN  r   rX  rE  rY  s     `         @@@@@@r   test_connect_accepted_socketz$TestSSL.test_connect_accepted_socket6  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>}  r4  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   rT  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   rv     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''' 1LLN&&v... $
 5 ( 10 /<< 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  r{  )	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)*%&  (+.))..vchh/?@C	( 	d#( (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   rT  unwraprE   rj   r'   	HELLO_MSGr   rF  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   rE  rq  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 r:  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4r   r  )	r
   rk  r   create_futurer,  r   	start_tlsr   rE   )
rR   rq  rE  new_trr  r  r?  r  rG  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  rG  rF  s   `   @@@@r   !test_start_tls_client_reg_proto_1z)TestSSL.test_start_tls_client_reg_proto_1  s    4,,,	#<<>#<<>		-'** 	-"	$ __UDLL_9SII((  !1)0)>)>@A :99s   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   rT  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  )rq  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 r:  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
   rk  r   r  r,  r   r   rE   )	rR   rq  rE  r  r  r?  r  rG  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_9SII((  !1)0)>)>@A : !^4.*+ :9s   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__C  s    &$Q<r   c                     dz  y r  r   r   rq  client_con_made_callss     r   r#   zSTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.connection_madeG      %*%r   c                     | j                   S r	   )r  )r   sizehints     r   
get_bufferzNTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.get_bufferK  s    xxr   c                 f    | 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_updatedN  s$    ''dhhv.>(?@r   c                      y r	   r   r+   s    r   r,   zPTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.eof_receivedR  s    r   N)r2   r3   r4   r   r#   r  r  r,   r  s   r   ClientProtoFirstr  B  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__V  r  r   c                     dz  y r  r   r  s     r   r#   zTTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.connection_made[  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 r:  r  r+   s    r   r,   zQTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.eof_receivedb  r  r   Nr  r  s   r   ClientProtoSecondr  U  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>m  s    (2r   r  r  rO   )
r
   rk  r   r  r,  r   r  r   set_protocolrE   )rR   on_data2r  rq  rE  r  r  r  r  r  r  rG  r   s         @r   r   z9TestSSL.test_start_tls_client_buf_proto_1.<locals>.cliente  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  rG  rF  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_9SII((  !1)-78 :99s   %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 r:  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
   rk  r   r  r,  r   r!  r/  r   r  )
rR   rq  rE  r  r  r?  r  rG  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   98 %
=
 , 98s^   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  rG  r  s   `   @@@@r   !test_start_tls_slow_client_cancelz)TestSSL.test_start_tls_slow_client_cancel  s    4,,,	#<<>$(II$;$;$=!		-'** 	-"	 	$ __UDLL_9SII((  !1)0)>)>@A :99s   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   rT  r  rE   )rj   rR   r'   r  rG  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   rq  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   )	rE  r  r  r  rq  r  r  r   rF  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   rE  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* * *7 LLN$$&&&/*7 7 '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   rG  r  rF  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	   )ri  r#   r   r1   )r   rq  rk   r   super_s      r   cbz[TestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made.<locals>.cb9  sF    3 ZZ\ ..r2 % 3..r223s   % 	A	AA	)r@   pause_reading_looprc  r  add_done_callback)r   r   r  r   r  rG   sslctx_2s      @@r   r#   zOTestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made3  sa    '')jj,,TZZ-A-AtX4 .B .A B3 %%b)r   )r2   r3   r4   r#   rO  )rG   r	  s   @r   ServerProtocolr  2  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_factoryB  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   r6  )funcrt   rvincomingoutgoingrj   s      r   dozVTestSSL.test_create_server_ssl_over_ssl.<locals>.test_client.<locals>.prog.<locals>.doU  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>.progJ  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_clientG  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)ALLT!23 * &&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II((8 2 	i(FKKM  21s   !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 ! 47:y)ALLchh0 * 		,,UO%4 S),4 4r	  )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  sv    	~-00!3!35779		+*	-& //1K 211s   :	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   timerk  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   r:  r;  r9  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   r0     xr   )r   r  r
   r   r   _ssl_protocolr   r   r   pause_writingr   rE   resume_writingr   r  rA  )rR   r   r   sslprotocolr'   r   r3  r4  r   r9  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   r3  r4  r   r9  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    @  r   r/  r0  皙?r   r{   r  r  r  r  r   r  r  r   r6  r   r1  rk  r!  r  r%   SSLZeroReturnErrorrE   rj   r  r  r  r'   data_lenr  r3  r4  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 9IIhmmo& HE 23E%H = ++ 5''		(--/2NN499U#345  ++ 5NN499U#345  98 ++ 5NN499U#34--  Xut|4 MMOJJLI    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/  r0  rL  r   r   r   r   r1  rk  shutdownr]   SHUT_WRr%   rE   r2  s     r   
eof_serverzGTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.eof_server`      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rA  )r   r  r
   r   r   r   r   r   r   _test__append_write_backlogr  r   rA  rE   r   )
rR   r   r   r'   r   r3  r4  r   r9  r   s
        r   r   zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.clientp  s    YY,,.F#*#:#:! "$$ $NFF LL!++A..DT7+ 4[  <<TE\J !#[[]*  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	   r7  r8  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   rG  r   r   rW  r   r  r   r3  r4  r   r9  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: .- *) .-   ,D,DD
D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  d	z         |j                          | j#                          y )
NTr   rK  r   r/  r0  rL  r   r   rM  rO  s          r   r   zRTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.server  s   }}H}}H__XxT_JF	'')  ''		(--/2!;;q>D T7+LL!IIhmmo&JJsO ""3#7#78 9IIhmmo& HE 23E%H = ++ 5''		(--/2NN499U#345  ++ 5NN499U#345  98 ++ 5NN499U#34--  Xut|A~6 MMOJJLrQ  c                 |   | j                  d       j                  | j                  d      d       | j                  d       t	        j
                  d       | j                  t        j                         | j                  z        }j                  t        |      z         | j                          y rS  rT  r2  s     r   rW  zVTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.eof_server  rX  r   c                 X  K   j                   j                         t        j                  | 
dd d {   \  }}|j	                  d       |j                  d       d {   }j                  |d       t        	dz        D ]   }|j                  j                  dz         " 	 |j                          d {   }j                  |d       |j                  j                  j                   G d	 d
      fd}t        j                   j"                  j%                  dj                  |      5   d {    |j'                          j)                  |       d {    d d d        y 7 D7 7 # t        t        f$ r Y w xY w7 S7 ,# 1 sw Y   y xY ww)Nr   r   r/  r   r0  r   rB  r   c                        e Zd ZddZd Zd Zy)iTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.client.<locals>.SocketWrapperNc                     || _         y r	   r  r   rj   s     r   r   zrTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.client.<locals>.SocketWrapper.__init__  s	     $DIr   c                 .    t        | j                  |      S r	   )r\   rj   r   r`   s     r   __getattr__zuTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.client.<locals>.SocketWrapper.__getattr__  s    "499d33r   c                 Z    t        |      dz  }| j                  j                  |d |       S )Nr   )r%   rj   r   )r   r'   to_sends      r   r   znTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.client.<locals>.SocketWrapper.send  s(    !$ilG99>>$x.99r   )returnN)r2   r3   r4   r   rj  r   r   r   r   SocketWrapperre    s    %4:r   rn  c                     j                   -t        j                        s j                        _        t        j                  j
                  S r	   )_read_ready_cbr   _sockunittestmockDEFAULT)r'   rn  socket_transports    r   _fake_full_write_bufferzsTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.client.<locals>._fake_full_write_buffer  sE    #22::N^NdNdfsCt-:;K;Q;Q-R$*}},,,r   r   )wrapsside_effect)r   r  r
   r   r   r   r   r   r   rZ  r  r   rA  rC  
_transportrr  rs  patchobjectrE   r   )rR   r   r   r'   r   rv  rn  ru  r3  r4  r   r9  r   s         @@r   r   zRTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.client  s    YY,,.F#*#:#:! "$$ $NFF LL!++A..DT7+ 46]  <<TE\J ##[[]*  s+  &//==HH
: 
:-
 $$++ '&,,3 , 
 &&v... U$
 / +#%9: @  / s   4F*E=,F*&F 'AF*/F FF A'F* FF(F/F0F4
F* F*F FF*FF*FFF'#F*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	   r7  r8  s     r   r;  z`TestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.run.<locals>.wrapper,  r<  r=  r   r>  s   ` r   r  zOTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket.<locals>.run+  r?  r   rG  r]  s   `     @@@@@r   :test_remote_shutdown_receives_trailing_data_on_slow_socketzBTestSSL.test_remote_shutdown_receives_trailing_data_on_slow_socket  s     00
 7794	l	 6	/ 6	/p	 __S[)SII(()9: * __S_-II(()9: .- *) .-r_  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6"II008JJLJJLJJL	 7 		:AA"**MN Q66
 " J  Q)HIIJ QsO   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_  r  r  )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   r  r  r&  rR   s   `   @r   #test_handshake_timeout_handler_leakz+TestSSL.test_handshake_timeout_handler_leakW  s    MM&..)	 	}}		8 ,,.CII((c3++c"C  	#%  Qs    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   rS  r6  rE   )rj   r   r   s     r   r   z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.servers  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-  r  |  s    5*r   r-  c                    K    j                   g| d|i d {   \  }}|j                          |j                   d {    y 7 ,7 wNr{   )r,  rE   r   )rR   r&  rq  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_leakp  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       | j                  t        j                         j                  j                         | j                          y )NTr      hellos   extra bytes)r   rJ   r   r   rS  r   rU  r]   rV  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IIn%MM&..)%%cgg. 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 r  )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 )Nr  s   world)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                          y 7 T7 ;7 wr  )r   r,  waitresume_readingr   rE   )	rR   r&  rq  r  r-  r  r  r   r   s	       r   r   z=TestSSL.test_shutdown_timeout_handler_not_set.<locals>.client  su     113C1411(KTKsKKFB((*&&LLHHJ	 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  sp    yymmo	 	0w'' 	0.	+ 	+ __V$##F388$45 %$$s   %"BBr	   )NN)1r2   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  rB  rH  rr  r  r  r  r  r  r  r$  r*  rH  r^  r~  r  r  r  r  rO  rG   s   @r   r>   r>   P   s3    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__sockrg  s     r   r   zTestSocketWrapper.__init__  s	    r   c                     d}t        |      |k  r<| j                  |t        |      z
        }|dk(  rt        ||z  }t        |      |k  r<|S r  )r%   r6  r  )r   nr  r'   s       r   r   zTestSocketWrapper.recv_all  sR    #hl99QS\*Ds{,,4KC	 #hl
 
r   FNTr   r   do_handshake_on_connectc                    |j                  | j                  |||      }|r|j                          | j                  j                          || _        y )Nr  )rS  r  r  rE   )r   ssl_contextr   r   r  ssl_socks         r   r   zTestSocketWrapper.starttls  sP     **KK[+$; + =
 !!#r   c                 .    t        | j                  |      S r	   )r\   r  ri  s     r   rj  zTestSocketWrapper.__getattr__  s    t{{D))r   c                 `    dj                  t        |       j                  | j                        S )Nz	<{} {!r}>)r  typer2   r  r+   s    r   __repr__zTestSocketWrapper.__repr__  s#    !!$t*"5"5t{{CCr   )r2   r3   r4   r   r   r   rj  r  r   r   r   r  r    s'     #!%)-$*Dr   r  c                       e Zd Zd Zd Zd Zy)SocketThreadc                 2    d| _         | j                          y r   )_activerf  r+   s    r   r   zSocketThread.stop  s    		r   c                 &    | j                          | S r	   )r   r+   s    r   	__enter__zSocketThread.__enter__  s    

r   c                 $    | j                          y r	   )r   r/   s     r   __exit__zSocketThread.__exit__  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`  ra  r   r[  _timeoutrq  r  _prog_test)r   r  rj   r   rS   s        r   r   zTestThreadedClient.__init__  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  rq  KeyboardInterrupt
SystemExitBaseExceptionr  r   r   s     r   r  zTestThreadedClient.run  sR    	.JJ(45!:. 	 	.JJ))"--	.s   $' A$AA$N)r2   r3   r4   r   r  r   r   r   rn   rn   
  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`  ra  r   r[  _clients_finished_clients_max_clientsr  rq  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.stop3  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   )rq  r  _runr  rE   r  r+   s    r   r  zTestThreadedServer.run=  ss    	

&&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  selectrq  r  r  rb  rc   _handle_clientr  r  r  r  r   BlockingIOErrorr]   rS   )r   rwxro  rR   rk   s          r   r  zTestThreadedServer._runF  s;   ll}} 1 11mmTXX&B?GAq! xx1}zzQ>!%!2!2!4JD$ MMQ&MOODMM2
>! //5 "1 ll0 "T-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  rg  s     r   r  z!TestThreadedServer._handle_clientj  s    

$T*+r   c                 6    | j                   j                         S r	   )rq  r   r+   s    r   rR   zTestThreadedServer.addrm  s    zz%%''r   )r2   r3   r4   r   r   r  r  r  propertyrR   rO  r  s   @r   rg   rg     s1    $">H, ( (r   rg   )$r
   r  r  r   r  r]   sysr^   r`  r1  unittest.mockrr  r  r{   ImportErrorr  r   test.test_asyncior   rJ   platformMACOSr   r   r-  r   Filterr6   skipIfTestCaser>   r  ra  r  rn   rg   r   r   r   <module>r     s  
   	    
        1 
	!"(''"" 'Dw~~  o.|6j!! |6 /|6H4$D $DN9## . .*P( P(U8  
Cs   C+ +C54C5