
    daf;                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ 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"                  rd dlZnd dlmZ  ej(                  d	
      r ej*                  d      ej,                  ddgZej,                  ddj1                  d      gZd Z G d dej6                        Z G d dej:                        Z G d d      Zej@                  dk7  r G d de      Z! G d de!ej:                        Z" G d de!ej:                        Z# G d dej:                        Z$ G d  d!e!ej:                        Z% ejL                   ejN                         d"       G d# d$e!ej:                               Z( G d% d&ej:                        Z)n G d' d(eej:                        Z*e+d)k(  r ejX                          yy)*    N)mock)base_subprocess)
subprocess)utils)support)	os_helper)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     </root/Python-3.12.4/Lib/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.setUp3   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    r3   protocol	transports       r   create_transportz)SubprocessTransportTests.create_transport8   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_futurer6   _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    r3   r5   r4   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 )Nr8   z-<TestSubprocessTransport pid=-1 returncode=6>z(<TestSubprocessTransport pid=-1 running>z%<TestSubprocessTransport not started>)
r-   r9   r6   r:   r;   r<   repr_returncode_pidrP   rQ   s       r   test_subprocess_reprz-SubprocessTransportTests.test_subprocess_reprY   s    ((*"33F;	8!!!$		$$V,O;	
 !%	O6	
 	 $	O3	
 	r   r   )r$   r%   r&   r+   r6   rR   rW   __classcell__r0   s   @r   r(   r(   2   s    '
%4r   r(   c                   v   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 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drainrP   r   readwait)dataprocexitcoder!   s      r   runz.SubprocessMixin.test_stdin_stdout.<locals>.runv   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    ri   taskrh   r   r!   s        @r   test_stdin_stdoutz!SubprocessMixin.test_stdin_stdouts   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   r`   r   ra   communicate
returncode)rf   rg   r   r   r!   s       r   ri   z-SubprocessMixin.test_communicate.<locals>.run   s`      77 oo! D
 $(#3#3D#99NFF??F**
 :s!   6A,A(A,A*A,*A,rj   r   rk   r   rl   r   LONG_TIMEOUTr-   r;   r<   rm   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^   rr   )rg   r   r   r!   s      r   ri   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   ru   rm   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_shellre   r<   r    rg   rh   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 Nwin32)PROGRAM_BLOCKEDr-   r;   r   r`   rO   re   sysplatformassertIsInstanceintr<   rL   SIGKILLr    r!   rg   rt   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~   ra   sleeprK   rL   CTRL_BREAK_EVENTrO   re   r   r   r<   r   )r    blocking_shell_commandr   r   rg   rt   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   r`   rN   re   r   r   r   r   r<   rL   rM   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<   rK   rL   SIGHUPre   )rg   linert   r    s      r   rK   z5SubprocessMixin.test_send_signal.<locals>.send_signal  s]     ![[1133  }5  /#'99;.
!! 4 /s"   A5A1AA5*A3+A53A5)rL   r   SIG_DFLr   r   r-   r;   r   r`   r   ra   r<   )r    old_handlercoder!   rg   rK   rt   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  }t        j                         \  }| j	                  t        j
                  |       | j	                  t        j
                         t         j                  rht        j                  |      }t        j                  |d       t        j                  d| d      }ddlm}  |       }d|gi|_        t        |      }nd	| d
}t        |f      }| j                   j#                  t%        j&                  t(        j*                  d|fdt        j,                  i|      }fd}	 |	||      }
t/        j0                         5  | j3                  t4        t6        f| j                   j"                  |
       d d d        | j                   j#                  |j9                                y # 1 sw Y   3xY w)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                    K   | j                   j                  |       t        j                  d       | j                   j                          d {    y 7 w)Ns   go)r   rb   osrc   )rg   rf   wfds     r   write_stdinz;SubprocessMixin.test_stdin_broken_pipe.<locals>.write_stdin7  s=     JJT"HHS% **""$$$s   AAAA)r   PIPE_MAX_SIZEr   pipe
addCleanuprP   
MS_WINDOWSmsvcrtget_osfhandleset_handle_inheritabletextwrapdedentr   r   lpAttributeListdictr-   r;   r   r`   r   r   ra   
test_utilsdisable_loggerrI   BrokenPipeErrorConnectionResetErrorre   )r    
large_datarfdhandler   r   r   r"   rg   r   coror   s              @r   test_stdin_broken_pipez&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,&&( 	B0DE"ii::DB	B 			$$TYY[1	B 	Bs   (2GGc                    dt         j                  z  }| j                  j                  t	        j
                  t        j                  ddt        j                              }| j                  j                  d        | j                  j                  |j                  |             | j                  j                  |j                                y )Nr   r   passr   c                      y r   r   )r-   msgs     r   <lambda>zESubprocessMixin.test_communicate_ignore_broken_pipe.<locals>.<lambda>Q  s    r   )r   r   r-   r;   r   r`   r   r   r   ra   set_exception_handlerrs   re   )r    r   rg   s      r   #test_communicate_ignore_broken_pipez3SubprocessMixin.test_communicate_ignore_broken_pipeD  s    G111
 yy++**f oo
 			''(>?		$$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!   kwr5   r4   connect_read_pipes       r   connect_read_pipe_mockz^SubprocessMixin.test_pause_reading.<locals>.test_pause_reading.<locals>.connect_read_pipe_mockb  sK     ,=t,Jr,J&J#	8*.))+	'+/99;	(!8,, 'Ks   AA>Ar   )r   r   limitr   )joinr-   r   r   r`   r   r   r   ra   
_transportget_pipe_transportrs   )
r   r   rg   stdout_transportr   r   r   r   r    sizes
         @r   test_pause_readingz>SubprocessMixin.test_pause_reading.<locals>.test_pause_readingY  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   r@   r   )r    r   r   r5   r   r   s   `   @@r   r   z"SubprocessMixin.test_pause_readingU  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   r`   r   r   r   ra   rs   re   messager   rg   r   r   rh   s         r   len_messagez?SubprocessMixin.test_stdin_not_inheritable.<locals>.len_message  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   outputrh   s       r   test_stdin_not_inheritablez*SubprocessMixin.test_stdin_not_inheritable  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   rg   r   r   rh   s        r   empty_inputz5SubprocessMixin.test_empty_input.<locals>.empty_input  s     JD 77d((--))..)).. D $(#3#3C#88NFF!YY[(HH%% 9(r      0r   r   r    r   r   rh   s       r   test_empty_inputz SubprocessMixin.test_empty_input  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   r`   r   r   r   DEVNULLra   rs   re   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   r`   r   r   r   ra   r   rs   re   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   rh   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   rh   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   rh   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   r`   r   r-   create_taskre   	call_sooncancelCancelledErrorrO   )rg   rn   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   r`   r   r-   r  r  r  r  r   rn   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   rO   zKSubprocessMixin.test_close_kill_running.<locals>.kill_running.<locals>.kill8  s    "r   r      )r-   r  r   r  r   get_extra_inforO   r=   rP   rl   _wait)	creater5   r4   rO   rg   rt   r#  r$  r    s	         @@r   kill_runningz=SubprocessMixin.test_close_kill_running.<locals>.kill_running2  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skipTestrF   r>   r  )r    r)  rt   killeds   `   r   test_close_kill_runningz'SubprocessMixin.test_close_kill_running0  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&  rO   re   r   r   pollr=   rP   r@   )r(  r5   r4   rg   proc_returncodetransport_returncoder    s         r   r)  zCSubprocessMixin.test_close_dont_kill_finished.<locals>.kill_runningW  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  assertIsNotNonerF   rD   r   r   
isinstanceSubprocessFastWatcherTestswarningscatch_warningssimplefilterDeprecationWarningr   get_child_watcher
_callbacksclear)r    r)  resultr1  transport_return_coder,  s   `     r   test_close_dont_kill_finishedz-SubprocessMixin.test_close_dont_kill_finishedU  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_effectr7  r8  rI   r   r`   r   r<   )r    r   targetpopenexcwarnss         r   _test_popen_errorz!SubprocessMixin._test_popen_error  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;   rJ  r    s    r   test_popen_errorz SubprocessMixin.test_popen_error  s$     			$$T%;%;$%;%GHr   c                 v    | j                   j                  | j                  t        j                               y rL  )r-   r;   rJ  r   ra   rM  s    r    test_popen_error_with_stdin_pipez0SubprocessMixin.test_popen_error_with_stdin_pipe  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   r`   r   r   r   ra   r   rd   r   )r   processrf   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    rT  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)rI   
ValueErrorr   r`   r   r   rM  s   r   rT  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  rU  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rY  )rI   r^  r   r~   r   r   rM  s   r   rT  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r_  r  rU  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   r`   r   FakePathr   r   re   )ps    r   rT  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=)rF   r-   r;   rU  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   )rs   r<   rt   r   r  re   r   r>  )r    r   r   rg   r   _rn   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   r   environcopyr   r~   r   ra   cmdrr  rg   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;   rl  r    rw  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'))bazrp  rq  )	r   r   r   rs  rt  r   r`   r   ra   ru  s      r   rw  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   bazrx  rz  r{  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_   rj   r   r   )r   r`   rk   r   ra   rs   r<   rt   gatherrangere   )rg   r   rk  r    s      r   rw  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rx  r  r{  s   ` r   test_subprocess_concurrent_waitz/SubprocessMixin.test_subprocess_concurrent_wait  s    
	5 			$$TV,r   c                   	
 g 	ddg}g d
ddg} G 	
fddt         j                        d
	fd}| j                  j                   |             	| j	                  t        	      t        
             |D ci c]  }|g  }}	D ]$  }|d	k(  r	|d d \  }}||   j                  |       & |D ]  }| j                  ||   ||	f        y c c}w )Nr   r   ))pipe_data_receivedr   s   stdout)r  r   s   stderr)pipe_connection_lostr   )r  r   rA   r  r  c                   b    e Zd Zdej                  ddfdZd	 fdZd	 fdZd	 fdZ fdZ	y)
CSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocolexit_futurery  Nc                     || _         y r   )r  )r    r  s     r   __init__zLSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.__init__&  s
    #. r   c                 N    j                  d||f       | j                          y )Nr  append
exit_maybe)r    fdrf   eventss      r   r  zVSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.pipe_data_received)  s!    3R>?!r   c                 L    j                  d|f       | j                          y )Nr  r  )r    r  rH  r  s      r   r  zXSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.pipe_connection_lost-  s    5r:;!r   c                 H    j                  d       | j                          y )NrA   r  )r    r  s    r   rA   zRSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.process_exited1  s    ./!r   c                 l    t              t              k\  r| j                  j                  d       y y r"  )lenr  
set_result)r    r  expecteds    r   r  zNSubprocessMixin.test_subprocess_protocol_events.<locals>.MyProtocol.exit_maybe5  s,    v;#h-/$$//5 0r   rx  )
r$   r%   r&   r   Futurer  r  r  rA   r  )r  r  s   r   
MyProtocolr  %  s.    /GNN /t /"""6r   r  c                    K   t        j                         } t        j                         d}| j                  fdt        j
                  d|d        d {   \  }} d {    |j                          S 7 #7 w)NzBimport sys; sys.stdout.write("stdout"); sys.stderr.write("stderr")c                              S r   r   )r  r  s   r   r   zOSubprocessMixin.test_subprocess_protocol_events.<locals>.main.<locals>.<lambda>>  s    j>U r   r   r   )r   get_running_loopr  r  r   r   rP   )r-   r   r5   rk  r  r  r  s       @r   rw  z=SubprocessMixin.test_subprocess_protocol_events.<locals>.main:  sy     ++-D!..*KWD!%!5!56U69nndDX\ "6 "^ ^LIqOOM^s$   ABA>B'B (B BrA   rx  )r   r  r-   r;   assertSetEqualsetr  r<   )r    fdsper_fd_expectedrw  r  per_fd_eventseventnamer  r  r  s           @@@r   test_subprocess_protocol_eventsz/SubprocessMixin.test_subprocess_protocol_events  s     !f
 !"

	633 	6*		 --df5 	CKX7 +..BR.. 	+E((RayHD""$$T*		+  	OB]2."fN	O /s   =
C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   r`   r   ra   rs   decodestrip)rv  r!   rg   r   rk  s        r   get_command_stdoutzNSubprocessMixin.test_subprocess_communicate_stdout.<locals>.get_command_stdoutW  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())r  r   r  r   r   r<   )ioutputsoutresr  r    s       r   rw  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    rw  r  s   ` @r   "test_subprocess_communicate_stdoutz2SubprocessMixin.test_subprocess_communicate_stdoutU  s#    	+	+ 			$$TV,r   rx  )+r$   r%   r&   ro   rw   rz   r   r   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r-  r@  rJ  rN  rP  rV  r`  rc  ri  rl  r|  r  r  r  r  r   r   r   r[   r[   q   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-@OD-r   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Nr3  )r*   r+   r   get_event_loop_policynew_event_loopr-   r.   _get_watcherattach_loopr7  r8  r9  r:  set_child_watcherr    policywatcherr0   s      r   r+   zSubprocessWatcherMixin.setUpm  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  r7  r8  r9  r:  r;  r  r  rP   r  s      r   r  zSubprocessWatcherMixin.tearDowny  s    G224F((* /%%h0BC 224((./ %MMO/ /s   <BB')r$   r%   r&   Watcherr+   r  rX   rY   s   @r   r  r  i  s    
	2	 	r   r  c                       e Zd Zd Zy)SubprocessThreadedWatcherTestsc                 *    t        j                         S r   )r	   ThreadedChildWatcherrM  s    r   r  z+SubprocessThreadedWatcherTests._get_watcher  s    3355r   Nr$   r%   r&   r  r   r   r   r  r    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	   SafeChildWatcherrM  s    r   r  z'SubprocessSafeWatcherTests._get_watcher  2    !!"45 6"3356 6 6   4=Nr  r   r   r   r  r        	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	   MultiLoopChildWatcherrM  s    r   
test_warnsz%MultiLoopChildWatcherTests.test_warns  s2    !!"45 41134 4 4s   4=N)r$   r%   r&   r  r   r   r   r  r    s    	4r   r  c                       e Zd Zd Zy)r6  c                     | j                  t              5  t        j                         cd d d        S # 1 sw Y   y xY wr   )r  r:  r	   FastChildWatcherrM  s    r   r  z'SubprocessFastWatcherTests._get_watcher  r  r  Nr  r   r   r   r6  r6    r  r   r6  (operating system does not support pidfdsc                       e Zd Zd Zy)SubprocessPidfdWatcherTestsc                 *    t        j                         S r   )r	   PidfdChildWatcherrM  s    r   r  z(SubprocessPidfdWatcherTests._get_watcher  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  rI   RuntimeErrorr   r`   r   rg  r   r   add_child_handlerassert_not_called)r    r  s   r   rT  zWGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher.<locals>.execute  s     ))'2&&|4 J$;;!**3>>:D&J J JJ ));;=JJ Js.   +B <B*B+B/#B BBB loop_factoryr3  )r   create_autospecr   AbstractChildWatcher	is_activereturn_valueRunnerr  r7  r8  r9  r:  rF   ri   assertListEqual
mock_callscall	__enter____exit__r  ANY)r    rT  runnerr  s   `  @r   2test_create_subprocess_fails_with_inactive_watcherzFGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher  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_   rj   )r   r`   rk   r   ra   rs   rt   )rg   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   t        j                         5  t        j                  dt               j	                  t
        t        f      5  t        j                         j                          d d d        d d d        t        j                  t        j                                  d {   S # 1 sw Y   BxY w# 1 sw Y   FxY w7 w)Nerror)r7  r8  r9  r:  rI   r  r   r  get_event_loop	to_threadri   )r  r    s   r   rw  zCGenericWatcherTests.test_create_subprocess_with_pidfd.<locals>.main  s     ,,. I))'3EF **L:L+MN I557FFHII %..w{{IKHHHI II I Is@   C6B>#B21B>94C-C
.C2B;	7B>>CCr  r   rj   )	r  r:  r   r  r  r  r  ri   r<   )r    rw  r  rt   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    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.   r/   s    r   r+   zSubprocessProactorTests.setUp  s.    GMO113DI		*r   )r$   r%   r&   r+   rX   rY   s   @r   r   r     s    	+ 	+r   r   __main__)-r   rL   r   r   r  r7  r   r   r   r   test.test_asyncior   r   r2   r   test.supportr   r   r   r	   check_sanitizerSkipTestr   r   r   rk   r   BaseSubprocessTransportr   TestCaser(   r[   r   r  r  r  r  r6  r  r  r  r  r   r$   rw  r   r   r   <module>r
     s   	  
      #  1  " # 74(
(

A
BB >>4)HI NNDHH / 01(oEE <z22 <~s- s-l <<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;4j11 ;4|+/:3F3F + zHMMO r   