
    Mh)                     $   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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)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    Y/var/www/html/test/jupyter/venv/lib/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$   r5   zProcessTest.tearDown$   se    99  M@AAAHQKKKQr&   c                 6   	
 t          t          d          5  t                      \  
		fdt          j        d           	 t          dd          }                     |           t          j        d           ns# t          $ rf}                     |j	        d            
                    t                                 
                                 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   r/   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>.fQ   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$   rJ   z-ProcessTest.test_multi_process.<locals>.fetch`   se    &#)<<#=#==( & & &$+ &# % 1>&s   ! 
A?Az/?exit=2T)rM   z/?exit=3r,   z/?exit=0z/?exit=4zexception in child process %d)exc_info)F)r   r   r   r   r3   r   assertIsNotNone
SystemExitassertEqualrK   assertIsNoner   closerB   runr   r
   r   bodyassertNotEqualr   r   	Exceptionr0   r1   )r#   idrN   rG   rJ   pidpid2rO   r;   r:   rF   s   `      @@@@r$   test_multi_processzProcessTest.test_multi_process3   sw   
 Q
 
 L	 L	 *++JD$> > > > > LOOO
#AA666$$R(((Q      +++!!')),,,

)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
C2AC-J-C22J6E$IJ#I>>JJJ)r'   r(   r)   r-   r5   r]   __classcell__)r6   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 r@   )proc	terminaterD   r#   subprocs     r$   term_and_waitzSubprocessTest.term_and_wait   s0       r&   c              #      K   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-u-istdinstdoutstderrc                  .                                    S r@   rf   rd   s   r$   <lambda>z0SubprocessTest.test_subprocess.<locals>.<lambda>        2 27 ; ; r&      >>> s   print('hello')
   
   hello
s   raise SystemExit
r&   )r	   sys
executableSTREAM
subprocessSTDOUT
addCleanuprl   rU   rk   
read_untilr!   rS   read_until_closer#   datare   s   ` @r$   test_subprocesszSubprocessTest.test_subprocess   sU     ^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 )Nrh   ri   rj   c                  .                                    S r@   ro   rd   s   r$   rp   z1SubprocessTest.test_close_stdin.<locals>.<lambda>   rq   r&   rr   rs   )r	   ru   rv   rw   rx   ry   rz   rl   r{   rk   rU   r|   rS   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 )Nrh   -cz'import sys; sys.stderr.write('hello\n'))rm   c                  .                                    S r@   ro   rd   s   r$   rp   z,SubprocessTest.test_stderr.<locals>.<lambda>   rq   r&   rs   rt   )	r	   ru   rv   rw   rz   rm   r{   rS   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	   
initializerz   uninitializeru   rv   set_exit_callbackstoprD   rS   
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   rz   r   ru   rv   wait_for_exitrS   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))rl   g?c                 ,                                     S r@   )r   )rG   r#   s    r$   rp   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   rz   r   ru   rv   rw   rl   rU   r   r   timesleepr   r   r[   r   SIGTERMrD   AssertionErrorr|   add_done_callbackrS   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)r/   )r	   r   rz   r   ru   rv   assertRaisesrx   CalledProcessErrorr   rS   	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_errorr/   )r	   r   rz   r   ru   rv   r   rS   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`   )"rB   r0   r   r   rx   ru   r   unittesttornado.httpclientr   r   tornado.httpserverr   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 @! @! @! @! @!] @! @! @! @! @!r&   