
    <eUr                        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        dk    rd d	lmZ  ej        d
          r ej        d          ej        ddgZej        dd                    d          gZd Z G d dej                  Z G d dej                  Z G d d          Zej        dk    r G d de          Z G d deej                  Z  ej!        d           G d deej                              Z" G d d eej                  Z# G d! d"eej                  Z$d# Z% ej&         e%            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j+                     dS dS ),    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            d S N)asyncioset_event_loop_policy     8/usr/lib/python3.11/test/test_asyncio/test_subprocess.pytearDownModuler   !   s    !$'''''r   c                       e Zd Zd ZdS )TestSubprocessTransportc                     t          j                    | _        d | j        _        d | j        _        d | j        _        d| j        _        d S )N)r   Mock_procstdinstdoutstderrpid)selfargskwargss      r   _startzTestSubprocessTransport._start&   s:    Y[[

 
 

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                   d S r   )supersetUpnew_test_looploopset_event_loopr!   	__class__s    r   r,   zSubprocessTransportTests.setUp/   sC    &&((	DI&&&&&r   Nc                 l    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_transport4   sF    9;;+	8fXudD!F< < <	 8$$r   c                    | j                                         }|                     |          \  }}|                    d           | j                             |           |                     |                                d           |                     |j        j	                   |                     |j
        j	                   |                     |j        j	                   |                     |j        j        d         d           |                     |                                           |                     |j                   |                     |j                   |                     |j                   |                     t(          |j        t,          j                   |                     t(          |j                   |                     t(          |j                   |                                 d S )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;   s   ((**"33F;;	8!!!$$$	$$V,,,1133Q77707888/6777078881;A>HHH--//000)/***)/***)-... 	,#/	A 	A 	A,i.ABBB,in===r   c                    | j                                         }|                     |          \  }}|                    d           | j                             |           |                     t          |          d           d |_        |                     t          |          d           d |_        d |_        |                     t          |          d           |	                                 d S )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_reprU   s    ((**"33F;;	8!!!$$$	$$V,,,OO;	
 	
 	
 !%	OO6	
 	
 	
 	 $	OO3	
 	
 	
 	r   r   )r%   r&   r'   r,   r7   rS   rX   __classcell__r1   s   @r   r)   r)   .   sj        ' ' ' ' '
% % % %  4      r   r)   c                   H   e 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k    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$S )%SubprocessMixinc                     t           fd} |d          }t          j        |d          }| j                            |          \  }}|                     |d           |                     |d           d S )Nc                 ~  K   t          j        t          j        t          j        d d {V }|j                            |            |j                                         d {V  |j                                         |j        	                                 d {V } |
                                 d {V }|| fS N)r   r   )r   create_subprocess_execr   PIPEr   writedrainrQ   r   readwait)dataprocexitcoder"   s      r   runz.SubprocessMixin.test_stdin_stdout.<locals>.runr   s       7 o!        D JT"""*""$$$$$$$$$J ))++++++++D!YY[[((((((Hd##r   	   some datag      N@r   )PROGRAM_CATr   wait_forr.   r<   r=   r!   ri   taskrh   r   r"   s        @r   test_stdin_stdoutz!SubprocessMixin.test_stdin_stdouto   s    	$ 	$ 	$ 	$ 	$" s<  d++977==&1%%%.....r   c                    t           fd} |d          }t          j        |t          j                  }| j                            |          \  }}|                     |d           |                     |d           d S )Nc                    K   t          j        t          j        t          j        d d {V }|                    |            d {V \  }}|j        |fS r_   )r   r`   r   ra   communicate
returncode)rf   rg   r   r   r"   s       r   ri   z-SubprocessMixin.test_communicate.<locals>.run   s       7 o!        D
 $(#3#3D#9#9999999NFF?F**r   rj   r   )rk   r   rl   r   LONG_TIMEOUTr.   r<   r=   rm   s        @r   test_communicatez SubprocessMixin.test_communicate   s    	+ 	+ 	+ 	+ 	+ s<  g&:;;977==&1%%%.....r   c                     | j                             t          j        d                    }| j                             |                                          }|                     |d           d S )Nzexit 7   r.   r<   r   create_subprocess_shellre   r=   r!   rg   rh   s      r   
test_shellzSubprocessMixin.test_shell   sb    y+++H55
 
 9//		<<1%%%%%r   c                     | j                             t          j        dd                    }| j                             |                                          }|                     |d           d S )Nzexit 8T)start_new_session   rx   rz   s      r   test_start_new_sessionz&SubprocessMixin.test_start_new_session   so    y+++"&  
 
 9//		<<1%%%%%r   c                 |   t           }| j                            t          j        |           }|                                 | j                            |                                          }t          j        dk    r| 	                    |t                     d S |                     t          j         |           d S Nr	   )PROGRAM_BLOCKEDr.   r<   r   r`   rP   re   sysplatformassertIsInstanceintr=   rM   SIGKILLr!   r"   rg   rs   s       r   	test_killzSubprocessMixin.test_kill   s    y++*D1
 
 			Y11$))++>>
<7""!!*c22222 fn_j99999r   c                    t           j        dk    rt           j         d}nd}d}t           j        dk    rddlm} |}| j                            t          j        |t          j        j	        |                    }| j                            t          j
        d                     t           j        dk    r|                    t          j                   |                                 | j                            |                                          }t           j        dk    r|                     |t"                     d S |                     t          j         |           d S )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   ry   ra   sleeprL   rM   CTRL_BREAK_EVENTrP   re   r   r   r=   r   )r!   blocking_shell_commandr   r   rg   rs   s         r   test_kill_issue43884z$SubprocessMixin.test_kill_issue43884   sI   <7""(+%X%X%X""%7"<7"";;;;;; 5My+++,B7K]Kb') ) )
 
 		$$W]1%5%5666<7""V4555		Y11$))++>>
<7""!!*c22222 fn_j99999r   c                 |   t           }| j                            t          j        |           }|                                 | j                            |                                          }t          j        dk    r| 	                    |t                     d S |                     t          j         |           d S r   )r   r.   r<   r   r`   rO   re   r   r   r   r   r=   rM   rN   r   s       r   test_terminatezSubprocessMixin.test_terminate   s    y++*D1
 
 	Y11$))++>>
<7""!!*c22222 fn_j99999r   r	   zDon't have SIGHUPc                     t          j         t           j        t           j                  }	 d}t          j        d|g} j                            t          j        |dt          j
        i          } fd} j                             ||                    }                     t           j         |           t          j         t           j        |           d S # t          j         t           j        |           w xY w)Nz<import time; print("sleeping", flush=True); time.sleep(3600)r   r   c                    K   | j                                          d {V }                    |d           |                     t          j                   |                                  d {V }|S )Ns	   sleeping
)r   readliner=   rL   rM   SIGHUPre   )rg   liners   r!   s      r   rL   z5SubprocessMixin.test_send_signal.<locals>.send_signal   s}      ![1133333333  }555  ///#'99;;......
!!r   )rM   r   SIG_DFLr   r   r.   r<   r   r`   r   ra   r=   )r!   old_handlercoder"   rg   rL   rs   s   `      r   test_send_signalz SubprocessMixin.test_send_signal   s    
 mFM6>BB	6QDND$/D9//.%?  D" " " " " 55kk$6G6GHHJfm^Z888M&-55555FM&-5555s   BC !C;c                     dt           j        z  }| j                            t	          j        t          j        ddt          j	                            }||fS )N   xr   passr   )
r   PIPE_MAX_SIZEr.   r<   r   r`   r   r   r   ra   )r!   
large_datarg   s      r   prepare_broken_pipe_testz(SubprocessMixin.prepare_broken_pipe_test   sX    G11
 y++*f o  
 
 j!!r   c                 Z   |                                  \  }}d } |||          }t          j                    5  |                     t          t
          f| j        j        |           d d d            n# 1 swxY w Y   | j                            |                                           d S )Nc                    K   t          j        d           d {V  | j                            |           | j                                         d {V  d S )Ng      ?)r   r   r   rb   rc   )rg   rf   s     r   write_stdinz;SubprocessMixin.test_stdin_broken_pipe.<locals>.write_stdin  sj      -$$$$$$$$$JT"""*""$$$$$$$$$$$r   )	r   
test_utilsdisable_loggerrJ   BrokenPipeErrorConnectionResetErrorr.   r<   re   )r!   rg   r   r   coros        r   test_stdin_broken_pipez&SubprocessMixin.test_stdin_broken_pipe  s   88::j	% 	% 	%
 {4,,&(( 	B 	B0DE"i:DB B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 		$$TYY[[11111s   .A44A8;A8c                    |                                  \  }}| j                            d            | j                            |                    |                     | j                            |                                           d S )Nc                     d S r   r   )r.   msgs     r   <lambda>zESubprocessMixin.test_communicate_ignore_broken_pipe.<locals>.<lambda>!  s    $ r   )r   r.   set_exception_handlerr<   rr   re   )r!   rg   r   s      r   #test_communicate_ignore_broken_pipez3SubprocessMixin.test_communicate_ignore_broken_pipe  s|    88::j 		''(>(>???	$$T%5%5j%A%ABBB	$$TYY[[11111r   c                 &    ddz  dz    fd} j                              |                      \  }}                     |dz                                  |j        j                                        |j        j                   d S )N
      r   c                    K   d                     dd	z  df          } j        j        fd}|j        _        t          j        t
          j        d| t          j        j        t          j        j                   d {V }|j	        
                    d          }|                                 d {V \  }}||fS )	N
r   zsys.stdout.write("x" * %s)sys.stdout.flush()c                     K    | i | d {V \  }}t          j                    |_        t          j                    |_        ||fS 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_mock2  sZ      ,=,=t,Jr,J,J&J&J&J&J&J&J#	8*.)++	'+/9;;	(!8,,r   r   )r   r   limitr   )joinr.   r   r   r`   r   r   r   ra   
_transportget_pipe_transportrr   )
r   r   rg   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DI' 7d(-).	        D  $AA!DD#'#3#3#5#5555555NFF
 ,--r   r   )r.   r<   r=   r?   r   rA   r   )r!   r   r   r6   r   r   s   `   @@r   r   z"SubprocessMixin.test_pause_reading%  s    	A	. 	. 	. 	. 	. 	. 	.D !I889K9K9M9MNN	---	/6777	0788888r   c                     d }| j                              |d                    \  }}|                     |                                d           |                     |d           d S )Nc           	      2  K   d}t          j        t          j        d|t           j        j        t           j        j        t           j        j        d           d {V }|                    |            d {V \  }}|                                 d {V }||fS N5import sys; data = sys.stdin.read(); print(len(data))r   Fr   r   r   	close_fdsr   r`   r   r   r   ra   rr   re   messager   rg   r   r   rh   s         r   len_messagez?SubprocessMixin.test_stdin_not_inheritable.<locals>.len_messageT  s      JD 7d(-).).        D $(#3#3G#<#<<<<<<<NFF!YY[[((((((HH%%r      abc   3r   r.   r<   r=   rstrip)r!   r   outputrh   s       r   test_stdin_not_inheritablez*SubprocessMixin.test_stdin_not_inheritableQ  sq    	& 	& 	&  977F8K8KLL$///1%%%%%r   c                     d }| j                              |                      \  }}|                     |                                d           |                     |d           d S )Nc            	      2  K   d} t          j        t          j        d| t           j        j        t           j        j        t           j        j        d           d {V }|                    d           d {V \  }}|                                 d {V }||fS )Nr   r   Fr   r   r   r   rg   r   r   rh   s        r   empty_inputz5SubprocessMixin.test_empty_input.<locals>.empty_inputg  s      JD 7d(-).).        D $(#3#3C#8#8888888NFF!YY[[((((((HH%%r      0r   r   r!   r   r   rh   s       r   test_empty_inputz SubprocessMixin.test_empty_inpute  m    	& 	& 	&  977FF$///1%%%%%r   c                     d }| j                              |                      \  }}|                     |                                d           |                     |d           d S )Nc            	      0  K   d} t          j        t          j        d| t           j        j        t           j        j        t           j        j        d           d {V }|                                 d {V \  }}|                                 d {V }||fS r   )	r   r`   r   r   r   DEVNULLra   rr   re   r   s        r   r   z7SubprocessMixin.test_devnull_input.<locals>.empty_inputz  s      JD 7d(0).).        D $(#3#3#5#5555555NFF!YY[[((((((HH%%r   r   r   r   r   s       r   test_devnull_inputz"SubprocessMixin.test_devnull_inputx  r   r   c                     d }| j                              |                      \  }}|                     |d            |                     |d           d S )Nc            	      2  K   d} t          j        t          j        d| t           j        j        t           j        j        t           j        j        d           d {V }|                    d           d {V \  }}|                                 d {V }||fS Nr   r   Fr   r   	r   r`   r   r   r   ra   r   rr   re   r   s        r   empty_outputz9SubprocessMixin.test_devnull_output.<locals>.empty_output  s      JD 7d(-)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  se    	& 	& 	&  977GG&&&1%%%%%r   c                     d }| j                              |                      \  }}|                     |d            |                     |d           d S )Nc            	      2  K   d} t          j        t          j        d| t           j        j        t           j        j        t           j        j        d           d {V }|                    d           d {V \  }}|                                 d {V }||fS r   r   r   s        r   empty_errorz7SubprocessMixin.test_devnull_error.<locals>.empty_error  s      JD 7d(-).)1        D $(#3#3F#;#;;;;;;;NFF!YY[[((((((HH%%r   r   r   )r!   r   r   rh   s       r   test_devnull_errorz"SubprocessMixin.test_devnull_error  se    	& 	& 	&  977FF&&&1%%%%%r   linuxzDon't have /dev/stdinc                     d }| j                              |d                    \  }}|                     |                                d           |                     |d           d S )Nc           	      2  K   d}t          j        t          j        d|t           j        j        t           j        j        t           j        j        d           d {V }|                    |            d {V \  }}|                                 d {V }||fS )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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  sq    	& 	& 	&  977v8N8NOO$///1%%%%%r   c                 V      fd} j                              |                       d S )Nc                    K   t          j        t            d {V } j                            |                                           }j                            |j                   	 | d {V  n# t           j        $ r Y nw xY w|                                 | 	                                 |                                  d {V  d S r   )
r   r`   r   r.   create_taskre   	call_sooncancelCancelledErrorrP   )rg   rn   r!   s     r   cancel_waitz=SubprocessMixin.test_cancel_process_wait.<locals>.cancel_wait  s       7IIIIIIID 9((55DI,,,







)    KKMMM IIKKK))++s   )A2 2BBr.   r<   )r!   r   s   ` r   test_cancel_process_waitz(SubprocessMixin.test_cancel_process_wait  s@    	 	 	 	 	$ 		$$[[]]33333r   c                       fd}t          j                    5   j                             |                       d d d            d S # 1 swxY w Y   d S )Nc                     K   t          j        t           } j                            |           }j                            |j                   	 | d {V  d S # t           j        $ r Y d S w xY 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  s      1?CD9((..DI,,,








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








)   s    A* *A=<A=)r   r   r.   r<   run_brieflyr   s   ` r   test_cancel_post_initz%SubprocessMixin.test_cancel_post_init  s    		 		 		 		 		 &(( 	. 	.I(()>)>)@)@AAA"49---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   <A##A'*A'c                      fd}t          j                    5  	  j                             |                      \  }}n*# t          j        $ r                      d           Y nw xY wd d d            n# 1 swxY w Y                        |                                |           t          j	         j                   d S )Nc                  n  K    j         j        t          j        gt          R  } |  d {V \  }}dfd}|                    d          }|j        ||_        |                                }|                                 t          j	        |
                                d           d {V  |fS )NFc                       d               d S )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   rl   _wait)	creater6   r5   rP   rg   rs   r  r  r!   s	         @@r   kill_runningz=SubprocessMixin.test_close_kill_running.<locals>.kill_running  s      .TY.w/I A0?A A AF(.,,,,,,IxK     
 ++L99D	IDI"1133JOO"9??#4#4a888888888,,r   z2Timeout failure on waiting for subprocess stopping)
r   r   r.   r<   r   TimeoutErrorskipTestrG   r?   r  )r!   r  rs   killeds   `   r   test_close_kill_runningz'SubprocessMixin.test_close_kill_running   s4   	- 	- 	- 	- 	-( &(( 	 	%)Y%A%A LNN& &"
FF '   H    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	*%%% 	ty)))))s4   A8%AA8$A)&A8(A))A88A<?A<c                      fd}t          j                    5   j                             |                      }t          j         j                   d d d            n# 1 swxY w Y   |\  }}}                     |                                |                                |           t          j	        dk    rAt           t                    r.t          j                    j                                         d S d S d S )Nc                    K    j         j        t          j        gt          R  } |  d {V \  }}|                    d          }|                                 |                                 t          j	                    |_        |
                                }|                                }|                                 |||j        j        fS )Nr   )r.   r  r   r  r   r  rP   re   r   r   pollr>   rQ   rA   )r  r6   r5   rg   proc_returncodetransport_returncoder!   s         r   r  zCSubprocessMixin.test_close_dont_kill_finished.<locals>.kill_running'  s      .TY.w/I A0?A A AF(.,,,,,,Ix++L99D IIKKKIIKKK	DI"iikkO#,#;#;#=#= OO#%949;KLLr   r	   )r   r   r.   r<   r  assertIsNotNonerG   rE   r   r   
isinstanceSubprocessFastWatcherTestsr   get_child_watcher
_callbacksclear)r!   r  resultr  transport_return_coder  s   `     r   test_close_dont_kill_finishedz-SubprocessMixin.test_close_dont_kill_finished%  sX   	M 	M 	M 	M 	M& &(( 	. 	.Y11,,..AAF"49---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. :@6._---/000 	   
 LG##4!;<< $%''288::::: $###s   <A""A&)A&c           	        K   t           j        dk    rd}nd}t          j        |          5 }t          }||_        t          j        d          5 }|                     |          5  t          j
        t           j        dd|           d {V  d d d            n# 1 swxY w Y   |                     |g            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr	   zasyncio.windows_utils.Popenzsubprocess.PopenT)recordr   r   r   )r   r   r   patchZeroDivisionErrorside_effectwarningscatch_warningsrJ   r   r`   r   r=   )r!   r   targetpopenexcwarnss         r   _test_popen_errorz!SubprocessMixin._test_popen_errorN  s     <7""2FF'FZ 	,5#C #E(555 ,&&s++  !8#	                          +++, , , , , , , , , , , , , , ,		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,sY   $C C&)BCBC"B#C<C C	C C	C  C$'C$c                 b    | j                             |                     d                      d S Nr   )r.   r<   r/  r!   s    r   test_popen_errorz SubprocessMixin.test_popen_errora  s1     		$$T%;%;$%;%G%GHHHHHr   c                 v    | j                             |                     t          j                             d S r1  )r.   r<   r/  r   ra   r2  s    r    test_popen_error_with_stdin_pipez0SubprocessMixin.test_popen_error_with_stdin_pipef  s>     		$$"""99	; 	; 	; 	; 	;r   c                 P    d }| j                              |                       d S )Nc                  $  K   d                     g d          } t          j        t          j        d| t          j        j                   d {V }	 |j                            d           d {V }|rt          j	        d           d {V  nd S @)Nr   )r   zfor _ in range(64):z     sys.stdout.write("x" * 4096)r   zsys.exit(1)r   )r   Ti   g333333?)
r   r   r`   r   r   r   ra   r   rd   r   )r   processrf   s      r   executezDSubprocessMixin.test_read_stdout_after_process_exit.<locals>.executen  s      99 - - - . .D $:d).        G
$^0077777777 !-,,,,,,,,,,Er   r   r!   r9  s     r   #test_read_stdout_after_process_exitz3SubprocessMixin.test_read_stdout_after_process_exitl  s5    	 	 	& 		$$WWYY/////r   c                 V      fd} j                              |                       d S )Nc                    K                         t                    5  t          j        t          j        d           d {V  d d d            n# 1 swxY w Y                         t                    5  t          j        t          j        d           d {V  d d d            n# 1 swxY w Y                         t                    5  t          j        t          j        d           d {V  d d d            d S # 1 swxY w Y   d S NT)textzutf-8)encodingstrict)errors)rJ   
ValueErrorr   r`   r   r   r2  s   r   r9  zLSubprocessMixin.test_create_subprocess_exec_text_mode_fails.<locals>.execute  sf     "":.. C C 7=AC C C C C C C C C CC C C C C C C C C C C C C C C "":.. J J 7AHJ J J J J J J J J JJ J J J J J J J J J J J J J J "":.. I I 7?GI I I I I I I I I II I I I I I I I I I I I I I I I I I5   'AAA6'B))B-0B-'DD	Dr   r:  s   ` r   +test_create_subprocess_exec_text_mode_failsz;SubprocessMixin.test_create_subprocess_exec_text_mode_fails  sE    	I 	I 	I 	I 	I 		$$WWYY/////r   c                 V      fd} j                              |                       d S )Nc                    K                         t                    5  t          j        t          j        d           d {V  d d d            n# 1 swxY w Y                         t                    5  t          j        t          j        d           d {V  d d d            n# 1 swxY w Y                         t                    5  t          j        t          j        d           d {V  d d d            d S # 1 swxY w Y   d S r>  )rJ   rC  r   ry   r   r   r2  s   r   r9  zMSubprocessMixin.test_create_subprocess_shell_text_mode_fails.<locals>.execute  sf     "":.. D D 8>BD D D D D D D D D DD D D D D D D D D D D D D D D "":.. K K 8BIK K K K K K K K K KK K K K K K K K K K K K K K K "":.. J J 8@HJ J J J J J J J J JJ J J J J J J J J J J J J J J J J JrD  r   r:  s   ` r   ,test_create_subprocess_shell_text_mode_failsz<SubprocessMixin.test_create_subprocess_shell_text_mode_fails  sE    	J 	J 	J 	J 	J 		$$WWYY/////r   c                 v    d }|                      | j                             |                                 d S )Nc                  T  K   t          j        t          j        t          j                  dd           d {V } |                                  d {V  t          j        t          j        ddt          j        d                     d {V } |                                  d {V  d S )Nr   r   .)r   r`   r   FakePathr   r   re   )ps    r   r9  zFSubprocessMixin.test_create_subprocess_exec_with_path.<locals>.execute  s       7"3>22D&B B B B B B B BA&&((NNNNNNN 7fi.@.E.EG G G G G G G GA&&((NNNNNNNNNr   )rG   r.   r<   r:  s     r   %test_create_subprocess_exec_with_pathz5SubprocessMixin.test_create_subprocess_exec_with_path  sC    	 	 	 	$)66wwyyAABBBBBr   c                 `     d  fd} j                              |                       d S )Nc                    K   t          j        | g|R dt           j        j        i d {V }|                                 d {V \  }}|                                                                S )Nr   )r   r`   r   ra   rr   decodestrip)cmdr"   rg   r   _s        r   get_command_stdoutzNSubprocessMixin.test_subprocess_communicate_stdout.<locals>.get_command_stdout  s       7  #*#5#:       D #..00000000IFA==??((***r   c                     K   d t          d          D             } t          j        fd| D               d {V }                    ||            d S )Nc                     g | ]}d | S )foor   ).0is     r   
<listcomp>zTSubprocessMixin.test_subprocess_communicate_stdout.<locals>.main.<locals>.<listcomp>  s    444QyQyy444r   r   c           	      F    g | ]} t           j        d d|d          S )r   zprint())r   r   )rY  outrU  s     r   r[  zTSubprocessMixin.test_subprocess_communicate_stdout.<locals>.main.<locals>.<listcomp>  sP     )O )O )O?B *<);CND(9(9(9(9*; *; )O )O )Or   )ranger   gatherr=   )outputsresrU  r!   s     r   mainz@SubprocessMixin.test_subprocess_communicate_stdout.<locals>.main  s      44%))444G )O )O )O )OFM)O )O )O P P P P P P PCS'*****r   r   )r!   rc  rU  s   ` @r   "test_subprocess_communicate_stdoutz2SubprocessMixin.test_subprocess_communicate_stdout  sU    	+ 	+ 	+	+ 	+ 	+ 	+ 	+ 	+ 		$$TTVV,,,,,r   N)&r%   r&   r'   ro   ru   r{   r   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r/  r3  r5  r;  rE  rH  rN  rd  r   r   r   r\   r\   m   s9       / / /4/ / /$& & &	& 	& 	&: : :: : :6: : : X_S\W,.ABB6 6 CB6:" " "2 2 22 2 2*9 *9 *9X& & &(& & &&& & &&& & &&& & && X_S\W,.EFF& & GF&&4 4 4.B B B". . .&#* #* #*J'; '; ';R, , ,&I I I
; ; ;0 0 0.0 0 0 0 0 0"	C 	C 	C- - - - -r   r\   c                   ,     e Zd ZdZ fdZ fdZ xZS )SubprocessWatcherMixinNc                 Z   t                                                       t          j                    }|                                | _        |                     | j                   |                                 }|                    | j                   |	                    |           d S r   )
r+   r,   r   get_event_loop_policynew_event_loopr.   r/   Watcherattach_loopset_child_watcherr!   policywatcherr1   s      r   r,   zSubprocessWatcherMixin.setUp  s    GGMMOOO244F--//DI	***llnnG	***$$W-----r   c                    t                                                       t          j                    }|                                }|                    d            |                    d            |                                 d S r   )r+   tearDownr   rj  r  rn  rm  rQ   ro  s      r   rs  zSubprocessWatcherMixin.tearDown  sq    GG244F..00G$$T***%%%MMOOOOOr   )r%   r&   r'   rl  r,   rs  rY   rZ   s   @r   rh  rh    sV        	. 	. 	. 	. 	.	 	 	 	 	 	 	 	 	r   rh  c                       e Zd Zej        ZdS )SubprocessThreadedWatcherTestsN)r%   r&   r'   r
   ThreadedChildWatcherrl  r   r   r   ru  ru    s         2r   ru  zqbpo-38323: MultiLoopChildWatcher has a race condition                     and these tests can hang the test suitec                       e Zd Zej        ZdS )SubprocessMultiLoopWatcherTestsN)r%   r&   r'   r
   MultiLoopChildWatcherrl  r   r   r   rx  rx    s        
 3r   rx  c                       e Zd Zej        ZdS )SubprocessSafeWatcherTestsN)r%   r&   r'   r
   SafeChildWatcherrl  r   r   r   r{  r{             .r   r{  c                       e Zd Zej        ZdS )r  N)r%   r&   r'   r
   FastChildWatcherrl  r   r   r   r  r    r}  r   r  c                      t          t          d          sdS 	 t          j        t          j        t          j                                         n# t
          $ r Y dS w xY wdS )N
pidfd_openFT)hasattrosrQ   r  getpidOSErrorr   r   r   has_pidfd_supportr    sh    r<(( 	5	HR]29;;//0000 	 	 	55	ts   7A 
AAz(operating system does not support pidfdsc                       e Zd Zej        ZdS )SubprocessPidfdWatcherTestsN)r%   r&   r'   r
   PidfdChildWatcherrl  r   r   r   r  r    s         /r   r  c                       e Zd Zd ZdS )GenericWatcherTestsc           
      `    t          j        t          j        fi ddi fd}t          j        t          j                  5 }                     |                     |                                 d d d            n# 1 swxY w Y                        j	        t           j
                                        t           j
                                                                        t           j
                            t          t           j        t           j                  g           d S )Nz-__enter__.return_value.is_active.return_valueFc                  :  K   t          j                                        t                    5  t	          j        t          j        t          j	                  dd           d {V  d d d            n# 1 swxY w Y   j
                                         d S )Nr   r   )r   rn  rJ   RuntimeErrorr   r`   r   rL  r   r   add_child_handlerassert_not_called)r!   rq  s   r   r9  zWGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher.<locals>.execute	  s      )'222&&|44 J J$;!*3>::D&J J J J J J J J JJ J J J J J J J J J J J J J J );;=====s   9A77A;>A;)loop_factory)r   create_autospecr   AbstractChildWatcherRunnerrk  rG   ri   assertListEqual
mock_callscall	__enter__	is_active__exit__r  ANY)r!   r9  runnerrq  s   `  @r   2test_create_subprocess_fails_with_inactive_watcherzFGenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher  sQ   *, BEJ G
> > > > > > W-CDDD 9!!&**WWYY"7"78889 9 9 9 9 9 9 9 9 9 9 9 9 9 9  !3	##%%	##%%//11	""<48DD6     s   1BB
BN)r%   r&   r'   r  r   r   r   r  r    s#        	 	 	 	 	r   r  c                        e Zd Z fdZ xZS )SubprocessProactorTestsc                     t                                                       t          j                    | _        |                     | j                   d S r   )r+   r,   r   ProactorEventLoopr.   r/   r0   s    r   r,   zSubprocessProactorTests.setUp  s@    GGMMOOO133DI	*****r   )r%   r&   r'   r,   rY   rZ   s   @r   r  r    s8        	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+r   r  __main__),r  shutilrM   r   re  r)  r   r   r   r   test.test_asyncior   r   r3   r   test.supportr   r   r
   check_sanitizerSkipTestr   r   r   rk   r   BaseSubprocessTransportr   TestCaser)   r\   rh  ru  skiprx  r{  r  r  
skipUnlessr  r  r  r%   rc  r   r   r   <module>r     s   				   



          # # # # # #       1 1 1 1 1 1       " " " " " "<7######74((( C
(
A
B
BB >4)HI NDHH / 0 01( ( (    oE   < < < < <z2 < < <~Q	- Q	- Q	- Q	- Q	- Q	- Q	- Q	-h <7       ,3 3 3 3 3)?)3)<3 3 3
 X] = > >4 4 4 4 4*@*4*=4 4> >4
/ / / / /%;%/%8/ / /
/ / / / /%;%/%8/ / /
   X2 0 0 0 0 0&<&0&90 0	 0
    j1    6+ + + + +/:3F + + + zHMOOOOO r   