
    g,,                         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jB                               Z"e G d de             Z#y)    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                 <     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    N/var/www/openai/venv/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%   r6   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                  |d u       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        $ rY} j                  |j                  d        j                  t               d u        
j                          Y d }~d d d        y d }~ww xY w# t*        $ r t-        j.                  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   r0   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>.fR   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%   rK   z-ProcessTest.test_multi_process.<locals>.fetcha   s@    &#)<<#==( &$+# % 1>&s    	?:?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
 *+JD$> LLO
#AA6$/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
 
     +	T 12

)
 
x  =rDQU
 
sB   (H75F,5D.H,	H5AH	<H7	HH7#H44H77I )r(   r)   r*   r.   r6   r]   __classcell__)r7   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 rA   )proc	terminaterE   r$   subprocs     r%   term_and_waitzSubprocessTest.term_and_wait   s"     r'   c              #      K   t        j                         j                  j                  d      rt	        j
                  d      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LayeredTwistedIOLoopz9Subprocess tests not compatible with LayeredTwistedIOLoop-u-istdinstdoutstderrc                  &     j                        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   sI    ""$--667MN ##N  ^^T4(##$$$$	
 	;<,,-++,nn''00/0^^..u55z*nn''0012^^4466s#s   F:F>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)Nri   rj   rk   c                  &     j                        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(##$$$$	
 	;<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)Nri   -cz'import sys; sys.stderr.write('hello\n'))rn   c                  &     j                        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   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
   
initializer   uninitializerz   r{   set_exit_callbackstoprE   rT   
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   r   r   rz   r{   wait_for_exitrT   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))rm   g?c                 $    j                         S rA   )r   )rH   r$   s    r%   rq   z5SubprocessTest.test_sigchild_signal.<locals>.<lambda>   s    DIIKr'   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   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)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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_errorr0   )r
   r   r   r   rz   r{   r   rT   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`   )$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 ) !  ? ? ; P P + 3 n(## n nb I!] I! I!r'   