
    7\hj                     ^   	 d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ 	 d dl	Z	n# e
$ r dZ	Y nw xY wd dlZd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
 Z ej        e	du d           G d dej                              Z G d dej                  Z ej        e	du d           G d deej                              Z ej        e	du d           ej         eed          d           G d deej                                          Zedk    r ej                     dS dS )    N)support)socket_helper)mock)log)	protocols)sslproto)utils)
functionalc                  .    t          j        d            d S N)asyncioset_event_loop_policy     I/opt/python-3.11.14/usr/lib/python3.11/test/test_asyncio/test_sslproto.pytearDownModuler      s    !$'''''r   zNo ssl modulec                   z     e Zd Z fdZddddZd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 xZS )SslProtoHandshakeTestsc                     t                                                       t          j                    | _        |                     | j                   d S r   )supersetUpr   new_event_looploopset_event_loop)self	__class__s    r   r   zSslProtoHandshakeTests.setUp   s@    *,,	DI&&&&&r   N)waiterprotoc                *   t          j                    }|t          j                    }t	          j        | j        |||d          }|                     |j        	                                |           | 
                    |j        j                   |S )Ng?ssl_handshake_timeout)
test_utilsdummy_ssl_contextr   Protocolr   SSLProtocolr   assertIs_app_transportget_protocol
addCleanupclose)r   r   r   
sslcontext	ssl_protos        r   ssl_protocolz#SslProtoHandshakeTests.ssl_protocol#   s    133
=$&&E(E:v?BD D D	i.;;==uEEE	06777r   do_handshakec                    t          j                    }t          j                    }t          j        |j        _        t          j        |j        _        |||_        ||_        |	                    |           |S r   )
r   MocksslSSLWantReadErrorreadside_effectwriter/   _sslobjconnection_made)r   r,   r/   	transportsslobjs        r   r8   z&SslProtoHandshakeTests.connection_made-   sb    IKK	"%"6#&#7 #".F"	!!),,,r   c                    t          j                    }t          j                    }t          j                    }|                     t
          d          5  t          j        | j        |||d           d d d            d S # 1 swxY w Y   d S )Na positive numberr   r    	r"   r#   r   r1   assertRaisesRegex
ValueErrorr   r%   r   r   r+   	app_protor   s       r   test_handshake_timeout_zeroz2SslProtoHandshakeTests.test_handshake_timeout_zero9   s    133
IKK	##J0CDD 	: 	: Iz678: : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:   BBBc                    t          j                    }t          j                    }t          j                    }|                     t
          d          5  t          j        | j        |||d           d d d            d S # 1 swxY w Y   d S )Nr<   ir    r=   r@   s       r   test_handshake_timeout_negativez6SslProtoHandshakeTests.test_handshake_timeout_negativeA   s    133
IKK	##J0CDD 	< 	< Iz67:< < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<rC   c                    | j                                         }|                     |          }|                     |t	          j        t          j                             |                                 t          j
        | j                    |                     |                                t                     d S Nr   )r5   r.   )r   create_futurer-   r8   r   r1   r2   r3   eof_receivedr"   run_brieflyassertIsInstance	exceptionConnectionResetErrorr   r   r,   s      r   test_eof_received_waiterz/SslProtoHandshakeTests.test_eof_received_waiterI   s    ((**%%V%44	s/CDDD 	 	
 	
 	
 	   ty)))f..002FGGGGGr   c                    | j                                         }|                     |          }t          j                                        }t          j                            t          j                   	 |	                    d            t          j                            |           d S # t          j                            |           w xY wNrH   )
r   rI   r-   r   loggergetEffectiveLevelsetLevelloggingFATAL_fatal_error)r   r   r,   	log_levels       r   test_fatal_error_no_name_errorz5SslProtoHandshakeTests.test_fatal_error_no_name_errorT   s     ((**%%V%44	J0022	
GM***	+""4((( J	*****CJ	****s   8B. .!Cc                    | j                                         }|                     |          }|                     |t	          j        t          j                             |                    t                     t          j        | j                    |                     |                                t                     d S rG   )r   rI   r-   r8   r   r1   r2   r3   connection_lostConnectionAbortedErrorr"   rK   rL   rM   rO   s      r   test_connection_lostz+SslProtoHandshakeTests.test_connection_lostc   s     ((**%%V%44	s/CDDD 	 	
 	
 	
 	!!"8999ty)))f..002HIIIIIr   c                 n   | j                                         }|                     |          }|                     |t	          j        t          j                            }t          j	        | j                    |j
                                         |                     |j        j                   d S rG   )r   rI   r-   r8   r   r1   r2   r3   r"   rK   r'   r*   
assertTrue_force_closecalled)r   r   r,   r9   s       r   test_close_during_handshakez2SslProtoHandshakeTests.test_close_during_handshakep   s    ((**%%V%44	((s/CDDD ) 
 
	 	ty))) &&(((	.566666r   c                    |                      |                                            }|                     |           g | j                            fd           |j                                         |                     g            d S )Nr   c                 .                         |          S r   appendr   ctxmessagess     r   <lambda>zGSslProtoHandshakeTests.test_close_during_ssl_over_ssl.<locals>.<lambda>       (//#:N:N r   )r-   r8   r   set_exception_handlerr'   r*   assertEqual)r   outerrk   s     @r   test_close_during_ssl_over_sslz5SslProtoHandshakeTests.test_close_during_ssl_over_ssl~   s     !!(9(9(;(;!<<U###	''(N(N(N(NOOO""$$$2&&&&&r   c                    | j                                         }|                     |          }|                     |                    d                     t                      }|                     |                    d|          |           |                     |           |                     |                    d                     |	                    d            |                     |                    d                     d S )NrH   socket)
r   rI   r-   assertIsNone_get_extra_infoobjectr&   r8   assertIsNotNoner\   )r   r   r,   defaults       r   (test_get_extra_info_on_closed_connectionz?SslProtoHandshakeTests.test_get_extra_info_on_closed_connection   s    ((**%%V%44	)33H==>>>((i//'BBGLLLY'''Y66x@@AAA!!$''')33H==>>>>>r   c                 N   | j                                         }|                     |          }t          j                    }|j                            |           |                     |j                                        |           |                     |j	        |           d S rR   )
r   rI   r-   r   r$   r'   set_protocolr&   r(   _app_protocol)r   r   r,   new_app_protos       r   test_set_new_app_protocolz0SslProtoHandshakeTests.test_set_new_app_protocol   s    ((**%%V%44	(** --m<<<i.;;==}MMMi-}=====r   c                     |                                  }|                     |           |j        }|                                 |                     |                    d                     d S )N   )r-   r8   r'   r*   rt   buffer_updatedr   r,   transps      r    test_data_received_after_closingz7SslProtoHandshakeTests.test_data_received_after_closing   sf    %%''	Y''') 	)2215566666r   c                     |                                  }|                     |           |j        }|                                 |                     |                    d                     d S )Ns   data)r-   r8   r'   r*   rt   r6   r   s      r   test_write_after_closingz/SslProtoHandshakeTests.test_write_after_closing   sd    %%''	Y''') 	&,,w//00000r   )__name__
__module____qualname__r   r-   r8   rB   rE   rP   rZ   r^   rc   rq   ry   r~   r   r   __classcell__)r   s   @r   r   r      s!       ' ' ' ' '
 &*      :> 
 
 
 
 
: : :< < <	H 	H 	H+ + +J J J7 7 7
' 
' 
'	? 	? 	?> > >7 7 71 1 1 1 1 1 1r   r   c                       e Zd ZdZej        Zd Zd Zd Z	d Z
ej        d             Zd Zej        d             Zd	 Zd
 Zd Zd Zd ZdS )BaseStartTLSi  c                     t           r   )NotImplementedErrorr   s    r   new_loopzBaseStartTLS.new_loop   s    !!r   c                 D    G d dt           j                  }dD ]} |d|          }t          j        |d           |                     |j        d            |d|          }t          j        |d           |                     |j        d            |d|          }t          j        |d           |                     |j        d            |d|          }t          j        |d           |                     |j        d            |d	|          }t          j        |d           |                     |j        d            |d
|          }|                     t          d          5  t          j        |d           d d d            n# 1 swxY w Y   d S )Nc                        e Zd Zd Zd Zd ZdS ).BaseStartTLS.test_buf_feed_data.<locals>.Protoc                 |    t          |          | _        t          | j                  | _        d| _        || _        d S Nr   )	bytearraybuf
memoryviewmvdatausemv)r   bufsizer   s      r   __init__z7BaseStartTLS.test_buf_feed_data.<locals>.Proto.__init__   s4    $W--$TX..	"


r   c                 ,    | j         r| j        S | j        S r   )r   r   r   r   sizehints     r   
get_bufferz9BaseStartTLS.test_buf_feed_data.<locals>.Proto.get_buffer   s    : $7N8Or   c                     | j         r| xj        | j        d |         z  c_        d S | xj        | j        d |         z  c_        d S r   )r   r   r   r   )r   nsizes     r   r   z=BaseStartTLS.test_buf_feed_data.<locals>.Proto.buffer_updated   sI    : 2II%0IIIIII&5&!11IIIIr   N)r   r   r   r   r   r   r   r   r   Protor      sA        # # #$ $ $2 2 2 2 2r   r   )FT   s   12345   s   1234   d   r   zempty buffer)r   BufferedProtocolr   _feed_data_to_buffered_protoro   r   r>   RuntimeError)r   r   r   r   s       r   test_buf_feed_datazBaseStartTLS.test_buf_feed_data   s   	2 	2 	2 	2 	2G, 	2 	2 	2( # 	H 	HEE!UOOE25(CCCUZ222E!UOOE25(CCCUZ222E!UOOE25'BBBUZ111E!UOOE25'BBBUZ111E#u%%E25(CCCUZ222E!UOOE''nEE H H6uhGGGH H H H H H H H H H H H H H H-	H 	Hs   1FF	F	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            n# 1 swxY w Y   t          j                  t          j                                                                  d S )N   1c                 B   |                      j                   |                     t                              }                    t          |          t                               |                     d           |                     d           |                     t                              }                    t          |          t                               |                     t          j	                   | 
                                 d S NTserver_side   O
settimeoutTIMEOUTrecv_alllenro   	start_tlssendallshutdownrs   	SHUT_RDWRr*   sockr   	HELLO_MSGr   server_contexts     r   servez=BaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.serve   s    OODL)))==Y00DSYYI777NN>tN<<<LL==Y00DSYYI777MM&*+++JJLLLLLr   c                   ,    e Zd Zd Z fdZd Zd ZdS )CBaseStartTLS.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   zLBaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.ClientProto.__init__      &$$%!!!r   c                 ^    | xj         dz  c_                             | j         d           d S Nr   r   ro   r   trr   s     r   r8   zSBaseStartTLS.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   
set_resultr   r   s     r   data_receivedzQBaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.ClientProto.data_received      ''-----r   c                 :    | j                             d           d S NTr   r   r   s    r   rJ   zPBaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.ClientProto.eof_received      &&t,,,,,r   Nr   r   r   r   r8   r   rJ   r   s   r   ClientProtor     [        & & &
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 )N      ?c                                  S r   r   r   r   r   s   r   rl   zPBaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.client.<locals>.<lambda>      GV44 r   r   )	r   sleepr   rI   create_connectionr6   r   ro   r*   )
addrr   r   new_trr   r   r   r   client_contextr   s
       @@r   clientz>BaseStartTLS.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   timeoutPAYLOAD_SIZEr"   simple_server_sslcontextsimple_client_sslcontextr   r$   
tcp_serverr   r   run_until_completewait_forr   r   SHORT_TIMEOUTweakrefref
gc_collectrt   r   r   r   srvr   r   r   r   s   `   @@@@r   !test_start_tls_client_reg_proto_1z.BaseStartTLS.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 !^44..**+++++   ;ACCC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            n# 1 swxY w Y   t          j                  t          j                                                                  d S )Nr   c                    |                      j                   |                     d           |                     d           |                     t                              }                    t          |          t                               |                     t          j	                   | 
                                 d S r   )r   r   r   r   r   r   ro   r   rs   r   r*   r   s     r   r   z>BaseStartTLS.test_create_connection_memory_leak.<locals>.serve5  s    OODL)))NN>tN<<<LL==Y00DSYYI777MM&*+++JJLLLLLr   c                   ,    e Zd Zd Z fdZd Zd ZdS )DBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProtoc                 0    || _         || _        d| _        d S r   r   r   s      r   r   zMBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProto.__init__B  r   r   c                 l    || _         | xj        dz  c_                            | j        d           d S r   )r   r   ro   r   s     r   r8   zTBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProto.connection_madeG  s=    ""a'""  !3Q77777r   c                 :    | j                             |           d S r   r   r   s     r   r   zRBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProto.data_receivedN  r   r   c                 :    | j                             d           d S r   r   r   s    r   rJ   zQBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProto.eof_receivedQ  r   r   Nr   r   s   r   r   r   A  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   rl   zQBaseStartTLS.test_create_connection_memory_leak.<locals>.client.<locals>.<lambda>[  r   r   r2   r   )r   r   r   rI   r   ro   r6   r*   )	r   r   r   r   r   r   r   r   r   s	      @@r   r   z?BaseStartTLS.test_create_connection_memory_leak.<locals>.clientT  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   s   `   @@@@r   "test_create_connection_memory_leakz/BaseStartTLS.test_create_connection_memory_leak/  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 !^44..**+++++r   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                               |                     t          j	                   | 
                                 d S )NTr   r      2r   r   s     r   r   z=BaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.servew  s"   OODL)))==Y00DSYYI777NN>tN<<<LL==Y00DSYYI777LL==Y00DSYYI777MM&*+++JJLLLLLr   c                   0    e Zd Zd Z fdZd ZfdZdS )HBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirstc                 <    || _         t          d          | _        d S r   )r   r   r   )r   r   s     r   r   zQBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.__init__  s    &$Q<<r   c                     dz  d S r   r   r   r   client_con_made_callss     r   r8   zXBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.connection_made      %*%%%r   c                     | j         S r   )r   r   s     r   r   zSBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.get_buffer  s	    xr   c                                          |d           | j                            t          | j        d |                              d S r   )ro   r   r   bytesr   )slfr   r   s     r   r   zWBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.buffer_updated  sG      ***&&uSWVeV_'='=>>>>>r   N)r   r   r   r   r8   r   r   )r  r   s   r   ClientProtoFirstr
    se        ( ( (+ + + + +     ? ? ? ? ? ? ?r   r  c                   ,    e Zd Zd Z fdZd Zd ZdS )IBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecondc                 0    || _         || _        d| _        d S r   r   r   s      r   r   zRBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.__init__  r   r   c                     dz  d S r   r   r  s     r   r8   zYBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.connection_made  r  r   c                 :    | j                             |           d S r   r   r   s     r   r   zWBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.data_received  r   r   c                 :    | j                             d           d S r   r   r   s    r   rJ   zVBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoSecond.eof_received  r   r   Nr   )r  s   r   ClientProtoSecondr    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   rl   zPBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.client.<locals>.<lambda>  s    ((22 r   r   r  r   )
r   r   r   rI   r   r6   r   ro   r{   r*   )r   on_data2r   r   r   r   r  r  r  r   r  r   r   s         @r   r   z>BaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.client  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   r"   r   r   r   r   r$   r   r   r   r   r   r   )
r   r   r   r   r  r  r   r  r   r   s
   `   @@@@@@r   !test_start_tls_client_buf_proto_1z.BaseStartTLS.test_start_tls_client_buf_proto_1o  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/2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N   )
r   r   r   r   ro   r   call_soon_threadsafer   r]   r*   )r   r   r   r   server_waits_on_handshakes     r   r   z=BaseStartTLS.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 )CBaseStartTLS.test_start_tls_slow_client_cancel.<locals>.ClientProtoc                 0    || _         || _        d| _        d S r   r   r   s      r   r   zLBaseStartTLS.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   r8   zSBaseStartTLS.test_start_tls_slow_client_cancel.<locals>.ClientProto.connection_made  r   r   c                 :    | j                             |           d S r   r   r   s     r   r   zQBaseStartTLS.test_start_tls_slow_client_cancel.<locals>.ClientProto.data_received  r   r   c                 :    | j                             d           d S r   r   r   s    r   rJ   zPBaseStartTLS.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   rl   zPBaseStartTLS.test_start_tls_slow_client_cancel.<locals>.client.<locals>.<lambda>  r   r   )
r   r   r   rI   r   r6   assertRaisesTimeoutErrorr   r   )
r   r   r   r   r   r   r   r   r   r&  s
      @@r   r   z>BaseStartTLS.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   r"   r   r   rI   r   r$   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r&  s   `   @@@@r   !test_start_tls_slow_client_cancelz.BaseStartTLS.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  dt          j                    	t          j                    d  fd G fddt          j                   	fd fd} j                             |                       d S )Nr   s   answerc                    |                      j                   |                     |           |                     t	                              }                    t	          |          t	                               |                                |                                |                     t	                              |                                  d S r   )	r   r   connectr   r   ro   r   r   r*   )r   r   r   ANSWERr   answerr   r   s      r   r   z4BaseStartTLS.test_start_tls_server_1.<locals>.client  s    OODL)))LL==Y00DSYYI777NN>***LL###]]3v;;//FJJLLLLLr   c                   2    e Zd Zd Zd Zd Z fdZd ZdS )9BaseStartTLS.test_start_tls_server_1.<locals>.ServerProtoc                 L    || _         || _        || _        d| _        d | _        d S r   )on_conon_con_loston_got_hellor   r9   )r   r:  r;  r<  s       r   r   zBBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.__init__  s+    $#. $0!	!%r   c                 H    || _         | j                            |           d S r   )r9   r:  r   r   r   s     r   r8   zIBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.connection_made&  s%    !#&&r*****r   c                     || _         d S r   )r9   r>  s     r   replace_transportzKBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.replace_transport*  s    !#r   c                     | xj         |z  c_         t          | j                   t                    k    r| j                            d            d S d S r   )r   r   r<  r   )r   r   r   s     r   r   zGBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.data_received-  sQ    		T!		ty>>S^^33%0066666 43r   c                     d | _         || j                            d            d S | j                            |           d S r   )r9   r;  r   set_exception)r   excs     r   r\   zIBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.connection_lost2  sH    !%;$//55555$22377777r   N)r   r   r   r   r8   r@  r   r\   )r   s   r   ServerProtor8    sj        & & &+ + +$ $ $7 7 7 7 7
8 8 8 8 8r   rE  c                   K   | d {V }|                                                    | j        d           j                            || 	dj                   d {V }|                     |           | d {V  |                                | d {V                      | j                   |                                 d S )Nr   T)r   r!   )r6   ro   r   r   r   r   r@  r*   )
r   r:  r;  r<  r   r   r5  r   r   r   s
         r   mainz2BaseStartTLS.test_start_tls_server_1.<locals>.main9  s     BHHYUZ---9..E> &*l / 4 4 4 4 4 4 4 4F ##F+++LL   UZ333LLNNNNNr   c            	        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   re   s   r   rl   zHBaseStartTLS.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>S  s     r   z	127.0.0.1r   c                      |           S r   r   )r   r   r   s    r   rl   zHBaseStartTLS.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>V  s    ffT4.@.@ r   r   )r   rI   create_serversocketsgetsockname
tcp_clientr   r   r   r*   wait_closedro   )r:  r;  r<  serverr   r   r5  rE  r6  r   rG  r   s       @@r   run_mainz6BaseStartTLS.test_start_tls_server_1.<locals>.run_mainL  s     Y,,..F)1133K92244LK\BBE922{A/ / / / / / / /F>!$0022D!@!@!@!@!@)- ! 7 7 * *&D\BB L* * * * * * * * * ** * * * * * * * * * * * * * * LLNNN$$&&&&&&&&&VV,,,,,s   .C<<D D )r   r"   r   r   r   r$   r   r   )
r   rQ  r5  r   rE  r6  r   r   rG  r   s
   ` @@@@@@@@r   test_start_tls_server_1z$BaseStartTLS.test_start_tls_server_1  s    4,,	#<>>#<>>	 	 	 	 	 	 	 	 		8 	8 	8 	8 	8 	8 	8'* 	8 	8 	86	 	 	 	 	 	 	 	&	- 	- 	- 	- 	- 	- 	- 	- 	- 	-( 		$$XXZZ00000r   c                 V      fd} j                              |                       d S )Nc                    K                        t          d          5  j                            d d d            d {V  d d d            n# 1 swxY w Y   t	          j                    }                      t          d          5  j                            d d |            d {V  d d d            d S # 1 swxY w Y   d S )NzSSLContext, gotzis not supported)r>   	TypeErrorr   r   r"   r   )sslctxr   s    r   rG  z4BaseStartTLS.test_start_tls_wrong_args.<locals>.mainc  sV     ''	3DEE < <i))$d;;;;;;;;;< < < < < < < < < < < < < < <  8::F''	3EFF > >i))$f=========> > > > > > > > > > > > > > > > > >s#   #AAA#B77B;>B;)r   r   )r   rG  s   ` r   test_start_tls_wrong_argsz&BaseStartTLS.test_start_tls_wrong_argsb  s@    	> 	> 	> 	> 	> 		$$TTVV,,,,,r   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            t          j                  t          j                                                                  d S )Nc                 .                         |          S r   rg   ri   s     r   rl   z5BaseStartTLS.test_handshake_timeout.<locals>.<lambda>s  rm   r   Fc                     	 |                      d           n# t          $ r dY nw xY w|                                  d S # |                                  w xY w)Nr$  Tr   r]   r*   )r   server_side_aborteds    r   rP  z3BaseStartTLS.test_handshake_timeout.<locals>.serverw  si    k****) + + +&*###+ 



s!    A (A (A Ac           	         K   t          j         j        j        t           j        g| R dt
          j        dd           d {V  d S )N r2   server_hostnamer!   r   )r   r   r   r   r$   r   r   )r   client_sslctxr   s    r   r   z3BaseStartTLS.test_handshake_timeout.<locals>.client  s      "+	+$AA A &$&*1*?A A A           r   r   max_clientsbacklog)r"   r   r   rn   r   r/  r   r0  r   r   r`   ro   r   r   r   r   rt   )r   rP  r   r   ra  rk   r\  s   `   @@@r   test_handshake_timeoutz#BaseStartTLS.test_handshake_timeoutm  s    #;==	''(N(N(N(NOOO#	 	 	 	 		 	 	 	 	 	 __V)*%&  ( ( 	?+.""7#788 ? ?	,,VVCH-=-=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	+,,, 	2&&&  M22--//*****s6    C<)B1%C1B5	5C8B5	9CCCc                    t          j                    g | j                            f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            n# 1 swxY w Y   | 	                    g            d S )Nc                 .                         |          S r   rg   ri   s     r   rl   zHBaseStartTLS.test_create_connection_ssl_slow_handshake.<locals>.<lambda>  rm   r   c                     	 |                      d           n# t          $ r Y nw xY w|                                  d S # |                                  w xY wr#  r[  )r   s    r   rP  zFBaseStartTLS.test_create_connection_ssl_slow_handshake.<locals>.server  sa    k****)    



s    > 
%> %> Ac                 D   K   t          j        | ddd d {V \  }}d S )Nr^  g      ?r_  )r   open_connectionr   readerwriterra  s      r   r   zFBaseStartTLS.test_create_connection_ssl_slow_handshake.<locals>.client  sP      #*#:! "&)	$+ $+ $+ + + + + + +NFFFFr   r   rb  zSSL handshake.*is taking longer)
r"   r   r   rn   r   r>   r]   r   r   ro   )r   rP  r   r   ra  rk   s       @@r   )test_create_connection_ssl_slow_handshakez6BaseStartTLS.test_create_connection_ssl_slow_handshake  s   ";==	''(N(N(N(NOOO	 	 		+ 	+ 	+ 	+ 	+ __V)*%&  ( ( 	?+.''*68 8 ? ? 	,,VVCH-=-=>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	2&&&&&s6   B=1)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   rj   s     r   rl   zLBaseStartTLS.test_create_connection_ssl_failed_certificate.<locals>.<lambda>      $ r   F)disable_verifyc                     	 |                      d           n # t          j        $ r Y nt          $ r Y nw xY w|                                  d S # |                                  w xY w)NTr   )r   r2   SSLErrorOSErrorr*   )r   rV  s    r   rP  zJBaseStartTLS.test_create_connection_ssl_failed_certificate.<locals>.server  s    	 $  & & & & <       



s*    A 8A 	8A 8A A'c                 X   K   t          j        | dt          j        d d {V \  }}d S )Nr^  r_  )r   rj  r   LOOPBACK_TIMEOUTrk  s      r   r   zJBaseStartTLS.test_create_connection_ssl_failed_certificate.<locals>.client  s\      #*#:! "&-&>	$@ $@ $@ @ @ @ @ @ @NFFFFr   r   rb  )r   rn   r"   r   r   r   r/  r2   SSLCertVerificationErrorr   r   )r   rP  r   r   ra  rV  s       @@r   -test_create_connection_ssl_failed_certificatez:BaseStartTLS.test_create_connection_ssl_failed_certificate  s   	''(>(>???466"; " " "
	 
	 
	 
	 
		@ 	@ 	@ 	@ 	@ __V)*%&  ( ( 	?+.""3#?@@ ? ?	,,VVCH-=-=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s6   ( C)B=1C=C	CC	CCC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   rq  s     r   rl   zBBaseStartTLS.test_start_tls_client_corrupted_ssl.<locals>.<lambda>  rr  r   c                    |                                  }	 |                     d           |                     d           |                     d           |                    d           n# t
          j        $ r Y nw xY w|                                 |                                  d S # |                                 |                                  w xY w)NTr      A
r   s!   please corrupt the SSL connection)dupr   r   r   sendr2   ru  r*   )r   	orig_sockrV  s     r   rP  z@BaseStartTLS.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S )Nr^  )r2   r`  r~     BOK)	r   rj  ro   readliner6   r/  r2   ru  r*   )r   rl  rm  ra  r   s      r   r   z@BaseStartTLS.test_start_tls_client_corrupted_ssl.<locals>.client  s0     #*#:! "$$ $$ $$ $ $ $ $ $ $NFF
 6??#4#4444444f===LL""3<00 ( (oo'''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( LLNNN4s   B((B,/B,r   rb  r  )	r   rn   r"   r   r   r   r   r   ro   )r   rP  r   r   resra  rV  s   `    @@r   #test_start_tls_client_corrupted_sslz0BaseStartTLS.test_start_tls_client_corrupted_ssl  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!N)r   r   r   r   r   LONG_TIMEOUTr   r   r   r   r  r   skip_if_tcp_blackholer   r1  rR  rW  re  rn  rz  r  r   r   r   r   r      s       L"G" " "-H -H -H^@, @, @,D>, >, >,@ (Y8 Y8 )(Y8v;A ;A ;Az (W1 W1 )(W1r	- 	- 	-.+ .+ .+`' ' 'B? ? ?B)$ )$ )$ )$ )$r   r   c                       e Zd Zd ZdS )SelectorStartTLSTestsc                 (    t          j                    S r   )r   SelectorEventLoopr   s    r   r   zSelectorStartTLSTests.new_loop      (***r   Nr   r   r   r   r   r   r   r  r    s#        + + + + +r   r  ProactorEventLoopzWindows onlyc                       e Zd Zd ZdS )ProactorStartTLSTestsc                 (    t          j                    S r   )r   r  r   s    r   r   zProactorStartTLSTests.new_loop  r  r   Nr  r   r   r   r  r    s#        + + + + +r   r  __main__) rV   rs   unittestr   testr   test.supportr   r   r2   ImportErrorr   r   r   r   test.test_asyncior	   r"   r
   
func_testsr   skipIfTestCaser   FunctionalTestCaseMixinr   r  
skipUnlesshasattrr  r   rG  r   r   r   <module>r     s   $           & & & & & &      JJJJ   
CCC                    1 1 1 1 1 1 6 6 6 6 6 6( ( ( o..R1 R1 R1 R1 R1Z0 R1 R1 /.R1tR	$ R	$ R	$ R	$ R	$:5 R	$ R	$ R	$j o..+ + + + +L(*; + + /.+ o..WWW&9::NKK+ + + + +L(*; + + LK /.+ zHMOOOOO s   * 44