
    z%i]                        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 d dlZd dlmZ d dlmZ d dl	m
Z d dlmZ d dlmZ ej                   dk7  rd d	lmZ  ej$                  d
      r ej&                  d      ej(                  ddgZej(                  ddj-                  d      gZd Z G d dej2                        Z G d dej6                        Z G d d      Zej                   dk7  r G d de      Z G d deej6                        Z G d deej6                        Z  G d dej6                        Z! G d  d!eej6                        Z" ejF                   ejH                         d"       G d# d$eej6                               Z% G d% d&ej6                        Z&n G d' d(eej6                        Z'e(d)k(  r ejR                          yy)*    N)mock)base_subprocess)
subprocess)utils)support)	os_helperwin32)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                  .    t        j                  d        y N)asyncioset_event_loop_policy     U/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_asyncio/test_subprocess.pytearDownModuler       s    !!$'r   c                       e Zd Zd Zy)TestSubprocessTransportc                     t        j                         | _        d | j                  _        d | j                  _        d | j                  _        d| j                  _        y )N)r   Mock_procstdinstdoutstderrpid)selfargskwargss      r   _startzTestSubprocessTransport._start%   s>    YY[


 

 



r   N)__name__
__module____qualname__r$   r   r   r   r   r   $   s    r   r   c                   2     e Zd Z fdZddZd Zd Z xZS )SubprocessTransportTestsc                     t         |           | j                         | _        | j	                  | j                         y r   )supersetUpnew_test_looploopset_event_loopr!   	__class__s    r   r,   zSubprocessTransportTests.setUp.   s.    &&(	DII&r   c                 p    t        j                         }t        | j                  |dgdd d d d|	      }||fS )NtestFr   )waiter)r   r   r   r.   )r!   r4   protocol	transports       r   create_transportz)SubprocessTransportTests.create_transport3   s>    99;+		8fXudD!F<	 8$$r   c                    | j                   j                         }| j                  |      \  }}|j                  d       | j                   j	                  |       | j                  |j                         d       | j                  |j                  j                         | j                  |j                  j                         | j                  |j                  j                         | j                  |j                  j                  d   d       | j                  |j                                | j                  |j                          | j                  |j"                         | j                  |j$                         | j'                  t(        |j*                  t,        j.                         | j'                  t(        |j0                         | j'                  t(        |j2                         |j5                          y )N   r   r   )r.   create_futurer7   _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!   r4   r6   r5   s       r   test_proc_exitedz)SubprocessTransportTests.test_proc_exited:   ss   ((*"33F;	8!!!$		$$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                    | j                   j                         }| j                  |      \  }}|j                  d       | j                   j	                  |       | j                  t        |      d       d |_        | j                  t        |      d       d |_        d |_        | j                  t        |      d       |j                          y )Nr9   z-<TestSubprocessTransport pid=-1 returncode=6>z(<TestSubprocessTransport pid=-1 running>z%<TestSubprocessTransport not started>)
r.   r:   r7   r;   r<   r=   repr_returncode_pidrQ   rR   s       r   test_subprocess_reprz-SubprocessTransportTests.test_subprocess_reprT   s    ((*"33F;	8!!!$		$$V,O;	
 !%	O6	
 	 $	O3	
 	r   r   )r%   r&   r'   r,   r7   rS   rX   __classcell__r1   s   @r   r)   r)   -   s    '
%4r   r)   c                   |   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ej                  ej                  d	k(  d
      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej                  ej                  dk7  d      d        Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d+d&Z'd+d'Z(d+d(Z)d) Z*d* Z+y%),SubprocessMixinc                     t         fd} |d      }t        j                  |d      }| j                  j	                  |      \  }}| j                  |d       | j                  |d       y )Nc                   K   t        j                  t        j                  t        j                  d d {   }|j                  j                  |        |j                  j                          d {    |j                  j                          |j                  j                          d {   } |j                          d {   }|| fS 7 7 ^7 $7 wNr   r   )r   create_subprocess_execr   PIPEr   writedrainrQ   r   readwait)dataprocexitcoder"   s      r   runz.SubprocessMixin.test_stdin_stdout.<locals>.runq   s      77 oo! D JJT"**""$$$JJ ))++D!YY[(Hd## % ,(sE   6CC<C6C7;C2C3C
C	CCCC	   some datag      N@r   )PROGRAM_CATr   wait_forr.   r<   r=   r!   rj   taskri   r   r"   s        @r   test_stdin_stdoutz!SubprocessMixin.test_stdin_stdoutn   sd    	$" < d+9977=&1%.r   c                     t         fd} |d      }t        j                  |t        j                        }| j
                  j                  |      \  }}| j                  |d       | j                  |d       y )Nc                    K   t        j                  t        j                  t        j                  d d {   }|j	                  |        d {   \  }}|j
                  |fS 7 .7 wr_   r   ra   r   rb   communicate
returncode)rg   rh   r   r   r"   s       r   rj   z-SubprocessMixin.test_communicate.<locals>.run   s`      77 oo! D
 $(#3#3D#99NFF??F**
 :s!   6A,A(A,A*A,*A,rk   r   rl   r   rm   r   LONG_TIMEOUTr.   r<   r=   rn   s        @r   test_communicatez SubprocessMixin.test_communicate   sj    	+ < g&:&:;9977=&1%.r   c                     t         fd} |       }t        j                  |t        j                        }| j
                  j                  |      \  }}| j                  |d       | j                  |d       y )Nc                     K   t        j                  t        j                  t        j                  d d {   } | j	                          d {   \  }}| j
                  |fS 7 -7 wr_   rs   )rh   r   r   r"   s      r   rj   z8SubprocessMixin.test_communicate_none_input.<locals>.run   s^      77 oo! D
 $(#3#3#55NFF??F**
 6s!   6A+A'A+A)A+)A+r   r   rv   rn   s        @r   test_communicate_none_inputz+SubprocessMixin.test_communicate_none_input   sg    	+ ug&:&:;9977=&1%%r   c                     | j                   j                  t        j                  d            }| j                   j                  |j	                               }| j                  |d       y )Nzexit 7   r.   r<   r   create_subprocess_shellrf   r=   r!   rh   ri   s      r   
test_shellzSubprocessMixin.test_shell   sP    yy++++H5
 99//		<1%r   c                     | j                   j                  t        j                  dd            }| j                   j                  |j	                               }| j                  |d       y )Nzexit 8T)start_new_session   r~   r   s      r   test_start_new_sessionz&SubprocessMixin.test_start_new_session   sV    yy++++"&
 99//		<1%r   c                 n   t         }| j                  j                  t        j                  |       }|j                          | j                  j                  |j                               }t        j                  dk(  r| j                  |t               y | j                  t        j                   |       y Nr	   )PROGRAM_BLOCKEDr.   r<   r   ra   rP   rf   sysplatformassertIsInstanceintr=   rM   SIGKILLr!   r"   rh   ru   s       r   	test_killzSubprocessMixin.test_kill   s    yy++**D1
 			YY11$))+>
<<7"!!*c2 fnn_j9r   c                    t         j                  dk(  rt         j                   d}nd}d}t         j                  dk(  rddlm} |}| j
                  j                  t        j                  |t        j                  j                  |            }| j
                  j                  t        j                  d             t         j                  dk(  r|j                  t        j                         |j                          | j
                  j                  |j                               }t         j                  dk(  r| j!                  |t"               y | j%                  t        j&                   |       y )Nr	   z  -c "import time; time.sleep(2)"zsleep 1; sleep 1r   )CREATE_NEW_PROCESS_GROUP)r   creationflags   )r   r   
executabler   r   r.   r<   r   r   rb   sleeprL   rM   CTRL_BREAK_EVENTrP   rf   r   r   r=   r   )r!   blocking_shell_commandr   r   rh   ru   s         r   test_kill_issue43884z$SubprocessMixin.test_kill_issue43884   s   <<7"(+'77W%X"%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                 n   t         }| j                  j                  t        j                  |       }|j                          | j                  j                  |j                               }t        j                  dk(  r| j                  |t               y | j                  t        j                   |       y r   )r   r.   r<   r   ra   rO   rf   r   r   r   r   r=   rM   rN   r   s       r   test_terminatezSubprocessMixin.test_terminate   s    yy++**D1
 	YY11$))+>
<<7"!!*c2 fnn_j9r   r	   zDon't have SIGHUPc                 6    t        j                   t         j                  t         j                        }	 d}t        j                  d|g} j
                  j                  t        j                  |dt        j                  i      } fd} j
                  j                   ||            } j                  t         j                   |       t        j                   t         j                  |       y # t        j                   t         j                  |       w xY w)Nz<import time; print("sleeping", flush=True); time.sleep(3600)r   r   c                    K   | j                   j                          d {   }j                  |d       | j                  t        j
                         | j                          d {   }|S 7 O7 w)Ns	   sleeping
)r   readliner=   rL   rM   SIGHUPrf   )rh   lineru   r!   s      r   rL   z5SubprocessMixin.test_send_signal.<locals>.send_signal  s]     ![[1133  }5  /#'99;.
!! 4 /s"   A5A1AA5*A3+A53A5)rM   r   SIG_DFLr   r   r.   r<   r   ra   r   rb   r=   )r!   old_handlercoder"   rh   rL   ru   s   `      r   test_send_signalz SubprocessMixin.test_send_signal   s    
 mmFMM6>>B	6QDNND$/D99//..%??D" 55k$6GHJfmm^Z8MM&--5FMM&--5s   BC2 2&Dc                     dt         j                  z  }| j                  j                  t	        j
                  t        j                  ddt        j                              }||fS )N   xr   passr   )
r   PIPE_MAX_SIZEr.   r<   r   ra   r   r   r   rb   )r!   
large_datarh   s      r   prepare_broken_pipe_testz(SubprocessMixin.prepare_broken_pipe_test  sU    G111
 yy++**f oo
 j!!r   c                 H   | j                         \  }}d } |||      }t        j                         5  | j                  t        t
        f| j                  j                  |       d d d        | j                  j                  |j                                y # 1 sw Y   3xY w)Nc                    K   t        j                  d       d {    | j                  j                  |       | j                  j	                          d {    y 7 B7 w)Ng      ?)r   r   r   rc   rd   )rh   rg   s     r   write_stdinz;SubprocessMixin.test_stdin_broken_pipe.<locals>.write_stdin"  sI     --$$$JJT"**""$$$ %$s!   A"A<A"A A" A")	r   
test_utilsdisable_loggerrJ   BrokenPipeErrorConnectionResetErrorr.   r<   rf   )r!   rh   r   r   coros        r   test_stdin_broken_pipez&SubprocessMixin.test_stdin_broken_pipe  s    88:j	%
 4,&&( 	B0DE"ii::DB	B 			$$TYY[1	B 	Bs   2BB!c                    | j                         \  }}| j                  j                  d        | j                  j                  |j	                  |             | j                  j                  |j                                y )Nc                      y r   r   )r.   msgs     r   <lambda>zESubprocessMixin.test_communicate_ignore_broken_pipe.<locals>.<lambda>2  s    r   )r   r.   set_exception_handlerr<   rt   rf   )r!   rh   r   s      r   #test_communicate_ignore_broken_pipez3SubprocessMixin.test_communicate_ignore_broken_pipe.  s_    88:j 			''(>?		$$T%5%5j%AB		$$TYY[1r   c                 0    ddz  dz    fd} j                   j                   |             \  }} j                  |dz          j                  |j                  j
                          j                  |j                  j
                         y )N
      r   c                    K   dj                  dd	z  df      } j                  j                  fd}|j                  _        t        j                  t
        j                  d| t        j                  j                  t        j                  j                         d {   }|j                  j                  d      }|j                          d {   \  }}||fS 7 >7 w)	N
r   zsys.stdout.write("x" * %s)sys.stdout.flush()c                     K    | i | d {   \  }}t        j                         |_        t        j                         |_        ||fS 7 =wr   )r   r   pause_readingresume_reading)r"   kwr6   r5   connect_read_pipes       r   connect_read_pipe_mockz^SubprocessMixin.test_pause_reading.<locals>.test_pause_reading.<locals>.connect_read_pipe_mockC  sK     ,=t,Jr,J&J#	8*.))+	'+/99;	(!8,, 'Ks   AA>Ar   )r   r   limitr   )joinr.   r   r   ra   r   r   r   rb   
_transportget_pipe_transportrt   )
r   r   rh   stdout_transportr   r   r   r   r!   sizes
         @r   test_pause_readingz>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5NFF
 ,-- 6s$   B C'$C#%2C'C%C'%C'r   )r.   r<   r=   r?   r   rA   r   )r!   r   r   r6   r   r   s   `   @@r   r   z"SubprocessMixin.test_pause_reading6  s~    	A	.D !II889K9MN	-	//667	00778r   c                     d }| j                   j                   |d            \  }}| j                  |j                         d       | j                  |d       y )Nc           	      ~  K   d}t        j                  t        j                  d|t         j                  j
                  t         j                  j
                  t         j                  j
                  d       d {   }|j                  |        d {   \  }}|j                          d {   }||fS 7 <7 %7 wN5import sys; data = sys.stdin.read(); print(len(data))r   Fr   r   r   	close_fdsr   ra   r   r   r   rb   rt   rf   messager   rh   r   r   ri   s         r   len_messagez?SubprocessMixin.test_stdin_not_inheritable.<locals>.len_messagee  s     JD 77d((--))..)).. D $(#3#3G#<<NFF!YY[(HH%% =(6   A8B=:B7;B=B9B=.B;/	B=9B=;B=   abc   3r   r.   r<   r=   rstrip)r!   r   outputri   s       r   test_stdin_not_inheritablez*SubprocessMixin.test_stdin_not_inheritableb  sM    	&  9977F8KL$/1%r   c                     d }| j                   j                   |             \  }}| j                  |j                         d       | j                  |d       y )Nc            	      ~  K   d} t        j                  t        j                  d| t         j                  j
                  t         j                  j
                  t         j                  j
                  d       d {   }|j                  d       d {   \  }}|j                          d {   }||fS 7 <7 %7 w)Nr   r   Fr   r   r   r   rh   r   r   ri   s        r   empty_inputz5SubprocessMixin.test_empty_input.<locals>.empty_inputx  s     JD 77d((--))..)).. D $(#3#3C#88NFF!YY[(HH%% 9(r      0r   r   r!   r   r   ri   s       r   test_empty_inputz SubprocessMixin.test_empty_inputv  J    	&  9977F$/1%r   c                     d }| j                   j                   |             \  }}| j                  |j                         d       | j                  |d       y )Nc            	      |  K   d} t        j                  t        j                  d| t         j                  j
                  t         j                  j                  t         j                  j                  d       d {   }|j                          d {   \  }}|j                          d {   }||fS 7 ;7 %7 wr   )	r   ra   r   r   r   DEVNULLrb   rt   rf   r   s        r   r   z7SubprocessMixin.test_devnull_input.<locals>.empty_input  s     JD 77d((00))..)).. D $(#3#3#55NFF!YY[(HH%% 6(s6   A8B<:B6;B<B8B<-B:.	B<8B<:B<r   r   r   r   s       r   test_devnull_inputz"SubprocessMixin.test_devnull_input  r   r   c                     d }| j                   j                   |             \  }}| j                  |d        | j                  |d       y )Nc            	      ~  K   d} t        j                  t        j                  d| t         j                  j
                  t         j                  j                  t         j                  j
                  d       d {   }|j                  d       d {   \  }}|j                          d {   }||fS 7 <7 %7 wNr   r   Fr   r   	r   ra   r   r   r   rb   r   rt   rf   r   s        r   empty_outputz9SubprocessMixin.test_devnull_output.<locals>.empty_output  s     JD 77d((--))11)).. D $(#3#3F#;;NFF!YY[(HH%% <(r   r   r.   r<   r=   )r!   r   r   ri   s       r   test_devnull_outputz#SubprocessMixin.test_devnull_output  sD    	&  9977G&1%r   c                     d }| j                   j                   |             \  }}| j                  |d        | j                  |d       y )Nc            	      ~  K   d} t        j                  t        j                  d| t         j                  j
                  t         j                  j
                  t         j                  j                  d       d {   }|j                  d       d {   \  }}|j                          d {   }||fS 7 <7 %7 wr   r   r   s        r   empty_errorz7SubprocessMixin.test_devnull_error.<locals>.empty_error  s     JD 77d((--))..))11 D $(#3#3F#;;NFF!YY[(HH%% <(r   r   r   )r!   r   r   ri   s       r   test_devnull_errorz"SubprocessMixin.test_devnull_error  sD    	&  9977F&1%r   linuxzDon't have /dev/stdinc                     d }| j                   j                   |d            \  }}| j                  |j                         d       | j                  |d       y )Nc           	      ~  K   d}t        j                  t        j                  d|t         j                  j
                  t         j                  j
                  t         j                  j
                  d       d {   }|j                  |        d {   \  }}|j                          d {   }||fS 7 <7 %7 w)Nz?file = open("/dev/stdin"); data = file.read(); print(len(data))r   Fr   r   r   s         r   devstdin_inputz;SubprocessMixin.test_devstdin_input.<locals>.devstdin_input  s     TD 77d((--))..)).. D $(#3#3G#<<NFF!YY[(HH%% =(r   r   r   r   r   )r!   r   r   ri   s       r   test_devstdin_inputz#SubprocessMixin.test_devstdin_input  sM    	&  9977v8NO$/1%r   c                 P      fd} j                   j                   |              y )Nc                    K   t        j                  t          d {   } j                  j	                  | j                               }j                  j                  |j                         	 | d {    |j                          | j                          | j                          d {    y 7 7 ?# t         j                  $ r Y Rw xY w7 "wr   )
r   ra   r   r.   create_taskrf   	call_sooncancelCancelledErrorrP   )rh   ro   r!   s     r   cancel_waitz=SubprocessMixin.test_cancel_process_wait.<locals>.cancel_wait  s      77IID 99((5DII,


 KKM IIK))+ J ))  sR   CB4AC1B8 6B67B8 ;3C.C/C6B8 8CCCCr.   r<   )r!   r   s   ` r   test_cancel_process_waitz(SubprocessMixin.test_cancel_process_wait  s    	$ 			$$[]3r   c                       fd}t        j                         5   j                  j                   |              d d d        y # 1 sw Y   y xY w)Nc                    K   t        j                  t         } j                  j	                  |       }j                  j                  |j                         	 | d {    y 7 # t         j                  $ r Y y w xY wwr   )r   ra   r   r.   r   r   r   r   r   ro   r!   s     r   cancel_make_transportzYSubprocessMixin.test_cancel_make_subprocess_transport_exec.<locals>.cancel_make_transport  sd     11?CD99((.DII,

)) s<   ABA(  A&!A( %B&A( (A>;B=A>>B)r   r   r.   r<   r!   r  s   ` r   *test_cancel_make_subprocess_transport_execz:SubprocessMixin.test_cancel_make_subprocess_transport_exec  sE    	 &&( 	BII(()>)@A	B 	B 	Bs   !AAc                       fd}t        j                         5   j                  j                   |              t        j                   j                         d d d        y # 1 sw Y   y xY w)Nc                  8  K    j                   j                  t        j                  gt         } j                   j                  |       }j                   j                  |j                         	 | d {    y 7 # t        j                  $ r Y y w xY wwr   )	r.   subprocess_execr   SubprocessProtocolr   r   r   r   r   r  s     r   r  zDSubprocessMixin.test_cancel_post_init.<locals>.cancel_make_transport   sz     ,499,,W-G-G ?.=?D99((.DII,

)) s<   A0B4B 9A?:B >B?B BBBB)r   r   r.   r<   run_brieflyr  s   ` r   test_cancel_post_initz%SubprocessMixin.test_cancel_post_init  sS    		 &&( 	.II(()>)@A""499-	. 	. 	.s   A A$$A-c                      fd}t        j                         5  	  j                  j                   |             \  }}d d d         j                          j                         t        j                   j                         y # t        j
                  $ r  j                  d       Y pw xY w# 1 sw Y   uxY w)Nc                    K    j                   j                  t        j                  gt         } |  d {   \  }}dfd}|j                  d      }|j                  ||_        |j                         }|j                          t        j                  |j                         d       d {    |fS 7 7 
w)NFc                      d          y )NTr   )kill_called	orig_kills   r   rP   zKSubprocessMixin.test_close_kill_running.<locals>.kill_running.<locals>.kill  s    "r   r      )r.   r  r   r  r   get_extra_inforP   r>   rQ   rm   _wait)	creater6   r5   rP   rh   ru   r  r  r!   s	         @@r   kill_runningz=SubprocessMixin.test_close_kill_running.<locals>.kill_running  s     .TYY..w/I/I A0?AF(.,IxK
 ++L9D		IDI"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   r.   r<   r   TimeoutErrorskipTestrG   r?   r  )r!   r  ru   killeds   `   r   test_close_kill_runningz'SubprocessMixin.test_close_kill_running  s    	-( &&( 	%)YY%A%A N&"
F	 	*% 	tyy) '' H	 	s(   B4#B

$B1.B40B11B44B=c                 z     fd}t        j                         5   j                  j                   |             }t        j                   j                         d d d        \  }}} j                  |        j                  |        j                  |       t        j                  dk7  rut         t              rdt        j                         5  t        j                  dt               t!        j"                         j$                  j'                          d d d        y y y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                    K    j                   j                  t        j                  gt         } |  d {   \  }}|j                  d      }|j                          |j                          t        j                         |_        |j                         }|j                         }|j                          |||j                  j                  fS 7 w)Nr   )r.   r  r   r  r   r  rP   rf   r   r   pollr>   rQ   rA   )r  r6   r5   rh   proc_returncodetransport_returncoder!   s         r   r  zCSubprocessMixin.test_close_dont_kill_finished.<locals>.kill_running8  s     .TYY..w/I/I A0?AF(.,Ix++L9D IIKIIK		DI"iikO#,#;#;#= OO#%9499;K;KLL #/s   5CCBCr	   ignore)r   r   r.   r<   r  assertIsNotNonerG   rE   r   r   
isinstanceSubprocessFastWatcherTestswarningscatch_warningssimplefilterDeprecationWarningr   get_child_watcher
_callbacksclear)r!   r  resultr   transport_return_coder  s   `     r   test_close_dont_kill_finishedz-SubprocessMixin.test_close_dont_kill_finished6  s   	M& &&( 	.YY11,.AF""499-	. :@6._-/0 	 
 LLG#4!;<((* ?%%h0BC))+66<<>? ? = $!	. 	.$? ?s   A D%AD1%D.1D:c           	        K   t         j                  dk(  rd}nd}t        j                  |      5 }t        }||_        t        j                  d      5 }| j                  |      5  t        j                  t         j                  dd|       d {    d d d        | j                  |g        d d d        d d d        y 7 /# 1 sw Y   .xY w# 1 sw Y    xY w# 1 sw Y   y xY ww)	Nr	   zasyncio.windows_utils.Popenzsubprocess.PopenT)recordr   r   r   )r   r   r   patchZeroDivisionErrorside_effectr&  r'  rJ   r   ra   r   r=   )r!   r   targetpopenexcwarnss         r   _test_popen_errorz!SubprocessMixin._test_popen_errora  s     <<7"2F'FZZ 	,5#C #E((5 ,&&s+ !88#	     +,		, 	, , ,		, 	,s^   .C'$CC&+CC
CC0C8	C'CCCC	CC$ C'c                 Z    | j                   j                  | j                  d              y Nr   )r.   r<   r9  r!   s    r   test_popen_errorz SubprocessMixin.test_popen_errort  s$     			$$T%;%;$%;%GHr   c                 v    | j                   j                  | j                  t        j                               y r;  )r.   r<   r9  r   rb   r<  s    r    test_popen_error_with_stdin_pipez0SubprocessMixin.test_popen_error_with_stdin_pipey  s+     			$$"""9	;r   c                 J    d }| j                   j                   |              y )Nc                  V  K   dj                  g d      } t        j                  t        j                  d| t        j
                  j                         d {   }	 |j                  j                  d       d {   }|rt        j                  d       d {    ny E7 J7 (7 w)Nr   )r   zfor _ in range(64):z     sys.stdout.write("x" * 4096)r   zsys.exit(1)r   )r   i   g333333?)
r   r   ra   r   r   r   rb   r   re   r   )r   processrg   s      r   executezDSubprocessMixin.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!   rC  s     r   #test_read_stdout_after_process_exitz3SubprocessMixin.test_read_stdout_after_process_exit  s    	& 			$$WY/r   c                 P      fd} j                   j                   |              y )Nc                  $  K    j                  t              5  t        j                  t        j
                  d       d {    d d d         j                  t              5  t        j                  t        j
                  d       d {    d d d         j                  t              5  t        j                  t        j
                  d       d {    d d d        y 7 # 1 sw Y   xY w7 f# 1 sw Y   exY w7 )# 1 sw Y   y xY wwNT)textzutf-8)encodingstrict)errors)rJ   
ValueErrorr   ra   r   r   r<  s   r   rC  zLSubprocessMixin.test_create_subprocess_exec_text_mode_fails.<locals>.execute  s    "":. C 77=AC C CC "":. J 77AHJ J JJ "":. I 77?GI I II ICC C
JJ J
II I   D)C(C&C(D$)C6C4C6D/)DDD	D&C((C1-D4C66C?;DDD	Dr  rD  s   ` r   +test_create_subprocess_exec_text_mode_failsz;SubprocessMixin.test_create_subprocess_exec_text_mode_fails  s    	I 			$$WY/r   c                 P      fd} j                   j                   |              y )Nc                  $  K    j                  t              5  t        j                  t        j
                  d       d {    d d d         j                  t              5  t        j                  t        j
                  d       d {    d d d         j                  t              5  t        j                  t        j
                  d       d {    d d d        y 7 # 1 sw Y   xY w7 f# 1 sw Y   exY w7 )# 1 sw Y   y xY wwrH  )rJ   rM  r   r   r   r   r<  s   r   rC  zMSubprocessMixin.test_create_subprocess_shell_text_mode_fails.<locals>.execute  s    "":. D 88>BD D DD "":. K 88BIK K KK "":. J 88@HJ J JJ JDD D
KK K
JJ JrN  r  rD  s   ` r   ,test_create_subprocess_shell_text_mode_failsz<SubprocessMixin.test_create_subprocess_shell_text_mode_fails  s    	J 			$$WY/r   c                 h    d }| j                  | j                  j                   |                    y )Nc                  ~  K   t        j                  t        j                  t        j
                        dd       d {   } | j                          d {    t        j                  t        j
                  ddt        j                  d             d {   } | j                          d {    y 7 v7 `7 !7 w)Nr   r   .)r   ra   r   FakePathr   r   rf   )ps    r   rC  zFSubprocessMixin.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sF   <B=B5B=B7A B=B9B=/B;0B=7B=9B=;B=)rG   r.   r<   rD  s     r   %test_create_subprocess_exec_with_pathz5SubprocessMixin.test_create_subprocess_exec_with_path  s(    	 	$))66wyABr   c                   K   | d {   }|j                          d {   \  }}| j                  ||       | j                  |j                  d       t        j                  |j                               }t        j                  d       d {    | j                  |j                         |j                         y 7 7 7 3w)Nr   )rt   r=   ru   r   r   rf   r   r-  )r!   r   r   rh   r   _ro   s          r   check_stdout_outputz#SubprocessMixin.check_stdout_output  s     z**,,	(!,""499;/mmA8 , 	s2   CCCCA0CC0CCCNc                 l    dd}| j                   j                  | j                   |       d             y )Nc                     K   t         j                   d} t        j                  j	                         }d|d<   t        j                  | |t        j                         d {   }|S 7 w)Nz8 -c "import os, sys; sys.stdout.write(os.getenv('FOO'))"barFOOenvr   )	r   r   osenvironcopyr   r   r   rb   cmdra  rh   s      r   mainz>SubprocessMixin.test_create_subprocess_env_shell.<locals>.main  s]     ~~&&^aC**//#CCJ 88Z__ D Ks   A A+"A)#A+s   barreturnNr.   r<   r[  r!   rg  s     r    test_create_subprocess_env_shellz0SubprocessMixin.test_create_subprocess_env_shell  s*    	 			$$T%=%=dff%MNr   c                 l    dd}| j                   j                  | j                   |       d             y )Nc                     K   t         j                  ddg} t        j                  j	                         }d|d<   t        j                  | |t        j                  d d {   }|S 7 w)Nr   z2import os, sys; sys.stdout.write(os.getenv('FOO'))bazr_  r`  )	r   r   rb  rc  rd  r   ra   r   rb   re  s      r   rg  z=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   bazrh  rj  rk  s     r   test_create_subprocess_env_execz/SubprocessMixin.test_create_subprocess_env_exec  s*    	 			$$T%=%=dff%MNr   c                 R     d fd} j                   j                   |              y )Nc            	        K   t        j                  t        t        j                  t        j                  d d {   } | j                  d       d {   \  }}j                  |d       j                  | j                  d       j                  t        j                  t        d      D cg c]  }| j                          c}  d {   | j                  gdz         y 7 7 c c}w 7 !w)Nr`   rk   r   r   )r   ra   rl   r   rb   rt   r=   ru   gatherrangerf   )rh   r   rZ  r!   s      r   rg  z=SubprocessMixin.test_subprocess_concurrent_wait.<locals>.main  s      77 oo! D
 #..|<<IFAV\2T__a07>>r3SADIIK3S#TT"oo.35
 = 4TTs@   :C5C*C5C,AC53C.
C5C3C5,C5.C5rh  r  rk  s   ` r   test_subprocess_concurrent_waitz/SubprocessMixin.test_subprocess_concurrent_wait  s    
	5 			$$TV,r   c                      g  G fddt         j                        d fd} j                  j                   |              y )Nc                   V    e Zd Zdej                  ddfdZd fdZd fdZd fdZy)	HSubprocessMixin.test_subprocess_consistent_callbacks.<locals>.MyProtocolexit_futureri  Nc                     || _         y r   )ry  )r!   ry  s     r   __init__zQSubprocessMixin.test_subprocess_consistent_callbacks.<locals>.MyProtocol.__init__  s
    #. r   c                 .    j                  d||f       y )Npipe_data_receivedappend)r!   fdrg   eventss      r   r}  z[SubprocessMixin.test_subprocess_consistent_callbacks.<locals>.MyProtocol.pipe_data_received  s    3R>?r   c                 (    j                  d       y )Npipe_connection_lostr~  )r!   r  r7  r  s      r   r  z]SubprocessMixin.test_subprocess_consistent_callbacks.<locals>.MyProtocol.pipe_connection_lost  s    45r   c                 ^    j                  d       | j                  j                  d       y )NrB   T)r  ry  
set_result)r!   r  s    r   rB   zWSubprocessMixin.test_subprocess_consistent_callbacks.<locals>.MyProtocol.process_exited   s$    ./  ++D1r   rh  )	r%   r&   r'   r   Futurer{  r}  r  rB   )r  s   r   
MyProtocolrx    s*    /GNN /t /@62r   r  c                  .  K   t        j                         } t        j                         d}| j                  fdt        j
                  d|d        d {   \  }} d {    |j                          j                  g d       y 7 67 +w)NzBimport sys; sys.stdout.write("stdout"); sys.stderr.write("stderr")c                              S r   r   )r  ry  s   r   r   zTSubprocessMixin.test_subprocess_consistent_callbacks.<locals>.main.<locals>.<lambda>  s    j>U r   r   r   ))r}  r   s   stdout)r}  r   s   stderrr  r  rB   )r   get_running_loopr  r  r   r   rQ   r=   )r.   r   r6   rZ  ry  r  r  r!   s       @r   rg  zBSubprocessMixin.test_subprocess_consistent_callbacks.<locals>.main  s     ++-D!..*KWD!%!5!56U69nndDX\ "6 "^ ^LIqOOV & 	^s$   ABBB'B(*BBrh  )r   r  r.   r<   )r!   rg  r  r  s   ` @@r   $test_subprocess_consistent_callbacksz4SubprocessMixin.test_subprocess_consistent_callbacks  s5    	233 	2	  			$$TV,r   c                 Z     d  fd} j                   j                   |              y )Nc                    K   t        j                  | g|dt         j                  j                  i d {   }|j	                          d {   \  }}|j                         j                         S 7 =7 'w)Nr   )r   ra   r   rb   rt   decodestrip)rf  r"   rh   r   rZ  s        r   get_command_stdoutzNSubprocessMixin.test_subprocess_communicate_stdout.<locals>.get_command_stdout  sq      77#*#5#5#:#: D #..00IFA==?((**	 1s!   5A9A5A9A7&A97A9c                    K   t        d      D  cg c]  } d|  	 }} t        j                  |D cg c]  } t        j                  dd|d        c}  d {   }j                  ||       y c c} w c c}w 7 !w)Nr   foor   zprint())rt  r   rs  r   r   r=   )ioutputsoutresr  r!   s       r   rg  z@SubprocessMixin.test_subprocess_communicate_stdout.<locals>.main  s     */)4QQCy4G4FM)O?B *<CNND*0q(9*; )O P PCS'* 5)O Ps&   B A4B #A9B A>"B r  )r!   rg  r  s   ` @r   "test_subprocess_communicate_stdoutz2SubprocessMixin.test_subprocess_communicate_stdout  s#    	+	+ 			$$TV,r   rh  ),r%   r&   r'   rp   rx   r{   r   r   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r/  r9  r=  r?  rE  rO  rR  rX  r[  rl  rp  ru  r  r  r   r   r   r\   r\   l   s   /4/$&$&	&::6: X__S\\W,.AB6 C6:"22*9X&(&&&&&&&& X__S\\W,.EF& G&&4.B".&#*J)?V,&I
;0.0 0"	C9
OO- -D-r   r\   c                   ,     e Zd ZdZ fdZ fdZ xZS )SubprocessWatcherMixinNc                    t         |           t        j                         }|j	                         | _        | j                  | j
                         | j                         }|j                  | j
                         t        j                         5  t        j                  dt               |j                  |       d d d        y # 1 sw Y   y xY wNr"  )r+   r,   r   get_event_loop_policynew_event_loopr.   r/   _get_watcherattach_loopr&  r'  r(  r)  set_child_watcherr!   policywatcherr1   s      r   r,   zSubprocessWatcherMixin.setUp.  s    GMO224F--/DI		*'')G		*((* 2%%h0BC((12 2 2s   ,CCc                 T   t         |           t        j                         }t	        j
                         5  t	        j                  dt               |j                         }|j                  d        d d d        j                  d        |j                          y # 1 sw Y   +xY wr  )r+   tearDownr   r  r&  r'  r(  r)  r*  r  r  rQ   r  s      r   r  zSubprocessWatcherMixin.tearDown:  s    G224F((* /%%h0BC 224((./ %MMO/ /s   <BB')r%   r&   r'   Watcherr,   r  rY   rZ   s   @r   r  r  *  s    
	2	 	r   r  c                       e Zd Zd Zy)SubprocessThreadedWatcherTestsc                 *    t        j                         S r   )r
   ThreadedChildWatcherr<  s    r   r  z+SubprocessThreadedWatcherTests._get_watcherG  s    3355r   Nr%   r&   r'   r  r   r   r   r  r  D  s    	6r   r  c                       e Zd Zd Zy)SubprocessSafeWatcherTestsc                     | j                  t              5  t        j                         cd d d        S # 1 sw Y   y xY wr   )assertWarnsr)  r
   SafeChildWatcherr<  s    r   r  z'SubprocessSafeWatcherTests._get_watcherM  2    !!"45 6"3356 6 6   4=Nr  r   r   r   r  r  J      	6r   r  c                       e Zd Zd Zy)MultiLoopChildWatcherTestsc                     | j                  t              5  t        j                          d d d        y # 1 sw Y   y xY wr   )r  r)  r
   MultiLoopChildWatcherr<  s    r   
test_warnsz%MultiLoopChildWatcherTests.test_warnsS  s2    !!"45 41134 4 4s   4=N)r%   r&   r'   r  r   r   r   r  r  Q  s    	4r   r  c                       e Zd Zd Zy)r%  c                     | j                  t              5  t        j                         cd d d        S # 1 sw Y   y xY wr   )r  r)  r
   FastChildWatcherr<  s    r   r  z'SubprocessFastWatcherTests._get_watcherZ  r  r  Nr  r   r   r   r%  r%  W  r  r   r%  (operating system does not support pidfdsc                       e Zd Zd Zy)SubprocessPidfdWatcherTestsc                 *    t        j                         S r   )r
   PidfdChildWatcherr<  s    r   r  z(SubprocessPidfdWatcherTests._get_watchere  s    0022r   Nr  r   r   r   r  r  ^  s    	3r   r  c                   b    e Zd Zd Z ej
                   ej                         d      d        Zy)GenericWatcherTestsc           
           t        j                  t        j                        dj                  _         fd}t        j                  t        j                        5 }t        j                         5  t        j                  dt                j                  |j                   |                    d d d        d d d         j                  j                  t         j                   j#                         t         j                   j	                         t         j                   j%                  t&        t         j(                  t         j(                        gj                         y # 1 sw Y   xY w# 1 sw Y   xY w)NFc                  D  K   t        j                          j                  t              5  t	        j
                  t        j                  t        j                        dd       d {    d d d        j                  j                          y 7 '# 1 sw Y   &xY ww)Nr   r   )r   r  rJ   RuntimeErrorr   ra   r   rV  r   r   add_child_handlerassert_not_called)r!   r  s   r   rC  zWGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher.<locals>.executeo  s     ))'2&&|4 J$;;!**3>>:D&J J JJ ));;=JJ Js.   +B <B*B+B/#B BBB loop_factoryr"  )r   create_autospecr   AbstractChildWatcher	is_activereturn_valueRunnerr  r&  r'  r(  r)  rG   rj   assertListEqual
mock_callscall	__enter____exit__r  ANY)r!   rC  runnerr  s   `  @r   2test_create_subprocess_fails_with_inactive_watcherzFGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcherk  s   **7+G+GHG-2G*> W-C-CD =,,. =))(4FG%%fjj&;<==   !3!3		##%		##%		""<488D6 !!	#= == =s%   !E46A E(6E4(E1	-E44E=r  c                     d  fd} j                  t              5  t        j                  t        j                                d d d        	 t        j
                  t        j                        5 }|j                   |             \  }}d d d         j                  d        j                  d        j                  t              5  t        j                  d        d d d        y # 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   y xY w#  j                  t              5  t        j                  d        d d d        w # 1 sw Y   w xY wxY w)Nc                     K   t        j                  t        t        j                  t        j                  d d {   } | j                  d       d {   \  }}| j                  |fS 7 .7 w)Nr`   rk   )r   ra   rl   r   rb   rt   ru   )rh   r   r   s      r   	in_threadzHGenericWatcherTests.test_create_subprocess_with_pidfd.<locals>.in_thread  s`     $;; $//%?? 
 (,'7'7'E!E..
 "Fs!   :A/A+A/A-A/-A/c                  
  K   j                  t              5  t        j                         j	                          d d d        t        j
                  t        j                                  d {   S # 1 sw Y   :xY w7 wr   )rJ   r  r   r  get_event_loop	to_threadrj   )r  r!   s   r   rg  zCGenericWatcherTests.test_create_subprocess_with_pidfd.<locals>.main  sb     &&|4 E113BBDE$..w{{IKHHHE EHs'   B#A54B0B1B5A>:Br  r   rk   )	r  r)  r   r  r  r  r  rj   r=   )r!   rg  r  ru   r   r  s   `    @r   !test_create_subprocess_with_pidfdz5GenericWatcherTests.test_create_subprocess_with_pidfd  s   
/I
 !!"45 G))'*C*C*EFG4^^1G1GH <F)/DF);&J<  Q/  6%%&89 4--d34 4G G< <
4 4T%%&89 4--d34 4 4sS   (C0$D 6C<,D D0C9<DD DE*E	 	E	EEN)	r%   r&   r'   r  r  
skipUnlessr
   can_use_pidfdr  r   r   r   r  r  i  s9    	#0 
		%K%%'6

	4	

	4r   r  c                        e Zd Z fdZ xZS )SubprocessProactorTestsc                     t         |           t        j                         | _        | j                  | j                         y r   )r+   r,   r   ProactorEventLoopr.   r/   r0   s    r   r,   zSubprocessProactorTests.setUp  s.    GMO113DI		*r   )r%   r&   r'   r,   rY   rZ   s   @r   r  r    s    	+ 	+r   r  __main__)*rb  rM   r   r  r&  r   r   r   r   test.test_asyncior   r   r3   r   test.supportr   r   r
   check_sanitizerSkipTestr   r   r   rl   r   BaseSubprocessTransportr   TestCaser)   r\   r  r  r  r  r%  r  r  r  r  r  r%   rg  r   r   r   <module>r     s   	  
     #  1  "<<7#74(
(

A
BB >>4)HI NNDHH / 01(oEE <z22 <~y
- y
-x <<7 46)?)3)<)<66%;%/%8%864Z%8%8 46%;%/%8%86 X!!!#23&<&0&9&93	364j11 64r+/:3F3F + zHMMO r   