
    7\hv                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ 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                    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)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     K/opt/python-3.11.14/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.setUp4   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    r3   protocol	transports       r   create_transportz)SubprocessTransportTests.create_transport9   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_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@   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 )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_reprZ   s    ((**"33F;;	8!!!$$$	$$V,,,OO;	
 	
 	
 !%	OO6	
 	
 	
 	 $	OO3	
 	
 	
 	r   r   )r$   r%   r&   r+   r6   rR   rW   __classcell__r0   s   @r   r(   r(   3   sj        ' ' ' ' '
% % % %  4      r   r(   c                   B   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 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drainrP   r   readwait)dataprocexitcoder!   s      r   runz.SubprocessMixin.test_stdin_stdout.<locals>.runw   s       7 o!        D JT"""*""$$$$$$$$$J ))++++++++D!YY[[((((((Hd##r   	   some datag      N@r   )PROGRAM_CATr   wait_forr-   r;   r<   r    rh   taskrg   r   r!   s        @r   test_stdin_stdoutz!SubprocessMixin.test_stdin_stdoutt   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   r`   communicate
returncode)re   rf   r   r   r!   s       r   rh   z-SubprocessMixin.test_communicate.<locals>.run   s       7 o!        D
 $(#3#3D#9#9999999NFF?F**r   ri   r   )rj   r   rk   r   LONG_TIMEOUTr-   r;   r<   rl   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_shellrd   r<   r    rf   rg   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   rw   ry   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 Nwin32)PROGRAM_BLOCKEDr-   r;   r   r_   rO   rd   sysplatformassertIsInstanceintr<   rL   SIGKILLr    r!   rf   rr   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   rx   r`   sleeprK   rL   CTRL_BREAK_EVENTrO   rd   r   r   r<   r   )r    blocking_shell_commandr   r   rf   rr   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_   rN   rd   r   r   r   r   r<   rL   rM   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<   rK   rL   SIGHUPrd   )rf   linerr   r    s      r   rK   z5SubprocessMixin.test_send_signal.<locals>.send_signal   s}      ![1133333333  }555  ///#'99;;......
!!r   )rL   r   SIG_DFLr   r   r-   r;   r   r_   r   r`   r<   )r    old_handlercoder!   rf   rK   rr   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  }t          j                    \  }|                     t          j        |           |                     t          j                   t           j        rlt          j        |          }t          j	        |d           t          j        d| d          }ddlm}  |            }d|gi|_        t          |          }nd	| d
}t          |f          }| j                            t%          j        t(          j        d|fdt          j        i|          }fd}	 |	||          }
t/          j                    5  |                     t4          t6          f| j        j        |
           d d d            n# 1 swxY w Y   | j                            |                                           d S )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                             |           t          j        d           | j                                          d {V  d S )Ns   go)r   ra   osrb   )rf   re   wfds     r   write_stdinz;SubprocessMixin.test_stdin_broken_pipe.<locals>.write_stdin&  s[      JT"""HS%   *""$$$$$$$$$$$r   )r   PIPE_MAX_SIZEr   pipe
addCleanuprP   
MS_WINDOWSmsvcrtget_osfhandleset_handle_inheritabletextwrapdedentr   r   lpAttributeListdictr-   r;   r   r_   r   r   r`   
test_utilsdisable_loggerrI   BrokenPipeErrorConnectionResetErrorrd   )r    
large_datarfdhandler   r   r   r"   rf   r   coror   s              @r   test_stdin_broken_pipez&SubprocessMixin.test_stdin_broken_pipe  sB   G11
799S#&&&#&&& 	+)#..F%fd333? $ $ $ $  D /.....%+--K+86(*CK'k222FF;c;;;DC6***F y++*d  o  
 
	% 	% 	% 	% 	% {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   .FFFc                    dt           j        z  }| j                            t	          j        t          j        ddt          j	                            }| j        
                    d            | j                            |                    |                     | j                            |                                           d S )Nr   r   passr   c                     d S r   r   )r-   msgs     r   <lambda>zESubprocessMixin.test_communicate_ignore_broken_pipe.<locals>.<lambda>@  s    $ r   )r   r   r-   r;   r   r_   r   r   r   r`   set_exception_handlerrq   rd   )r    r   rf   s      r   #test_communicate_ignore_broken_pipez3SubprocessMixin.test_communicate_ignore_broken_pipe3  s    G11
 y++*f o  
 
 		''(>(>???	$$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!   kwr5   r4   connect_read_pipes       r   connect_read_pipe_mockz^SubprocessMixin.test_pause_reading.<locals>.test_pause_reading.<locals>.connect_read_pipe_mockQ  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   r`   
_transportget_pipe_transportrq   )
r   r   rf   stdout_transportr   r   r   r   r    sizes
         @r   test_pause_readingz>SubprocessMixin.test_pause_reading.<locals>.test_pause_readingH  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   r@   r   )r    r   r   r5   r   r   s   `   @@r   r   z"SubprocessMixin.test_pause_readingD  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   r`   rq   rd   messager   rf   r   r   rg   s         r   len_messagez?SubprocessMixin.test_stdin_not_inheritable.<locals>.len_messages  s      JD 7d(-).).        D $(#3#3G#<#<<<<<<<NFF!YY[[((((((HH%%r      abc   3r   r-   r;   r<   rstrip)r    r   outputrg   s       r   test_stdin_not_inheritablez*SubprocessMixin.test_stdin_not_inheritablep  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   rf   r   r   rg   s        r   empty_inputz5SubprocessMixin.test_empty_input.<locals>.empty_input  s      JD 7d(-).).        D $(#3#3C#8#8888888NFF!YY[[((((((HH%%r      0r   r   r    r   r   rg   s       r   test_empty_inputz SubprocessMixin.test_empty_input  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   DEVNULLr`   rq   rd   r   s        r   r   z7SubprocessMixin.test_devnull_input.<locals>.empty_input  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_input  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   r`   r   rq   rd   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   rg   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   rg   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   rg   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_taskrd   	call_sooncancelCancelledErrorrO   )rf   rm   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   rm   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   rO   zKSubprocessMixin.test_close_kill_running.<locals>.kill_running.<locals>.kill'  s    "	r   r      )r-   r  r   r  r   get_extra_inforO   r=   rP   rk   _wait)	creater5   r4   rO   rf   rr   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skipTestrF   r>   r  )r    r!  rr   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  rO   rd   r   r   pollr=   rP   r@   )r   r5   r4   rf   proc_returncodetransport_returncoder    s         r   r!  zCSubprocessMixin.test_close_dont_kill_finished.<locals>.kill_runningF  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  assertIsNotNonerF   rD   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_finishedD  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_warningsrI   r   r_   r   r<   )r    r   targetpopenexcwarnss         r   _test_popen_errorz!SubprocessMixin._test_popen_errorm  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_error  s1     		$$T%;%;$%;%G%GHHHHHr   c                 v    | j                             |                     t          j                             d S rA  )r-   r;   r?  r   r`   rB  s    r    test_popen_error_with_stdin_pipez0SubprocessMixin.test_popen_error_with_stdin_pipe  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   r`   r   rc   r   )r   processre   s      r   executezDSubprocessMixin.test_read_stdout_after_process_exit.<locals>.execute  s      99 - - - . .D $:d).        G
$^0077777777 !-,,,,,,,,,,Er   r
  r    rI  s     r   #test_read_stdout_after_process_exitz3SubprocessMixin.test_read_stdout_after_process_exit  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)rI   
ValueErrorr   r_   r   r   rB  s   r   rI  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
  rJ  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 rN  )rI   rS  r   rx   r   r   rB  s   r   rI  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rT  r
  rJ  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   rd   )ps    r   rI  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   )rF   r-   r;   rJ  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   r`   rq   decodestrip)cmdr!   rf   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   )ri  outre  s     r   rk  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resre  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    rs  re  s   ` @r   "test_subprocess_communicate_stdoutz2SubprocessMixin.test_subprocess_communicate_stdout  sU    	+ 	+ 	+	+ 	+ 	+ 	+ 	+ 	+ 		$$TTVV,,,,,r   N)%r$   r%   r&   rn   rt   rz   r~   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r3  r?  rC  rE  rK  rU  rX  r^  rt  r   r   r   r[   r[   r   s+       / / /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[   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watcherr0   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   rz  r.  r~  r}  rP   r  s      r   r  zSubprocessWatcherMixin.tearDown  sq    GG244F..00G$$T***%%%MMOOOOOr   )r$   r%   r&   r|  r+   r  rX   rY   s   @r   rx  rx    sV        	. 	. 	. 	. 	.	 	 	 	 	 	 	 	 	r   rx  c                       e Zd Zej        ZdS )SubprocessThreadedWatcherTestsN)r$   r%   r&   r	   ThreadedChildWatcherr|  r   r   r   r  r    s         2r   r  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	   MultiLoopChildWatcherr|  r   r   r   r  r    s        
 3r   r  c                       e Zd Zej        ZdS )SubprocessSafeWatcherTestsN)r$   r%   r&   r	   SafeChildWatcherr|  r   r   r   r  r             .r   r  c                       e Zd Zej        ZdS )r-  N)r$   r%   r&   r	   FastChildWatcherr|  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)hasattrr   rP   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	   PidfdChildWatcherr|  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   r~  rI   RuntimeErrorr   r_   r   r\  r   r   add_child_handlerassert_not_called)r    r  s   r   rI  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Runnerr{  rF   rh   assertListEqual
mock_callscall	__enter__	is_active__exit__r  ANY)r    rI  runnerr  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.   r/   s    r   r+   zSubprocessProactorTests.setUp=  s@    GGMMOOO133DI	*****r   )r$   r%   r&   r+   rX   rY   s   @r   r  r  ;  s8        	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+r   r  __main__)/r   shutilrL   r   r   ru  r9  r   r   r   r   test.test_asyncior   r   r2   r   test.supportr   r   r   r	   check_sanitizerSkipTestr   r   r   rj   r   BaseSubprocessTransportr   TestCaser(   r[   r   rx  r  skipr  r  r-  r  
skipUnlessr  r  r  r$   rs  r   r   r   <module>r     s   				   



           # # # # # #       1 1 1 1 1 1       " " " " " "  $MMMM###### 74((( C
(
A
B
BB >4)HI NDHH / 0 01( ( (    oE   < < < < <z2 < < <~k	- k	- k	- k	- k	- k	- k	- k	-\ <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   