
    [4%e,,                     0   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZ d d	lmZ d d
lmZm Z  e G d dej!                              Z"e G d de                      Z#dS )    N)
HTTPClient	HTTPError)
HTTPServer)IOLoop)gen_log)fork_processestask_id
Subprocess)SimpleAsyncHTTPClient)bind_unused_port	ExpectLogAsyncTestCasegen_test)skipIfNonUnixRequestHandlerApplicationc                   *     e Zd Zd Z fdZd Z xZS )ProcessTestc                 L     G d dt                     }t          d|fg          S )Nc                       e Zd Zd ZdS )+ProcessTest.get_app.<locals>.ProcessHandlerc                    |                      dd           r4t          j        t          |                      d                               |                      dd           rFt          j        t          j                    t          |                      d                               |                     t          t          j                                         d S )Nexitsignal)get_argumentos_exitintkillgetpidwritestr)selfs    9lib/python3.11/site-packages/tornado/test/process_test.pygetz/ProcessTest.get_app.<locals>.ProcessHandler.get   s    $$VT22 = HS!2!26!:!:;;<<<$$Xt44 KGBIKKT->->x-H-H)I)IJJJ

3ry{{++,,,,,    N)__name__
__module____qualname__r&    r'   r%   ProcessHandlerr      s#        - - - - -r'   r,   /r   )r$   r,   s     r%   get_appzProcessTest.get_app   sD    	- 	- 	- 	- 	-^ 	- 	- 	- S.12333r'   c                    t                      ;t          j        d           t          j                     t	          j        d           t          j        d           t                      	                                 d S )Nz$aborting child process from tearDown   r   )
r	   loggingerrorshutdownr   r   r   alarmsupertearDown)r$   	__class__s    r%   r6   zProcessTest.tearDown%   se    99  M@AAAHQKKKQr'   c                 >   	
 t          t          d          5  t                      \  
		fdt          j        d           	 t          dd          }                     |d u           t          j        d           nu# t          $ rh}                     |j	        d                                t                      d u            
                                 Y d }~d d d            d S d }~ww xY w	 |dv rF                     |t                                  
fd}t          j         |                       n|d	k    r                     |t                                 
                                 t          t                    dfd	} |dd            |dd           t!           |d          j                    |dd           t!           |d          j                  } |dd           t!           |d          j                  }                     ||            |dd           t'          j        d           n&# t*          $ r t-          j        d|d            w xY wd d d            d S # 1 swxY w Y   d S )Nz:(Starting .* processes|child .* exited|uncaught exception)c                     d| fz  S )Nzhttp://127.0.0.1:%d%sr+   )pathports    r%   get_urlz/ProcessTest.test_multi_process.<locals>.get_url>   s    .$==r'         )max_restartsr   )r   r0   c                     K   t                                                    } |                     g           t          j                                                     d {V  d S N)r   r.   add_socketsasyncioEventwait)serverr$   socks    r%   fz)ProcessTest.test_multi_process.<locals>.fR   sb      !+DLLNN!;!;**D6222%moo2244444444444r'      Fc                     	                       |                     S # t          $ r}|r|j        dk    s Y d }~d S d }~ww xY w)NiW  )fetchr   code)urlfail_okeclientr<   s      r%   rK   z-ProcessTest.test_multi_process.<locals>.fetcha   se    &#)<<#=#==( & & &$+ &# % 1>&s   ! 
A?Az/?exit=2T)rN   z/?exit=3r-   z/?exit=0z/?exit=4zexception in child process %d)exc_info)F)r   r   r   r   r4   r   
assertTrue
SystemExitassertEqualrL   r	   closerC   runr   r   r   bodyassertNotEqualr   r   	Exceptionr1   r2   )r$   idrO   rH   rK   pidpid2rP   r<   r;   rG   s   `      @@@@r%   test_multi_processzProcessTest.test_multi_process4   s|   
 Q
 
 L	 L	 *++JD$> > > > > LOOO
#AA666$///Q      +++		T 1222

)L	 L	 L	 L	 L	 L	 L	 L	7<<$$R3335 5 5 5 5 5
 K$$$$1WW$$R333JJLLL
 ((=>>F& & & & & & & E*d3333E*d3333 c

((( E*d3333eeCjjo..CE*d3333uuSzz//D''T222 E*d3333HQKKK   =rDQQQQUL	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	sU   +J<BJ
C6AC1 J1C66J:E$IJ#JJJJ)r(   r)   r*   r.   r6   r]   __classcell__)r7   s   @r%   r   r      s]        4 4 4    Q Q Q Q Q Q Qr'   r   c                       e Zd Zd Zed             Zed             Zed             Zd Zed             Z	d Z
ed             Zed	             Zd
S )SubprocessTestc                 j    |j                                          |j                                          d S rA   )proc	terminaterE   r$   subprocs     r%   term_and_waitzSubprocessTest.term_and_wait   s0       r'   c              #   T   K   t          j                    j                            d          rt	          j        d          t          t          j        ddgt          j	        t          j	        t          j                                        fd                                j        j                                        j        j                   j                            d          V  j                            d           j                            d	          V }                     |d
           j                            d          V  j                            d           j                                        V }                     |d           d S )NLayeredTwistedIOLoopz9Subprocess tests not compatible with LayeredTwistedIOLoop-u-istdinstdoutstderrc                  .                                    S rA   rf   rd   s   r%   <lambda>z0SubprocessTest.test_subprocess.<locals>.<lambda>        2 27 ; ; r'      >>> s   print('hello')
   
   hello
s   raise SystemExit
r'   )r   configured_classr(   endswithunittestSkipTestr
   sys
executableSTREAM
subprocessSTDOUT
addCleanuprm   rU   rl   
read_untilr"   rT   read_until_closer$   datare   s   ` @r%   test_subprocesszSubprocessTest.test_subprocess   s     "$$-667MNN 	 #N   ^T4(#$$	
 
 
 	;;;;;<<<,---+,,,n''00000/000^..u5555z***n''000001222^446666s#####r'   c              #      K   t          t          j        ddgt           j        t           j        t          j                                        fd           j                            d          V  j	        
                                 j                                        V }                     |d           d S )Nri   rj   rk   c                  .                                    S rA   rp   rd   s   r%   rq   z1SubprocessTest.test_close_stdin.<locals>.<lambda>   rr   r'   rs   rt   )r
   rz   r{   r|   r}   r~   r   rm   r   rl   rU   r   rT   r   s   ` @r%   test_close_stdinzSubprocessTest.test_close_stdin   s       ^T4(#$$	
 
 
 	;;;;;<<<n''00000^446666u%%%%%r'   c              #   (   K   t          t          j        dddgt           j                                        fd           j                            d          V }                     |d           j                                         d S )Nri   -cz'import sys; sys.stderr.write('hello\n'))rn   c                  .                                    S rA   rp   rd   s   r%   rq   z,SubprocessTest.test_stderr.<locals>.<lambda>   rr   r'   rt   ru   )	r
   rz   r{   r|   r   rn   r   rT   rU   r   s   ` @r%   test_stderrzSubprocessTest.test_stderr   s       ^T4)ST$
 
 
 	;;;;;<<<^..u5555z***r'   c                 `   t          j                     |                     t           j                   t          t          j        ddg          }|                    | j                   |                                 }| 	                    |d           | 	                    |j
        |           d S Nr   passr   )r
   
initializer   uninitializerz   r{   set_exit_callbackstoprE   rT   
returncoder$   re   rets      r%   test_sigchildzSubprocessTest.test_sigchild   s    
/000cndF;<<!!$),,,iikka   +S11111r'   c              #   4  K   t          j                     |                     t           j                   t          t          j        ddg          }|                                V }|                     |d           |                     |j        |           d S r   )	r
   r   r   r   rz   r{   wait_for_exitrT   r   r   s      r%   test_sigchild_futurez#SubprocessTest.test_sigchild_future   s      
/000cndF;<<))++++a   +S11111r'   c                 B    t          j                                          t           j                   t          t          j        ddgt           j                  }                     |j        j                   |	                     j
                   t          j        d           t          j        |j        t           j                   	                                  }n# t&          $ rs |j                                        }|                     fd           	                                   t'          d          # t&          $ r t'          d          w xY ww xY w                     |j        |                                |t           j                    d S )Nr   zimport time; time.sleep(30))rm   g?c                 ,                                     S rA   )r   )rH   r$   s    r%   rq   z5SubprocessTest.test_sigchild_signal.<locals>.<lambda>   s    DIIKK r'   z=subprocess closed stdout but failed to get termination signalzsubprocess failed to terminate)r
   r   r   r   rz   r{   r|   rm   rU   r   r   timesleepr   r    r[   r   SIGTERMrE   AssertionErrorr   add_done_callbackrT   r   )r$   re   r   futs   `   r%   test_sigchild_signalz#SubprocessTest.test_sigchild_signal   s   
/000^T#@A$
 
 
 	,---!!$),,, 	
3
V^,,,	))++CC 	 	 	 .1133C!!"7"7"7"7888		 %V   " G G G$%EFFFG	" 	+S111v~o.....s$   C# #;E E3E EE c              #     K   t          j                     |                     t           j                   t          t          j        ddg          }|                     t          j                  5 }|	                                V  d d d            n# 1 swxY w Y   | 
                    |j        j        d           d S )Nr   import sys; sys.exit(1)r0   )r
   r   r   r   rz   r{   assertRaisesr}   CalledProcessErrorr   rT   	exceptionr   )r$   re   cms      r%   test_wait_for_exit_raisez'SubprocessTest.test_wait_for_exit_raise  s      
/000cnd4MNOOz<== 	*'')))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*0!44444s   0BBBc              #     K   t          j                     |                     t           j                   t          t          j        ddg          }|                    d          V }|                     |d           d S )Nr   r   F)raise_errorr0   )r
   r   r   r   rz   r{   r   rT   r   s      r%   !test_wait_for_exit_raise_disabledz0SubprocessTest.test_wait_for_exit_raise_disabled  sy      
/000cnd4MNOO))e)<<<<a     r'   N)r(   r)   r*   rf   r   r   r   r   r   r   r   r   r   r+   r'   r%   r`   r`      s           $ $ X$: & & X&   X2 2 2 2 2 X2&/ &/ &/P 5 5 X5 ! ! X! ! !r'   r`   )$rC   r1   r   r   r}   rz   r   rx   tornado.httpclientr   r   tornado.httpserverr   tornado.ioloopr   tornado.logr   tornado.processr   r	   r
   tornado.simple_httpclientr   tornado.testingr   r   r   r   tornado.test.utilr   tornado.webr   r   TestCaser   r`   r+   r'   r%   <module>r      s     				      



   4 4 4 4 4 4 4 4 ) ) ) ) ) ) ! ! ! ! ! !       ? ? ? ? ? ? ? ? ? ? ; ; ; ; ; ; P P P P P P P P P P P P + + + + + + 3 3 3 3 3 3 3 3 n n n n n(# n n nb I! I! I! I! I!] I! I! I! I! I!r'   