Ë
    êmxiÁ)  ã                   ó  — 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    úP/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/test/process_test.pyÚgetz/ProcessTest.get_app.<locals>.ProcessHandler.get   s{   € Ø×$Ñ$ V¨TÔ2ô —H‘HœS ×!2Ñ!2°6Ó!:Ó;Ô<Ø×$Ñ$ X¨tÔ4Ü—G‘GœBŸI™I›K¬¨T×->Ñ->¸xÓ-HÓ)IÔJØ—
‘
œ3œrŸy™y›{Ó+Õ,ó    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Ð ô �M‰MÐ@ÔAÜ×ÑÔÜ�H‰H�QŒKä�‰�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?   øè ø€ Ü!+¨D¯L©L«NÓ!;˜Ø×*Ñ*¨D¨6Ô2Ü%Ÿm™m›o×2Ñ2Ó4×4Ò4ús   ƒ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	ô *Ó+‰JˆD�$ô>ô �L‰L˜ŒOð
Ü# A°AÔ6�Ø×$Ñ$ RÔ(Ü—‘˜Q”ð7Ø˜‘<Ø×$Ñ$ R¬«Ô3õ5ô
 —K‘K¡£Õ$Ø˜1’WØ×$Ñ$ R¬«Ô3Ø—J‘J”Lô
 (Ô(=Ó>�Fö&ñ ˜*¨dÕ3Ù˜*¨dÕ3ô ™˜c›
Ÿ™Ô(ñ ˜*¨dÕ3ä™e C›jŸo™oÓ.�CÙ˜*¨dÕ3Ü™u S›zŸ™Ó/�DØ×'Ñ'¨¨TÔ2ñ ˜*¨dÕ3ä—H‘H˜Q”K÷SL	ð L	øô ò ð × Ñ  §¡¨Ô+Ø×!Ñ!¤'£)Ô,Ø—
‘
”Û÷)L	ð L	ûðûôx ò Ü—‘Ð=¸rÈDÕ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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ú-I©ÚstdinÚstdoutÚstderrc                  ó&   •— ‰ j                  ‰«      S r@   ©rf   rd   s   €€r$   ú<lambda>z0SubprocessTest.test_subprocess.<locals>.<lambda>•   ó   ø€  × 2Ñ 2°7Ó ;€ r&   ó   >>> s   print('hello')
ó   
ó   hello
s   raise SystemExit
r&   )r	   ÚsysÚ
executableÚSTREAMÚ
subprocessÚSTDOUTÚ
addCleanuprm   rU   rl   Ú
read_untilr!   rS   Úread_until_close©r#   Údatare   s   ` @r$   Útest_subprocesszSubprocessTest.test_subprocess�   s  ùè ø€ äÜ�^‰^˜T 4¨Ð.Ü×#Ñ#Ü×$Ñ$Ü×$Ñ$ô	
ˆð 	�‰Ô;Ô<Ø�‰˜Ÿ™×,Ñ,Ô-Ø�‰˜Ÿ™×+Ñ+Ô,Ø�n‰n×'Ñ'¨Ó0Ò0Ø�‰×ÑÐ/Ô0Ø—^‘^×.Ñ.¨uÓ5Ñ5ˆØ×Ñ˜˜zÔ*à�n‰n×'Ñ'¨Ó0Ò0Ø�‰×ÑÐ1Ô2Ø—^‘^×4Ñ4Ó6Ñ6ˆØ×Ñ˜˜sÕ#ùs   „E9E=c              #   óš  ‡ ‡K  — t        t        j                  d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   rk   c                  ó&   •— ‰ j                  ‰«      S r@   rp   rd   s   €€r$   rq   z1SubprocessTest.test_close_stdin.<locals>.<lambda>«   rr   r&   rs   rt   )r	   rv   rw   rx   ry   rz   r{   rm   r|   rl   rU   r}   rS   r~   s   ` @r$   Útest_close_stdinzSubprocessTest.test_close_stdin¢   s—   ùè ø€ ô Ü�^‰^˜T 4¨Ð.Ü×#Ñ#Ü×$Ñ$Ü×$Ñ$ô	
ˆð 	�‰Ô;Ô<Ø�n‰n×'Ñ'¨Ó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'))rn   c                  ó&   •— ‰ j                  ‰«      S r@   rp   rd   s   €€r$   rq   z,SubprocessTest.test_stderr.<locals>.<lambda>¹   rr   r&   rt   ru   )	r	   rv   rw   rx   r{   rn   r|   rS   rU   r~   s   ` @r$   Útest_stderrzSubprocessTest.test_stderr±   ss   ùè ø€ ô Ü�^‰^˜T 4Ð)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{   Úuninitializerv   rw   Úset_exit_callbackÚstoprD   rS   Ú
returncode©r#   re   Úrets      r$   Útest_sigchildzSubprocessTest.test_sigchild¿   sx   € Ü×ÑÔØ�‰œ
×/Ñ/Ô0ÜœcŸn™n¨d°FÐ;Ó<ˆØ×!Ñ! $§)¡)Ô,Ø�i‰i‹kˆØ×Ñ˜˜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Œ   rv   rw   Úwait_for_exitrS   r�   r�   s      r$   Útest_sigchild_futurez#SubprocessTest.test_sigchild_futureÈ   sp   è ø€ ä×ÑÔØ�‰œ
×/Ñ/Ô0ÜœcŸn™n¨d°FÐ;Ó<ˆØ×)Ñ)Ó+Ñ+ˆØ×Ñ˜˜aÔ Ø×Ñ˜×+Ñ+¨SÕ1ùs   ‚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 r@   )rŽ   )rG   r#   s    €r$   rq   z5SubprocessTest.test_sigchild_signal.<locals>.<lambda>í   s   ø€ ¨D¯I©I«K€ r&   z=subprocess closed stdout but failed to get termination signalzsubprocess failed to terminate)r	   r‹   r{   rŒ   rv   rw   rx   rm   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Ó3ˆCØ×!Ñ!Ó"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‹   r{   rŒ   rv   rw   ÚassertRaisesry   ÚCalledProcessErrorr”   rS   Ú	exceptionr�   )r#   re   Úcms      r$   Útest_wait_for_exit_raisez'SubprocessTest.test_wait_for_exit_raiseù   s�   è ø€ ä×ÑÔØ�‰œ
×/Ñ/Ô0ÜœcŸn™n¨dÐ4MÐ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‹   r{   rŒ   rv   rw   r”   rS   r�   s      r$   Ú!test_wait_for_exit_raise_disabledz0SubprocessTest.test_wait_for_exit_raise_disabled  s`   è ø€ ä×ÑÔØ�‰œ
×/Ñ/Ô0ÜœcŸn™n¨dÐ4MÐ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   ry   rv   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&   