
    Xh)                        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!y)    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                 <     G d dt               }t        d|fg      S )Nc                       e Zd Zd Zy)+ProcessTest.get_app.<locals>.ProcessHandlerc                 ~   | j                  dd       r-t        j                  t        | j                  d                   | j                  dd       r@t        j                  t        j
                         t        | j                  d                   | j                  t        t        j
                                      y )Nexitsignal)get_argumentos_exitintkillgetpidwritestr)selfs    M/var/www/html/myenv/lib/python3.12/site-packages/tornado/test/process_test.pygetz/ProcessTest.get_app.<locals>.ProcessHandler.get   s{    $$VT2 HHS!2!26!:;<$$Xt4GGBIIKT->->x-H)IJ

3ryy{+,    N)__name__
__module____qualname__r%    r&   r$   ProcessHandlerr      s    -r&   r+   /r   )r#   r+   s     r$   get_appzProcessTest.get_app   s#    	-^ 	- S.1233r&   c                     t               >t        j                  d       t        j                          t	        j
                  d       t        j                  d       t        | %          y )Nz$aborting child process from tearDown   r   )
r   loggingerrorshutdownr   r   r   alarmsupertearDown)r#   	__class__s    r$   r5   zProcessTest.tearDown$   sG    9  MM@AHHQKQr&   c                 ~   	
 t        t        d      5  t               \  
		fdt        j                  d       	 t        dd      } j                  |       t        j                  d       	 |dv r; j                  |t                       
fd}t        j                   |              n|d	k(  r j                  |t                      
j                          t        t               dfd
	} |dd        |dd       t#         |d      j$                          |dd       t#         |d      j$                        } |dd       t#         |d      j$                        } j'                  ||        |dd       t)        j*                  d       d d d        y # t        $ rW} j                  |j                  d        j                  t                      
j                          Y d }~d d d        y d }~ww xY w# t,        $ r t/        j0                  d|d        w xY w# 1 sw Y   y xY w)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        j                               } | j                  g       t        j                         j                          d {    y 7 wN)r   r-   add_socketsasyncioEventwait)serverr#   socks    r$   fz)ProcessTest.test_multi_process.<locals>.fQ   s?     !+DLLN!;**D62%mmo22444s   AAAA   c                     	 j                   |             S # t        $ r}|r|j                  dk(  s Y d }~y d }~ww xY w)NiW  )fetchr   code)urlfail_okeclientr;   s      r$   rJ   z-ProcessTest.test_multi_process.<locals>.fetch`   s@    &#)<<#==( &$+# % 1>&s    	?:?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   s   
 Q
 L	 *+JD$> LLO
#AA6$$R(Q7<$$R35
 KK$1W$$R3JJL
 ((=>F& *d3*d3 c
( *d3eCjoo.C*d3uSz/D''T2 *d3HHQKSL	 L	     +!!'),

)L	 L	x  =rDQUL	 L	sB   (H33F*3D.H*	H
3AH8H3H

H3#H00H33H<)r'   r(   r)   r-   r5   r]   __classcell__)r6   s   @r$   r   r      s    4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y
)SubprocessTestc                 l    |j                   j                          |j                   j                          y r@   )proc	terminaterD   r#   subprocs     r$   term_and_waitzSubprocessTest.term_and_wait   s"     r&   c              #      K   t        t        j                  ddgt         j                  t         j                  t        j
                         j                   fd        j                  j                  j                          j                  j                  j                         j                  j                  d       j                  j                  d       j                  j                  d      } j                  |d       j                  j                  d       j                  j                  d	       j                  j                         } j                  |d
       y w)N-u-istdinstdoutstderrc                  &     j                        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   s    ^^T4(##$$$$	
 	;<,,-++,nn''00/0^^..u55z*nn''0012^^4466s#s   E8E<c              #      K   t        t        j                  ddgt         j                  t         j                  t        j
                         j                   fd       j                  j                  d       j                  j                          j                  j                         } j                  |d       y w)Nrh   ri   rj   c                  &     j                        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(##$$$$	
 	;<nn''00^^4466u%s   CC
c              #   &   K   t        t        j                  dddgt         j                         j	                   fd       j
                  j                  d      } j                  |d       j
                  j                          y w)Nrh   -cz'import sys; sys.stderr.write('hello\n'))rm   c                  &     j                        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   ss      ^^T4)ST$$
 	;<^^..u55z*s   BBc                 T   t        j                          | j                  t         j                         t        t        j
                  ddg      }|j                  | j                         | j                         }| j                  |d       | j                  |j                  |       y Nr   passr   )r	   
initializerz   uninitializeru   rv   set_exit_callbackstoprD   rS   
returncoder#   re   rets      r$   test_sigchildzSubprocessTest.test_sigchild   sx    
//0cnndF;<!!$)),iika ++S1r&   c              #   *  K   t        j                          | j                  t         j                         t        t        j
                  ddg      }|j                         }| j                  |d       | j                  |j                  |       y wr   )	r	   r   rz   r   ru   rv   wait_for_exitrS   r   r   s      r$   test_sigchild_futurez#SubprocessTest.test_sigchild_future   sp     
//0cnndF;<))++a ++S1s   BBc                 D    t        j                           j                  t         j                         t        t        j
                  ddgt         j                        } j                  |j                  j                         |j                   j                         t        j                  d       t        j                  |j                  t         j"                         	  j%                         } j-                  |j.                  |        j-                  |t         j"                          y # t&        $ rc |j                  j)                         }|j+                   fd       	  j%                          t'        d      # t&        $ r t'        d      w xY ww xY w)Nr   zimport time; time.sleep(30))rl   g?c                 $    j                         S r@   )r   )rG   r#   s    r$   rp   z5SubprocessTest.test_sigchild_signal.<locals>.<lambda>   s    DIIK 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   sA   
//0^^T#@A$$
 	,,-!!$)), 	

3
V^^,	))+C$ 	++S1v~~o.%  	 ..113C!!"78		 %V  " G$%EFFG	s$   %D3 37F+F;FFFc              #     K   t        j                          | j                  t         j                         t        t        j
                  ddg      }| j                  t        j                        5 }|j                          d d d        | j                  j                  j                  d       y # 1 sw Y   0xY ww)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cnnd4MNOz<<= 	*''))	*00!4	* 	*s   A/B?1B3/B?3B<8B?c              #      K   t        j                          | j                  t         j                         t        t        j
                  ddg      }|j                  d      }| j                  |d       y w)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  s`     
//0cnnd4MNO))e)<<a s   A7A9N)r'   r(   r)   rf   r   r   r   r   r   r   r   r   r   r*   r&   r$   r`   r`      s     $ $( & &  2 2 2&/P 5 5 ! !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 )  ? ? ; P P + 3 n(## n nb @!] @! @!r&   