
    iiO                     f   d dl mZmZ d dlm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mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlZd dlmZ d dlmZ  G d de          Zd Z G d de          Z G d de
j                  Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de#          Z$ G d de          Z%ej&        '                    e(          fd Z) G d! d"e*          Z+ G d# d$e          Z,e-d%k    r e
j.                     dS dS )&    )print_functiondivision)contextmanagerN)PY3)sysinfo)DEFAULT_SOCKET_TIMEOUT)SMALLEST_RELIABLE_DELAY)tcp_listener)WIN)socket)StreamServer)LoopExitc                       e Zd Zd ZdS )SimpleStreamServerc                 (   |                                 }	 |                                }|s	 |                                 d S 	 |                    dd          \  }}}n!# t          $ r t          d|            w xY w|dk    r|                    d           nI|dv r0|                    d           	 |                    d	          }|snn|                    d
           |                                 d S # |                                 w xY w)N    zFailed to parse request line: z/pings   HTTP/1.0 200 OK

PONG)/long/shorts   helloT   s   HTTP/1.0 404 WTF?

)makefilereadlineclosesplit	Exceptionprintsendallrecv)	selfclient_socket_addressfdrequest_line_methodpath_restdatas	            D/usr/local/lib/python3.11/dist-packages/gevent/tests/test__server.pyhandlezSimpleStreamServer.handle   sA   ##%%	;;==L " HHJJJJJ!'3'9'9#q'A'A$uu   LLKLLL w%%&DEEEE,,,%%h///(--a00D  %%&BCCCHHJJJJJBHHJJJJs$   C; A C; A==A(C; ;DN)__name__
__module____qualname__r)        r(   r   r      s#            r.   r   c                  n    	 t          j        t          sdnt                     d S # t          $ r Y d S w xY wNr   )geventsleepr   r	   r   _argss    r(   sleep_to_clear_old_socketsr5   0   sK     	c>QQ'>?????   s   "& 
44c                   z    e Zd ZeZeZdZdZe	d             Z
e
Ze	d             Ze	d             Ze	d             ZdS )SettingsTc                     |                                  5 }	 |                                }n# t          j        $ r d }Y nw xY wd d d            n# 1 swxY w Y   |                     |           d S N)r   readr   timeoutassertFalse)instconnresults      r(   assertAcceptedConnectionErrorz&Settings.assertAcceptedConnectionErrorB   s    ]]__ 	>   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	     s/   A,AA AA  AAAc                     |                                   	 |                                  d S # t          j        $ r%}|j        d         t
          j        vr Y d }~d S d }~ww xY wr0   )	assert500send_requestr   errorargs	greentestCONN_ABORTED_ERRORS)r=   exs     r(   	assert503zSettings.assert503M   s}     		| 	 	 	wqz!>>> ?>>>>>	s   , A AA c                     |                      t          j                  5  |                     d           d d d            d S # 1 swxY w Y   d S )Ng{Gz?r;   )assertRaisesr   r;   assertRequestSucceeded)r=   s    r(   assertPoolFullzSettings.assertPoolFullX   s    v~.. 	6 	6'''555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   AAAc                 V    |                     d|                                            |S )Nspawn)
setdefault	get_spawn)r=   kwargss     r(   fill_default_server_argsz!Settings.fill_default_server_args]   s'    '4>>#3#3444r.   N)r*   r+   r,   r   ServerClassr   ServerSubClassrestartableclose_socket_detectedstaticmethodr@   rB   rI   rN   rT   r-   r.   r(   r7   r7   <   s        K'NK ! ! \! .I  \ 6 6 \6   \  r.   r7   c                   V   e Zd Zej        ZeZdZd Zd Z	d Z
eeddfd            Zdedfd	Zd d
ZdZej        r	ej        fZn#ej        r
ej        rdZnej        reej        fz  Zd!dZd Zd Zd Zd Zd ZefdZd Zd Z d Z!d Z"d Z#e$d             Z%d Z&d Z'd Z(d Z)d Z*dS )"TestCaseNc                     t          | dd            | j                                         d | _        t                       d S )Nserver)getattrr]   stopr5   r   s    r(   cleanupzTestCase.cleanuph   sA    44((4KDK"$$$$$r.   c                 H    |                      t          d                    S )N   backlog)_close_on_teardownr
   r`   s    r(   get_listenerzTestCase.get_listenern   s!    &&|A'>'>'>???r.   c                     | j         j        }|st          j        }n|dk    rt          j        }	 | j         j        j        }n# t          $ r t
          j        }Y nw xY w|| j         j	        |fS )Nz::)
r]   server_hostrF   DEFAULT_LOCAL_HOST_ADDRDEFAULT_LOCAL_HOST_ADDR6r   familyAttributeErrorAF_INETserver_port)r   ri   rl   s      r(   get_server_host_port_familyz$TestCase.get_server_host_port_familyq   s    k- 	=#;KKD  #<K	$['.FF 	$ 	$ 	$^FFF	$ DK3V;;s   A AAr   Fc              #     K   |                                  \  }}}t          rdnd}||i}t          rd|d<   t          j        |          5 }	d }
|	                    ||f           |	                    |            |	j        di |5 }
|s|
n|
|	f}|V  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 )N	bufferingbufsizerwbmode)rl   r-   )rp   r   r   connect
settimeoutr   )r   r;   rs   include_raw_socketri   ro   rl   bufargmakefile_kwargssockrconnr?   s               r(   r   zTestCase.makefile   ss     +/+K+K+M+M([& #2!7+ 	, ',OF#]&))) 		TE LL+{3444OOG$$$1111 U&8Kudm              		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s6   <B8B B8 B$	$B8'B$	(B88B<?B</c                     |                      ||          5 }|                     ||           d d d            d S # 1 swxY w Y   d S )N)r;   rs   )r   send_request_to_fd)r   urlr;   rs   r>   s        r(   rC   zTestCase.send_request   s    ]]7G]<< 	/##D#...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   <A A c                     |                     d|z                      d                     |                                 d S )NzGET %s HTTP/1.0

zlatin-1)writeencodeflush)r   r"   r   s      r(   r   zTestCase.send_request_to_fd   s9    
+c199)DDEEE





r.   r-   )iA'  Tc                    	 |                      t          j                  5 }|                                 5 }|                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n# t
          $ r |s Y d S w xY w|j        }|                     |j        d         t          j
        t          j        t          j        t          j        f| j        z   ||j        f           d S r0   )rL   r   rD   r   r   r   	exceptionassertInrE   errnoECONNREFUSEDEADDRNOTAVAIL
ECONNRESETECONNABORTEDLOCAL_CONN_REFUSED_ERRORS)r   in_proc_serverexcr>   rH   s        r(   assertConnectionRefusedz TestCase.assertConnectionRefused   so   	""6<00 !C]]__ !JJLLL! ! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! ! ! ! ! ! ! ! ! !  		 		 		!  FF		 ]bgaj)5+>');=?C?]^27m	% 	% 	% 	% 	%sW   A: A.AA.A	A.A	A."A: .A22A: 5A26A: :B
Bc                 :    | j                             |            d S r9   )r7   rB   r`   s    r(   rB   zTestCase.assert500       %%%%%r.   c                 :    | j                             |            d S r9   )r7   rI   r`   s    r(   rI   zTestCase.assert503   r   r.   c                 :    | j                             |            d S r9   )r7   r@   r`   s    r(   r@   z&TestCase.assertAcceptedConnectionError   s    33D99999r.   c                 :    | j                             |            d S r9   )r7   rN   r`   s    r(   rN   zTestCase.assertPoolFull   s    $$T*****r.   c                     	 |                      d          5 \  }}|                    d           |                                 d}	 	 |                    d          }|sn||z  }n6# t          j        $ r$ |                     |           Y d d d            d S w xY w	 d d d            n# 1 swxY w Y   n# t          $ r Y d S w xY w|                     |	                    d          t          |                     d S )NT)rx   s   GET / HTTP/1.0

r.   r   s"   HTTP/1.0 500 Internal Server Error)r   r   r   r   r   r;   r<   r   
assertTrue
startswithrepr)r   r>   r{   r?   r'   s        r(   assertNotAcceptedzTestCase.assertNotAccepted   s   	$77 <D$

4555

'#yy||# "!$	' "~   $$V,,,        "                	 	 	FF	 	))*OPPRVW]R^R^_____s^   B7 /B+A('B+($BB+B7 BB+B7 +B//B7 2B/3B7 7
CCc                     |                      |          5 }|                    d           |                                }d d d            n# 1 swxY w Y   |                     |                    d          t          |                     d S )NrK   s   GET /ping HTTP/1.0

s   

PONG)r   r   r:   r   endswithr   )r   r;   r>   r?   s       r(   rM   zTestCase.assertRequestSucceeded   s    ]]7]++ 	!tJJ4555YY[[F	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	88$v,,GGGGGs   *AAAc                     | j                                          |                                  |                                  d S r9   )r]   startrM   r`   s    r(   start_serverzTestCase.start_server   s@    ##%%%##%%%%%r.   c                 `    | j                                          |                                  d S r9   )r]   r_   r   r`   s    r(   stop_serverzTestCase.stop_server   s.    $$&&&&&r.   c                     d S r9   r-   )r   _msgs     r(   report_netstatzTestCase.report_netstat   s	     	r.   c                     |                     d| j                  }|                     dt          j        df          } ||g|R i |S )Nserver_kindserver_listen_addrr   )poprV   rF   DEFAULT_BIND_ADDR)r   rE   rS   kindaddrs        r(   _create_serverzTestCase._create_server   sT    zz-)<==zz.1La0PQQtD*4***6***r.   c                 x     | j         |i || _        | j                                         t                       d S r9   )r   r]   r   r5   r   rE   rS   s      r(   init_serverzTestCase.init_server   sA    )d)4:6::"$$$$$r.   c                     | j         j        S r9   r]   r   r`   s    r(   r   zTestCase.socket      {!!r.   c                    t           j        r|                     d           	 |                     d            |                                  |                                  |                     t                     | j        	                                 dd l
}|                                 d S # | j        	                                 dd l
}|                                 w xY w)NzSometimes misses the errorc                      d S r9   r-   r-   r.   r(   <lambda>z1TestCase._test_invalid_callback.<locals>.<lambda>  s    T r.   r   )r   RUNNING_ON_APPVEYORskipTestr   expect_one_errorrB   assert_error	TypeErrorr]   r_   gccollect)r   r   s     r(   _test_invalid_callbackzTestCase._test_invalid_callback	  s    & 	8MM6777	$ \\***!!###NNi(((K IIIrzz|||||	 K IIIrzz||||s   AB. .3C!c                 8    | j                             | |          S r9   )r7   rT   )r   rS   s     r(   rT   z!TestCase.fill_default_server_args  s    }55dFCCCr.   c                 L     | j         j        |i |                     |          S r9   )r7   rU   rT   r   s      r(   rU   zTestCase.ServerClass  s7    (t}($ R+/+H+H+P+PR R 	Rr.   c                 L     | j         j        |i |                     |          S r9   )r7   rV   rT   r   s      r(   rV   zTestCase.ServerSubClass#  s7    +t}+T U.2.K.KF.S.SU U 	Ur.   c                     d S r9   r-   r`   s    r(   rR   zTestCase.get_spawn'      tr.   )r}   )T)+r*   r+   r,   rF   LARGE_TIMEOUT__timeout__r7   r]   ra   rg   rp   r   _DEFAULT_SOCKET_TIMEOUTr   rC   r   r   OSXr   
EPROTOTYPEr   PYPY3RUNNING_ON_MANYLINUXEPIPEr   rB   rI   r@   rN   r   rM   r   r   r   r   r   propertyr   r   rT   rU   rV   rR   r-   r.   r(   r[   r[   b   sE       )KHF% % %@ @ @< < < 6V[    ^(  #,CQ / / / /    !#} 4%*%5$7!!	 49? 4 %-!!		' 4 	"ek^3!% % % %,& & && & &: : :+ + +` ` `, .E H H H H& & &
' ' '  
+ + +
% % %
 " " X"$ $ $&D D DR R RU U U    r.   r[   c                   j   e Zd Zd Zd Zd Z ej        d           ej        d          d                         Z	d Z
 ej        d          d             Zd	 Zd
 Z ej        ej                  d             Zd Zd Z ej        ej        d          d             Zed             Zd Zd ZdS )TestDefaultSpawnc                     t           j        S r9   r1   rP   r`   s    r(   rR   zTestDefaultSpawn.get_spawn,  
    |r.   c                    |                      d           |                                  |                      d           |r| j        j        r| j                                         |                      d           |                                  | j                                         |                      d           t                       | 	                                 | 
                                 |                      d           d S )Nzbefore startzafter startzafter stop_acceptingzafter start_acceptingz
after stop)r   r   r7   rW   r]   stop_acceptingr   start_acceptingr5   rM   r   )r   rW   s     r(   _test_server_start_stopz(TestDefaultSpawn._test_server_start_stop/  s    N+++M*** 	*4=4 	*K&&((( 6777""$$$K''))) 7888&((('')))L)))))r.   c                     d| _         |                     t                    5  |                     |                                 d           d d d            d S # 1 swxY w Y   d S )NF   rd   )switch_expectedrL   r   rU   rg   r`   s    r(   'test_backlog_is_not_accepted_for_socketz8TestDefaultSpawn.test_backlog_is_not_accepted_for_socket>  s    $y)) 	> 	>T..00"===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   *AA AzSometimes times outzSometimes times out.c                     |                      t          j        dfd          | _        |                                  |                     d           d S )Nr   r   rd   FrW   rV   rF   r   r]   r   r   r`   s    r(   $test_backlog_is_accepted_for_addressz5TestDefaultSpawn.test_backlog_is_accepted_for_addressC  sV     ))9+F*JTV)WW$$&&&$$$77777r.   c                     |                      |                                           | _        |                                  d S r9   )rV   rg   r]   r   r`   s    r(   test_subclass_just_createz*TestDefaultSpawn.test_subclass_just_createJ  s;    ))$*;*;*=*=>>     r.   c                     |                      |                                           | _        |                                  |                     d           d S )NTr   )rV   rg   r]   r   r   r`   s    r(   test_subclass_with_socketz*TestDefaultSpawn.test_subclass_with_socketN  sT    ))$*;*;*=*=>> 	   $$$66666r.   c                     |                      t          j        df          | _        |                                  |                     d           d S )Nr   Tr   r   r`   s    r(   test_subclass_with_addressz+TestDefaultSpawn.test_subclass_with_addressV  sN    ))9+F*JKK$$&&&$$$66666r.   c                 .    |                                   d S r9   r   r`   s    r(   test_invalid_callbackz&TestDefaultSpawn.test_invalid_callback[      ##%%%%%r.   c                 .   t          j        | j        j                  }	 t	                       |                                  | j                                         |                     | j        j                   | 	                                 |
                                 |                                 | j                                         d S # |
                                 |                                 | j                                         w xY wr9   )r1   rP   r]   serve_foreverr5   rM   r_   r<   startedr   killget)r   gs     r(   _test_serve_foreverz$TestDefaultSpawn._test_serve_forever^  s    L233		&((('')))KT[0111((***FFHHHEEGGGK FFHHHEEGGGKs   A.C ADc                     |                      t          j        df          | _        |                     | j        j                   |                                  |                                  d S r0   )rV   rF   r   r]   r<   r   r   r   r`   s    r(   test_serve_foreverz#TestDefaultSpawn.test_serve_foreverl  sb    ))9+F*JKK,---$$&&&  """""r.   c                 P   |                      t          j        df          | _        |                                  |                     | j        j                   | j                                         |                     | j        j                   | 	                                 d S r0   )
rV   rF   r   r]   r   r<   r   r   r   r   r`   s    r(   test_serve_forever_after_startz/TestDefaultSpawn.test_serve_forever_after_startr  s    ))9+F*JKK$$&&&,---+,,,  """""r.   zSometimes spuriously failsc                    |                      t          j        dfd           | _        | j                                         t                       |                                 5 }|                     |           t          j	        
                    d          5  	 |                                }|r,|                    d          sJ t          |                      n[# t          j        $ r Y nJt          j        $ r9}|j        d         dk    rn|j        d         t$          j        k    rn Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                  d S )Nr   c                      g S r9   r-   )rE   s    r(   r   zDTestDefaultSpawn.test_server_closes_client_sockets.<locals>.<lambda>|  s    WY r.   r   z"HTTP/1.0 500 Internal Server ErroriE'  )rU   rF   r   r]   r   r5   r   r   r1   Timeout_start_new_or_dummyr:   r   r   r   r;   rD   rE   r   r   r   )r   r>   r?   rH   s       r(   !test_server_closes_client_socketsz2TestDefaultSpawn.test_server_closes_client_socketsz  s   &&	(CQ'GIYIYZZ"$$$]]__ 	##D)))33A66  !YY[[F e%001UVVddX\]cXdXdddd~   D|   wqzU**u'777              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$ 	sm   $5EEACED6-E/D6=/D1,E1D66E9EE			EE		EE #E c                     | j         j        S r9   r   r`   s    r(   r   zTestDefaultSpawn.socket  r   r.   c                 4   |                                   |                     | j        j                   t	          d          fd}|| j        _        |                                  |                                  |                     t                     d S )Ntest_error_in_spawnc                  T    t          j                                                   d S r9   )r1   
getcurrentthrow)r4   rD   s    r(   _spawnz4TestDefaultSpawn.test_error_in_spawn.<locals>._spawn  s&    %%e,,,,,r.   )	r   r   r]   r   ExpectedErrorr   r   r@   r   )r   r   rD   s     @r(   r   z$TestDefaultSpawn.test_error_in_spawn  s    +,,,344	- 	- 	- 	- 	-#**,,,-/////r.   c                    |                                   | j        j        sJ |                     dt	          | j                             | j                            | j        j                   |                     dt	          | j                             |                     dt	          | j                             | j                            | j                   |                     dt	          | j                             d }| j                            |           |                     dt	          | j                             d S )NServerzhandle=<bound methodzof self>.test_server_repr_when_handle_is_instancemethodc                      d S r9   r-   r-   r.   r(   r)   zOTestDefaultSpawn.test_server_repr_when_handle_is_instancemethod.<locals>.handle  s    Dr.   zhandle=<function)r   r]   r   r   r   
set_handler)   r  )r   r)   s     r(   r  z?TestDefaultSpawn.test_server_repr_when_handle_is_instancemethod  s   {""""hT[ 1 1222t{1222,d4;.?.?@@@j$t{"3"3444tRSSSFT[HYHYZZZ	 	 	v&&&($t{*;*;<<<<<r.   N)r*   r+   r,   rR   r   r   rF   skipOnLibuvOnCIOnPyPyskipOnAppVeyorr   r   r   r   r   reraises_flaky_timeoutr   r;   r   r   r   skipIfEXPECT_POOR_TIMER_RESOLUTIONr   r   r   r  r-   r.   r(   r   r   *  s         * * *> > >
 %Y$%:;;Y4558 8 65 <;8
! ! ! Y4557 7 6577 7 7
& & & &Y%fn55  65# # ## # # Yi<>Z[[  \[0 " " X"	0 	0 	0= = = = =r.   r   c                       e Zd Zd ZdS )TestRawSpawnc                     t           j        S r9   )r1   	spawn_rawr`   s    r(   rR   zTestRawSpawn.get_spawn  s    r.   N)r*   r+   r,   rR   r-   r.   r(   r
  r
    s#                 r.   r
  c                   `    e Zd Zd Z ej        ej        d          d             Zde_        dS )TestPoolSpawnc                     dS )N   r-   r`   s    r(   rR   zTestPoolSpawn.get_spawn  s    qr.   zIf we have bad timer resolution and hence increase timeouts, it can be hard to sleep for a correct amount of time that lets requests in the pool be full.c                    |                                   |                                 5 }|                                 5 }|                     |d           |                     |d           t          j                    j                                         t          j        t          dz             | 	                                 | 	                                 | 	                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                     	 | 
                                 d S # t          j        $ r t          j                     Y d S w xY w)Nr   r   g      $@)r   r   r   r1   get_hubloop
update_nowr2   r   rN   rM   r   r;   rF   reraiseFlakyTestTimeout)r   long_requestshort_requests      r(   test_pool_fullzTestPoolSpawn.test_pool_full  s   
 	]]__ 	& &M''x@@@''g>>>   %002224t;<<<##%%%##%%% ##%%%& & & & & & & & & & & & & & &	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&  	,---	0'')))))~ 	0 	0 	0-//////	0sG   DB/C9-D9C=	=D C=	DDD5E "E10E1FN)	r*   r+   r,   rR   rF   r  r  r  error_fatalr-   r.   r(   r  r    s`           Yi<67 70 0	7 706 "'Nr.   r  c                   L    e Zd Zd Zd Z ej        d          d             ZdS )TestNoneSpawnc                     d S r9   r-   r`   s    r(   rR   zTestNoneSpawn.get_spawn  r   r.   c                 .    |                                   d S r9   r   r`   s    r(   r   z#TestNoneSpawn.test_invalid_callback  r   r.   z Sometimes doesn't get the error.c                     d }|                      || j        d            |                                  |                                  |                     t
          d           d S )Nc                  8    t          j        t                     d S r9   )r1   r2   r	   r3   s    r(   r2   z<TestNoneSpawn.test_assertion_in_blocking_func.<locals>.sleep  s    L011111r.   )r   rP   z?Impossible to call blocking function in the event loop callback)r   rV   r   rB   r   AssertionError)r   r2   s     r(   test_assertion_in_blocking_funcz-TestNoneSpawn.test_assertion_in_blocking_func  sn    	2 	2 	2D,?tLLL.*klllllr.   N)r*   r+   r,   rR   r   rF   r  r!  r-   r.   r(   r  r    sb          & & & Y@AAm m BAm m mr.   r  c                       e Zd ZdS )r   Nr*   r+   r,   r-   r.   r(   r   r             Dr.   r   c                   `    e Zd ZdZd Z ej         eed          d          d             Z	dS )TestSSLSocketNotAllowedFc                     t           j        S r9   r   r`   s    r(   rR   z!TestSSLSocketNotAllowed.get_spawn  r   r.   sslzUses socket.sslc                     ddl m} |                     t          d                    } ||          }|                     t
          | j        |           d S )Nr   )r(  rc   rd   )gevent.socketr(  rf   r
   rL   r   rV   )r   r(  listeners      r(   testzTestSSLSocketNotAllowed.test   s`    %%%%%%**<+B+B+BCC3x==)T%8(CCCCCr.   N)
r*   r+   r,   r   rR   unittest
skipUnlesshasattrr   r,  r-   r.   r(   r&  r&    sf        O   X//1BCCD D DCD D Dr.   r&  c                 |    t           j                            t           j                            ||                     S r9   )osr%   abspathjoin)nameheres     r(   _filer6    s&    7??27<<d33444r.   c                       e Zd ZdS )BadWrapExceptionNr#  r-   r.   r(   r8  r8    r$  r.   r8  c                   &    e Zd Zd Zd Zd Zd ZdS )TestSSLGetCertificatec                 ~    |                      t          j        dft          d          t          d                    S )Nr   z
server.keyz
server.crt)keyfilecertfile)rV   rF   r   r6  r`   s    r(   r   z$TestSSLGetCertificate._create_server  sB    ""I$?#C+0+>+>,1,,?,? # A A 	Ar.   c                     t           j        S r9   r   r`   s    r(   rR   zTestSSLGetCertificate.get_spawn  r   r.   c                 <   ddl m}m} |                     |                    d                     |                     |                    d                     |                                  |                                 \  }}}|                    ||f           d S )Nr   )monkeyr(  r(  r   )r1   r@  r(  r<   is_module_patchedr   rp   get_server_certificate)r   r@  r(  ri   ro   _familys         r(   test_certificatez&TestSSLGetCertificate.test_certificate  s    &&&&&&&&11%8899911(;;<<<,0,L,L,N,N)['""K#=>>>>>r.   c                     |                                   d }|| j        _        |                     t                    5  | j                            d d            d d d            d S # 1 swxY w Y   d S )Nc                     t                      r9   )r8  )_client_socket
_wrap_argss     r(   bad_wrapzPTestSSLGetCertificate.test_wrap_socket_and_handle_wrap_failure.<locals>.bad_wrap-  s    "$$$r.   )r   r]   wrap_socketrL   r8  _handle)r   rI  s     r(   (test_wrap_socket_and_handle_wrap_failurez>TestSSLGetCertificate.test_wrap_socket_and_handle_wrap_failure&  s    
 		% 	% 	% #+/00 	, 	,Kd+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   A''A+.A+N)r*   r+   r,   r   rR   rD  rL  r-   r.   r(   r:  r:    sS        A A A
  
? 
? 
?, , , , ,r.   r:  __main__)/
__future__r   r   
contextlibr   r-  r   r1  gevent.testingtestingrF   r   r   r   r   gevent.testing.timingr	   gevent.testing.socketsr
   r   r1   r   gevent.serverr   gevent.exceptionsr   r   r5   objectr7   r[   r   r
  r  r  r   r   r&  r%   dirname__file__r6  BaseExceptionr8  r:  r*   mainr-   r.   r(   <module>r[     sb   / / / / / / / / % % % % % %   				 # " " " " "       " " " " " " L L L L L L 9 9 9 9 9 9 / / / / / /              & & & & & & & & & & & &       4	 	 	$ $ $ $ $v $ $ $LF F F F Fy! F F FPH= H= H= H= H=x H= H= H=V         #      $' $' $' $' $'$ $' $' $'Nm m m m mH m m m$	 	 	 	 	I 	 	 	
D D D D Dh D D D W__X.. 5 5 5 5	 	 	 	 	} 	 	 	$, $, $, $, $,H $, $, $,V zIN r.   