
    i,h                    x   U d dl m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	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ d dlZd dlZd
dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d
dl&m'Z'm(Z( d
dl)m*Z* d
dl+m,Z,m-Z-m.Z. erd dl/m0Z0 d
dl1m2Z2 ejf                  dk(  rdZ4de5d<   neZ4de5d<   de5d<   de5d<   de5d<   ejl                  dk(  Z7ese7sejf                  dk7  rd dlm8Z8m9Z9m:Z: nd\  Z8Z9Z:dFdZ; e;d      Z< e;d      Z= e;d      Z>e7rdGdZ?ndGdZ?e	 	 	 	 	 	 dHd        Z@e	 	 	 	 	 	 dHd!       ZAej                  j                  d"e@eAgd#d$g%      ZDe
d&ee   f   ZEde5d'<   eDdId(       ZFeDdId)       ZGeD	 	 	 	 dId*       ZHeDdId+       ZIeDdId,       ZJ e;d-      ZKeDdId.       ZLeDdId/       ZMdJd0ZNdJd1ZOe'dJd2       ZPeDdId3       ZQdJd4ZReDdId5       ZSej                  j                  e7 d67      eDdId8              ZUej                  j                  e7 d67      eD	 	 	 	 dId9              ZVe(dJd:       ZWdJd;ZXdJd<ZYdKd=ZZej                  j                  e7 d>7      	 	 	 	 	 	 dLd?       Z[dJd@Z\ej                  j                   edA      j                          dB7      dJdC       Z^dKdDZ_dJdEZ`y)M    )annotationsN)AsyncIteratorCallable)AbstractAsyncContextManagerasynccontextmanager)partial)Path)Signals)TYPE_CHECKINGAnyNoReturn	TypeAlias)mock   )EventProcess_core
fail_aftermove_on_afterrun_processsleepsleep_forever)skip_if_fbsd_pipes_brokenslow)open_process)	MockClockassert_no_checkpointswait_all_tasks_blocked)	FrameType)ReceiveStreamwin32r   
SignalTypeSIGKILLSIGTERMSIGUSR1posix)r#   r$   r%   )NNNc                0    t         j                  ddd| z   gS )Nz-u-czimport sys; )sys
executable)codes    W/var/www/html/BatchJob/venv/lib/python3.12/site-packages/trio/_tests/test_subprocess.pypythonr-   @   s    NND$(=>>    zsys.exit(0)zsys.exit(1)z0sys.stdout.buffer.write(sys.stdin.buffer.read())c                    dt        |       gS )Nr   )strsecondss    r,   SLEEPr3   J   s    W&&r.   c                     t        d|  d      S )Nzimport time; time.sleep())r-   r1   s    r,   r3   r3   O   s    0	;<<r.   c                   K   t        | i | d {   }	 | |j                          |j                          d {    y 7 37 # |j                          |j                          d {  7   w xY wwN)r   killwait)argskwargsprocs      r,   open_process_then_killr=   S   sb     
 t.v..D
		iik /
 	 			iiksB   A7AA7A	 #A7A A7A7	$A4-A0.A44A7c                z  K   t        j                         4 d {   }|j                  dd       |j                  t	        t
        g| i |       d {   }t        |t              sJ |}| |j                  j                          d d d       d {    y 7 7 J7 	# 1 d {  7  sw Y   y xY ww)NcheckF)
r   open_nursery
setdefaultstartr   r   
isinstancer   cancel_scopecancel)r:   r;   nurseryvaluer<   s        r,   run_process_in_nurseryrH   `   s     
 !!# & &w'5)mmGK$I$$I&$IJJ%)))
##%& & &J& & & &sV   B;B B;8B&B"7B&B;B$B;"B&$B;&B8,B/-B84B;background_processr   zrun_process in nursery)ids.BackgroundProcessTypec                h  K    | t               4 d {   }|j                          d {    d d d       d {    t        t              sJ |j                  J |j
                  dk(  sJ t        |      dt          dk(  sJ  | t              4 d {   }|j                          d {    d d d       d {    |j
                  dk(  sJ t        |      dj                  t        d      k(  sJ y 7 7 7 # 1 d {  7  sw Y   xY w7 }7 g7 Y# 1 d {  7  sw Y   ixY ww)Nr   <trio.Process : exited with status 0>   <trio.Process {!r}: {}>exited with status 1)		EXIT_TRUEr9   rC   r   _pidfd
returncoderepr
EXIT_FALSEformatrI   r<   s     r,   
test_basicrY   z   s)    !),  iik dG$$$;;??a:>)4KLLLL!*-  iik ??a:299         s   D2C<D2DC>DD2D AD2DD2D1D2D6D2D;D2>D D2DD	DD2DD2D/#D&$D/+D2c                  K   t        j                  dd      5   | t              4 d {   }|j                  J |j	                          d {    d d d       d {    t        t              sJ |j                  J |j                  dk(  sJ t        |      dt         dk(  sJ  | t              4 d {   }|j	                          d {    d d d       d {    |j                  dk(  sJ t        |      dj                  t        d	      k(  sJ 	 d d d        y 7 7 7 # 1 d {  7  sw Y   xY w7 7 p7 b# 1 d {  7  sw Y   rxY w# 1 sw Y   y xY ww)
N#trio._subprocess.can_try_pidfd_openFnewr   rM   rN   rO   rP   rQ   )r   patchrR   rS   r9   rC   r   rT   rU   rV   rW   rX   s     r,   test_basic_no_pidfdr_      sd    	9u	E 
%i0 	 	D;;&&&))+	 	 $((({{"""!###Dz~i[8OPPPP%j1 	 	T))+	 	!###Dz6=="
 
 	
 

 
		 	 	 			 	 	 	
 
s   E-E!D+E!"D1D-D1E!!D/"AE!?E E!EEEE!'E
(9E!"	E-+E!-D1/E!1E	7D:8E	?E!E
E!E	EE	E!!E*&E-c                  K    | t        d            4 d {   }|j                  J dt        |      v sJ |j                          |j                  j                          |j                  J dt        |      v sJ |j                  J |j                  J d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY ww)N'  runningexited)r3   rT   rU   r8   _procr9   rS   )rI   ps     r,   test_auto_update_returncoderf      s      "%+. ( (!||###DG###		||'''47"""xx||'''( ( ( ( ( ( (sE   CB.CBB2C(B0)C0C2C8B;9C Cc                  K    | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                  j                          d d d       d {    t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                          d d d       d {    d d d       d {    y 7 `7 F7 7 # 1 d {  7  sw Y   xY w7 7 V7 8# 1 d {  7  sw Y   HxY w7 ?# 1 d {  7  sw Y   y xY ww)N
   )	r3   r   r@   
start_soonr9   r   rD   rE   r8   rI   r<   rF   s      r,   test_multi_waitrk      sl    !%),  %%' 	* 	*7tyy)tyy)tyy)(***  '')	* 	* %%' 	 	7tyy)tyy)tyy)(***IIK	 	  	* +		* 	* 	* 	*	 +		 	 	 	   s   G	E8G	F4E;F4AFE>F7F4F F4F F4#AFFFF4"F#F4'G	2F23G	;F4>F F4F	F	F	F4FF4F/	#F&$F/	+F42G	4G:F=;GG	c           	       K   t        j                  dd      5   | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                  j                          d d d       d {    t        j                         4 d {   }|j                  |j                         |j                  |j                         |j                  |j                         t                d {    |j                          d d d       d {    d d d       d {    d d d        y 7 h7 N7 7 # 1 d {  7  sw Y   xY w7 7 ^7 @# 1 d {  7  sw Y   PxY w7 G# 1 d {  7  sw Y   WxY w# 1 sw Y   y xY ww)Nr[   Fr\   rh   )r   r^   r3   r   r@   ri   r9   r   rD   rE   r8   rj   s      r,   test_multi_wait_no_pidfdrm      s    	9u	E %eBi0 	 	D))+ . .w""499-""499-""499-,...$$++-. . ))+  w""499-""499-""499-,...		 	 	 	. /	. . . . /	   	 	 	 	 s  G5G)FG)GF
GAF"0F
1F"GF G7F7
8G;AF=F9
F=/G:F;;G?G)
GG)	G5G)GF" G"F4(F+)F40G9F=;G=GGGGG)G&	GG&	"G))G2.G5zbdata = sys.stdin.buffer.read(); sys.stdout.buffer.write(data); sys.stderr.buffer.write(data[::-1])c           
     $  K    | t         t        j                  t        j                  t        j                        4 d {   ddfd}d	d}j                  J j                  J t        j                         4 d {   }t        j                         dz   |j                  _	        |j                  |       |j                  |j                         |j                  |j                  d d d          d d d       d {    j                  j                  rJ j                          d {   dk(  sJ d d d       d {    y 7 7 7 O# 1 d {  7  sw Y   _xY w7 67 ## 1 d {  7  sw Y   y xY ww)
Nstdinstdoutstderrs+   the quick brown fox jumps over the lazy dogc                    K   j                   J j                   j                          d {    j                   j                          d {    y 7 '7 wr7   )rp   send_allaclose)msgr<   s   r,   
feed_inputztest_pipes.<locals>.feed_input   sN     ::)))**%%c*****##%%% +%s!   -AA!AAAAc                V   K   t               }| 2 3 d {   }||z  }7 
6 ||k(  sJ y wr7   )	bytearray)streamexpectedseenchunks       r,   check_outputz test_pipes.<locals>.check_output   s;     ;D%  ev8###s   )  ) 	)g      >@r   returnNone)rz   r    r{   bytesr   r   )+COPY_STDIN_TO_STDOUT_AND_BACKWARD_TO_STDERR
subprocessPIPErq   rr   r   r@   current_timerD   deadlineri   cancelled_caughtr9   )rI   rw   r~   rF   rv   r<   s       @@r,   
test_pipesr      se    !3oo	 & &
 
<	&
	$ {{&&&{{&&&%%' 	E 	E7,1,>,>,@4,GG  )z*|T[[#>|T[[#dd)D	E 	E ''8888YY[ A%%%=& & &,	E 	E 	E 	E 	E !=& & & &s   ?FEFAE;	E
E;A8E"E;E /E; E7	E;
FE9FE; E;"E4	(E+)E4	0E;9F;FFF	Fc                L  K    | t        d      t        j                  t        j                  t        j                        4 d {   t        rdnddfd}j                  J j
                  J j                  J t        d      5  j                  j                  d       d {    t        d       d {    j                  j                  d	z          d {     |d
d       d {    j                  j                  dz   dz   z          d {     |dd       d {     |dd       d {    j                  j                  dz          d {     |dd
       d {    j                  j                  d       d {    t        d      5 } |dd
       d {    d d d        j                  sJ j                  j                         d {     |dd       d {    j                  j                          d {    j
                  j                  d       d {   dk(  sJ j                  j                  d       d {   dk(  sJ j                          d {    d d d        d d d       d {    j                  d
k(  sJ y 7 |7 7 7 7 7 7 7 7 l7 ^7 >7 $# 1 sw Y   $xY w7 7 7 7 7 7 i# 1 sw Y   hxY w7 _# 1 d {  7  sw Y   oxY ww)Nzidx = 0
while True:
    line = sys.stdin.readline()
    if line == '': break
    request = int(line.strip())
    print(str(idx * 2) * request)
    print(str(idx * 2 + 1) * request * 2, file=sys.stderr)
    idx += 1
ro      
s   
c                ~  K   t        j                         4 d {   }	 	 	 	 	 	 	 	 dfd}j                  J j                  J |j	                  |j                  || dz         |j	                  |j                  |dz  | dz  dz          d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY ww)Nc                  K   |dkD  rO| j                  |       d {   }|| j                         t        |      z  k(  sJ |t        |      z  }|dkD  rO|dk(  sJ | j                  t                     d {   k(  sJ y 7 i7 w)Nr   )receive_someencodelen)rz   countdigitresultnewlines       r,   	drain_onez3test_interactive.<locals>.expect.<locals>.drain_one#  s     
  !)'-':':5'A!A%UG*;*;*=F*KLLLV,  !) !A:%:!'!4!4S\!BBgMMM	 "B Cs'   BB9B$B<B	=B	Br   rO   )rz   r    r   intr   r   r   r   )r   r@   rq   rr   ri   )idxrequestrF   r   r   r<   s       r,   expectz test_interactive.<locals>.expect   s     ))+ U Uw
N)
N
N 
N 	
N {{...{{...""9dkk7C!GL""9dkk7Q;aRST#U U U U U U UsE   B=B$B=A3B(B=B&B=&B=(B:.B1/B:6B=   s   12g?s   345r   i90  s   100s   200rO   d   r         0   s   999999   i?B r.   )r   r   r   r   r   r   )r-   r   r   r&   rp   rq   rr   r   rt   r   r   r   ru   r   r9   rT   )rI   r   scoper   r<   s      @@r,   test_interactiver     s     "		
 oo ; ; 
 %g	U( zz%%%{{&&&{{&&&] 	**%%e,,,***%%fw&6777E"""**%%fw&6&?'&IJJJC.  C.  **%%dWn555A,**%%i000s# #uQl""#))))**%%g...F###**##%%%11!44;;;11!44;;;))+'	Q; ;z ??a{;R -7"J  50"# # /#%44'	 	Q; ; ; ;s  AL$K	L$ALL2K3LK
%L+K,L<K=+L(K)L9K:L
K%L0K1LK"L$K"%L4K(K%
K(4L:K5;LK7!L-K9."LK;'L8K=9LK?LL"L$-L.L$L
LLLLLLLL"L%K((K2-	L7L9L;L=L?LL
	LL$L!LL!L$c                   K   t        d t        d      D              } t        t        | dd       d {   }|j                  t        k(  sJ |j
                  dk(  sJ |j                  | k(  sJ |j                  dk(  sJ t        t        d       d {   }|j                  t        k(  sJ |j
                  dk(  sJ |j                  dk(  sJ |j                  J t        t        | dd       d {   }|j                  t        k(  sJ |j
                  dk(  sJ |j                  | k(  sJ |j                  | d d d   k(  sJ t        j                  t              5  t        t        d	
       d {    d d d        d}t        j                  t        |      5  t        t        t        j                  
       d {    d d d        t        j                  t        |      5  t        t        t        j                         d {    d d d        t        j                  t        |j                  ddd            5  t        t        t        j                         d {    d d d        t        j                  t        d      5  t        t        dt        j                          d {    d d d        t        j                  t        d      5  t        t        dd        d {    d d d        y 7 7 p7 7 # 1 sw Y   xY w7 X# 1 sw Y   XxY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 b# 1 sw Y   y xY ww)Nc              3  H   K   | ]  }t        j                  d d        yw)r      N)randomrandint).0_s     r,   	<genexpr>ztest_run.<locals>.<genexpr>P  s     >A3'>s    "i   T)rp   capture_stdoutcapture_stderrr   r.   r   r   zoh no, it's textrp   z^stdout=subprocess\.PIPE is only valid with nursery\.start, since that's the only way to access the pipe(; use nursery\.start or pass the data you want to write directly)*$match)rq   rq   rr   rO   )rr   z.^can't specify both stdout and capture_stdout$)r   rq   z.^can't specify both stderr and capture_stderr$)r   rr   )r   ranger   CATr:   rT   rq   rr   r   pytestraisesUnicodeError
ValueErrorr   r   replaceDEVNULL)datar   pipe_stdout_errors      r,   test_runr   O  s    >u>>D	 F ;;#!!!==D   ==Cs488F;;#!!!==C==   3	 F ;;EEEE!!!==D   ==D2J&&& 
|	$ 9#%78889 H	z):	; 6#Z__5556	z):	; 7#joo6667	''(A>
 7 #joo666	7
 
?
 O #d:;M;MNNN	O
 
?
 A #d4@@@	A A_ 9 	99 9
 	66 6 	77 7 	7	7 7 	O	O O 	A	A As2  2M%LA M%LAM%5L6A+M%!L6L7L;%M% #LLL#M%+#L.L+L.4M%#L=*L;+L=/#M%$M6M	7M;#M%M4M5M9
M%M%M%LLM%LL(#M%+L..L83M%;L==MM%	MMM%MM"M%c                 j  K   t        d      } t        j                  t        j                        5 }t        | t        j                  d       d {    d d d        j                  j                  | k(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  J t        | ddd       d {   }|j                  | k(  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y 7 # 1 sw Y   xY w7 Ww)	Nz/sys.stderr.buffer.write(b'test\n'); sys.exit(1)T)rp   r   rO   s   test
F)r   r   r?   r.   )r-   r   r   r   CalledProcessErrorr   r   rG   cmdrT   rr   rq   r:   )r   excinfor   s      r,   test_run_checkr     s'    
C
DC	z44	5 N#Z%7%7MMMN==###==##q(((==9,,,=='''	 F ;;#==C==I%%%!!! 	NN Ns<   /D3 D%D#D%BD3D1A	D3#D%%D.*D3c                    K   t        t        j                  ddgddz         d {   } | j                  dk(  sJ | j                  | j
                  cxu rJ  J y 7 6w)Nr(   zimport sys; sys.stdin.close()   xi   r   r   )r   r)   r*   rT   rq   rr   )r   s    r,   test_run_with_broken_piper     sb     	>?Vm F !!!==FMM11111s   %A A7A c                  K    | t         t        j                  t        j                  t        j                        4 d {   }|j                  J |j
                  J |j                  J |j                  j                  d       d {    |j                  j                          d {    g }	 |j                  j                  d       d {   }|dk(  rn|j                  |       ;dj                  |      dk(  sJ d d d       d {    j                  dk(  sJ t        t         ddt        j                         d {   }|j                  dk(  sJ |j
                  dk(  sJ |j                  J  | t        t        j                  t        j                  	      4 d {   }|j
                  J |j                  J |j                  j!                          d {    |j#                          d {    d d d       d {    |j                  dk(  sJ t$        rJ	 t'        j(                         \  }} | t         t        j                  |t        j                        4 d {   }t'        j*                  |       |j                  J |j
                  J |j                  J |j                  j                  d       d {    |j                  j!                          d {    |j#                          d {   dk(  sJ t'        j,                  |d
      dk(  sJ t'        j,                  |d
      dk(  sJ d d d       d {    t'        j*                  |       y y 7 ?7 7 7 7 x# 1 d {  7  sw Y   xY w7 W7 7 7 7 # 1 d {  7  sw Y   xY w7 M7 7 7 7 n# 1 d {  7  sw Y   ~xY w# t'        j*                         w xY ww)Nro   s   1234T   r.   s   12344321r   )rp   r   rr   )rp   rr   i   )r   r   r   STDOUTstdiorq   rr   rt   send_eofr   appendjoinrT   r   r   rp   ru   r9   r&   ospipecloseread)rI   r<   outputr}   r   rws          r,   test_stderr_stdoutr     s    !3oo  	 / /
 
zz%%%{{&&&{{"""jj!!'***jj!!###**11"55E|MM% 	 
 xx;...%/ /& ??a 3  	 F !!!==K'''==    "oo     
{{"""{{"""jj!!!iik  ??a	779DAq); oo!((	 / /
 zz))){{***{{***jj))'222jj'')))!YY[(A---wwq$';666wwq$'3.../ /  HHQK) [/ 	+# 6/ / / /, 	"   / 3)(/ / / /  HHQKs  ?PN PA	NN!N0N1%NN	2N	PN9PN%A#P2N(3P6:N40N+1N4N.	N4PN1P6AO* =O
>O* AOO !OOOO?OO* $O%O* )PNN	NPN"NN"	P(P+N4.N41P4O:N=;OP
O* OOOO* O'OO'#O* *PPc                    K   t        j                  t              5 } t        dgd       d {    d d d        dt	         j
                        v sJ dt	        | j
                        v sJ t        rpt        j                  t              5 } t        dgd       d {    d d d        t        j                  t              5 } t        dd       d {    d d d        y y 7 # 1 sw Y   xY w7 S# 1 sw Y   RxY w7 *# 1 sw Y   y xY ww)	Nlszutf-8)encodingzunbuffered byte streamsz&the 'encoding' option is not supportedT)shellF)r   r   	TypeErrorr   r0   rG   r&   )r   s    r,   test_errorsr     s     	y	! 5WD6G4445 %GMM(::::3s7==7IIII]]9% 	3vT222	3]]9% 	2t5111	2 	2 	 	55 5 3	3 	3 2	2 	2s   DC&C$C&ADC4C2C4#!DDD D
D$C&&C/+D2C44C=9D DDDc                *   K   	 	 	 	 	 	 d fd} |t         j                  t               d {     |t         j                  t               d {    t
        st        st        j                  dk7  r |d t               d {    y y 7 ^7 =7 
w)Nc                  K   t        d      5 } t        d            4 d {   } | |       |j                          d {    d d d       d {    d d d        j                  rJ t        r|J j
                  | k(  sJ y j
                  dk7  sJ y 7 y7 [7 M# 1 d {  7  sw Y   ]xY w# 1 sw Y   axY ww)N      ?  r   )r   r3   r9   r   r&   rT   )send_itsignumr   r<   rI   s       r,   test_one_signalz%test_signals.<locals>.test_one_signal  s      3 	"5)%+6 " "$iik!!" "	" ))))%%%??vg---??a'''"!" " " "	" 	"st   CB:BB:B%B!B%
B:B#B:ACB:!B%#B:%B7	+B.,B7	3B::C?Cr!   c                ,    | j                  t              S r7   )send_signalr%   r<   s    r,   <lambda>ztest_signals.<locals>.<lambda>  s    4+;+;G+D r.   )r   zCallable[[Process], None]r   zsignal.Signals | Noner   r   )
r   r8   r#   	terminater$   r   r&   r)   platformr%   )rI   r   s   ` r,   test_signalsr     s     (*(%( 
( ',,
000
'++W
555 e(?DgNNN )@ 15 	Os3   +BB"BB4BBBBBzPOSIX specific)reasonc                n  K   t         rt        j                  dk(  ry t        j                  t        j                  t        j
                        }	  | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         t                d {    |j                          t        j                         dz   |j                  _        d d d       d {    j                  j                   rJ |j"                  dk(  sJ d d d       d {    t        j                  t        j                  |       y 7 7 7 7 h# 1 d {  7  sw Y   xxY w7 F# 1 d {  7  sw Y   VxY w# t        j                  t        j                  |       w xY ww)Nr!   r   r   r   )r   r)   r   signalSIGCHLDSIG_IGNr3   r   r@   ri   r9   r   r8   r   rD   r   r   rT   rI   old_sigchldr<   rF   s       r,   test_wait_reapable_failsr     sU     0--?K3 &eDk2 	( 	(d))+ K Kw""499-,...		050B0B0Ds0J$$-	K K
 ++<<<<??a'''	( 	( 	fnnk2	(K.K K K K	( 	( 	( 	( 	fnnk2s   AF5F %E&F )E7EE7)E /E0:E *E75E6-E7#F .E5/F 3%F5F E7E E7 E2	&E)'E2	.E75F 7F	=F >F	F &F22F5c           	       K   t         rt        j                  dk(  ry t        j                  dd      5  t        j
                  t
        j                  t
        j                        }	  | t        d            4 d {   }t        j                         4 d {   }|j                  |j                         t                d {    |j                          t        j                         dz   |j                   _        d d d       d {    j                   j$                  rJ |j&                  dk(  sJ d d d       d {    t        j
                  t
        j                  |       	 d d d        y 7 7 7 7 q# 1 d {  7  sw Y   xY w7 O# 1 d {  7  sw Y   _xY w# t        j
                  t
        j                  |       w xY w# 1 sw Y   y xY ww)Nr!   r[   Fr\   r   r   r   )r   r)   r   r   r^   r   r   r   r3   r   r@   ri   r9   r   r8   r   rD   r   r   rT   r   s       r,   !test_wait_reapable_fails_no_pidfdr   /  s~    
 0	9u	E 7mmFNNFNNC	7 *%+6 , ,$ --/ O O7&&tyy10222IIK494F4F4H34NG((1	O O
 #//@@@@!+++, , MM&..+67 7,O2O O O O, , , , MM&..+67 7s   2G"3G(F-=E9>F-FE;
F)FE=
:FFE?-F;F-FF-$G0	G"9F-;F=F?FFF
FFF-F*	F!F*	&F--&GGGG"c                 ,   ddl m}  t        r't        j                  dk(  st        j                  dk(  ry | j
                  j                  d      st        j                  d       ddl	m
} dt        j                  d	d
g      dfd}t        j                  t        j                  |      }	 t        j                  d        |j                          j#                  d      dk(  sJ 	 j$                   j'                          j#                          t        j                  t        j                  |       y # j$                   j'                          j#                          t        j                  t        j                  |       w xY w)Nr   )wait_child_exitingr!   darwinwaitidzwaitid only)sync_wait_reapableFr   3600c                *    dj                          y NT)r8   )sigframe	got_alarmsleepers     r,   on_alarmz#test_waitid_eintr.<locals>.on_alarm^  s    	r.   rO   )timeouti)r   r   r   zFrameType | Noner   r   )_subprocess_platformr   r   r)   r   
__module__endswithr   skip_subprocess_platform.waitidr   r   Popenr   SIGALRMalarmpidr9   rT   r8   )r   r   r   old_sigalrmr   r   s       @@r,   test_waitid_eintrr	  H  s    :#,,'1S\\X5M((11(;M"
 I01G
 --9K
3Q7;;'||A|&",,,% LLNLLNfnnk2 % LLNLLNfnnk2s   1>E AFc            	     b  K   ddfd} t        j                         4 d {   }|j                  t        t        t        d      |              t                d {    |j                  j                          d d d       d {    sJ y 7 o7 57 # 1 d {  7  sw Y   xY ww)NFc                   K   d| j                          	 t                d {    | j                  J y 7 # | j                  J w xY wwr   )r   r   rT   )r<   custom_deliver_cancel_calleds    r,   custom_deliver_cancelz9test_custom_deliver_cancel.<locals>.custom_deliver_cancelt  sM     '+$	//!!??... "??...s%   A: 8: A: A

Ara   deliver_cancelr<   r   r   r   	r   r@   ri   r   r   r3   r   rD   rE   )r  rF   r  s     @r,   test_custom_deliver_cancelr  q  s     #( 	/ !!# & &wKt=RS	
 %&&&##%& & (''& 	'	& & & &sV   !B/BB/8B B!B?B/
B
B/BB/B, B#!B,(B/c                     dddfd} t        j                  t        j                  t        j                  t        d                  5  t	        j
                  | d       d d d        y # 1 sw Y   y xY w)	Nc                @   K   | j                          t        d      w)Nfoo)r   r   r   s    r,   r  z6test_bad_deliver_cancel.<locals>.custom_deliver_cancel  s     s   c            	     J  K   t        j                         4 d {   } | j                  t        t        t        d                   t                d {    | j                  j                          d d d       d {    y 7 k7 17 	# 1 d {  7  sw Y   y xY ww)Nra   r  r  )rF   r  s    r,   do_stuffz)test_bad_deliver_cancel.<locals>.do_stuff  s     %%' 	* 	*7U4[AVW )***  '')	* 	* 	* +		* 	* 	* 	*sV   B#BB#8BB
B7B#BB#
BB#B BB B#z^foo$r   T)strict_exception_groupsr  r   )r   RaisesGroup	RaisesExcr   r   run)r  r  s    @r,   test_bad_deliver_cancelr    s]     * 
		6++JgFG
 : 			(D9: : :s   A..A7c                  K   t         j                  dfd}| j                  t         d|       t        j                  t
        d      5  t        j                         4 d {   }|j                  t        t        d             t                d {    |j                  j                          d d d       d {    d d d        y 7 h7 97 # 1 d {  7  sw Y   !xY w# 1 sw Y   y xY ww)Nc                *     |        t        d      )Nwhoops)OSError)selforiginal_terminates    r,   broken_terminatez>test_warn_on_failed_cancel_terminate.<locals>.broken_terminate  s    4 hr.   r   z
.*whoops.*r   ra   )r!  r   r   r   )r   r   setattrr   warnsRuntimeWarningr   r@   ri   r   r3   r   rD   rE   )monkeypatchr#  rF   r"  s      @r,   $test_warn_on_failed_cancel_terminater(    s      **  .>?	nL	9 *%%' 	* 	*7{E$K8(***  '')	* 	** *	**	* 	* 	* 	** *sx   A	C5C)%C&C))-CCC5C) CC)	C5C)CC)C&	CC&	"C))C2.C5z
posix onlyc                  K   |j                  t        dd        t        j                  t        d      5  t        j                         4 d {   }|j                  t        t        d             t                d {    |j                  j                          d d d       d {    d d d        y 7 h7 97 # 1 d {  7  sw Y   !xY w# 1 sw Y   y xY ww)Nr   c                      y r7    )r:   s    r,   r   z8test_warn_on_cancel_SIGKILL_escalation.<locals>.<lambda>  s    r.   z.*ignored SIGTERM.*r   ra   )r$  r   r   r%  r&  r   r@   ri   r   r3   r   rD   rE   )autojump_clockr'  rF   s      r,   &test_warn_on_cancel_SIGKILL_escalationr-    s     
 .@A	n,A	B *%%' 	* 	*7{E$K8(***  '')	* 	** *	**	* 	* 	* 	** *sv   4CCB8C-B> B:B>C*B<+C/	C8C:B><C>C	CC	CCCc                   K   t        j                  t        j                        5  t	        j
                         4 d {   } | j                  t        t               d {   }t        |t              sJ |}d d d       d {    d d d        j                  dk(  sJ y 7 d7 D7 "# 1 d {  7  sw Y   2xY w# 1 sw Y   6xY ww)NrO   )r   r  r   r   r   r@   rB   r   rV   rC   r   rT   )rF   rG   r<   s      r,    test_run_process_background_failr/    s     			J99	: "%%' 	" 	"7!--Z@@EeW---!D	" 	""
 ??a		"@	" 	" 	" 	"" "su   $CB?B$ B?B*!B&"B*:B?B(B?
C$B?&B*(B?*B<	0B31B<	8B??CC/dev/fdz,requires a way to iterate through open filesc                   K   t        j                          t        t        d      j	                               } t        t               d {    t        t        d      j	                               | k(  sJ t        j                  t        j                        5  t        t               d {    d d d        t        t        d      j	                               | k(  sJ t        j                  t              5  t        dg       d {    d d d        t        t        d      j	                               | k(  sJ y 7 7 # 1 sw Y   xY w7 D# 1 sw Y   CxY ww)Nr0  z	/dev/fd/0)gccollectsetSyncPathiterdirr   rR   r   r   r   r   rV   PermissionError)starting_fdss    r,   test_for_leaking_fdsr9    s    
 JJLx	*2245L
i
   x	"**,-===	z44	5 &*%%%&x	"**,-===		' );-((()x	"**,-=== ! 	&& &
 	)) )sh   A	ED?AEE-E.E2AE:E
EE1EEEEEEEc                   K   dd}| j                  t        j                  d|       t        j                  t
        t
              5  t        t        d       d {    d d d        y 7 # 1 sw Y   y xY ww)Nc                    K   yw)Noopsr+  )r:   r;   s     r,   very_broken_openz9test_run_process_internal_error.<locals>.very_broken_open  s	     s   _open_processTr   )r:   objectr;   r?  r   r0   )r$  trio_subprocessr   r  AttributeErrorr   rR   )r'  r=  s     r,   test_run_process_internal_errorrC    sc      ((/;KL			NN	; :)D999: :9: :s0   AA7A+A)A+ 	A7)A++A40A7c                   K   d dfd} t        t        d             d {   }t        j                         4 d {   }|j	                  | |       t                d {    t        t              sJ |j                          t               5  |j                  j                          |j                          d d d        t        d      5  j                          d {    d d d        j                         sJ d       d d d       d {    y 7 7 7 # 1 sw Y   cxY w7 F# 1 sw Y   ExY w7 %# 1 d {  7  sw Y   y xY ww)Nc                v   K   t               | j                          d {    j                          y 7 wr7   )r   r9   r4  )r<   noticed_exits    r,   wait_and_tellz7test_subprocess_pidfd_unnotified.<locals>.wait_and_tell  s.     wiik 	s   979ra   r   z,child task wasn't woken after poll, DEADLOCKr  )r   r3   r   r@   ri   r   rC   r   r   r   rd   r9   pollr   is_set)rG  r<   rF   rF  s      @r,    test_subprocess_pidfd_unnotifiedrJ    s5    L eDk**D!!# U Uw=$/$&&&,..."$ 	JJOOIIK		
 1 	& ##%%%	& ""$T&TT$U U U +U&	 	 &	& 	&U U U Us    EDE DE D>$D %0D>+D" D>D0'D.(D0,D>ED<EE D>"D+	'D>.D00D9	5D><E>EEEE)r+   r0   r   	list[str])r2   r   r   rK  )r:   r   r;   r   r   zAsyncIterator[Process])rI   rK   r   r   r   )r'  pytest.MonkeyPatchr   r   )r,  r   r'  rL  r   r   )a
__future__r   r2  r   r   r   r   r)   collections.abcr   r   
contextlibr   r   	functoolsr   pathlibr	   r5  r
   typingr   r   r   r   unittestr   r   r@   r   r   r   r   r   r   r   r   _core._tests.tutilr   r   lowlevelr   testingr   r   r   typesr   _abcr    r   r"   __annotations__namer&   r#   r$   r%   r-   rR   rV   r   r3   r=   rH   markparametrizebackground_process_paramrK   rY   r_   rf   rk   rm   r   r   r   r   r   r   r   r   r   skipifr   r   r	  r  r  r(  r-  r/  existsr9  rC  rJ  r+  r.   r,   <module>ra     s   " 	 	    
 3 G  $     	 	 	 A # N N$<<7 J	 #J	#	 	 	 
7%CLLG$;00 0GWg? =!	M"
?@'
= 			 	 	 
&
&
& 
& 
& ";;2234	12 3   $,(*$ y   " 
 
& (-(	( (  &  ( /5*/ + & &D I  I X6Ar"* 2 2 B BJ2 O O: I&673  83( I&677-7	7  87. %3 %3P(0:(*  Il3
*
*#
* 

* 4
*  ""$$9  >	> :Ur.   