
    2hh                        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  S SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  \R"                  (       d  \R$                  " S5      e\R&                  (       a  S SKrOS S	KJr  \R,                  " S
S9(       a  \R$                  " S5      e\R.                  SS/r\R.                  SSR3                  S5      /rS r " S S\R8                  5      r " S S\R<                  5      r " S S5      r \RB                  S:w  a   " S S\ 5      r" " S S\"\R<                  5      r# " S S\"\R<                  5      r$ " S S \R<                  5      r% " S! S"\"\R<                  5      r&\RN                  " \RP                  " 5       S#5       " S$ S%\"\R<                  5      5       r) " S& S'\R<                  5      r*O " S( S)\ \R<                  5      r+\,S*:X  a  \RZ                  " 5         gg)+    N)mock)base_subprocess)
subprocess)utils)support)	os_helperztest module requires subprocess)unix_eventsT)addressz#Exposes ASAN flakiness in GitHub CI-czimport time; time.sleep(3600);)
import syszdata = sys.stdin.buffer.read()zsys.stdout.buffer.write(data)c                  0    [         R                  " S 5        g N)asyncioset_event_loop_policy     J/opt/python-3.13.8/usr/lib/python3.13/test/test_asyncio/test_subprocess.pytearDownModuler   '   s    !!$'r   c                       \ rS rSrS rSrg)TestSubprocessTransport+   c                     [         R                  " 5       U l        S U R                  l        S U R                  l        S U R                  l        SU R                  l        g )N)r   Mock_procstdinstdoutstderrpid)selfargskwargss      r   _startTestSubprocessTransport._start,   s>    YY[


 

 



r   )r   N)__name__
__module____qualname____firstlineno__r$   __static_attributes__r   r   r   r   r   +   s    r   r   c                   >   ^  \ rS rSrU 4S jrSS jrS rS rSrU =r	$ )SubprocessTransportTests4   c                    > [         TU ]  5         U R                  5       U l        U R	                  U R                  5        g r   )supersetUpnew_test_looploopset_event_loopr!   	__class__s    r   r0   SubprocessTransportTests.setUp5   s.    &&(	DII&r   c                 j    [         R                  " 5       n[        U R                  US/SS S S SUS9	nX24$ )NtestFr   )waiter)r   r   r   r2   )r!   r9   protocol	transports       r   create_transport)SubprocessTransportTests.create_transport:   s<    99;+		8fXudD!F<	 $$r   c                    U R                   R                  5       nU R                  U5      u  p#UR                  S5        U R                   R	                  U5        U R                  UR                  5       S5        U R                  UR                  R                  5        U R                  UR                  R                  5        U R                  UR                  R                  5        U R                  UR                  R                  S   S5        U R                  UR                  5       5        U R                  UR                   5        U R                  UR"                  5        U R                  UR$                  5        U R'                  [(        UR*                  [,        R.                  5        U R'                  [(        UR0                  5        U R'                  [(        UR2                  5        UR5                  5         g )N   r   r   )r2   create_futurer<   _process_exitedrun_until_completeassertEqualget_returncode
assertTrueconnection_madecalledprocess_exitedconnection_lost	call_argsassertFalse
is_closingassertIsNone_loopr   	_protocolassertRaisesProcessLookupErrorsend_signalsignalSIGTERM	terminatekillcloser!   r9   r;   r:   s       r   test_proc_exited)SubprocessTransportTests.test_proc_exitedA   sq   ((*"33F;	!!!$		$$V,113Q700778//6670077811;;A>H--/0)//*)//*)--. 	,#//	A,i.A.AB,inn=r   c                    U R                   R                  5       nU R                  U5      u  p#UR                  S5        U R                   R	                  U5        U R                  [        U5      S5        S Ul        U R                  [        U5      S5        S Ul        S Ul        U R                  [        U5      S5        UR                  5         g )Nr?   z-<TestSubprocessTransport pid=-1 returncode=6>z(<TestSubprocessTransport pid=-1 running>z%<TestSubprocessTransport not started>)
r2   r@   r<   rA   rB   rC   repr_returncode_pidrW   rX   s       r   test_subprocess_repr-SubprocessTransportTests.test_subprocess_repr[   s    ((*"33F;	!!!$		$$V,O;	
 !%	O6	
 	 $	O3	
 	r   r2   r   )
r&   r'   r(   r)   r0   r<   rY   r_   r*   __classcell__r5   s   @r   r,   r,   4   s    '
%4 r   r,   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 r\R                  " \R                  S
:H  S5      S 5       rS rS rS rS rS rS rS rS r\R                  " \R                  S;  S5      S 5       rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S/S& jr'S/S' jr(S/S( jr)S) r*S* r+\R                  " \R                  S+:g  S,5      S- 5       r,S.r-g%)0SubprocessMixins   c                    ^ [         mU4S jnU" S5      n[        R                  " US5      nU R                  R	                  U5      u  p4U R                  US5        U R                  US5        g )Nc                   >#    [         R                  " T[        R                  [        R                  S.6I S h  vN nUR                  R                  U 5        UR                  R                  5       I S h  vN   UR                  R                  5         UR                  R                  5       I S h  vN n UR                  5       I S h  vN nX 4$  N N] N# N7fNr   r   )r   create_subprocess_execr   PIPEr   writedrainrW   r   readwait)dataprocexitcoder"   s      r   run.SubprocessMixin.test_stdin_stdout.<locals>.runx   s      77 oo! D JJT"**""$$$JJ ))++D!YY[(H## % ,(sE   7CC<C7C8;C3C4CCCCCC	   some datag      N@r   )PROGRAM_CATr   wait_forr2   rB   rC   r!   rt   taskrs   r   r"   s        @r   test_stdin_stdout!SubprocessMixin.test_stdin_stdoutu   sb    	$" < d+9977=1%.r   c                    ^ [         mU4S jnU" S5      n[        R                  " U[        R                  5      nU R
                  R                  U5      u  p4U R                  US5        U R                  US5        g )Nc                    >#    [         R                  " T[        R                  [        R                  S.6I S h  vN nUR	                  U 5      I S h  vN u  p#UR
                  U4$  N- N7fri   r   rk   r   rl   communicate
returncode)rq   rr   r   r   r"   s       r   rt   -SubprocessMixin.test_communicate.<locals>.run   s\      77 oo! D
 $(#3#3D#99NF??F**
 :s!   7A,A(A,A*A,*A,rv   r   rw   r   rx   r   LONG_TIMEOUTr2   rB   rC   ry   s        @r   test_communicate SubprocessMixin.test_communicate   sh    	+ < g&:&:;9977=1%.r   c                    ^ [         mU4S jnU" 5       n[        R                  " U[        R                  5      nU R
                  R                  U5      u  p4U R                  US5        U R                  US5        g )Nc                     >#    [         R                  " T[        R                  [        R                  S.6I S h  vN n U R	                  5       I S h  vN u  pU R
                  U4$  N, N7fri   r   )rr   r   r   r"   s      r   rt   8SubprocessMixin.test_communicate_none_input.<locals>.run   sZ      77 oo! D
 $(#3#3#55NF??F**
 6s!   7A+A'A+A)A+)A+r   r   r   ry   s        @r   test_communicate_none_input+SubprocessMixin.test_communicate_none_input   se    	+ ug&:&:;9977=1%%r   c                     U R                   R                  [        R                  " S5      5      nU R                   R                  UR	                  5       5      nU R                  US5        g )Nzexit 7   r2   rB   r   create_subprocess_shellrp   rC   r!   rr   rs   s      r   
test_shellSubprocessMixin.test_shell   sP    yy++++H5
 99//		<1%r   c                     U R                   R                  [        R                  " SSS95      nU R                   R                  UR	                  5       5      nU R                  US5        g )Nzexit 8T)start_new_session   r   r   s      r   test_start_new_session&SubprocessMixin.test_start_new_session   sV    yy++++"&
 99//		<1%r   c                 r   [         nU R                  R                  [        R                  " U6 5      nUR                  5         U R                  R                  UR                  5       5      n[        R                  S:X  a  U R                  U[        5        g U R                  [        R                  * U5        g Nwin32)PROGRAM_BLOCKEDr2   rB   r   rk   rV   rp   sysplatformassertIsInstanceintrC   rS   SIGKILLr!   r"   rr   r   s       r   	test_killSubprocessMixin.test_kill   s    yy++**D1
 			YY11$))+>
<<7"!!*c2 fnn_j9r   c                    [         R                  S:X  a  S[         R                   S3nOSnSn[         R                  S:X  a  SSKJn  UnU R
                  R                  [        R                  " U[        R                  R                  US95      nU R
                  R                  [        R                  " S5      5        [         R                  S:X  a  UR                  [        R                  5        UR                  5         U R
                  R                  UR                  5       5      n[         R                  S:X  a  U R!                  U["        5        g U R%                  [        R&                  * U5        g )	Nr   "z!" -c "import time; time.sleep(2)"zsleep 1; sleep 1r   )CREATE_NEW_PROCESS_GROUP)r   creationflags   )r   r   
executabler   r   r2   rB   r   r   rl   sleeprR   rS   CTRL_BREAK_EVENTrV   rp   r   r   rC   r   )r!   blocking_shell_commandr   r   rr   r   s         r   test_kill_issue43884$SubprocessMixin.test_kill_issue43884   s   <<7"'((88Y%Z"%7"<<7"; 5Myy++++,B7K]K]KbKb')
 			$$W]]1%56<<7"V445		YY11$))+>
<<7"!!*c2 fnn_j9r   c                 r   [         nU R                  R                  [        R                  " U6 5      nUR                  5         U R                  R                  UR                  5       5      n[        R                  S:X  a  U R                  U[        5        g U R                  [        R                  * U5        g r   )r   r2   rB   r   rk   rU   rp   r   r   r   r   rC   rS   rT   r   s       r   test_terminateSubprocessMixin.test_terminate   s    yy++**D1
 	YY11$))+>
<<7"!!*c2 fnn_j9r   r   zDon't have SIGHUPc                 @  ^  [         R                   " [         R                  [         R                  5      n Sn[        R                  SU/nT R
                  R                  [        R                  " US[        R                  065      nU 4S jnT R
                  R                  U" U5      5      nT R                  [         R                  * U5        [         R                   " [         R                  U5        g ! [         R                   " [         R                  U5        f = f)Nz<import time; print("sleeping", flush=True); time.sleep(3600)r   r   c                    >#    U R                   R                  5       I S h  vN nTR                  US5        U R                  [        R
                  5        U R                  5       I S h  vN nU$  NO N7f)Ns	   sleeping
)r   readlinerC   rR   rS   SIGHUPrp   )rr   liner   r!   s      r   rR   5SubprocessMixin.test_send_signal.<locals>.send_signal
  s[     ![[1133  }5  /#'99;.
!! 4 /s"   A5A1AA5*A3+A53A5)rS   r   SIG_DFLr   r   r2   rB   r   rk   r   rl   rC   )r!   old_handlercoder"   rr   rR   r   s   `      r   test_send_signal SubprocessMixin.test_send_signal   s    
 mmFMM6>>B	6QDNND$/D99//..%??D" 55k$6GHJfmm^Z8MM&--5FMM&--5s   BC6 6'Dc                   ^ S[         R                  -  n[        R                  " 5       u  nmU R	                  [        R
                  U5        U R	                  [        R
                  T5        [         R                  (       ah  [        R                  " U5      n[        R                  " US5        [        R                  " SU S35      nSSKJn  U" 5       nSU/0Ul        [        US9nOS	U S
3n[        U4S9nU R                   R#                  [$        R&                  " [(        R*                  SU4S[        R,                  0UD65      nU4S jn	U	" X5      n
[.        R0                  " 5          U R3                  [4        [6        4U R                   R"                  U
5        S S S 5        U R                   R#                  UR9                  5       5        g ! , (       d  f       N8= f)N   xTz<
                import os, msvcrt
                handle = zl
                fd = msvcrt.open_osfhandle(handle, os.O_RDONLY)
                os.read(fd, 1)
            r   )STARTUPINFOhandle_list)startupinfozimport os; fd = z; os.read(fd, 1))pass_fdsr   r   c                    >#    U R                   R                  U5        [        R                  " TS5        U R                   R                  5       I S h  vN   g  N7f)Ns   go)r   rm   osrn   )rr   rq   wfds     r   write_stdin;SubprocessMixin.test_stdin_broken_pipe.<locals>.write_stdin9  s<     JJT"HHS% **""$$$s   AAAA)r   PIPE_MAX_SIZEr   pipe
addCleanuprW   
MS_WINDOWSmsvcrtget_osfhandleset_handle_inheritabletextwrapdedentr   r   lpAttributeListdictr2   rB   r   rk   r   r   rl   
test_utilsdisable_loggerrP   BrokenPipeErrorConnectionResetErrorrp   )r!   
large_datarfdhandler   r   r   r#   rr   r   coror   s              @r   test_stdin_broken_pipe&SubprocessMixin.test_stdin_broken_pipe  s   G111
779S#&#&))#.F%%fd3?? (  "$ D /%-K+86(*CK'k2F%cU*:;DC6*F yy++**d oo 
	% 4,&&(0DE"ii::DB ) 			$$TYY[1 )(s   -2G
Gc           	         S[         R                  -  nU R                  R                  [        R
                  " [        R                  SS[        R                  S95      nU R                  R                  S 5        U R                  R                  UR                  U5      5        U R                  R                  UR                  5       5        g )Nr   r   passr   c                     g r   r   )r2   msgs     r   <lambda>ESubprocessMixin.test_communicate_ignore_broken_pipe.<locals>.<lambda>S  s    $r   )r   r   r2   rB   r   rk   r   r   r   rl   set_exception_handlerr   rp   )r!   r   rr   s      r   #test_communicate_ignore_broken_pipe3SubprocessMixin.test_communicate_ignore_broken_pipeF  s    G111
 yy++**f oo
 			''(>?		$$T%5%5j%AB		$$TYY[1r   c                 0  ^ ^^ SmTS-  S-   mUU U4S jnT R                   R                  U" 5       5      u  p#T R                  UST-  5        T R                  UR                  R
                  5        T R                  UR                  R
                  5        g )N
      r   c            	        >^#    SR                  SST	-  S45      n TR                  R                  mU4S jnUTR                  l        [        R                  " [
        R                  SU [        R                  R                  [        R                  R                  TS9I S h  vN nUR                  R                  S5      nUR                  5       I S h  vN u  pEXC4$  N< N7f)	N
r   zsys.stdout.write("x" * %s)sys.stdout.flush()c                     >#    T" U 0 UD6I S h  vN u  p#[         R                  " 5       Ul        [         R                  " 5       Ul        X#4$  N=7fr   )r   r   pause_readingresume_reading)r"   kwr;   r:   connect_read_pipes       r   connect_read_pipe_mock^SubprocessMixin.test_pause_reading.<locals>.test_pause_reading.<locals>.connect_read_pipe_mockd  sF     ,=t,Jr,J&J#	*.))+	'+/99;	(!,, 'Ks   AA>Ar   )r   r   limitr   )joinr2   r   r   rk   r   r   r   rl   
_transportget_pipe_transportr   )
r   r   rr   stdout_transportr   r   r   r   r!   sizes
         @r   test_pause_reading>SubprocessMixin.test_pause_reading.<locals>.test_pause_reading[  s     99,t3$ D !%		 ; ;- +ADII' 77d((--))..	 D  $AA!D#'#3#3#55NF
 -- 6s$   BC$#C $2C$C"
C$"C$r   )r2   rB   rC   rE   r   rG   r   )r!   r   r   r;   r   r   s   `   @@r   r   "SubprocessMixin.test_pause_readingW  s|    	A	.D !II889K9MN-	//667	00778r   c                     S nU R                   R                  U" S5      5      u  p#U R                  UR                  5       S5        U R                  US5        g )Nc           
      v  #    Sn[         R                  " [        R                  SU[         R                  R
                  [         R                  R
                  [         R                  R
                  SS9I S h  vN nUR                  U 5      I S h  vN u  p4UR                  5       I S h  vN nX54$  N: N# N7fN5import sys; data = sys.stdin.read(); print(len(data))r   Fr   r   r   	close_fdsr   rk   r   r   r   rl   r   rp   messager   rr   r   r   rs   s         r   len_message?SubprocessMixin.test_stdin_not_inheritable.<locals>.len_message  s     JD 77d((--))..)).. D $(#3#3G#<<NF!YY[(H%% =(6   A6B98B39B9B5B9+B7,B95B97B9   abc   3r   r2   rB   rC   rstrip)r!   r  outputrs   s       r   test_stdin_not_inheritable*SubprocessMixin.test_stdin_not_inheritable  sK    	&  9977F8KL$/1%r   c                     S nU R                   R                  U" 5       5      u  p#U R                  UR                  5       S5        U R                  US5        g )Nc            
      v  #    Sn [         R                  " [        R                  SU [         R                  R
                  [         R                  R
                  [         R                  R
                  SS9I S h  vN nUR                  S5      I S h  vN u  p#UR                  5       I S h  vN nX$4$  N: N# N7f)Nr   r   Fr  r   r  r   rr   r   r   rs   s        r   empty_input5SubprocessMixin.test_empty_input.<locals>.empty_input  s     JD 77d((--))..)).. D $(#3#3C#88NF!YY[(H%% 9(r     0r   r  r!   r  r  rs   s       r   test_empty_input SubprocessMixin.test_empty_input  H    	&  9977F$/1%r   c                     S nU R                   R                  U" 5       5      u  p#U R                  UR                  5       S5        U R                  US5        g )Nc            
      t  #    Sn [         R                  " [        R                  SU [         R                  R
                  [         R                  R                  [         R                  R                  SS9I S h  vN nUR                  5       I S h  vN u  p#UR                  5       I S h  vN nX$4$  N9 N# N7fr   )	r   rk   r   r   r   DEVNULLrl   r   rp   r  s        r   r  7SubprocessMixin.test_devnull_input.<locals>.empty_input  s     JD 77d((00))..)).. D $(#3#3#55NF!YY[(H%% 6(s6   A6B88B29B8B4B8*B6+B84B86B8r  r   r  r  s       r   test_devnull_input"SubprocessMixin.test_devnull_input  r  r   c                     S nU R                   R                  U" 5       5      u  p#U R                  US 5        U R                  US5        g )Nc            
      v  #    Sn [         R                  " [        R                  SU [         R                  R
                  [         R                  R                  [         R                  R
                  SS9I S h  vN nUR                  S5      I S h  vN u  p#UR                  5       I S h  vN nX$4$  N: N# N7fNr   r   Fr  r	  	r   rk   r   r   r   rl   r  r   rp   r  s        r   empty_output9SubprocessMixin.test_devnull_output.<locals>.empty_output  s     JD 77d((--))11)).. D $(#3#3F#;;NF!YY[(H%% <(r  r   r2   rB   rC   )r!   r$  r  rs   s       r   test_devnull_output#SubprocessMixin.test_devnull_output  sB    	&  9977G&1%r   c                     S nU R                   R                  U" 5       5      u  p#U R                  US 5        U R                  US5        g )Nc            
      v  #    Sn [         R                  " [        R                  SU [         R                  R
                  [         R                  R
                  [         R                  R                  SS9I S h  vN nUR                  S5      I S h  vN u  p#UR                  5       I S h  vN nX44$  N: N# N7fr"  r#  r  s        r   empty_error7SubprocessMixin.test_devnull_error.<locals>.empty_error  s     JD 77d((--))..))11 D $(#3#3F#;;NF!YY[(H%% <(r  r   r&  )r!   r+  r  rs   s       r   test_devnull_error"SubprocessMixin.test_devnull_error  sB    	&  9977F&1%r   )linuxandroidzDon't have /dev/stdinc                     S nU R                   R                  U" S5      5      u  p#U R                  UR                  5       S5        U R                  US5        g )Nc           
      v  #    Sn[         R                  " [        R                  SU[         R                  R
                  [         R                  R
                  [         R                  R
                  SS9I S h  vN nUR                  U 5      I S h  vN u  p4UR                  5       I S h  vN nX54$  N: N# N7f)Nz?file = open("/dev/stdin"); data = file.read(); print(len(data))r   Fr  r  r  s         r   devstdin_input;SubprocessMixin.test_devstdin_input.<locals>.devstdin_input  s     TD 77d((--))..)).. D $(#3#3G#<<NF!YY[(H%% =(r  r	  r
  r   r  )r!   r3  r  rs   s       r   test_devstdin_input#SubprocessMixin.test_devstdin_input  sK    	&  9977v8NO$/1%r   c                 R   ^  U 4S jnT R                   R                  U" 5       5        g )Nc                    >#    [         R                  " [        6 I S h  vN n TR                  R	                  U R                  5       5      nTR                  R                  UR                  5         UI S h  vN   UR                  5         U R                  5         U R                  5       I S h  vN   g  N N?! [         R                   a     NSf = f N#7fr   )
r   rk   r   r2   create_taskrp   	call_sooncancelCancelledErrorrV   )rr   rz   r!   s     r   cancel_wait=SubprocessMixin.test_cancel_process_wait.<locals>.cancel_wait  s      77IID 99((5DII,


 KKM IIK))+ J ))  sR   CB5AC2B9 7B78B9 <3C/C0C7B9 9CCCCr2   rB   )r!   r=  s   ` r   test_cancel_process_wait(SubprocessMixin.test_cancel_process_wait  s    	$ 			$$[]3r   c                    ^  U 4S jn[         R                  " 5          T R                  R                  U" 5       5        S S S 5        g ! , (       d  f       g = f)Nc                  
  >#    [         R                  " [        6 n TR                  R	                  U 5      nTR                  R                  UR                  5         UI S h  vN   g  N! [         R                   a     g f = f7fr   )r   rk   r   r2   r9  r:  r;  r<  r   rz   r!   s     r   cancel_make_transportYSubprocessMixin.test_cancel_make_subprocess_transport_exec.<locals>.cancel_make_transport  sc     11?CD99((.DII,

)) s<   ABA) !A'"A) &B'A) )B =B?B  B)r   r   r2   rB   r!   rE  s   ` r   *test_cancel_make_subprocess_transport_exec:SubprocessMixin.test_cancel_make_subprocess_transport_exec  s8    	 &&(II(()>)@A )((s   !A
Ac                    ^  U 4S jn[         R                  " 5          T R                  R                  U" 5       5        [         R                  " T R                  5        S S S 5        g ! , (       d  f       g = f)Nc                  :  >#    TR                   R                  " [        R                  /[        Q76 n TR                   R                  U 5      nTR                   R                  UR                  5         UI S h  vN   g  N! [        R                   a     g f = f7fr   )	r2   subprocess_execr   SubprocessProtocolr   r9  r:  r;  r<  rD  s     r   rE  DSubprocessMixin.test_cancel_post_init.<locals>.cancel_make_transport"  sw     99,,W-G-G ?.=?D99((.DII,

)) s<   A0B4B 9A?:B >B?B BBBB)r   r   r2   rB   run_brieflyrG  s   ` r   test_cancel_post_init%SubprocessMixin.test_cancel_post_init   sJ    		 &&(II(()>)@A""499- )((s   AA''
A5c                   ^  U 4S jn[         R                  " 5           T R                  R                  U" 5       5      u  p#S S S 5        T R                  W5        T R                  W5        [         R                  " T R                  5        g ! [        R
                   a    T R                  S5         Nrf = f! , (       d  f       N|= f)Nc                    >^^#    TR                   R                  " [        R                  /[        Q76 n U I S h  vN u  pSmUU4S jnUR                  S5      nUR                  mX4l        UR                  5       nUR                  5         [        R                  " UR                  5       S5      I S h  vN   UT4$  N N
7f)NFc                     > Sm T" 5         g NTr   )kill_called	orig_kills   r   rV   KSubprocessMixin.test_close_kill_running.<locals>.kill_running.<locals>.kill;  s    "r   r      )r2   rL  r   rM  r   get_extra_inforV   rD   rW   rx   _wait)	creater;   r:   rV   rr   r   rV  rW  r!   s	         @@r   kill_running=SubprocessMixin.test_close_kill_running.<locals>.kill_running5  s     YY..w/I/I A0?AF(.,IK
 ++L9D		II"113JOO""9??#4a888,, #/ 9s"   5CB>A:C5C 6	C Cz2Timeout failure on waiting for subprocess stopping)
r   r   r2   rB   r   TimeoutErrorskipTestrM   rE   rO  )r!   r]  r   killeds   `   r   test_close_kill_running'SubprocessMixin.test_close_kill_running3  s    	-( &&(%)YY%A%A N&"
 ) 	*% 	tyy) '' H )(s(   B7"B%B41B73B44B77
Cc                   ^  U 4S jn[         R                  " 5          T R                  R                  U" 5       5      n[         R                  " T R                  5        S S S 5        Wu  p4nT R                  U5        T R                  U5        T R                  U5        [        R                  S:w  a}  [        T [        5      (       ag  [        R                  " 5          [        R                  " S[        5        [         R"                  " 5       R$                  R'                  5         S S S 5        g g g ! , (       d  f       N= f! , (       d  f       g = f)Nc                    >#    TR                   R                  " [        R                  /[        Q76 n U I S h  vN u  pUR                  S5      nUR                  5         UR                  5         [        R                  " 5       Ul        UR                  5       nUR                  5       nUR                  5         XEUR                  R                  4$  N7f)Nr   )r2   rL  r   rM  r   rZ  rV   rp   r   r   pollrD   rW   rG   )r\  r;   r:   rr   proc_returncodetransport_returncoder!   s         r   r]  CSubprocessMixin.test_close_dont_kill_finished.<locals>.kill_runningZ  s     YY..w/I/I A0?AF(.,I++L9D IIKIIK		DI"iikO#,#;#;#= OO#499;K;KLL #/s   5CCBCr   ignore)r   r   r2   rB   rO  assertIsNotNonerM   rK   r   r   
isinstanceSubprocessFastWatcherTestswarningscatch_warningssimplefilterDeprecationWarningr   get_child_watcher
_callbacksclear)r!   r]  resultrg  transport_return_codera  s   `     r   test_close_dont_kill_finished-SubprocessMixin.test_close_dont_kill_finishedX  s    	M& &&(YY11,.AF""499- ) :@6_-/0 	 
 LLG#4!;<<((*%%h0BC))+66<<> +* = $! )($ +*s   AD0A	E0
D>
Ec           
        #    [         R                  S:X  a  SnOSn[        R                  " U5       n[        nXCl        [        R                  " SS9 nU R                  U5         [        R                  " [         R                  SSUS9I S h  vN   S S S 5        U R                  U/ 5        S S S 5        S S S 5        g  N/! , (       d  f       N3= f! , (       d  f       N*= f! , (       d  f       g = f7f)	Nr   zasyncio.windows_utils.Popenzsubprocess.PopenT)recordr   r   r   )r   r   r   patchZeroDivisionErrorside_effectrn  ro  rP   r   rk   r   rC   )r!   r   targetpopenexcwarnss         r   _test_popen_error!SubprocessMixin._test_popen_error  s     <<7"2F'FZZ5#C #((5&&s+!88#	   ,   + 6	   ,+ 65	  s^   0C3!C"C%)C B>
C C-C"5	C3>C  
C
C
C	C""
C0,C3c                 T    U R                   R                  U R                  S S95        g Nr   )r2   rB   r  r!   s    r   test_popen_error SubprocessMixin.test_popen_error  s$     			$$T%;%;$%;%GHr   c                 p    U R                   R                  U R                  [        R                  S95        g r  )r2   rB   r  r   rl   r  s    r    test_popen_error_with_stdin_pipe0SubprocessMixin.test_popen_error_with_stdin_pipe  s+     			$$"""9	;r   c                 J    S nU R                   R                  U" 5       5        g )Nc                  `  #    SR                  / SQ5      n [        R                  " [        R                  SU [        R
                  R                  S9I S h  vN n UR                  R                  S5      I S h  vN nU(       a  [        R                  " S5      I S h  vN   Og ML   NQ N/ N7f)Nr   )r   zfor _ in range(64):z     sys.stdout.write("x" * 4096)r   zsys.exit(1)r   )r   i   g333333?)
r   r   rk   r   r   r   rl   r   ro   r   )r   processrq   s      r   executeDSubprocessMixin.test_read_stdout_after_process_exit.<locals>.execute  s     99 - .D $::d)).. G
 $^^0077!--,,,  8,s6   AB.B(#B.:B*;$B.B, 	B.*B.,B.r?  r!   r  s     r   #test_read_stdout_after_process_exit3SubprocessMixin.test_read_stdout_after_process_exit  s    	& 			$$WY/r   c                 R   ^  U 4S jnT R                   R                  U" 5       5        g )Nc                  6  >#    T R                  [        5         [        R                  " [        R
                  SS9I S h  vN   S S S 5        T R                  [        5         [        R                  " [        R
                  SS9I S h  vN   S S S 5        T R                  [        5         [        R                  " [        R
                  SS9I S h  vN   S S S 5        g  N! , (       d  f       N= f Ni! , (       d  f       Nm= f N3! , (       d  f       g = f7fNT)textzutf-8)encodingstrict)errors)rP   
ValueErrorr   rk   r   r   r  s   r   r  LSubprocessMixin.test_create_subprocess_exec_text_mode_fails.<locals>.execute  s     "":. 77=AC C C / "":. 77AHJ J J / "":. 77?GI I I /.C /.
J /.
I /.   D'C" C C"D"'C5	C3
C5D+'DDD	D C""
C0,D3C55
D?DD
DDr?  r  s   ` r   +test_create_subprocess_exec_text_mode_fails;SubprocessMixin.test_create_subprocess_exec_text_mode_fails  s    	I 			$$WY/r   c                 R   ^  U 4S jnT R                   R                  U" 5       5        g )Nc                  6  >#    T R                  [        5         [        R                  " [        R
                  SS9I S h  vN   S S S 5        T R                  [        5         [        R                  " [        R
                  SS9I S h  vN   S S S 5        T R                  [        5         [        R                  " [        R
                  SS9I S h  vN   S S S 5        g  N! , (       d  f       N= f Ni! , (       d  f       Nm= f N3! , (       d  f       g = f7fr  )rP   r  r   r   r   r   r  s   r   r  MSubprocessMixin.test_create_subprocess_shell_text_mode_fails.<locals>.execute  s     "":. 88>BD D D / "":. 88BIK K K / "":. 88@HJ J J /.D /.
K /.
J /.r  r?  r  s   ` r   ,test_create_subprocess_shell_text_mode_fails<SubprocessMixin.test_create_subprocess_shell_text_mode_fails  s    	J 			$$WY/r   c                 h    S nU R                  U R                  R                  U" 5       5      5        g )Nc                    #    [         R                  " [        R                  " [        R
                  5      SS5      I S h  vN n U R                  5       I S h  vN   [         R                  " [        R
                  SS[        R                  " S5      5      I S h  vN n U R                  5       I S h  vN   g  Nx Nb N! N7f)Nr   r   .)r   rk   r   FakePathr   r   rp   )ps    r   r  FSubprocessMixin.test_create_subprocess_exec_with_path.<locals>.execute  s      77""3>>2D&B BA&&(NN 77fi.@.@.EG GA&&(NNBGsH   >C B9CB;ACB=C3B?4C;C=C?C)rM   r2   rB   r  s     r   %test_create_subprocess_exec_with_path5SubprocessMixin.test_create_subprocess_exec_with_path  s(    	 	$))66wyABr   c                   #    UI S h  vN nUR                  5       I S h  vN u  pEU R                  XB5        U R                  UR                  S5        [        R                  " UR                  5       5      n[        R                  " S5      I S h  vN   U R                  UR                  5       UR                  5        g  N N N37f)Nr   )r   rC   r   r   r9  rp   r   ru  )r!   r   r  rr   r   _rz   s          r   check_stdout_output#SubprocessMixin.check_stdout_output  s     z**,,	(!,""499;/mmA8 , 	s2   CCCCA0CC0CCCNc                 n    SS jnU R                   R                  U R                  U" 5       S5      5        g )Nc                    #    [         R                  n [         R                  S:X  a  SU  S3n U  S3n[        R                  R                  5       nSUS'   [        R                  " X[        R                  S9I S h  vN nU$  N7f)Nr   r   z8 -c "import os, sys; sys.stdout.write(os.getenv('FOO'))"barFOOenvr   )
r   r   r   r   environcopyr   r   r   rl   )r   cmdr  rr   s       r   main>SubprocessMixin.test_create_subprocess_env_shell.<locals>.main  sx     J||w& A.
!l"Z]C**//#CCJ 88Z__ D Ks   A9B;B<Bs   barreturnNr2   rB   r  r!   r  s     r    test_create_subprocess_env_shell0SubprocessMixin.test_create_subprocess_env_shell  s*    
	 			$$T%=%=dff%MNr   c                 n    SS jnU R                   R                  U R                  U" 5       S5      5        g )Nc                     #    [         R                  SS/n [        R                  R	                  5       nSUS'   [
        R                  " X[        R                  S.6I S h  vN nU$  N7f)Nr   z2import os, sys; sys.stdout.write(os.getenv('FOO'))bazr  r  )	r   r   r   r  r  r   rk   r   rl   )r  r  rr   s      r   r  =SubprocessMixin.test_create_subprocess_env_exec.<locals>.main  s\     >>4GIC**//#CCJ 77joo D Ks   AA) A'!A)s   bazr  r  r  s     r   test_create_subprocess_env_exec/SubprocessMixin.test_create_subprocess_env_exec  s*    	 			$$T%=%=dff%MNr   c                 V   ^  SU 4S jjnT R                   R                  U" 5       5        g )Nc            	        >#    [         R                  " [        [        R                  [        R                  S.6I S h  vN n U R                  S5      I S h  vN u  pTR                  US5        TR                  U R                  S5        TR                  [         R                  " [        S5       Vs/ s H  o R                  5       PM     sn6 I S h  vN U R                  /S-  5        g  N Ns  snf  N!7f)Nrj   rv   r   r   )r   rk   rw   r   rl   r   rC   r   gatherrangerp   )rr   r   r  r!   s      r   r  =SubprocessMixin.test_subprocess_concurrent_wait.<locals>.main  s      77 oo! D
 #..|<<IFV\2T__a07>>r3SAIIK3S#TT"oo.35
 = 4TTs@   ;C8C-C8C/AC84C1C8C6C8/C81C8r  r?  r  s   ` r   test_subprocess_concurrent_wait/SubprocessMixin.test_subprocess_concurrent_wait
  s    
	5 			$$TV,r   c                   ^^	^
 / m	SS/n/ SQm
SS/n " U	U
4S jS[         R                  5      mS
UU	4S jjnU R                  R                  U" 5       5      m	U R	                  [        T	5      [        T
5      5        U Vs0 s H  oD/ _M     nnT	 H%  nUS	:X  a  M  US S u  ptXT   R                  U5        M'     U H  nU R                  XT   X$T	45        M     g s  snf )Nr   r   ))pipe_data_receivedr   s   stdout)r  r   s   stderr)pipe_connection_lostr   )r  r   rH   r  r  c                   z   > \ rS rSrS\R
                  SS4S jrSU 4S jjrSU 4S jjrSU 4S jjr	U U4S	 jr
S
rg)CSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocoli+  exit_futurer  Nc                     Xl         g r   r  )r!   r  s     r   __init__LSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.__init__,  s    #. r   c                 L   > TR                  SX45        U R                  5         g )Nr  append
exit_maybe)r!   fdrq   eventss      r   r  VSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.pipe_data_received/  s    3R>?!r   c                 L   > TR                  SU45        U R                  5         g )Nr  r  )r!   r  r  r  s      r   r  XSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.pipe_connection_lost3  s    5r:;!r   c                 H   > TR                  S5        U R                  5         g )NrH   r  )r!   r  s    r   rH   RSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.process_exited7  s    ./!r   c                 n   > [        T5      [        T5      :  a  U R                  R                  S5        g g rU  )lenr  
set_result)r!   r  expecteds    r   r  NSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.exit_maybe;  s,    v;#h-/$$//5 0r   r  r  )r&   r'   r(   r)   r   Futurer  r  r  rH   r  r*   )r  r  s   r   
MyProtocolr  +  s3    /GNN /t /"""6 6r   r  c                    >^#    [         R                  " 5       n [         R                  " 5       mSnU R                  UU4S j[        R
                  SUS S9I S h  vN u  p#TI S h  vN   UR                  5         T$  N" N7f)NzBimport sys; sys.stdout.write("stdout"); sys.stderr.write("stderr")c                     > T " T5      $ r   r   )r  r  s   r   r   OSubprocessMixin.test_subprocess_protocol_events.<locals>.main.<locals>.<lambda>D  s
    j>Ur   r   r   )r   get_running_loopr  rL  r   r   rW   )r2   r   r;   r  r  r  r  s       @r   r  =SubprocessMixin.test_subprocess_protocol_events.<locals>.main@  su     ++-D!..*KWD!%!5!56U69nndDX\ "6 "^ ^LIOOM^s$   ABA=B&A?'B?BrH   r  )r   rM  r2   rB   assertSetEqualsetr  rC   )r!   fdsper_fd_expectedr  r  per_fd_eventseventnamer  r  r  s           @@@r   test_subprocess_protocol_events/SubprocessMixin.test_subprocess_protocol_events  s     !f
 !"

	6 	633 	6*		 		 --df5 	CKX7 +..#BR#.E((RayHD$$T*	  B].fN  /s    Cc                 \   ^ ^ S mUU 4S jnT R                   R                  U" 5       5        g )Nc                    #    [         R                  " U /UQ7S[         R                  R                  06I S h  vN nUR	                  5       I S h  vN u  p4UR                  5       R                  5       $  N< N&7f)Nr   )r   rk   r   rl   r   decodestrip)r  r"   rr   r   r  s        r   get_command_stdoutNSubprocessMixin.test_subprocess_communicate_stdout.<locals>.get_command_stdout]  sm      77#*#5#5#:#: D #..00IF==?((**	 1s!   6A9A5A9A7%A97A9c                    >#    [        S5       V s/ s H  n SU  3PM
     nn [        R                  " U Vs/ s H   nT" [        R                  SSU< S35      PM"     sn6 I S h  vN nTR                  X15        g s  sn f s  snf  N 7f)Nr   foor   zprint())r  r   r  r   r   rC   )ioutputsoutresr  r!   s       r   r  @SubprocessMixin.test_subprocess_communicate_stdout.<locals>.maind  s     */)4)QQCy)G4FM)OFMs *<CNND*0q(9*;FM)O P PCS* 5)O Ps&   BA;B'B B$B%!Br?  )r!   r  r  s   ` @r   "test_subprocess_communicate_stdout2SubprocessMixin.test_subprocess_communicate_stdout[  s#    	+	+ 			$$TV,r   r/  z
Linux onlyc                 R   ^  U 4S jnT R                   R                  U" 5       5        g )Nc                  h  >#    [        S5       H  n [        R                  " SS5      I S h  vN n[        R                  " S5      I S h  vN    UR	                  [
        R                  5        TR                  UR                  5       I S h  vN S5        M     g  No NS! [         a     N=f = f N"7f)Nr   r   z0.1g?   )
r  r   rk   r   rR   rS   SIGUSR1rQ   assertNotEqualrp   )r  rr   r!   s     r   r  >SubprocessMixin.test_subprocess_send_signal_race.<locals>.maino  s     2Y$;;GUKKmmC((($$V^^4 ##$))+$5s; K( * $5sQ   )B2BB2
BB2B /B2B0
B2B2 
B-*B2,B--B2r?  r  s   ` r    test_subprocess_send_signal_race0SubprocessMixin.test_subprocess_send_signal_racel  s    	< 			$$TV,r   r   r  ).r&   r'   r(   r)   r{   r   r   r   r   r   r   r   unittestskipIfr   r   r   r   r   r   r  r  r  r'  r-  r5  r@  rH  rP  rb  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*   r   r   r   re   re   s   s6   /4/$&$&	&::6: __S\\W,.AB6 C6:,2\2"*9X&(&&&&&&&& __S\\)==,.&.&&4.B".&#*J)?V,&I
;0.0 0"	C9OO-@OD-" __S\\W,l;- <-r   re   r   c                   8   ^  \ rS rSrSrU 4S jrU 4S jrSrU =r$ )SubprocessWatcherMixini~  Nc                   > [         TU ]  5         [        R                  " 5       nUR	                  5       U l        U R                  U R
                  5        U R                  5       nUR                  U R
                  5        [        R                  " 5          [        R                  " S[        5        UR                  U5        S S S 5        g ! , (       d  f       g = fNrj  )r/   r0   r   get_event_loop_policynew_event_loopr2   r3   _get_watcherattach_looprn  ro  rp  rq  set_child_watcherr!   policywatcherr5   s      r   r0   SubprocessWatcherMixin.setUp  s    GMO224F--/DI		*'')G		*((*%%h0BC((1 +**s   -C
Cc                 d  > [         TU ]  5         [        R                  " 5       n[        R
                  " 5          [        R                  " S[        5        UR                  5       nUR                  S 5        S S S 5        WR                  S 5        UR                  5         g ! , (       d  f       N0= fr  )r/   tearDownr   r  rn  ro  rp  rq  rr  r  r  rW   r  s      r   r!  SubprocessWatcherMixin.tearDown  s|    G224F((*%%h0BC 224((. + %MMO +*s   =B!!
B/ra   )	r&   r'   r(   r)   Watcherr0   r!  r*   rb   rc   s   @r   r  r  ~  s    
	2	 	r   r  c                       \ rS rSrS rSrg)SubprocessThreadedWatcherTestsi  c                 ,    [         R                  " 5       $ r   )r	   ThreadedChildWatcherr  s    r   r  +SubprocessThreadedWatcherTests._get_watcher  s    3355r   r   Nr&   r'   r(   r)   r  r*   r   r   r   r%  r%    s    	6r   r%  c                       \ rS rSrS rSrg)SubprocessSafeWatcherTestsi  c                     U R                  [        5         [        R                  " 5       sS S S 5        $ ! , (       d  f       g = fr   )assertWarnsrq  r	   SafeChildWatcherr  s    r   r  'SubprocessSafeWatcherTests._get_watcher  )    !!"45"335 655	   5
Ar   Nr)  r   r   r   r+  r+        	6r   r+  c                       \ rS rSrS rSrg)MultiLoopChildWatcherTestsi  c                     U R                  [        5         [        R                  " 5         S S S 5        g ! , (       d  f       g = fr   )r-  rq  r	   MultiLoopChildWatcherr  s    r   
test_warns%MultiLoopChildWatcherTests.test_warns  s)    !!"45113 655s	   5
Ar   N)r&   r'   r(   r)   r7  r*   r   r   r   r4  r4    s    	4r   r4  c                       \ rS rSrS rSrg)rm  i  c                     U R                  [        5         [        R                  " 5       sS S S 5        $ ! , (       d  f       g = fr   )r-  rq  r	   FastChildWatcherr  s    r   r  'SubprocessFastWatcherTests._get_watcher  r0  r1  r   Nr)  r   r   r   rm  rm    r2  r   rm  (operating system does not support pidfdsc                       \ rS rSrS rSrg)SubprocessPidfdWatcherTestsi  c                 ,    [         R                  " 5       $ r   )r	   PidfdChildWatcherr  s    r   r  (SubprocessPidfdWatcherTests._get_watcher  s    0022r   r   Nr)  r   r   r   r?  r?    s    	3r   r?  c                   j    \ rS rSrS r\R                  " \R                  " 5       S5      S 5       r	Sr
g)GenericWatcherTestsi  c           
        ^ ^ [         R                  " [        R                  5      mSTR                  l        U U4S jn[        R                  " [        R                  S9 n[        R                  " 5          [        R                  " S[        5        T R                  UR                  U" 5       5      5        S S S 5        S S S 5        T R                  TR                  [         R                   R#                  5       [         R                   R	                  5       [         R                   R%                  [&        [         R(                  [         R(                  5      /TR                  5        g ! , (       d  f       N= f! , (       d  f       N= f)NFc                  T  >#    [         R                  " T5        T R                  [        5         [        R
                  " [        R                  " [        R                  5      SS5      I S h  vN   S S S 5        TR                  R                  5         g  N'! , (       d  f       N+= f7f)Nr   r   )r   r  rP   RuntimeErrorr   rk   r   r  r   r   add_child_handlerassert_not_called)r!   r  s   r   r  WGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher.<locals>.execute  sz     ))'2&&|4$;;!**3>>:D&J J J 5 ));;=J 54s.   ,B(>B-B.B2#B(B
B%!B(loop_factoryrj  )r   create_autospecr   AbstractChildWatcher	is_activereturn_valueRunnerr  rn  ro  rp  rq  rM   rt   assertListEqual
mock_callscall	__enter____exit__rG  ANY)r!   r  runnerr  s   `  @r   2test_create_subprocess_fails_with_inactive_watcherFGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher  s    **7+G+GHG-2G*> W-C-CD,,.))(4FG%%fjj&;< / E   !3!3		##%		##%		""<488D6 !!	# /. EDs%   !E;7AE*8E;*
E8	4E;;
F	r=  c                   ^ ^ S mUU 4S jnT R                  [        5         [        R                  " [        R                  " 5       5        S S S 5         [        R
                  " [        R                  S9 nUR                  U" 5       5      u  p4S S S 5        T R                  WS5        T R                  WS5        T R                  [        5         [        R                  " S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nx= f! , (       d  f       g = f! T R                  [        5         [        R                  " S 5        S S S 5        f ! , (       d  f       f = f= f)Nc                     #    [         R                  " [        [        R                  [        R                  S.6I S h  vN n U R                  S5      I S h  vN u  pU R                  U4$  N- N7f)Nrj   rv   )r   rk   rw   r   rl   r   r   )rr   r   r   s      r   	in_threadHGenericWatcherTests.test_create_subprocess_with_pidfd.<locals>.in_thread  s\     $;; $//%?? 
 (,'7'7'E!E..
 "Fs!   ;A/A+A/A-A/-A/c                    >#    [         R                  " 5          [         R                  " S[        5        TR	                  [
        [        45         [        R                  " 5       R                  5         S S S 5        S S S 5        [        R                  " [        R                  T " 5       5      I S h  vN $ ! , (       d  f       NH= f! , (       d  f       NQ= f N&7f)Nerror)rn  ro  rp  rq  rP   rG  r   r  get_event_loop	to_threadrt   )r]  r!   s   r   r  CGenericWatcherTests.test_create_subprocess_with_pidfd.<locals>.main  s     ,,.))'3EF **L:L+MN557FFH O / %..w{{IKHHH ON /. Is@   C7C$B64C<5C1C2C6
C	 C
CCrK  r   rv   )	r-  rq  r   r  rA  rQ  r  rt   rC   )r!   r  rX  r   r   r]  s   `    @r   !test_create_subprocess_with_pidfd5GenericWatcherTests.test_create_subprocess_with_pidfd  s    
/	I !!"45))'*C*C*EF 64^^1G1GHF)/DF);&J I  Q/  6%%&89--d3 :9 65 IH
 :9T%%&89--d3 :99sS   *C1"D$ 7D,D$ D1
C?
DD$ 
D!$E+:E	E+
E($E+r   N)r&   r'   r(   r)   rY  r  
skipUnlessr	   can_use_pidfdrd  r*   r   r   r   rD  rD    s5    	#0 
		%%'6

	4	

	4r   rD  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )SubprocessProactorTestsi  c                    > [         TU ]  5         [        R                  " 5       U l        U R                  U R                  5        g r   )r/   r0   r   ProactorEventLoopr2   r3   r4   s    r   r0   SubprocessProactorTests.setUp  s.    GMO113DI		*r   ra   )r&   r'   r(   r)   r0   r*   rb   rc   s   @r   ri  ri    s    	+ 	+r   ri  __main__).r   rS   r   r   r  rn  r   r   r   r   test.test_asyncior   r   r8   r   test.supportr   has_subprocess_supportSkipTestr   r   r	   check_sanitizerr   r   r   rw   r   BaseSubprocessTransportr   TestCaser,   re   r   r  r%  r+  r4  rm  rf  rg  r?  rD  ri  r&   r  r   r   r   <module>ru     s   	  
      #  1  "%%


=
>>
# 4(


A
BB >>4)HI NNDHH / 01(oEE <z22 <~F- F-R <<7 46)?)3)<)<66%;%/%8%864Z%8%8 46%;%/%8%86 !!#23&<&0&9&93	3;4j11 ;4|+/:3F3F + zMMO r   