
    R?g,,                         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  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\RB                  5      5       r"\ " S S\5      5       r#g)    N)
HTTPClient	HTTPError)
HTTPServer)IOLoop)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    ;/usr/lib/python3/dist-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*   r1   /r   )r&   r1   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                   ^ ^^^	^
 [        [        S5         [        5       u  m
m	U	4S jm[        R                  " S5         [        SSS9nT R                  US L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 ! [         aY  nT R                  UR                  S5        T R                  [        5       S L 5        T
R                  5          S nAS S S 5        g S nAff = f! [*         a    [,        R.                  " 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   r6   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   r3   add_socketsasyncioEventwait)serverr&   socks    r'   f)ProcessTest.test_multi_process.<locals>.fR   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clientrC   s      r'   rT   -ProcessTest.test_multi_process.<locals>.fetcha   s@    &#)<<#==( &$+# % 1>&s    
AAAz/?exit=2T)rW   z/?exit=3r2   z/?exit=0z/?exit=4zexception in child process %d)exc_info)F)r   r   r   r   r:   r   
assertTrue
SystemExitassertEqualrU   r	   closerK   runr   r   r!   bodyassertNotEqualr   r    	Exceptionr7   r8   )r&   idrX   rP   rT   pidpid2rY   rC   rB   rO   s   `      @@@@r'   test_multi_process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''2 *d3HHQKS
 
     +	T 12

)
 
x  =rDQU
 
sP   *H/3F$5AH
7H/8C#H
$
H.AH5H/HH/
"H,,H//
H=r+   )	r,   r-   r.   r/   r3   r<   rg   r0   __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 rI   )proc	terminaterM   r&   subprocs     r'   term_and_waitSubprocessTest.term_and_wait   s"     r*   c              #     ^ ^#    [         R                  " 5       R                  R                  S5      (       a  [        R
                  " S5      e[        [        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LayeredTwistedIOLoopz9Subprocess tests not compatible with LayeredTwistedIOLoop-u-istdinstdoutstderrc                  &   > T R                  T5      $ rI   rr   rp   s   r'   <lambda>0SubprocessTest.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
addCleanuprz   r_   ry   
read_untilr$   r^   read_until_closer&   datarq   s   ` @r'   test_subprocessSubprocessTest.test_subprocess   sK    ""$--667MNN ##N  ^^T4(##$$$$	
 	;<,,-++,nn''00/0^^..u55z*nn''0012^^4466s#s   F?G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)Nrv   rw   rx   c                  &   > T R                  T5      $ rI   r}   rp   s   r'   r~   1SubprocessTest.test_close_stdin.<locals>.<lambda>   r   r*   r   r   )r
   r   r   r   r   r   r   rz   r   ry   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)Nrv   -cz'import sys; sys.stderr.write('hello\n'))r{   c                  &   > T R                  T5      $ rI   r}   rp   s   r'   r~   ,SubprocessTest.test_stderr.<locals>.<lambda>   r   r*   r   r   )	r
   r   r   r   r   r{   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stoprM   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))rz   g?c                 $   > TR                  5       $ rI   )r   )rP   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   rz   r_   r   r   timesleepr   r"   re   r   SIGTERMrM   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)r6   )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_errorr6   )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   r0   r+   r*   r'   rk   rk      s     $ $: & &  2 2 2&/P 5 5 ! !r*   rk   )$rK   r7   r   r   r   r   r   r   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   rk   r+   r*   r'   <module>r      s      	   
   4 ) !  ? ? ; P P + 3 n(## n nb I!] I! I!r*   