§
    ‹ŸjÁ)  ã                   ó$  — 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!dS )é    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                 óL   —  G d„ dt           ¦  «        }t          d|fg¦  «        S )Nc                   ó   — e Zd Zd„ ZdS )ú+ProcessTest.get_app.<locals>.ProcessHandlerc                 ó¸  — |                       dd ¦  «        r4t          j        t          |                       d¦  «        ¦  «        ¦  «         |                       dd ¦  «        rFt          j        t          j        ¦   «         t          |                       d¦  «        ¦  «        ¦  «         |                      t          t          j        ¦   «         ¦  «        ¦  «         d S )NÚexitÚsignal)Úget_argumentÚosÚ_exitÚintÚkillÚgetpidÚwriteÚstr)Úselfs    úf/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/test/process_test.pyÚgetz/ProcessTest.get_app.<locals>.ProcessHandler.get   s¯   € Ø×$Ò$ V¨TÑ2Ô2ð =õ ”H�S ×!2Ò!2°6Ñ!:Ô!:Ñ;Ô;Ñ<Ô<Ð<Ø×$Ò$ X¨tÑ4Ô4ð KÝ”G�BœI™KœK­¨T×->Ò->¸xÑ-HÔ-HÑ)IÔ)IÑJÔJÐJØ—
’
�3�rœy™{œ{Ñ+Ô+Ñ,Ô,Ð,Ð,Ð,ó    N)Ú__name__Ú
__module__Ú__qualname__r%   © r&   r$   ÚProcessHandlerr      s#   € € € € € ð-ð -ð -ð -ð -r&   r+   ú/r   )r#   r+   s     r$   Úget_appzProcessTest.get_app   sD   € ð	-ð 	-ð 	-ð 	-ð 	-�^ñ 	-ô 	-ð 	-õ ˜S .Ð1Ð2Ñ3Ô3Ð3r&   c                 ó  •— t          ¦   «         �;t          j        d¦  «         t          j        ¦   «          t	          j        d¦  «         t          j        d¦  «         t          ¦   «          	                    ¦   «          d S )Nz$aborting child process from tearDowné   r   )
r   ÚloggingÚerrorÚshutdownr   r   r   ÚalarmÚsuperÚtearDown)r#   Ú	__class__s    €r$   r5   zProcessTest.tearDown$   se   ø€ Ý‰9Œ9Ð õ ŒMÐ@ÑAÔAÐAÝÔÑÔÐÝŒH�Q‰KŒKˆKåŒ�Q‰ŒˆÝ‰Œ×ÒÑÔÐÐÐr&   c                 ó6  ‡ ‡‡‡	‡
— t          t          d¦  «        5  t          ¦   «         \  Š
Š	ˆ	fd„Št          j        d¦  «         	 t          dd¬¦  «        }‰                      |¦  «         t          j        d¦  «         ns# t          $ rf}‰                      |j	        d¦  «         ‰  
                    t          ¦   «         ¦  «         ‰
                     ¦   «          Y d }~d d d ¦  «         d S d }~ww xY w	 |dv rF‰                      |t          ¦   «         ¦  «         ˆ ˆ
fd„}t          j         |¦   «         ¦  «         �n|d	k    �r‰                      |t          ¦   «         ¦  «         ‰
                     ¦   «          t          t           ¦  «        Šdˆˆfd„	} |dd¬¦  «          |dd¬¦  «         t#           |d¦  «        j        ¦  «          |dd¬¦  «         t#           |d¦  «        j        ¦  «        } |dd¬¦  «         t#           |d¦  «        j        ¦  «        }‰                      ||¦  «          |dd¬¦  «         t)          j        d¦  «         n&# t,          $ r t/          j        d|d¬¦  «         ‚ w xY wd d d ¦  «         d S # 1 swxY w Y   d S )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          ‰                     ¦   «         ¦  «        } |                      ‰g¦  «         t          j        ¦   «                              ¦   «         ƒ d {V —† d S ©N)r   r-   Úadd_socketsÚasyncioÚEventÚwait)Úserverr#   Úsocks    €€r$   Úfz)ProcessTest.test_multi_process.<locals>.fQ   sb   øè è € Ý!+¨D¯LªL©N¬NÑ!;Ô!;˜Ø×*Ò*¨D¨6Ñ2Ô2Ð2Ý%œm™oœo×2Ò2Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r&   é   Fc                 óŽ   •— 	 ‰                       ‰| ¦  «        ¦  «        S # t          $ r}|r|j        dk    s‚ Y d }~d S d }~ww xY w)NiW  )Úfetchr   Úcode)ÚurlÚfail_okÚeÚclientr;   s      €€r$   rJ   z-ProcessTest.test_multi_process.<locals>.fetch`   se   ø€ ð&Ø#)§<¢<°°¸±´Ñ#=Ô#=Ð=øÝ(ð &ð &ð &Ø$+ð &°´¸#²°Ø %ð 1>°°°°°øøøøð&øøøs   ƒ! ¡
A«?¿A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   sw  øøøøø€ õ
 ÝÐQñ
ô 
ð L	ð L	õ *Ñ+Ô+‰JˆD�$ð>ð >ð >ð >ð >õ ŒL˜‰OŒOˆOð
Ý# A°AÐ6Ñ6Ô6�Ø×$Ò$ RÑ(Ô(Ð(Ý”˜Q‘”��øÝð ð ð ð × Ò  ¤¨Ñ+Ô+Ð+Ø×!Ò!¥'¡)¤)Ñ,Ô,Ð,Ø—
’
‘”�Ø���ð)L	ð L	ð L	ñ L	ô L	ð L	ð L	ð L	øøøøðøøøð7Ø˜�<�<Ø×$Ò$ R­©¬Ñ3Ô3Ð3ð5ð 5ð 5ð 5ð 5ð 5õ
 ”K  ¡¤Ñ$Ô$Ð$Ñ$Ø˜1’W‘WØ×$Ò$ R­©¬Ñ3Ô3Ð3Ø—J’J‘L”L�Lõ
 (Õ(=Ñ>Ô>�Fð&ð &ð &ð &ð &ð &ð &ð �E˜*¨dÐ3Ñ3Ô3Ð3Ø�E˜*¨dÐ3Ñ3Ô3Ð3õ ˜˜˜c™
œ
œÑ(Ô(Ð(ð �E˜*¨dÐ3Ñ3Ô3Ð3å˜e˜e C™jœjœoÑ.Ô.�CØ�E˜*¨dÐ3Ñ3Ô3Ð3Ý˜u˜u S™zœzœÑ/Ô/�DØ×'Ò'¨¨TÑ2Ô2Ð2ð �E˜*¨dÐ3Ñ3Ô3Ð3å”H˜Q‘K”K�KøøÝð ð ð Ý”Ð=¸rÈDÐQÑQÔQÐQØðøøøðUL	ð L	ð L	ñ L	ô L	ð L	ð L	ð L	ð L	ð L	ð L	ð L	øøøð L	ð L	ð L	ð L	ð L	ð L	sU   ›+JÁ:BÂJÂ
C2ÂAC-ÃJÃ-C2Ã2JÃ6E$IÉJÉ#I>É>JÊJÊJ)r'   r(   r)   r-   r5   r]   Ú__classcell__)r6   s   @r$   r   r      s]   ø€ € € € € ð4ð 4ð 4ðð ð ð ð ðQð Qð Qð Qð Qð Qð 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d
S )ÚSubprocessTestc                 ój   — |j                              ¦   «          |j                              ¦   «          d S r@   )ÚprocÚ	terminaterD   ©r#   Úsubprocs     r$   Úterm_and_waitzSubprocessTest.term_and_wait‰   s0   € ØŒ×ÒÑ Ô Ð ØŒ×ÒÑÔÐÐÐr&   c              #   óØ  ‡ ‡K  — t          t          j        dddgt           j        t           j        t          j        ¬¦  «        Š‰                      ˆ ˆfd„¦  «         ‰                      ‰j        j        ¦  «         ‰                      ‰j	        j        ¦  «         ‰j         
                    d¦  «        V — ‰j	                             d¦  «         ‰j         
                    d¦  «        V —}‰                      |d	¦  «         ‰j         
                    d¦  «        V — ‰j	                             d
¦  «         ‰j                             ¦   «         V —}‰                      |d¦  «         d S )Nú-uú-iú-I©ÚstdinÚstdoutÚstderrc                  ó.   •— ‰                       ‰¦  «        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�   sW  øøè è € åÝŒ^˜T 4¨Ð.ÝÔ#ÝÔ$ÝÔ$ð	
ñ 
ô 
ˆð 	�ŠÐ;Ð;Ð;Ð;Ð;Ñ<Ô<Ð<Ø�Š˜œÔ,Ñ-Ô-Ð-Ø�Š˜œÔ+Ñ,Ô,Ð,ØŒn×'Ò'¨Ñ0Ô0Ð0Ð0Ð0ØŒ×ÒÐ/Ñ0Ô0Ð0Ø”^×.Ò.¨uÑ5Ô5Ð5Ð5ˆØ×Ò˜˜zÑ*Ô*Ð*àŒn×'Ò'¨Ñ0Ô0Ð0Ð0Ð0ØŒ×ÒÐ1Ñ2Ô2Ð2Ø”^×4Ò4Ñ6Ô6Ð6Ð6ˆØ×Ò˜˜sÑ#Ô#Ð#Ð#Ð#r&   c              #   óŠ  ‡ ‡K  — t          t          j        dddgt           j        t           j        t          j        ¬¦  «        Š‰                      ˆ ˆfd„¦  «         ‰j                             d¦  «        V — ‰j	         
                    ¦   «          ‰j                             ¦   «         V —}‰                      |d¦  «         d S )Nrh   ri   rj   rk   c                  ó.   •— ‰                       ‰¦  «        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×'Ò'¨Ñ0Ô0Ð0Ð0Ð0ØŒ×ÒÑÔÐØ”^×4Ò4Ñ6Ô6Ð6Ð6ˆØ×Ò˜˜uÑ%Ô%Ð%Ð%Ð%r&   c              #   ó(  ‡ ‡K  — t          t          j        dddgt           j        ¬¦  «        Š‰                      ˆ ˆfd„¦  «         ‰j                             d¦  «        V —}‰                      |d¦  «         ‰j                             ¦   «          d S )Nrh   ú-cz'import sys; sys.stderr.write('hello\n'))rn   c                  ó.   •— ‰                       ‰¦  «        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±   sŸ   øøè è € õ ÝŒ^˜T 4Ð)SÐTÝÔ$ð
ñ 
ô 
ˆð 	�ŠÐ;Ð;Ð;Ð;Ð;Ñ<Ô<Ð<Ø”^×.Ò.¨uÑ5Ô5Ð5Ð5ˆØ×Ò˜˜zÑ*Ô*Ð*àŒ×ÒÑÔÐÐÐr&   c                 ó`  — t          j        ¦   «          |                      t           j        ¦  «         t          t          j        ddg¦  «        }|                     | j        ¦  «         |                      ¦   «         }|  	                    |d¦  «         |  	                    |j
        |¦  «         d S ©Nr…   Úpassr   )r	   Ú
initializer{   Úuninitializerv   rw   Úset_exit_callbackÚstoprD   rS   Ú
returncode©r#   re   Úrets      r$   Útest_sigchildzSubprocessTest.test_sigchild¿   s”   € ÝÔÑÔÐØ�Š�
Ô/Ñ0Ô0Ð0Ý�cœn¨d°FÐ;Ñ<Ô<ˆØ×!Ò! $¤)Ñ,Ô,Ð,Ø�iŠi‰kŒkˆØ×Ò˜˜aÑ Ô Ð Ø×Ò˜Ô+¨SÑ1Ô1Ð1Ð1Ð1r&   c              #   ó4  K  — t          j        ¦   «          |                      t           j        ¦  «         t          t          j        ddg¦  «        }|                     ¦   «         V —}|                      |d¦  «         |                      |j        |¦  «         d S r‰   )	r	   r‹   r{   rŒ   rv   rw   Úwait_for_exitrS   r�   r�   s      r$   Útest_sigchild_futurez#SubprocessTest.test_sigchild_futureÈ   sŒ   è è € åÔÑÔÐØ�Š�
Ô/Ñ0Ô0Ð0Ý�cœn¨d°FÐ;Ñ<Ô<ˆØ×)Ò)Ñ+Ô+Ð+Ð+ˆØ×Ò˜˜aÑ Ô Ð Ø×Ò˜Ô+¨SÑ1Ô1Ð1Ð1Ð1r&   c                 óB  ‡ — t          j        ¦   «          ‰                      t           j        ¦  «         t          t          j        ddgt           j        ¬¦  «        }‰                      |j        j        ¦  «         | 	                    ‰ j
        ¦  «         t          j        d¦  «         t          j        |j        t           j        ¦  «         	 ‰                      ¦   «         }n€# t&          $ rs |j                             ¦   «         }|                     ˆ fd„¦  «         	 ‰                      ¦   «          t'          d¦  «        ‚# t&          $ r t'          d¦  «        ‚w xY ww xY w‰                      |j        |¦  «         ‰                      |t           j         ¦  «         d S )Nr…   zimport time; time.sleep(30))rm   gš™™™™™¹?c                 ó,   •— ‰                      ¦   «         S r@   )rŽ   )rG   r#   s    €r$   rq   z5SubprocessTest.test_sigchild_signal.<locals>.<lambda>í   s   ø€ ¨D¯IªI©K¬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Ñ   s˜  ø€ ÝÔÑÔÐØ�Š�
Ô/Ñ0Ô0Ð0ÝÝŒ^˜TÐ#@ÐAÝÔ$ð
ñ 
ô 
ˆð 	�Š˜œÔ,Ñ-Ô-Ð-Ø×!Ò! $¤)Ñ,Ô,Ð,õ 	Œ
�3‰Œˆå
Œ�”�Vœ^Ñ,Ô,Ð,ð	Ø—)’)‘+”+ˆCˆCøÝð 	ð 	ð 	ð ”.×1Ò1Ñ3Ô3ˆCØ×!Ò!Ð"7Ð"7Ð"7Ð"7Ñ8Ô8Ð8ðØ—	’	‘”�õ %ØVñô ð øõ "ð Gð Gð GÝ$Ð%EÑFÔFÐFðGøøøð	øøøð" 	×Ò˜Ô+¨SÑ1Ô1Ð1Ø×Ò˜�vœ~˜oÑ.Ô.Ð.Ð.Ð.s$   ÃC# Ã#;E ÄEÄ3E ÅEÅE c              #   ó€  K  — t          j        ¦   «          |                      t           j        ¦  «         t          t          j        ddg¦  «        }|                      t          j        ¦  «        5 }| 	                    ¦   «         V — d d d ¦  «         n# 1 swxY w Y   |  
                    |j        j        d¦  «         d S )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Ô0Ð0Ý�cœn¨dÐ4MÐNÑOÔOˆØ×Ò�zÔ<Ñ=Ô=ð 	*ÀØ×'Ò'Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*ð 	*ñ 	*ô 	*ð 	*ð 	*ð 	*ð 	*ð 	*ð 	*øøøð 	*ð 	*ð 	*ð 	*à×Ò˜œÔ0°!Ñ4Ô4Ð4Ð4Ð4s   Á0BÂBÂBc              #   ó  K  — t          j        ¦   «          |                      t           j        ¦  «         t          t          j        ddg¦  «        }|                     d¬¦  «        V —}|                      |d¦  «         d S )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  sy   è è € åÔÑÔÐØ�Š�
Ô/Ñ0Ô0Ð0Ý�cœn¨dÐ4MÐNÑOÔOˆØ×)Ò)°eÐ)Ñ<Ô<Ð<Ð<ˆØ×Ò˜˜aÑ Ô Ð Ð Ð r&   N)r'   r(   r)   rf   r   r€   rƒ   r‡   r’   r•   rž   r¥   r¨   r*   r&   r$   r`   r`   ‡   sä   € € € € € ðð ð ð ð$ð $ñ „Xð$ð( ð&ð &ñ „Xð&ð ðð ñ „Xðð2ð 2ð 2ð ð2ð 2ñ „Xð2ð&/ð &/ð &/ðP ð5ð 5ñ „Xð5ð ð!ð !ñ „Xð!ð !ð !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Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ +Ð +Ð +Ð +Ð +Ð +Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð ðnð nð nð nð n�(Ô#ñ nô nñ „ðnðb ð@!ð @!ð @!ð @!ð @!�]ñ @!ô @!ñ „ð@!ð @!ð @!r&   