
    <eg                     T   d Z ddlZddlZddlZddlZddlmZ ddlmZ 	 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 )zTests for asyncio/sslproto.py.    N)support)mock)log)	protocols)sslproto)utils)
functionalc                  .    t          j        d            d S N)asyncioset_event_loop_policy     6/usr/lib/python3.11/test/test_asyncio/test_sslproto.pytearDownModuler      s    !$'''''r   zNo ssl modulec                   t     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 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        _        |||_        ||_        |                    |           |S r   )	r   MocksslSSLWantReadErrorreadside_effectr.   _sslobjconnection_made)r   r+   r.   	transportsslobjs        r   r6   z&SslProtoHandshakeTests.connection_made,   sU    IKK	"%"6#".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   r0   assertRaisesRegex
ValueErrorr   r$   r   r   r*   	app_protor   s       r   test_handshake_timeout_zeroz2SslProtoHandshakeTests.test_handshake_timeout_zero7   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_negative?   s    133
IKK	##J0CDD 	< 	< Iz67:< < < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<rA   c                    | j                                         }|                     |          }|                     |t	          j        t          j                             |                                 t          j
        | j                    |                     |                                t                     d S Nr   )r4   r-   )r   create_futurer,   r6   r   r0   r1   r2   eof_receivedr!   run_brieflyassertIsInstance	exceptionConnectionResetErrorr   r   r+   s      r   test_eof_received_waiterz/SslProtoHandshakeTests.test_eof_received_waiterG   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NrF   )
r   rG   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_errorR   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 rE   )r   rG   r,   r6   r   r0   r1   r2   connection_lostConnectionAbortedErrorr!   rI   rJ   rK   rM   s      r   test_connection_lostz+SslProtoHandshakeTests.test_connection_losta   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 rE   )r   rG   r,   r6   r   r0   r1   r2   r!   rI   r&   r)   
assertTrueabortcalled)r   r   r+   r7   s       r   test_close_during_handshakez2SslProtoHandshakeTests.test_close_during_handshaken   s    ((**%%V%44	((s/CDDD ) 
 
	 	ty))) &&(((	./////r   c                    | j                                         }|                     |          }|                     |                    d                     t                      }|                     |                    d|          |           |                     |           |                     |                    d                     |	                    d            |                     |                    d                     d S )NrF   socket)
r   rG   r,   assertIsNone_get_extra_infoobjectr%   r6   assertIsNotNonerZ   )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 rP   )
r   rG   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,   r6   r&   r)   rd   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,   r6   r&   r)   rd   writerr   s      r   test_write_after_closingz/SslProtoHandshakeTests.test_write_after_closing   sd    %%''	Y''') 	&,,w//00000r   )__name__
__module____qualname__r   r,   r6   r@   rC   rN   rX   r\   ra   ri   rn   rt   rw   __classcell__)r   s   @r   r   r      s       ' ' ' ' '
 &*      :> 	 	 	 	 	: : :< < <	H 	H 	H+ + +J J J0 0 0	? 	? 	?> > >7 7 71 1 1 1 1 1 1r   r   c                   h    e Zd ZdZej        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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   rq   z=BaseStartTLS.test_buf_feed_data.<locals>.Proto.buffer_updated   sI    : 2II%0IIIIII&5&!11IIIIr   N)rx   ry   rz   r   r   rq   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_protoassertEqualr   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lenr   	start_tlssendallshutdownrc   	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   r   r   trr   s     r   r6   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   rH   zPBaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.ClientProto.eof_received      &&t,,,,,r   Nrx   ry   rz   r   r6   r   rH   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   <lambda>zPBaseStartTLS.test_start_tls_client_reg_proto_1.<locals>.client.<locals>.<lambda>      GV44 r   r   )	r   sleepr   rG   create_connectionrv   r   r   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_collectrd   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   r   r   rc   r   r)   r   s     r   r   z>BaseStartTLS.test_create_connection_memory_leak.<locals>.serve'  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__4  r   r   c                 l    || _         | xj        dz  c_                            | j        d           d S r   )r   r   r   r   s     r   r6   zTBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProto.connection_made9  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_received@  r   r   c                 :    | j                             d           d S r   r   r   s    r   rH   zQBaseStartTLS.test_create_connection_memory_leak.<locals>.ClientProto.eof_receivedC  r   r   Nr   r   s   r   r   r   3  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   zQBaseStartTLS.test_create_connection_memory_leak.<locals>.client.<locals>.<lambda>M  r   r   r1   r   )r   r   r   rG   r   r   rv   r)   )	r   r   r   r   r   r   r   r   r   s	      @@r   r   z?BaseStartTLS.test_create_connection_memory_leak.<locals>.clientF  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>.serveh  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   r6   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   )r   r   r   bytesr   )slfr   r   s     r   rq   zWBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.ClientProtoFirst.buffer_updated  sG      ***&&uSWVeV_'='=>>>>>r   N)rx   ry   rz   r   r6   r   rq   )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   r6   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   rH   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   r   zPBaseStartTLS.test_start_tls_client_buf_proto_1.<locals>.client.<locals>.<lambda>  s    ((22 r   r   r   r   )
r   r   r   rG   r   rv   r   r   rk   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_1a  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   r   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   r6   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   rH   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   r   zPBaseStartTLS.test_start_tls_slow_client_cancel.<locals>.client.<locals>.<lambda>  r   r   )
r   r   r   rG   r   rv   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   rG   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   r   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   r7   )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   )r7   r-  r   r   r   s     r   r6   zIBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.connection_made  s%    !#&&r*****r   c                     || _         d S r   )r7   r1  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   )r7   r.  r   set_exception)r   excs     r   rZ   zIBaseStartTLS.test_start_tls_server_1.<locals>.ServerProto.connection_lost"  sH    !%;$//55555$22377777r   N)rx   ry   rz   r   r6   r3  r   rZ   )r   s   r   ServerProtor+    sj        & & &+ + +$ $ $7 7 7 7 7
8 8 8 8 8r   r8  c                   K   | d {V }|                                                    | j        d           j                            || 	dj                   d {V }|                     |           | d {V  |                                | d {V                      | j                   |                                 d S )Nr   T)r   r    )rv   r   r   r   r   r   r3  r)   )
r   r-  r.  r/  r   r   r(  r   r   r   s
         r   mainz2BaseStartTLS.test_start_tls_server_1.<locals>.main)  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   )r   s   r   r   zHBaseStartTLS.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>C  s     r   z	127.0.0.1r   c                      |           S r   r   )r   r   r   s    r   r   zHBaseStartTLS.test_start_tls_server_1.<locals>.run_main.<locals>.<lambda>F  s    ffT4.@.@ r   r   )r   rG   create_serversocketsgetsockname
tcp_clientr   r   r   r)   wait_closedr   )r-  r.  r/  serverr   r   r(  r8  r)  r   r:  r   s       @@r   run_mainz6BaseStartTLS.test_start_tls_server_1.<locals>.run_main<  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   rD  r(  r   r8  r)  r   r   r:  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   r:  z4BaseStartTLS.test_start_tls_wrong_args.<locals>.mainS  sV     ''	3DEE < <i))$d;;;;;;;;;< < < < < < < < < < < < < < <  8::F''	3EFF > >i))$f=========> > > > > > > > > > > > > > > > > >s#   #AAA#B77B;>B;)r   r   )r   r:  s   ` r   test_start_tls_wrong_argsz&BaseStartTLS.test_start_tls_wrong_argsR  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   appendr   ctxmessagess     r   r   z5BaseStartTLS.test_handshake_timeout.<locals>.<lambda>c      (//#:N:N 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   rC  z3BaseStartTLS.test_handshake_timeout.<locals>.serverg  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 r1   server_hostnamer    r   )r   r   r   r   r#   r   r   )r   client_sslctxr   s    r   r   z3BaseStartTLS.test_handshake_timeout.<locals>.clientp  s      "+	+$AA A &$&*1*?A A A           r   r   max_clientsbacklog)r!   r   r   set_exception_handlerr   r"  r   r#  r   r   r^   r   r   r   r   r   rd   )r   rC  r   r   rZ  rQ  rU  s   `   @@@r   test_handshake_timeoutz#BaseStartTLS.test_handshake_timeout]  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   rM  rO  s     r   r   zHBaseStartTLS.test_create_connection_ssl_slow_handshake.<locals>.<lambda>  rR  r   c                     	 |                      d           n# t          $ r Y nw xY w|                                  d S # |                                  w xY wr  rT  )r   s    r   rC  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 )NrW  g      ?rX  )r   open_connectionr   readerwriterrZ  s      r   r   zFBaseStartTLS.test_create_connection_ssl_slow_handshake.<locals>.client  sP      #*#:! "&)	$+ $+ $+ + + + + + +NFFFFr   r   r[  zSSL handshake.*is taking longer)
r!   r   r   r^  r   r<   r[   r   r   r   )r   rC  r   r   rZ  rQ  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   rP  s     r   r   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   r1   SSLErrorOSErrorr)   )r   rI  s    r   rC  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 )NrW  rX  )r   rd  r   LOOPBACK_TIMEOUTre  s      r   r   zJBaseStartTLS.test_create_connection_ssl_failed_certificate.<locals>.client  s\      #*#:! "&-&>	$@ $@ $@ @ @ @ @ @ @NFFFFr   r   r[  )r   r^  r!   r   r   r   r"  r1   SSLCertVerificationErrorr   r   )r   rC  r   r   rZ  rI  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   rk  s     r   r   zBBaseStartTLS.test_start_tls_client_corrupted_ssl.<locals>.<lambda>  rl  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   sendr1   ro  r)   )r   	orig_sockrI  s     r   rC  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 )NrW  )r1   rY  rx     BOK)	r   rd  r   readlinerv   r"  r1   ro  r)   )r   rf  rg  rZ  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   r[  r~  )	r   r^  r!   r   r   r   r   r   r   )r   rC  r   r   resrZ  rI  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)rx   ry   rz   r   r   LONG_TIMEOUTr   r   r   r   r   r  r$  rE  rJ  r_  rh  rt  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rx   ry   rz   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__)__doc__rT   rc   unittestr   testr   r   r1   ImportErrorr   r   r   r   test.test_asyncior   r!   r	   
func_testsr   skipIfTestCaser   FunctionalTestCaseMixinr}   r  
skipUnlesshasattrr  rx   r:  r   r   r   <module>r     sp   $ $                JJJJ   
CCC                    1 1 1 1 1 1 6 6 6 6 6 6( ( ( o..E1 E1 E1 E1 E1Z0 E1 E1 /.E1ZP	$ P	$ P	$ P	$ P	$:5 P	$ P	$ P	$f o..+ + + + +L(*; + + /.+ o..WWW&9::NKK+ + + + +L(*; + + LK /.+ zHMOOOOO s   % //