
    <e                        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n# e$ r dZY nw xY wd dlmZ d dlmZ ej        dk    ZesdndZd Z G d d	e j                  Z G d
 dej                  Z ej        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#dS )    N)support)utilsdarwin   @   c                  .    t          j        d            d S N)asyncioset_event_loop_policy     1/usr/lib/python3.11/test/test_asyncio/test_ssl.pytearDownModuler      s    !$'''''r   c                   6    e Zd ZdZdZddZd Zd Zd Zd Z	dS )MyBaseProtoNc                     d | _         d| _        d| _        |6t          j        |          | _        t          j        |          | _        d S d S )NINITIALr   loop)	transportstatenbytesr
   Future	connecteddoneselfr   s     r   __init__zMyBaseProto.__init__$   sQ    
$^666DND111DIII r   c                 h    || _         d| _        | j        r| j                            d            d S d S )N	CONNECTED)r   r   r   
set_resultr   r   s     r   connection_madezMyBaseProto.connection_made,   s@    " 
> 	,N%%d+++++	, 	,r   c                 @    | xj         t          |          z  c_         d S r	   )r   lenr   datas     r   data_receivedzMyBaseProto.data_received3   s    s4yy r   c                     d| _         d S )NEOF)r   r   s    r   eof_receivedzMyBaseProto.eof_received7   s    


r   c                 Z    d| _         | j        r| j                            d            d S d S )NCLOSED)r   r   r!   r   excs     r   connection_lostzMyBaseProto.connection_lost;   s9    
9 	'I  &&&&&	' 	'r   r	   )
__name__
__module____qualname__r   r   r   r#   r(   r,   r1   r   r   r   r   r       sn        ID2 2 2 2, , ,! ! !  ' ' ' ' 'r   r   c                       e Zd Zd Zd ZdS )MessageOutFilterc                     || _         d S r	   msg)r   r9   s     r   r   zMessageOutFilter.__init__C   s    r   c                 &    | j         |j         v rdS dS )NFTr8   )r   records     r   filterzMessageOutFilter.filterF   s    8vz!!5tr   N)r2   r3   r4   r   r<   r   r   r   r6   r6   B   s2              r   r6   zNo ssl modulec                   `    e Zd ZdZej        Z fdZ fdZe	j
        dej        ddddZe	j
        ej        fd	Zd
 Zd Zd+dZdddZej        d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd,dZ d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z. xZ/S )-TestSSLi  c                     t                                                       t          j                    | _        |                     | j                   |                     | j        j                   d S r	   )supersetUpr
   new_event_loopr   set_event_loop
addCleanupcloser   	__class__s    r   rA   zTestSSL.setUpR   sV    *,,	DI&&&	(((((r   c                     | j                                         st          j        | j                    |                                  t          j                     t                                                       d S r	   )	r   	is_closed
test_utilsrun_briefly
doCleanupsr   
gc_collectr@   tearDownrF   s    r   rN   zTestSSL.tearDownX   sg    y""$$ 	."49---r   N   
   )familyaddrtimeoutbacklogmax_clientsc                &   |O|t          t          dd           k    r3t          j                    5 }|j        }d d d            n# 1 swxY w Y   nd}t          j        |t          j                  }|t          d          |dk    rt          d          |                    |           	 |                    |           |	                    |           n(# t          $ r}	|                                 |	d }	~	ww xY wt          | ||||          S )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_servera   s[    <D9999022 $c8D$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ (}VV%788?4555a<<DEEE   	IIdOOOKK     	 	 	JJLLLH	 "$Wk; ; 	;s)   AAA-*C 
C="C88C=c                     t          j         |t           j                  }|t          d          |dk    rt          d          |                    |           t	          | |||          S )NrZ   r   r[   )r]   ra   rb   rc   TestThreadedClient)r   client_progrQ   rS   rj   s        r   
tcp_clientzTestSSL.tcp_client   sq     }VV%788?4555a<<DEEE   !$W. . 	.r   c                 4     | j         |dt          j        i|S NrQ   )rl   r]   rW   r   argskwargss      r   unix_serverzTestSSL.unix_server        tFV^FvFFFr   c                 4     | 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_        |                    ||           |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   sF    ^C$;<<
co-""8W555r   Tdisable_verifyc                `    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   s0    /11
$)
! 	3%(]J"r   c              #      K   t          j        d          }t          d          }|                    |           	 d V  |                    |           d S # |                    |           w xY 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   s|       "9--!"@AA   	(EEE'''''F''''s   A A.c                     	 | j                                          |                     |           d S # |                     |           w xY wr	   )r   stopfailr   rk   s     r   _abort_socket_testzTestSSL._abort_socket_test   s@    	INNIIbMMMMMDIIbMMMMs	   2 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d S 	 |                                 d {V  d S # t          t
          f$ r Y d S w xY wr	   )
isinstancer
   StreamWriterwait_closedBrokenPipeErrorConnectionError)r   objs     r   r   zTestSSL.wait_closed   st      #w344 	F	//###########1 	 	 	DD	s   < AAc                    	
 ddt           j        dt          z  dt          z                       t          j        t          j                                                   g 	 fd
	 fd
 fd}                                 5   j	        
                     |                       d d d            n# 1 swxY w Y                                   	D ]}|                                 d S )Nr         AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBc                   K   |                      t                               d {V }                    |           |                    d           |                      t                               d {V }                    |           |                    dt          d          t          d          g           |                                 d {V  |                                 dz  d S 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KK88888888DT6***LL++CKK88888888DT6***uiooz$7G7GHIII,,..       LLNNN1HCCCr   c                     K   t          j                     fd}                    |          }|                                                     |            d {V  d S )Nc                 6   	 |                                 |                                |                                |                     d          }                    |d           |                                |                     d          }                    |d           |                                  j                            j        d            d S # t          $ r+}j                            j
        |           Y d }~d S 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00LL&&&IIf%%%==++D$$T5111IIf%%%==++D$$T7333JJLLL
 I223>4HHHHH ! J J JI2233DbIIIIIIIIIJs   B>C# #
D- DDr
   r   rp   startappend)	rR   r   clientr   r   r   r   clientsr   s	   `  @r   test_clientz5TestSSL.test_create_server_ssl_1.<locals>.test_client   s      .""CI I I I I I I I I I( __T**FLLNNNNN6"""IIIIIIIIIr   c                    K   i } t          t          j                  } t          j        ddft
          j        
d|  d {V }	 |j        }	                    |           |d         	                                }g }t                    D ] }|                     |                     !t          j        t          j        |            d {V  	j                            |j                   |                                 d {V  d S # 	j                            |j                   |                                 d {V  w xY 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0EFFFF,Q ~	 
        C(K		*** |//11y)) 4 4ALLT!2!23333&w~u'=wGGGGGGGGG 	##CI...oo''''''''''' 	##CI...oo''''''''''s   BD ;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
 
 7799	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	:	( 	( 	( 	( 	( 	( 	( 	( 	( 	(6 //11 	9 	9I((888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	i((( 	 	FKKMMMM	 	s   #CCCc                    	
  j                             d            dddt          z  dt          z                       t          j        t          j                  
                                  
fd	 fd} fd} 	fd}                                 5   ||           d d d            n# 1 swxY w Y                                    5   ||           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r   c                    |                      d           |                     t                              }                    |           |                     d           |                     t                              }                    |           |                     d           |                                  d S )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>.server0  s    MM   " " " ==V--DT6***IIe==V--DT6***IIgJJLLLLLr   c                   K   i }t          t          j                  }t          j        | dd| d {V \  }}|                                                   |                    d           d {V d           |                                                   |                    d           d {V d           dz  |                                 	                    |           d {V  d S )	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>.client?  sA     F0EFFFF#*#:! "$ $ 	$ $      NFF LL   6#5#5a#8#8888888%@@@LL   6#5#5a#8#8888888'BBB 1HCLLNNN""6***********r   c                 <  K   t          j                     }|                    |            t          j        |d           d {V \  }}|                                                   |                    d           d {V d           |                                                   |                    d           d {V d           dz  |                                                     |           d {V  |                                 d S )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_sockU  sG     =??DLL#*#:! "$$ $$ $$ $ $ $ $ $ $NFF
 LL   6#5#5a#8#8888888%@@@LL   6#5#5a#8#8888888'BBB 1HCLLNNN""6*********JJLLLLLr   c                 F   dd }                               5 }g }t                    D ]%}|                     | |j                             &j                             ||            d d d            n# 1 swxY w Y                                  d S )Nr   c                  .   K   t          j        |   d {V S r	   r
   r   r   s    r   _gatherzBTestSSL.test_create_connection_ssl_1.<locals>.run.<locals>._gathern  s%      $^U33333333r   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>.runj  s   C4 4 4 -6)2 ! 4 4 >7:y)) 1 1ALLch0000	,,WWe_===> > > > > > > > > > > > > > > S),,,,,   AB  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9	 	 	 	 	 	 	 		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+,	 	 	 	 	 	 	 	 	*	- 	- 	- 	- 	- 	- 	- 	-& //11 	 	CKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 //11 	 	C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   /CCC&C??DDc                                                        j                            d            d } fd}                     |dd          5 }                     t
          d          5   j                             ||j                             d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                      d S r	   r   rt   s    r   <lambda>zCTestSSL.test_create_connection_ssl_slow_handshake.<locals>.<lambda>      d r   c                     	 |                      d           n# t          $ r Y nw xY w|                                  d S # |                                  w xY wN   r   ConnectionAbortedErrorrE   rj   s    r   r   zATestSSL.test_create_connection_ssl_slow_handshake.<locals>.server  sa    k****)    



s    > 
%> %> Ac                    K   t          j        | ddd d {V \  }}|                                                     |           d {V  d S )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  s      #*#:! "&)	$+ $+ $+ + + + + + +NFF
 LLNNN""6***********r   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  sx   7799 		''(:(:;;;	 	 		+ 	+ 	+ 	+ 	+ 	+ __V)*%&  ( ( 	?+.''*68 8 ? ? 	,,VVCH-=-=>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s6   B</)B$B<$B(	(B<+B(	,B<<C C c                      j                             d                                 t          j        t          j                                       d          fd} fd}                     |dd          5 }                     t          j
                  5   j                              ||j                             d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                      d S r	   r   r  s    r   r  zGTestSSL.test_create_connection_ssl_failed_certificate.<locals>.<lambda>  r  r   Fr   c                     	 |                      d           |                                  n# t          j        t          f$ r Y nw xY w|                                  d S # |                                  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     $  & & & L'*    



s&   +/ A! AA! AA! !A7c                    K   t          j        | dt          j        d d {V \  }}|                                                     |           d {V  d S )Nr   r  )r
   r   r   r   rE   r   r  s      r   r   zETestSSL.test_create_connection_ssl_failed_certificate.<locals>.client  s      #*#:! "&-&;	$= $= $= = = = = = =NFF
 LLNNN""6***********r   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M		 		 		 		 			+ 	+ 	+ 	+ 	+ 	+ __V)*%&  ( ( 	?+.""3#?@@ ? ?	,,VVCH-=-=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s6    C/")CC/C	C/C	C//C36C3c                      t          j                    g  j                            fd           dfd} fd}                     |dd          5 }                     t          j                  5   j                             ||j	                             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y    
                                                    g            d S )Nc                 .                         |          S r	   )r   )r   ctxmessagess     r   r  z4TestSSL.test_ssl_handshake_timeout.<locals>.<lambda>  s    (//#:N:N r   Fc                     	 |                      d           n# t          $ r dY nw xY w|                                  d S # |                                  w xY w)Nr  Tr  )rj   server_side_aborteds    r   r   z2TestSSL.test_ssl_handshake_timeout.<locals>.server  si    k****) + + +&*###+ 



s!    A (A (A Ac           	         K   t          j         j        j        t           j        g| R dddd           d {V  d S )Nr   g      $@r        ?)r
   r   r   create_connectionProtocol)rR   r   r   s    r   r   z2TestSSL.test_ssl_handshake_timeout.<locals>.client  s      "+	+$00 0 &$&*.0 0 0           r   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(N(N(NOOO#	 	 	 	 		 	 	 	 	 	 __V)*%&  ( ( 	?+.""7#788 ? ?	,,VVCH-=-=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	+,,, 	2&&&&&s6    C<)B1%C1B5	5C8B5	9CCCc                 h    t          j                     j                            d            ddd } G fddt          j                   fd}                     |dd          5 }                     t                    5   j        	                     ||j
                             d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   r0r                     d	           d S                      d
           d S r                     d           d S d S )Nc                     d S r	   r   r   r$  s     r   r  z<TestSSL.test_ssl_handshake_connection_lost.<locals>.<lambda>      $ r   Fc                 X    |                      d           |                                  d S )Nr   )recvrE   r  s    r   r   z:TestSSL.test_ssl_handshake_connection_lost.<locals>.server   s"    IIdOOOJJLLLLLr   c                   $    e Zd ZfdZ fdZdS )?TestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProtoc                     dd S NTr   )r   r   connection_made_calleds     r   r#   zOTestSSL.test_ssl_handshake_connection_lost.<locals>.ClientProto.connection_made      )-&&&r   c                     dd S r8  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<  r9  s   r   ClientProtor6    sG        . . . . .. . . . . . .r   r=  c                 H   K    j         j        g| R dd d {V f d S )Nr   r   )r   r*  )rR   r=  r   r   s    r   r   z:TestSSL.test_ssl_handshake_connection_lost.<locals>.client  so      -$)-$$ $ " "	$ $ $ $ $ $ $ $ $ % % % %r   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<  r9  s   `   @@@@r   "test_ssl_handshake_connection_lostz*TestSSL.test_ssl_handshake_connection_lost  s*    #;== 		''(>(>???!&!&	 	 	
	. 	. 	. 	. 	. 	. 	. 	.'* 	. 	. 	.	% 	% 	% 	% 	% 	% 	% __V)*%&  ( ( 	?+.""#788 ? ?	,,VVCH-=-=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? " 	>% 7		@AAAAA		 6 7 7 7 7 7# 	>II<=====	> 	>s6   5C)C9CC			CC		CC #C c                 b   t           j        }t          j        |          }|                    t          j        t          j                   t          |d          rd|_        t           j	        |_
        t          j        |          }t          |d          rd|_        t           j	        |_
        d S )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OOO>#344 	2,1N)%(]"..>#344 	2,1N)%(]"""r   c                    | j          G fddt                    }t          j        t          j                  }|                    d           |                    d           |                                dd dfd}t          j        |d	          }|	                                 |
                                \  }} |
          _         i }	|rt          t          j                  }	                     j        fd|fd|i|	          }
                                 |                                 |                                 |                    d           |                     |                                           |                     j        d           |                     j        t1                               |                                |
                                \  }}|r |                     d|j        j                   |                                 | j                             t=          j        d                     d S )Nc                   .     e Zd Z fdZ fdZ xZS )5TestSSL.test_connect_accepted_socket.<locals>.MyProtoc                 ~    t                                          |                               j                   d S r	   )r@   r1   r   r   )r   r0   rG   r   s     r   r1   zETestSSL.test_connect_accepted_socket.<locals>.MyProto.connection_lost7  s5    '',,,ty)))))r   c                 ~    t                                          |           | j                                       d S r	   )r@   r(   r   r   )r   r'   rG   expected_responses     r   r(   zCTestSSL.test_connect_accepted_socket.<locals>.MyProto.data_received;  s8    %%d+++$$%677777r   )r2   r3   r4   r1   r(   __classcell__)rG   rL  r   s   @r   MyProtorI  5  s\        * * * * * *8 8 8 8 8 8 8 8 8 8r   rN  rX   rO   s	   test datas   rogerc                  j   	 t          j         t           j                  }                     |           } |                                |                                |                     d          |                                  d S # t          $ r}t          d|           Y d }~d S d }~ww xY w)Nc   z8Failure in client thread in test_connect_accepted_socket)	r]   r   wrap_socketr   sendallr4  rE   r   print)csockr0   rR   
client_sslmessageresponses     r   r   z4TestSSL.test_connect_accepted_socket.<locals>.clientH  s    fn55)&22599Ed###g&&& ::b>>   N        s   BB 
B2B--B2T)targetdaemonr   r   c                       S r	   r   rC  s   r   r  z6TestSSL.test_connect_accepted_socket.<locals>.<lambda>d  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_sslrU  rN  lsockr   threadconnr   r   ftrrR   rL  r   rV  rC  rW  s     `         @@@@@@r   test_connect_accepted_socketz$TestSSL.test_connect_accepted_socket2  s   y	8 	8 	8 	8 	8 	8 	8 	8k 	8 	8 	8 fn--

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

A**+++h///s7||444#4555

A 	8MM%!6777



	$$W]3%7%788888r   c                      j                             d            t          j                    t          j                    fd} fd}                     |dd          5 } j                              ||j                            }d d d            n# 1 swxY w Y                        |d           d S )Nc                     d S r	   r   r1  s     r   r  z=TestSSL.test_start_tls_client_corrupted_ssl.<locals>.<lambda>y  r2  r   c                    |                                  }	 |                     d           |                     d           |                     d           |                    d           n# t
          j        $ r Y nw xY w|                                  |                                 d S # |                                  |                                 w xY w)NTr      A
rO   s!   please corrupt the SSL connection)dupr   rR  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DDD<    

!!!!! 

!!!!s*   AA. -B- .B =B- ?B  B- -*Cc                   K   t          j        | dd d {V \  }}                    |                                 d {V d           |                    d                               t          j                  5  |                                 d {V  d d d            n# 1 swxY w Y   |                                 	 	                    |           d {V  n# t          j        $ r Y nw xY wdS )Nr   r   rt     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#4444444f===LL""3<00 ( (oo'''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (LLNNN&&v..........<   4s$   B((B,/B,C$ $C65C6rO   r  ry  )	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_sslx  s7   	''(>(>???466";==	" 	" 	" 	" 	"	 	 	 	 	 	" __V)*%&  ( ( 	A+.)..vvch/?/?@@C		A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	d#####s   ()BB!$B!c                     d j         z  t          j                    t          j                     fd} G  fddt          j                   fd}                     | j                  5 } j        	                    t	          j
         ||j                  t          j                             d d d            d S # 1 swxY w Y   d S )N   1c                 ,   |                      j                   |                     t                              }                    t          |          t                               |                     d           |                     d           |                     t                              }                    t          |          t                               |                                  |                                  d S NTr      O	rc   r   r   r%   r   r   rR  unwraprE   rj   r'   	HELLO_MSGr   rD  s     r   servez8TestSSL.test_start_tls_client_reg_proto_1.<locals>.serve  s    OODL)))==Y00DSYYI777MM.dM;;;LL==Y00DSYYI777KKMMMJJLLLLLr   c                   ,    e Zd Zd Z fdZd Zd ZdS )>TestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProtoc                 0    || _         || _        d| _        d S 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                 ^    | xj         dz  c_                             | j         d           d S NrO   r  r   rC  ro  r   s     r   r#   zNTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.connection_made  6    ""a'""  !3Q77777r   c                 :    | j                             |           d S r	   r  r!   r&   s     r   r(   zLTestSSL.test_start_tls_client_reg_proto_1.<locals>.ClientProto.data_received      ''-----r   c                 :    | j                             d           d S r8  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 8 8 8 8
. . .- - - - -r   r=  c                   K   t          j        d           d {V  	j                                        	j                                         	j        j        fdg| R   d {V \  }}|                               	j                            ||           d {V }	                     d {V d           |                                d {V  |                                 d S )Nr)  c                                  S r	   r   r=  r  r  s   r   r  zKTestSSL.test_start_tls_client_reg_proto_1.<locals>.client.<locals>.<lambda>      GV44 r   r  )	r
   ri  r   create_futurer*  r   	start_tlsr   rE   )
rR   ro  rC  new_trr  r  r=  r  rE  r   s
       @@r   r   z9TestSSL.test_start_tls_client_reg_proto_1.<locals>.client  s=     -$$$$$$$$$i--//GY,,..F9di9444444=7;= = = = = = = = =IB HHY9..r5.IIIIIIIIF7]]]]]]D111LL###LLLLLLLLLNNNNNr   rS   )PAYLOAD_SIZErJ   r{  r,  r
   r+  rl   r   r   r   r   rR   r   r   r   r  r   r   r=  r  rE  rD  s   `   @@@@r   !test_start_tls_client_reg_proto_1z)TestSSL.test_start_tls_client_reg_proto_1  s   4,,	#<>>#<>>	 	 	 	 	 	 		- 	- 	- 	- 	- 	- 	-'* 	- 	- 	-"	 	 	 	 	 	 	 	$ __UDL_99 	ASI(( !1!1)0)>@ @ @A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   ;ACCCc                 H    d j         z                       t          j        t          j                                                    fd} G  fddt          j                   fd}                     | j	                  5 } j
                            t          j         ||j                  t          j                             d d d            n# 1 swxY w Y   t!          j                                                               d S )Nr  c                    |                      j                   |                     d           |                     d           |                     t                              }                    t          |          t                               |                                  |                                  d S r  )	rc   r   r   rR  r   r%   r   r  rE   r  s     r   r  z9TestSSL.test_create_connection_memory_leak.<locals>.serve  s    OODL)))MM.dM;;;LL==Y00DSYYI777KKMMMJJLLLLLr   c                   ,    e Zd Zd Z fdZd Zd ZdS )?TestSSL.test_create_connection_memory_leak.<locals>.ClientProtoc                 0    || _         || _        d| _        d S r  r  r  s      r   r   zHTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.__init__  r  r   c                 l    || _         | xj        dz  c_                            | j        d           d S r  )ro  r  r   r  s     r   r#   zOTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.connection_made  s=    ""a'""  !3Q77777r   c                 :    | j                             |           d S r	   r  r&   s     r   r(   zMTestSSL.test_create_connection_memory_leak.<locals>.ClientProto.data_received  r  r   c                 :    | j                             d           d S r8  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 8 8 8 8. . .- - - - -r   r=  c                   K   t          j        d           d {V  j                                        j                                         j        j        fdg| R di d {V \  }}                     d {V d           |                                d {V  |                                 d S )Nr)  c                                  S r	   r   r  s   r   r  zLTestSSL.test_create_connection_memory_leak.<locals>.client.<locals>.<lambda>  r  r   r{   r  )r
   ri  r   r  r*  r   r   rE   )	rR   ro  rC  r  r  r=  r  rE  r   s	      @@r   r   z:TestSSL.test_create_connection_memory_leak.<locals>.client	  s     -$$$$$$$$$i--//GY,,..F9di9444444$7;$ $ $"$ $ $ $ $ $ $ $IB 7]]]]]]D111HHYLLLLLLLHHJJJJJr   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5 588::
	 
	 
	 
	 
	 
	 
		- 	- 	- 	- 	- 	- 	-'* 	- 	- 	-&	 	 	 	 	 	 	 	  __UDL_99 	ASI(( !1!1)0)>@ @ @A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A !^44..**+++++s   AC&&C*-C*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        	          5 } j	        
                    t	          j         ||j                   j        	                     d d d            d S # 1 swxY w Y   d S )
Nr  r   c                    |                      j                   |                     t                              }                    t          |          t                               |                     d           |                     d           |                     t                              }                    t          |          t                               |                     d           |                     t                              }                    t          |          t                               |                                  |                                  d S )NTr   r     2r  r  s     r   r  z8TestSSL.test_start_tls_client_buf_proto_1.<locals>.serve+  s   OODL)))==Y00DSYYI777MM.dM;;;LL==Y00DSYYI777LL==Y00DSYYI777KKMMMJJLLLLLr   c                   2    e Zd Zd Z fdZd Zd Zd ZdS )CTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirstc                 <    || _         t          d          | _        d S r  )r  r   buf)r   r  s     r   r   zLTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.__init__?  s    &$Q<<r   c                     dz  d S r  r   r   ro  client_con_made_callss     r   r#   zSTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.connection_madeC      %*%%%r   c                     | j         S r	   )r  )r   sizehints     r   
get_bufferzNTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.get_bufferG  s	    xr   c                 n    | j                             t          | j        d |                              d S r	   )r  r!   bytesr  )r   nsizes     r   buffer_updatedzRTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.buffer_updatedJ  s1    ''dhvv.>(?(?@@@@@r   c                     d S r	   r   r+   s    r   r,   zPTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.eof_receivedN  s    r   N)r2   r3   r4   r   r#   r  r  r,   r  s   r   ClientProtoFirstr  >  sm        ( ( (+ + + + +     A A A    r   r  c                   ,    e Zd Zd Z fdZd Zd ZdS )DTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecondc                 0    || _         || _        d| _        d S r  r  r  s      r   r   zMTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.__init__R  r  r   c                     dz  d S r  r   r  s     r   r#   zTTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.connection_madeW  r  r   c                 :    | j                             |           d S r	   r  r&   s     r   r(   zRTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.data_received[  r  r   c                 :    | j                             d           d S r8  r  r+   s    r   r,   zQTestSSL.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.eof_received^  r  r   Nr  r  s   r   ClientProtoSecondr  Q  s[        & & &
+ + + + +. . .- - - - -r   r  c                   K   t          j        d           d {V  j                                        j                                        }j                                        } j        j        fdg| R   d {V \  }}|                    	           j                            ||           d {V }                     d {V d           |                    	           |                     ||                                         | d {V d           |                    	           | d {V  |	                                                     
d           d S )Nr)  c                                  S r	   r   )r  on_data1s   r   r  zKTestSSL.test_start_tls_client_buf_proto_1.<locals>.client.<locals>.<lambda>i  s    ((22 r   r  r  rO   )
r
   ri  r   r  r*  r   r  r   set_protocolrE   )rR   on_data2r  ro  rC  r  r  r  r  r  r  rE  r   s         @r   r   z9TestSSL.test_start_tls_client_buf_proto_1.<locals>.clienta  s     -$$$$$$$$$y..00Hy..00HY,,..F9di922222;59; ; ; ; ; ; ; ; ;IB HHY9..r5.IIIIIIIIF8^^^^^^T222LL### 1 1(F C CDDD8^^^^^^T222LL###LLLLLLLLLNNN
 2A66666r   r  )r  rJ   r{  r,  r
   BufferedProtocolr+  rl   r   r   r   r   rR   )
r   r  r   r   r  r  r  r  rE  rD  s
   `   @@@@@@r   !test_start_tls_client_buf_proto_1z)TestSSL.test_start_tls_client_buf_proto_1#  s   4,,	#<>>#<>> !	 	 	 	 	 	 	&	 	 	 	 	 	 	w7 	 	 	&	- 	- 	- 	- 	- 	- 	- 0 	- 	- 	- 	7 	7 	7 	7 	7 	7 	7 	7 	7 	78 __UDL_99 	8SI(( !1!1)-7 7 78 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   AC**C.1C.c                     d j         z  t          j                     j                                         fd} G  fddt
          j                   fd}                     | j                  5 } j        	                    t          j
         ||j                  t          j                             d d d            d S # 1 swxY w Y   d S )Nr  c                    |                      j                   |                     t                              }                    t          |          t                               	 j                            j        d            |                     d          }n# t          $ r Y nw xY w| 	                                 d S # | 	                                 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    OODL)))==Y00DSYYI777	..-8$@ @ @}}[11)    



s*   /5B% $C %
B2/C 1B22C C!c                   ,    e Zd Zd Z fdZd Zd ZdS )>TestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProtoc                 0    || _         || _        d| _        d S r  r  r  s      r   r   zGTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.__init__  r  r   c                 ^    | xj         dz  c_                             | j         d           d S r  r  r  s     r   r#   zNTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.connection_made  r  r   c                 :    | j                             |           d S r	   r  r&   s     r   r(   zLTestSSL.test_start_tls_slow_client_cancel.<locals>.ClientProto.data_received  r  r   c                 :    | j                             d           d S r8  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 {V  j                                        j                                         j        j        fdg| R   d {V \  }}|                               	 d {V                      t           j                  5  t          j        j        	                    ||          d           d {V  d d d            d S # 1 swxY w Y   d S )Nr)  c                                  S r	   r   r  s   r   r  zKTestSSL.test_start_tls_slow_client_cancel.<locals>.client.<locals>.<lambda>  r  r   )
r
   ri  r   r  r*  r   r  r-  r   r  )
rR   ro  rC  r  r  r=  r  rE  r   r  s
      @@r   r   z9TestSSL.test_start_tls_slow_client_cancel.<locals>.client  s     -$$$$$$$$$i--//GY,,..F9di9444444=7;= = = = = = = = =IB HHY++++++++""7#788  &I''E>BB                         s   /6C22C69C6r  )r  rJ   r,  r   r  r
   r+  rl   r   r   r   rR   r   r   )r   r  r   r   r=  r  rE  r  s   `   @@@@r   !test_start_tls_slow_client_cancelz)TestSSL.test_start_tls_slow_client_cancel  s   4,,	#<>>$(I$;$;$=$=!	 	 	 	 	 	 		- 	- 	- 	- 	- 	- 	-'* 	- 	- 	-"	 	 	 	 	 	 	 	 	$ __UDL_99 	ASI(( !1!1)0)>@ @ @A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   ACCCc                     d j         z  t          j                    t          j                     fd G d dt          j                   fd fd} j                             |                       d S )Nr  c                    |                      j                   |                     |           |                     t	                              }                    t	          |          t	                               |                                |                                |                                  | 	                                 d S r	   )
rc   r   r   r   r%   r   r   rR  r  rE   )rj   rR   r'   r  rE  r   s      r   r   z/TestSSL.test_start_tls_server_1.<locals>.client  s    OODL)))LL==Y00DSYYI777MM.)))LL###KKMMMJJLLLLLr   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )4TestSSL.test_start_tls_server_1.<locals>.ServerProtoc                 >    || _         || _        || _        d| _        d S 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                             |           d S r	   )r  r!   )r   ro  s     r   r#   zDTestSSL.test_start_tls_server_1.<locals>.ServerProto.connection_made  s    &&r*****r   c                 &    | xj         |z  c_         d S r	   )r'   r&   s     r   r(   zBTestSSL.test_start_tls_server_1.<locals>.ServerProto.data_received  s    		T!				r   c                 :    | j                             d           d S r  r  r+   s    r   r,   zATestSSL.test_start_tls_server_1.<locals>.ServerProto.eof_received  s    &&q)))))r   c                 v    || j                             d            d S | j                             |           d S r	   )r  r!   r   r/   s     r   r1   zDTestSSL.test_start_tls_server_1.<locals>.ServerProto.connection_lost  sA    ;$//55555$22377777r   N)r2   r3   r4   r   r#   r(   r,   r1   r   r   r   ServerProtor    s_             + + +" " "* * *8 8 8 8 8r   r  c                 N  K   | d {V }|                                                    | j        d           j                            || dj                   d {V }| d {V  | d {V                      | j                   |                                 d S )Nr   T)r   r   )r   r   r'   r   r  r   rE   )	rC  r  r  r  ro  r  r  r   rD  s	         r   mainz-TestSSL.test_start_tls_server_1.<locals>.main  s      BHHYUZ---9..E> &*l / 4 4 4 4 4 4 4 4F
 LLLLLLLUZ333LLNNNNNr   c            	      n  K   	j                                         } 	j                                         }	j                                         } | ||          	j                             fddd           d {V }|j        d                                         	                    fd	j                  5  t          j         | ||          	j                   d {V  d d d            n# 1 swxY w Y   |	                                 |
                                 d {V  d S )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    ffT4.@.@ r   r  )r   r  create_serverr   r   rp   r   r
   r   rE   r   )
r  r  r  r   rR   rC  r  r   r  r   s
       @@r   run_mainz1TestSSL.test_start_tls_server_1.<locals>.run_main  s     Y,,..FY,,..F)1133KK<<E922{A/ / / / / / / /F>!$0022D!@!@!@!@!@)- ! 7 7 * *&D<< L* * * * * * * * * ** * * * * * * * * * * * * * * LLNNN$$&&&&&&&&&&&s   .C<<D D )r  rJ   r{  r,  r
   r+  r   r   )r   r  r  r  r   rE  r  rD  s   ` @@@@@@r   test_start_tls_server_1zTestSSL.test_start_tls_server_1  s    4,,	#<>>#<>>	 	 	 	 	 	 		8 	8 	8 	8 	8'* 	8 	8 	8,	 	 	 	 	 	 	 	' 	' 	' 	' 	' 	' 	' 	'& 		$$XXZZ00000r   c                    	
 ddt           j        dt          z  dt          z                       t          j        t          j                                                   	                     t          j        t          j                                                   
g  fd G fddt          j	                  fd	
 fd	 fd
} 
                                5   j                             |                       d d d            n# 1 swxY w Y                                   D ]}|                                 d S )Nr   r   r   r   c                   K   |                      t                               d {V }                    |           |                    d           |                      t                               d {V }                    |           |                    dt          d          t          d          g           |                                 d {V  |                                 dz  d S 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                            || d                    fd}                    |           d S )NTr   c                     	                                  }                    |           d S # t          $ r }                    |           Y d }~d S d }~ww xY wr	   )rg  r#   r   r1   )r   ro  rk   r   super_s      r   cbz[TestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made.<locals>.cb5  sx    3 ZZ\\ ..r22222 % 3 3 3..r2222222223s   . 
AAA)r@   pause_reading_loopra  r  add_done_callback)r   r   r  r   r  rG   sslctx_2s      @@r   r#   zOTestSSL.test_create_server_ssl_over_ssl.<locals>.ServerProtocol.connection_made/  s    '')))j,,TZ-A-AtX4 .B .A .A B B3 3 3 3 3 3 %%b)))))r   )r2   r3   r4   r#   rM  )rG   r  s   @r   ServerProtocolr  .  s>        * * * * * * * * * *r   r  c                  F    t          j                    }  |           }|S r	   )r
   StreamReader)r   protocolr  r   s     r   server_protocol_factoryzHTestSSL.test_create_server_ssl_over_ssl.<locals>.server_protocol_factory>  s'    )++F%~fm<<HOr   c                     K   t          j                     	fd}	                    |          }|                                                     |            d {V  d S )Nc                 "    	                       
                                           t          j                    t          j                                                  } fd} ||j                    ||j                    ||j        d          }                    |d            ||j        	           d}	  ||j        d          }|sn||z  }                    |d            ||j	                    
                                 j                            j        d            d S # t          $ r?}j                            j        |            
                                 Y d }~d S d }~ww xY w)Nc                 L   	 	  | | }nl# t           j        $ rY j        r'                                                                                                       d                     Y nw xY wsj        r'                                                               |S )NTi   )r{   SSLWantReadErrorpendingr   readr   r4  )funcrt   rvincomingoutgoingrj   s      r   dozVTestSSL.test_create_server_ssl_over_ssl.<locals>.test_client.<locals>.prog.<locals>.doQ  s    AA%)T4[ %#&#7 A A A#+#3 !?$(IIhmmoo$>$>$> (tyy/?/? @ @ @ @ @A	A $+ 7 IIhmmoo666!	s   
 A%A21A2r   r   r   Tr   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>.progF  s   -ILL&&&MM/222  #}H"}H,55hIIF" " " " " " " Bv*+++Bv|V,,,2fk1--D$$T5111Bv|V,,,D& "6; 2 2$ "!	&
 $$T7333Bv}%%%JJLLL I223>4HHHHH	 ! ! ! !I2233DbIIIJJLLLLLLLLL!s   DE 
F4F		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_clientC  s      .""C.I .I .I .I .I .I .I .I .I .I .I` __T**FLLNNNNN6"""IIIIIIIIIr   c                  n  K   i }  j         j        	ddft          j        
d|  d {V }	 |j        }                    |           |d                                         }g }t                    D ] }|                     |                     !t          j
        t          j        |            d {V  j                             |j                   |                                 d {V  d S # j                             |j                   |                                 d {V  w xY 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(K		*** |//11y)) 4 4ALLT!2!23333&w~u'=wGGGGGGGGG 	##CI...oo''''''''''' 	##CI...oo''''''''''s   BC9 9;D4)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  sE   	&~-~-22!35 599;;22!35 599;;	 	 	 	 	 	 	 	 	* 	* 	* 	* 	* 	* 	*W9 	* 	* 	* 	 	 	 	 	 	
7	 7	 7	 7	 7	 7	 7	 7	 7	 7	r	( 	( 	( 	( 	( 	( 	( 	( 	( 	(4 //11 	9 	9I((888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	i((( 	 	FKKMMMM	 	s   #D11D58D5c                 J    dddt           z                       t          j        t          j                                                    fd fd} fd}                                 5   ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r   c                     |                      d           |                     t                              }                    |           |                     d           |                                  |                                  d S )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KKMMMJJLLLLLr   c                   K   i }t          t          j                  }t          j        | dd| d {V \  }}|                                                   |                    d           d {V d                               |                                 d {V d           dz  |	                                 
                    |           d {V  d S )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0EFFFF#*#:! "$ $ 	$ $      NFF LL   6#5#5a#8#8888888%@@@6;;==000000#666 1HCLLNNN""6***********r   c                 F   dd }                               5 }g }t                    D ]%}|                     | |j                             &j                             ||            d d d            n# 1 swxY w Y                                  d S )Nr   c                  .   K   t          j        |   d {V S r	   r   r   s    r   r  z;TestSSL.test_shutdown_cleanly.<locals>.run.<locals>._gather  s%      $^U33333333r   r  r  r  s	        r   r  z*TestSSL.test_shutdown_cleanly.<locals>.run  s	   C4 4 4 -6)2 ! 4 4 %7:y)) 1 1ALLch0000	,,GUO% % %% % % % % % % % % % % % % % % S),,,,,r  )r   r   rJ   r   r   r   r   )	r   r   r  r   r   r   r   r   r   s	   `  @@@@@@r   test_shutdown_cleanlyzTestSSL.test_shutdown_cleanly  sF   	~-00!35 57799	 	 	 	 	 	 		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+*	- 	- 	- 	- 	- 	- 	- 	-& //11 	 	CKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ?BBBc                    	 dd                      t          j        t          j                  	                                 d  	fd} fd} fd}                      ||                    5 } j                             ||j                             d d d            d S # 1 swxY w Y   d S )N       c                 ~   |                      d                               |                     d          d           |                     d           t	          j        d           |                     z            }                    t          |          z             |                                  d S )NTr   r      ping   pongr)  )r   r   r   r   timeri  r%   rE   rj   r'   CHUNKSIZEr   r   s     r   r   z2TestSSL.test_flush_before_shutdown.<locals>.server  s    MM&dM333T]]1--w777IIgJsOOO==..DSYY555JJLLLLLr   c                       fd}|S )Nc                     	  |            j                             j        d            d S # t          $ r+}j                             j        |           Y d }~d S 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DJJJ I2263DdKKKKK ! M M MI2263GLLLLLLLLLM   0 
A% A  A%r   r8  r9  r7  r   s   ` r   r  z/TestSSL.test_flush_before_shutdown.<locals>.run  5    L L L L L L L Nr   c                   K   
j                                         	t          j        | dd d {V \  }}|j        j        }|                    d           |                    d           d {V }
                    |d           |	                                 t                    D ]}|                    dz             |                                 |                                 
                    |           d {V  	 |                                 d {V }
                    |d           n# t          $ r Y nw xY w	 d {V  d S Nr   r   r-  r   r.     xr   )r   r  r
   r   r   _ssl_protocolr   r   r   pause_writingr   rE   resume_writingr   r  r?  )rR   r   r   sslprotocolr'   r   r1  r2  r   r7  r   s         r   r   z2TestSSL.test_flush_before_shutdown.<locals>.client  s     Y,,..F#*#:! "$$ $$ $$ $ $ $ $ $ $NFF !*8KLL!!!++A........DT7+++%%'''4[[ + +TE\****LLNNN&&(((""6*********#[[]]******  s++++'   LLLLLLLLLs   0D= =
E
	E
	r   rJ   r   r   r   rl   r   r   rR   )
r   r   r  r   r   r1  r2  r   r7  r   s
   `    @@@@@r   test_flush_before_shutdownz"TestSSL.test_flush_before_shutdown  sZ   00!35 57799	 	 	 	 	 	 	 		 	 	 	 	 		 	 	 	 	 	 	 	 	6 __SS[[)) 	;SI(()9)9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s    )B66B:=B:c                 R   	
 dd                      t          j        t          j                  
                                 d 	 
fd} 
fd}	 fd}	 fd}                      ||                    5 } j                             ||j                             d d d            n# 1 swxY w Y                         ||                    5 } j                             ||j                             d d d            d S # 1 swxY w Y   d S )Nr*  r+  c                    t          j                    }t          j                    }
                    ||d          }	 	 |                                 |j        r'|                     |                                           nl# t           j        $ rY |j        r'|                     |                                           |                    | 	                    d                     Y nw xY w	 	 |                    d          }n># t           j        $ r+ |                    | 	                    d                     Y nw xY wU	
                    |d           |                    d           |                     |                                           t          j        d           	                    t           j                  5  |                                 d d d            n# 1 swxY w Y   |                     |                                           d}	 	 t          |                    d                    }||z  }nM# t           j        $ r+ |                    | 	                    d                     Y nt           j        $ r Y nw xY ww	
                    |z             |                                 |                                  d S )	NTr   i @  r   r-  r.  皙?r   )r{   r  r  r  r  r   r  r  r   r4  r   r/  ri  r  r  r%   SSLZeroReturnErrorrE   )rj   r  r  r  r'   data_lenr  r1  r2  r   r   s          r   r   zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.server&  s   }H}H__XxT_JJF
	'')))  ' 3		(--//222 + 5 5 5' 3		(--//222NN499U#3#3444445
!;;q>>D  + 5 5 5NN499U#3#3444445 T7+++LL!!!IIhmmoo&&&JsOOO ""3#788                                 IIhmmoo&&& HE 2 233E%HH+ 5 5 5NN499U#3#344444-   E Xut|444 MMOOOJJLLLLLsO   B A%C-,C-3D	 	7EEG--G14G1#'I 7JJJc                    |                      d                               |                     d          d           |                     d           t	          j        d           |                     t          j                   |                     z            }                    t          |          z             | 
                                 d S )NTr   r   r-  r.  rI  )r   r   r   r   r/  ri  shutdownr]   SHUT_WRr%   rE   r0  s     r   
eof_serverzGTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.eof_server\  s    MM&dM333T]]1--w777IIgJsOOO MM&.))) ==..DSYY555JJLLLLLr   c                 ^  K   	j                                         t          j        | dd d {V \  }}|                    d           |                    d           d {V }	                    |d           t                    D ]}|j        	                    dz              	 |
                                 d {V }	                    |d           n# t          t          f$ r Y nw xY w d {V  |                                 	                    |           d {V  d S r?  )r   r  r
   r   r   r   r   r   r   _test__append_write_backlogr  r   r?  rE   r   )
rR   r   r   r'   r   r1  r2  r   r7  r   s
        r   r   zCTestSSL.test_remote_shutdown_receives_trailing_data.<locals>.clientl  s     Y,,..F#*#:! "$$ $$ $$ $ $ $ $ $ $NFF LL!!!++A........DT7+++ 4[[ K K <<TE\JJJJ#[[]]******  s++++#%9:    LLLLLLLLLNNN""6***********s   .0C C32C3c                       fd}|S )Nc                     	  |            j                             j        d            d S # t          $ r+}j                             j        |           Y d }~d S d }~ww xY wr	   r5  r6  s     r   r9  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   rE  )r   r   rO  r   r  r   r1  r2  r   r7  r   s   `     @@@@@r   +test_remote_shutdown_receives_trailing_dataz3TestSSL.test_remote_shutdown_receives_trailing_data  s   00
 
 77994	 4	 4	 4	 4	 4	 4	 4	l	 	 	 	 	 	 	 	 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+6	 	 	 	 	 	 __SS[[)) 	;SI(()9)9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; __SS__-- 	;I(()9)9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s$   )B==CC&)DD #D c                     t          j         t           j                  }|                    d           |                                 fd}|5  	                      t
                    5 } j                             |                       t          j	                     t          j	                     t          j	                     d d d            n# 1 swxY w Y    
                    d                    |j                             n:# t          $ r-}                     t          |          d           Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )NrX   c                     K   	 t          j         j        j        t           j        g R ddid           d {V                      d           d S # t          t           j        f$ r Y d S w xY 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&/DI/0@ A15A A A;?A A         		677777 +G,@A      9A A/.A/zUnexpected ResourceWarning: {}zResourceWarning not triggered)r]   r   rd   r   assertWarnsResourceWarningr   r   gccollectr   formatwarningAssertionErrorr   str)r   srZ  cmerR   s   `    @r   test_connect_timeout_warningz$TestSSL.test_connect_timeout_warning  s   M&.))	   }}		8 		8 		8 		8 		8 		8  
	O 
	O	O%%o66 !"I00888JLLLJLLLJLLL	! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 		:AA"*MMNNNN " J J J  Q)HIIIIIIIIJ
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	Osa   ED.AC
DC	DC	D!.E
E#E<EEEEEc                     t          j         t           j                  }|                    d           |                    d           |                                 fd}|5  t          j                    } j                             ||                     t          j
        |          }d d d            n# 1 swxY w Y                         |                       d S )NrX   rO   c                    K   	 t          j         j        j        t           j        gR d| id           d {V                      d           d S # t          t           j        f$ r Y d S w xY w)Nr{   r]  rW  rX  )r$  rR   r   s    r   rZ  z9TestSSL.test_handshake_timeout_handler_leak.<locals>.test  s      8&/DI/0@ 94 9 9 9479 9         		677777 +G,@A   r[  )r]   r   rd   re   r   r{   r   r   r   r  r  r  )r   rd  rZ  r$  rR   s   `   @r   #test_handshake_timeout_handler_leakz+TestSSL.test_handshake_timeout_handler_leak  s   M&.))	   	}}		8 		8 		8 		8 		8 		8  	# 	#,..CI((c333+c""C	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	##%%     s   'AB>>CCc                      j          fd} G fddt          j                  fd}                     |          5 }                                 }                     ||j        |                     t          j        |          }d d d            n# 1 swxY w Y   t          j
                     t          j
                     t          j
                                           |                       d S )Nc                                          t          j        t          j                  }|                    | d          } |                     d           |                                  d S )NTr   r+  )r   rJ   r   r   rQ  r4  rE   )rj   r   r   s     r   r   z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.server  s^    44#" F %%d%==DIIbMMMJJLLLLLr   c                        e Zd Z fdZd ZdS )<TestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocolc                 <    t          j                  | _        d S Nr   )r
   r   r   r   s    r   r   zETestSSL.test_shutdown_timeout_handler_leak.<locals>.Protocol.__init__  s    ">t444r   c                 :    | j                             d            d S 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+  rn    s=        5 5 5 5 5* * * * *r   r+  c                    K    j         g| R d|i d {V \  }}|                                 |j         d {V  d S Nr{   )r*  rE   r   )rR   r$  ro  prr+  r   s       r   r   z:TestSSL.test_shutdown_timeout_handler_leak.<locals>.client  sc      141(KTKKKsKKKKKKKKFBHHJJJ&LLLLLLLLLr   )r   r
   r+  rl   r   r   rR   r  r  r^  r_  r  )r   r   r   r   r$  r+  r   s   `    @@r   "test_shutdown_timeout_handler_leakz*TestSSL.test_shutdown_timeout_handler_leak  sg   y	 	 	 	 		* 	* 	* 	* 	* 	* 	*w' 	* 	* 	*	 	 	 	 	 	
 __V$$ 	#1133C##FF38S$9$9:::+c""C	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	




 	##%%     s   ABB"%B"c                 @     j         t          j                    d  fd} G fddt          j                   fd}                     |          5 }                     ||j                             d d d            d S # 1 swxY w Y   d S )Nc                 x                        t          j        t          j                  }|                    | d          } |                     d           |                     d           |                     t          j                   	                    j
                   |                                  d S )NTr      hellos   extra bytes)r   rJ   r   r   rQ  r   rM  r]   rN  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&.)))%%cg... JJLLLLLr   c                   0    e Zd ZfdZd Z fdZd ZdS )?TestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocolc                 J    t          j                  | _        d | _        d S rp  )r
   r   r   r   r   s    r   r   zHTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.__init__	  s"    ">t444!%r   c                     || _         d S r	   )r   r"   s     r   r#   zOTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.connection_made  s    !*r   c                     |dk    r5| j                             d           | j                                          d S |d S )Nrx  s   world)r   r   r  )r   r'   extras     r   r(   zMTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.data_received  sI    8##N((222N0022222 !EEEr   c                 v    || j                             d            d S | j                             |           d S r	   )r   r!   r   r/   s     r   r1   zOTestSSL.test_shutdown_timeout_handler_not_set.<locals>.Protocol.connection_lost  s?    ;H''-----H**3/////r   N)r2   r3   r4   r   r#   r(   r1   )r  r   s   r   r+  r|    se        & & & & &+ + +! ! ! ! !0 0 0 0 0r   r+  c                   K                                    } j        g| R d|i d {V \  }}                                 d {V  |                                 |j         d {V  |                                 d S rs  )r   r*  waitresume_readingr   rE   )	rR   r$  ro  rt  r+  rz  r  r   r   s	       r   r   z=TestSSL.test_shutdown_timeout_handler_not_set.<locals>.client  s      1133C141(KTKKKsKKKKKKKKFB((**&LLLLLLLHHJJJJJr   )r   r
   Eventr+  rl   r   rR   )r   r   r   r   r+  rz  r  r   s   `   @@@@r   %test_shutdown_timeout_handler_not_setz-TestSSL.test_shutdown_timeout_handler_not_set  s?   ymoo	 	 	 	 	 	 	 	0 	0 	0 	0 	0 	0 	0 	0w' 	0 	0 	0.	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ __V$$ 	6##FF38$4$4555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   "$BBBr	   )NN)0r2   r3   r4   r  r   r   r   rA   rN   r]   r   r   rl   rp   rv   ry   r   r   
contextlibcontextmanagerr   r   r   r   r   r   r	  r  r!  r.  r@  rF  rp  r}  r  r  r  r  r  r"  r(  rF  rT  rg  rj  ru  r  rM  rG   s   @r   r>   r>   L   s        L"G) ) ) ) )     !."0!; ; ; ; ;B !."0. . . .G G GG G G    <@      ( ( (  ( ( (0 0 0  ] ] ]~` ` `D? ? ?B#? #? #?J)' )' )'V/> /> />b3 3 3D9 D9 D9 D9L,$ ,$ ,$\;A ;A ;Az>, >, >,@]8 ]8 ]8~;A ;A ;AzL1 L1 L1\O O Ob@ @ @D9; 9; 9;vz; z; z;xO O O8! ! !2%! %! %!N66 66 66 66 66 66 66r   r>   c                   6    e Zd Zd Zd ZdddddZd Zd	 ZdS )
TestSocketWrapperc                     || _         d S r	   )_TestSocketWrapper__sockr   rj   s     r   r   zTestSocketWrapper.__init__3  s    r   c                     d}t          |          |k     rJ|                     |t          |          z
            }|dk    rt          ||z  }t          |          |k     J|S r  )r%   r4  r  )r   nr  r'   s       r   r   zTestSocketWrapper.recv_all6  sa    #hhll99QS\**Ds{{,,4KC	 #hhll
 
r   FNTr   r   do_handshake_on_connectc                    |                     | j        |||          }|r|                                 | j                                         || _        d S )Nr  )rQ  r  r  rE   )r   ssl_contextr   r   r  ssl_socks         r   r   zTestSocketWrapper.starttls?  sf     **K[+$; + = =
  	$!!###r   c                 ,    t          | j        |          S r	   )r\   r  )r   r`   s     r   __getattr__zTestSocketWrapper.__getattr__Q  s    t{D)))r   c                 \    d                     t          |           j        | j                  S )Nz	<{} {!r}>)r`  typer2   r  r+   s    r   __repr__zTestSocketWrapper.__repr__T  s#    !!$t**"5t{CCCr   )r2   r3   r4   r   r   r   r  r  r   r   r   r  r  1  sy             #!%)-    $* * *D D D D Dr   r  c                        e Zd Zd Zd Zd ZdS )SocketThreadc                 <    d| _         |                                  d S r   )_activerd  r+   s    r   r   zSocketThread.stopZ  s    		r   c                 .    |                                   | S r	   )r   r+   s    r   	__enter__zSocketThread.__enter__^  s    

r   c                 .    |                                   d S r	   )r   r/   s     r   __exit__zSocketThread.__exit__b  s    		r   N)r2   r3   r4   r   r  r  r   r   r   r  r  X  sA                r   r  c                       e Zd Zd Zd ZdS )rn   c                     t           j                            | d d d           d| _        || _        || _        d| _        || _        || _        d S )Nztest-clientT)	r^  r_  r   rY  _timeout_sockr  _prog_test)r   rZ  rj   r   rS   s        r   r   zTestThreadedClient.__init__h  sM    !!$dMBBB




r   c                     	 |                      t          | j                             d S # t          t          f$ r  t
          $ r%}| j                            |           Y d }~d S d }~ww xY wr	   )r  r  r  KeyboardInterrupt
SystemExitBaseExceptionr  r   r   s     r   r  zTestThreadedClient.runr  s    	.JJ(4455555!:. 	 	 	 	. 	. 	.J))"---------	.s   '+ A+A&&A+N)r2   r3   r4   r   r  r   r   r   rn   rn   f  s2          . . . . .r   rn   c                   L     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                            | d d d           d| _        d| _        d| _        || _        || _        || _        d| _	        || _
        t          j                    \  | _        | _        | j                            d           || _        d S )Nztest-serverTr   F)r^  r_  r   rY  _clients_finished_clients_max_clientsr  r  r  r  r]   
socketpair_s1_s2setblockingr  )r   rZ  rj   r   rS   rU   s         r   r   zTestThreadedServer.__init__}  s    !!$dMBBB!"'

#.00$(U###


r   c                 4   	 | j         rI| j                                         dk    r,	 | j                             d           n# t          $ r Y nw xY wt	                                                       d S # t	                                                       w xY w)Ns   stop)r  filenor   rf   r@   r   rF   s    r   r   zTestThreadedServer.stop  s    	x DHOO--33HMM'****   D GGLLNNNNNEGGLLNNNNs.   $A5 A A5 
AA5 AA5 5"Bc                 t   	 | j         5  | j                             d           |                                  d d d            n# 1 swxY w Y   | j                                         | j                                         d S # | j                                         | j                                         w xY wr   )r  r  _runr  rE   r  r+   s    r   r  zTestThreadedServer.run  s    	  
&&u---		               HNNHNN HNNHNNs-   B /AB AB AB 4B7c                    | j         rI| j        | j        k    rd S t          j        | j        | j        gg g | j                  \  }}}| j        |v rd S | j        |v r	 | j                                        \  }}| xj        dz  c_        |                    | j                   	 |5  | 	                    |           d d d            n# 1 swxY w Y   nu# t          t          f$ r  t          $ r-}d| _         	  # | j                            |           w xY wd }~ww xY w# t          $ r Y *t           j        $ r | j         sY d S  w xY w| j         Gd S d S )NrO   F)r  r  r  selectr  r  r  r`  rc   _handle_clientr  r  r  r  r   BlockingIOErrorr]   rS   )r   rwxrm  rR   rk   s          r   r  zTestThreadedServer._run  s   l !	>} 111mTX&B? ?GAq! x1}}zQ>!%!2!2!4!4JD$ MMQ&MMOODM222
>! 6 6 //5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6-z:   ( > > >',>! J99"====> '   H~   < 	 l !	> !	> !	> !	> !	>sf   D #C %C;C CC CC D.D6C77DDD
E+EEc                 J    |                      t          |                     d S r	   )r  r  r  s     r   r  z!TestThreadedServer._handle_client  s#    

$T**+++++r   c                 4    | j                                         S r	   )r  r   r+   s    r   rR   zTestThreadedServer.addr  s    z%%'''r   )r2   r3   r4   r   r   r  r  r  propertyrR   rM  r  s   @r   rg   rg   {  s          $      "> "> ">H, , , ( ( X( ( ( ( (r   rg   )$r
   asyncio.sslprotor  r^  r   r  r]   sysr^   r^  r/  r  unittestr{   ImportErrorrZ  r   test.test_asyncior   rJ   platformMACOSr   r   r+  r   Filterr6   skipIfTestCaser>   r  r_  r  rn   rg   r   r   r   <module>r     s}            				    



        JJJJ   
CCC       1 1 1 1 1 1 
	!"*( ( (' ' ' ' ''" ' ' 'D    w~    o..\6 \6 \6 \6 \6j! \6 \6 /.\6H/$D $D $D $D $D $D $D $DN    9#   . . . . . . . .*P( P( P( P( P( P( P( P( P( P(s   ; AA