
    ^h)                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
  S SKJr  S SKJr  S SKJrJrJr  S SKJr  S SKJrJrJrJr  S SKJr  S S	KJrJr  \ " S
 S\R>                  5      5       r \ " S S\5      5       r!g)    N)
HTTPClient	HTTPError)
HTTPServer)gen_log)fork_processestask_id
Subprocess)SimpleAsyncHTTPClient)bind_unused_port	ExpectLogAsyncTestCasegen_test)skipIfNonUnixRequestHandlerApplicationc                   4   ^  \ rS rSrS rU 4S jrS rSrU =r$ )ProcessTest   c                 <     " S S[         5      n[        SU4/5      $ )Nc                       \ rS rSrS rSrg)+ProcessTest.get_app.<locals>.ProcessHandler   c                    U R                  SS 5      (       a.  [        R                  " [        U R                  S5      5      5        U R                  SS 5      (       aB  [        R                  " [        R
                  " 5       [        U R                  S5      5      5        U R                  [        [        R
                  " 5       5      5        g )Nexitsignal)get_argumentos_exitintkillgetpidwritestr)selfs    S/home/james-whalen/.local/lib/python3.13/site-packages/tornado/test/process_test.pyget/ProcessTest.get_app.<locals>.ProcessHandler.get   s    $$VT22 HHS!2!26!:;<$$Xt44GGBIIKT->->x-H)IJ

3ryy{+,     N)__name__
__module____qualname____firstlineno__r'   __static_attributes__r*   r)   r&   ProcessHandlerr      s    -r)   r0   /r   )r%   r0   s     r&   get_appProcessTest.get_app   s#    	-^ 	- S.1233r)   c                    > [        5       bA  [        R                  " S5        [        R                  " 5         [        R
                  " S5        [        R                  " S5        [        TU ]%  5         g )Nz$aborting child process from tearDown   r   )
r   loggingerrorshutdownr   r   r   alarmsupertearDown)r%   	__class__s    r&   r;   ProcessTest.tearDown$   sG    9  MM@AHHQKQr)   c                 x  ^ ^^^	^
 [        [        S5         [        5       u  m
m	U	4S jm[        R                  " S5         [        SSS9nT R                  U5        [        R                  " S5         US;   a=  T R                  U[        5       5        U U
4S jn[        R                  " U" 5       5        OUS	:X  a  T R                  U[        5       5        T
R                  5         [        [         5      mSUU4S
 jjnU" SSS9  U" SSS9  [#        U" S5      R$                  5        U" SSS9  [#        U" S5      R$                  5      nU" SSS9  [#        U" S5      R$                  5      nT R'                  XV5        U" SSS9  [(        R*                  " S5        S S S 5        g ! [         aW  nT R                  UR                  S5        T R                  [        5       5        T
R                  5          S nAS S S 5        g S nAff = f! [,         a    [.        R0                  " SUSS9  e f = f! , (       d  f       g = f)Nz:(Starting .* processes|child .* exited|uncaught exception)c                    > STU 4-  $ )Nzhttp://127.0.0.1:%d%sr*   )pathports    r&   get_url/ProcessTest.test_multi_process.<locals>.get_url=   s    .$==r)         )max_restartsr   )r   r5   c                     >#    [        TR                  5       5      n U R                  T/5        [        R                  " 5       R                  5       I S h  vN   g  N7fN)r   r2   add_socketsasyncioEventwait)serverr%   socks    r&   f)ProcessTest.test_multi_process.<locals>.fQ   s>     !+DLLN!;**D62%mmo22444s   AAAA   c                    >  TR                  T" U 5      5      $ ! [         a"  nU(       a  UR                  S:X  d  e  S nAg S nAff = f)NiW  )fetchr   code)urlfail_okeclientrB   s      r&   rS   -ProcessTest.test_multi_process.<locals>.fetch`   s@    &#)<<#==( &$+# % 1>&s    
AAAz/?exit=2T)rV   z/?exit=3r1   z/?exit=0z/?exit=4zexception in child process %d)exc_info)F)r   r   r   r   r9   r   assertIsNotNone
SystemExitassertEqualrT   assertIsNoner   closerJ   runr   r
   r    bodyassertNotEqualr   r   	Exceptionr6   r7   )r%   idrW   rO   rS   pidpid2rX   rB   rA   rN   s   `      @@@@r&   test_multi_processProcessTest.test_multi_process3   s   
 Q
 *+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''2 *d3HHQKS
 
     +!!'),

)
 
x  =rDQU
 
sP   *H+1F"3AH5H+6C#H"
H,AG>1H+>HH+"H((H++
H9r*   )	r+   r,   r-   r.   r2   r;   rg   r/   __classcell__)r<   s   @r&   r   r      s    4Q Qr)   r   c                       \ rS rSrS r\S 5       r\S 5       r\S 5       rS r	\S 5       r
S r\S	 5       r\S
 5       rSrg)SubprocessTest   c                 l    UR                   R                  5         UR                   R                  5         g rH   )proc	terminaterL   r%   subprocs     r&   term_and_waitSubprocessTest.term_and_wait   s"     r)   c              #     ^ ^#    [        [        R                  SS/[         R                  [         R                  [        R
                  S9mT R                  U U4S j5        T R                  TR                  R                  5        T R                  TR                  R                  5        TR                  R                  S5      v   TR                  R                  S5        TR                  R                  S5      v nT R                  US5        TR                  R                  S5      v   TR                  R                  S	5        TR                  R                  5       v nT R                  US
5        g 7f)N-u-istdinstdoutstderrc                  &   > T R                  T5      $ rH   rr   rp   s   r&   <lambda>0SubprocessTest.test_subprocess.<locals>.<lambda>        2 27 ;r)      >>> s   print('hello')
   
   hello
s   raise SystemExit
r)   )r	   sys
executableSTREAM
subprocessSTDOUT
addCleanupry   r_   rx   
read_untilr#   r]   read_until_closer%   datarq   s   ` @r&   test_subprocessSubprocessTest.test_subprocess   s    ^^T4(##$$$$	
 	;<,,-++,nn''00/0^^..u55z*nn''0012^^4466s#s   E6E:c              #     ^ ^#    [        [        R                  SS/[         R                  [         R                  [        R
                  S9mT R                  U U4S j5        TR                  R                  S5      v   TR                  R                  5         TR                  R                  5       v nT R                  US5        g 7f)Nru   rv   rw   c                  &   > T R                  T5      $ rH   r|   rp   s   r&   r}   1SubprocessTest.test_close_stdin.<locals>.<lambda>   r   r)   r   r   )r	   r   r   r   r   r   r   ry   r   rx   r_   r   r]   r   s   ` @r&   test_close_stdinSubprocessTest.test_close_stdin   s      ^^T4(##$$$$	
 	;<nn''00^^4466u%s   CCc              #   "  ^ ^#    [        [        R                  SSS/[         R                  S9mT R	                  U U4S j5        TR
                  R                  S5      v nT R                  US5        TR
                  R                  5         g 7f)Nru   -cz'import sys; sys.stderr.write('hello\n'))rz   c                  &   > T R                  T5      $ rH   r|   rp   s   r&   r}   ,SubprocessTest.test_stderr.<locals>.<lambda>   r   r)   r   r   )	r	   r   r   r   r   rz   r   r]   r_   r   s   ` @r&   test_stderrSubprocessTest.test_stderr   sr      ^^T4)ST$$
 	;<^^..u55z*s   BBc                 V   [         R                  " 5         U R                  [         R                  5        [        [        R
                  SS/5      nUR                  U R                  5        U R                  5       nU R                  US5        U R                  UR                  U5        g Nr   passr   )r	   
initializer   uninitializer   r   set_exit_callbackstoprL   r]   
returncoder%   rq   rets      r&   test_sigchildSubprocessTest.test_sigchild   sx    
//0cnndF;<!!$)),iika ++S1r)   c              #   ,  #    [         R                  " 5         U R                  [         R                  5        [        [        R
                  SS/5      nUR                  5       v nU R                  US5        U R                  UR                  U5        g 7fr   )	r	   r   r   r   r   r   wait_for_exitr]   r   r   s      r&   test_sigchild_future#SubprocessTest.test_sigchild_future   so     
//0cnndF;<))++a ++S1s   BBc                 J  ^  [         R                  " 5         T R                  [         R                  5        [        [        R
                  SS/[         R                  S9nT R                  UR                  R                  5        UR                  T R                  5        [        R                  " S5        [        R                  " UR                  [         R"                  5         T R%                  5       nT R-                  UR.                  U5        T R-                  U[         R"                  * 5        g ! [&         ae    UR                  R)                  5       nUR+                  U 4S j5         T R%                  5         ['        S5      e! [&         a    ['        S5      ef = ff = f)Nr   zimport time; time.sleep(30))ry   g?c                 $   > TR                  5       $ rH   )r   )rO   r%   s    r&   r}   5SubprocessTest.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   r   r   r   ry   r_   r   r   timesleepr   r!   re   r   SIGTERMrL   AssertionErrorr   add_done_callbackr]   r   )r%   rq   r   futs   `   r&   test_sigchild_signal#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 39F"-F=F"FF"c              #     #    [         R                  " 5         U R                  [         R                  5        [        [        R
                  SS/5      nU R                  [        R                  5       nUR                  5       v   S S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= f7f)Nr   import sys; sys.exit(1)r5   )r	   r   r   r   r   r   assertRaisesr   CalledProcessErrorr   r]   	exceptionr   )r%   rq   cms      r&   test_wait_for_exit_raise'SubprocessTest.test_wait_for_exit_raise   s     
//0cnnd4MNOz<<='')) >00!4 >=s   A0C2B4/C4
C>Cc              #      #    [         R                  " 5         U R                  [         R                  5        [        [        R
                  SS/5      nUR                  SS9v nU R                  US5        g 7f)Nr   r   F)raise_errorr5   )r	   r   r   r   r   r   r   r]   r   s      r&   !test_wait_for_exit_raise_disabled0SubprocessTest.test_wait_for_exit_raise_disabled  s_     
//0cnnd4MNO))e)<<a s   A5A7r*   N)r+   r,   r-   r.   rr   r   r   r   r   r   r   r   r   r   r/   r*   r)   r&   rk   rk      s     $ $( & &  2 2 2&/P 5 5 ! !r)   rk   )"rJ   r6   r   r   r   r   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   rk   r*   r)   r&   <module>r      s~      	   
   4 )  ? ? ; P P + 3 n(## n nb @!] @! @!r)   