a
    xd-O                     @   sf  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mZ	 d dl
Z
d dlmZ ddlmZ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 e jd
kZ e rd dlm!Z!m"Z"m#Z# n
d\Z!Z"Z#dd Z$e$dZ%e$dZ&e$dZ'e r
dd Z(ndd Z(dd Z)edd Z*edd Z+e
j,j-de*e+gddgdZ.e.dd  Z/e.d!d" Z0e.d#d$ Z1d%d& Z2d'd( Z3e$d)Z4e.d*d+ Z5e.d,d- Z6d.d/ Z7d0d1 Z8ed2d3 Z9e.d4d5 Z:d6d7 Z;e.d8d9 Z<e
j,j=e  d:d;e.d<d= Z>ed>d? Z?d@dA Z@dBdC ZAe
j,j=e  dDd;dEdF ZBdGdH ZCe
j,j=e	dID  dJd;dKdL ZEdMdN ZFdS )O    N)partial)Path)asynccontextmanager   )	ClosedResourceErrorEventProcess_core
fail_aftermove_on_afterrun_processsleepsleep_forever)skip_if_fbsd_pipes_brokenslow)open_process)assert_no_checkpointswait_all_tasks_blockedposix)SIGKILLSIGTERMSIGUSR1)NNNc                 C   s   t jddd|  gS )Nz-u-czimport sys; )sys
executable)code r   R/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/tests/test_subprocess.pypython%   s    r   zsys.exit(0)zsys.exit(1)z0sys.stdout.buffer.write(sys.stdin.buffer.read())c                 C   s   dt | gS )Nz
/bin/sleep)strsecondsr   r   r   <lambda>.       r"   c                 C   s   t d| S )Nzimport time; time.sleep({}))r   formatr    r   r   r   r"   0   r#   c                 C   s   t r| j| kS | jdkS d S )Nr   )r   
returncode)procsigr   r   r   
got_signal3   s    r(   c                  O  sR   t | i |I d H }z |V  W |  | I d H  n|  | I d H  0 d S N)r   killwait)argskwargsr&   r   r   r   open_process_then_kill:   s    r.   c               	   O  s~   t  4 I d H T}|dd |ttg| R i |I d H }|V  |j  W d   I d H  qz1 I d H sp0    Y  d S )NcheckF)r	   open_nursery
setdefaultstartr   r   cancel_scopecancel)r,   r-   nurseryr&   r   r   r   run_process_in_nurseryD   s
    "r6   background_processr   zrun_process in nursery)idsc              	      s   | t 4 I d H $}| I d H  W d   I d H  qJ1 I d H s@0    Y  t|tsXJ |jd u sfJ |jdkstJ t|dt  dksJ | t4 I d H $}| I d H  W d   I d H  q1 I d H s0    Y  |jdksJ t|dtdksJ d S )Nr   z<trio.Process z: exited with status 0>   <trio.Process {!r}: {}>exited with status 1)		EXIT_TRUEr+   
isinstancer   _pidfdr%   repr
EXIT_FALSEr$   )r7   r&   r   r   r   
test_basicT   s    88
rA   c              	      s   | t d4 I d H }|jd u s$J dt|v s4J |  |j  |jd usTJ dt|v sdJ |jd u srJ |jd usJ W d   I d H  q1 I d H s0    Y  d S )N'  ZrunningZexited)SLEEPr%   r?   r*   _procr+   r>   )r7   pr   r   r   test_auto_update_returncodee   s    
rF   c              
      s6  | t d4 I d H }t 4 I d H P}||j ||j ||j t I d H  |j  W d   I d H  q1 I d H s0    Y  t 4 I d H P}||j ||j ||j t I d H  |  W d   I d H  q1 I d H s0    Y  W d   I d H  q21 I d H s(0    Y  d S )N
   )	rC   r	   r0   
start_soonr+   r   r3   r4   r*   )r7   r&   r5   r   r   r   test_multi_waitr   s    4rI   c              	      s   t ttjtjdI d H 4 I d H }W d   I d H  qL1 I d H sB0    Y  |jd usZJ tt" |j	dI d H  W d    n1 s0    Y  tt  |j
 I d H  W d    n1 s0    Y  d S )N)stdinstdout   x)r   CAT
subprocessPIPEr%   pytestraisesr   rJ   send_allrK   receive_some)recwarnr&   r   r   r   !test_async_with_basics_deprecated   s    
*0rU   c              
      s   t dz}ttdI d H 4 I d H :}| d u s6J |  t I d H  W d   I d H  qt1 I d H sj0    Y  W d    n1 s0    Y  |jsJ t|tsJ t	|d
tdtrdndksJ d S )Nd   rG   r:   zexited with signal 9r;   )r   r   rC   pollr4   r   cancelled_caughtr(   r   r?   r$   r   )rT   scoper&   r   r   r    test_kill_when_context_cancelled   s    
T

rZ   zbdata = sys.stdin.buffer.read(); sys.stdout.buffer.write(data); sys.stderr.buffer.write(data[::-1])c              
      s  | t tjtjtjd4 I d H ԉd  fdd}dd }t 4 I d H Z}t d |j_|| ||j	  ||j
 d d d  W d   I d H  q1 I d H s0    Y  |jjrJ d	 I d H ksJ W d   I d H  q1 I d H s0    Y  d S )
NrJ   rK   stderrs+   the quick brown fox jumps over the lazy dogc                      s&   j  I d H  j  I d H  d S r)   )rJ   rR   acloser   msgr&   r   r   
feed_input   s    ztest_pipes.<locals>.feed_inputc                    s2   t  }| 2 z3 d H W }||7 }q
6 ||ks.J d S r)   )	bytearray)streamexpectedseenchunkr   r   r   check_output   s    z test_pipes.<locals>.check_outputg      >@r   )+COPY_STDIN_TO_STDOUT_AND_BACKWARD_TO_STDERRrN   rO   r	   r0   current_timer3   deadlinerH   rK   r\   rX   r+   )r7   r`   rf   r5   r   r^   r   
test_pipes   s"    
Drk   c              
      s(  | t dtjtjtjd4 I d H ؉tr.dnd  fdd}td jdI d H  td	I d H  jd
  I d H  |ddI d H  jd  d   I d H  |ddI d H  |ddI d H  jd  I d H  |ddI d H  jdI d H  td	 }|ddI d H  W d    n1 s80    Y  |j	sNJ j I d H  |ddI d H  j
 I d H  jdI d H dksJ jdI d H dksJ  I d H  W d    n1 s0    Y  W d   I d H  q1 I d H s
0    Y  jdks$J d S )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
r[      
s   
c              	      s   t  4 I d H V} fdd}||j|| d  ||j|d | d d  W d   I d H  q|1 I d H sr0    Y  d S )Nc                    sr   |dkrF|  |I d H }|d|dt| ks8J |t|8 }q |dksRJ |  t I d H  ksnJ d S )Nr   z{}utf-8)rS   r$   encodelen)rb   countdigitresult)newliner   r   	drain_one   s    z3test_interactive.<locals>.expect.<locals>.drain_oner   r9   )r	   r0   rH   rK   r\   )idxrequestr5   rt   rs   r&   r   r   expect   s    
z test_interactive.<locals>.expect   s   12g?s   345r   i90  s   100s   200r9   rV   r         0   s   999999   i?B r#   )r   rN   rO   r   r
   rJ   rR   r   r   rX   r]   rK   rS   r\   r+   r%   )r7   rx   rY   r   rw   r   test_interactive   s@    

0\r~   c                     s  t dd tdD } tt| dddI d H }|jtks:J |jdksHJ |j| ksVJ |jdksdJ ttddI d H }|jtksJ |jdksJ |jdksJ |jd u sJ tt| dddI d H }|jtksJ |jdksJ |j| ksJ |j| d d d	 ksJ t	
t" ttd
dI d H  W d    n1 s<0    Y  t	
t$ tttjdI d H  W d    n1 s|0    Y  t	
t$ tttjdI d H  W d    n1 s0    Y  t	
t$ tttjdI d H  W d    n1 s0    Y  t	
t& ttdtjdI d H  W d    n1 s>0    Y  t	
t$ ttdd dI d H  W d    n1 s~0    Y  d S )Nc                 s   s   | ]}t d dV  qdS )r      N)randomrandint).0_r   r   r   	<genexpr>  r#   ztest_run.<locals>.<genexpr>i   T)rJ   capture_stdoutcapture_stderrr   r#   )r   rg   zoh no, it's textrJ   )rK   )r\   )r   rK   )r   r\   )bytesranger   rM   r,   r%   rK   r\   rh   rP   rQ   UnicodeError
ValueErrorrN   rO   DEVNULL)datarr   r   r   r   test_run  sF    24446r   c                     s   t d} ttj&}t| tjddI d H  W d    n1 s@0    Y  |jj| ksZJ |jj	dksjJ |jj
dkszJ |jjd u sJ t| ddddI d H }|j| ksJ |jdksJ |j
dksJ |j	dksJ d S )	Nz/sys.stderr.buffer.write(b'test\n'); sys.exit(1)T)rJ   r   r9   s   test
F)r   r   r/   r#   )r   rP   rQ   rN   CalledProcessErrorr   r   valuecmdr%   r\   rK   r,   )r   excinforr   r   r   r   test_run_check9  s    4r   c                     sN   t tjddgdd dI d H } | jdks,J | j| j  u rDd u sJn J d S )Nr   zimport sys; sys.stdin.close()rL   i   r   r   )r   r   r   r%   rK   r\   )rr   r   r   r   test_run_with_broken_pipeK  s
    r   c              	      s  | t tjtjtjd4 I d H }|jd us.J |jd u s<J |jdI d H  |j I d H  g }|j	dI d H }|dkr~q|
| qbd|dksJ W d   I d H  q1 I d H s0    Y  |jdksJ tt ddtjdI d H }|jdksJ |jdks
J |jd u sJ | ttjtjd	4 I d H V}|jd u sFJ |jd u sVJ |j I d H  | I d H  W d   I d H  q1 I d H s0    Y  |jdksJ trΐzt \}}| t tj|tjd4 I d H }t| |jd u s J |jd u sJ |jd u s J |jdI d H  |j I d H  | I d H dksZJ t|d
dkspJ t|d
dksJ W d   I d H  q1 I d H s0    Y  W t| nt| 0 d S )Nr[   s   1234   r#   s   12344321r   T)rJ   r   r\   )rJ   r\   i   )rh   rN   rO   STDOUTrK   r\   ZstdiorR   Zsend_eofrS   appendjoinr%   r   rM   rJ   r]   r+   r   ospipecloseread)r7   r&   outputre   rr   rwr   r   r   test_stderr_stdoutT  sp    <
<
Fr   c                     s   t t$} tdgddI d H  W d    n1 s40    Y  dt| jv sPJ dt| jv sbJ trt t$} tdgddI d H  W d    n1 s0    Y  t t"} tdddI d H  W d    n1 s0    Y  d S )	NZlsrm   )encodingzunbuffered byte streamsz&the 'encoding' option is not supportedT)shellF)rP   rQ   	TypeErrorr   r   r   r   )r   r   r   r   test_errors  s    22r   c                    sL    fdd}|t jtI d H  |t jtI d H  trH|dd tI d H  d S )Nc              
      s   t df} td4 I d H ,}| | | I d H  W d   I d H  q`1 I d H sV0    Y  W d    n1 st0    Y  |jrJ tr|j| ksJ n|jdksJ d S )N      ?  r   )r   rC   r+   rX   r   r%   )Zsend_itsignumrY   r&   r7   r   r   test_one_signal  s    
V
z%test_signals.<locals>.test_one_signalc                 S   s
   |  tS r)   )send_signalr   r&   r   r   r   r"     r#   ztest_signals.<locals>.<lambda>)r   r*   r   	terminater   r   r   )r7   r   r   r   r   test_signals  s
    r   zPOSIX specific)reasonc              
      s   t  t jt j}z| td4 I d H }t 4 I d H F}||j t I d H  |	  t
 d |j_W d   I d H  q1 I d H s0    Y  |jjrJ |jdksJ W d   I d H  q1 I d H s0    Y  W t  t j| nt  t j| 0 d S )Nr   r   r   )signalSIGCHLDSIG_IGNrC   r	   r0   rH   r+   r   r*   ri   r3   rj   rX   r%   )r7   Zold_sigchldr&   r5   r   r   r   test_wait_reapable_fails  s    ::r   c               
      s   ddl m}  | jds"td ddlm} d t	ddg fd	d
}t

t
j|}zTt
d |j jdddksJ W jd u r    t

t
j| n*jd u r̈    t

t
j| 0 d S )Nr   )wait_child_exitingwaitidzwaitid only)sync_wait_reapableFr   Z3600c                    s   d    d S NT)r*   )r'   frameZ	got_alarmZsleeperr   r   on_alarm  s    z#test_waitid_eintr.<locals>.on_alarmr9   )timeouti)Z_subprocess_platformr   
__module__endswithrP   skipZ_subprocess_platform.waitidr   rN   Popenr   SIGALRMalarmpidr+   r%   r*   )r   r   r   Zold_sigalrmr   r   r   test_waitid_eintr  s(    




r   c               	      s   d  fdd} t  4 I d H D}|tttd| d t I d H  |j  W d   I d H  qz1 I d H sp0    Y   sJ d S )NFc                    s@   d |    zt I d H  W | jd us<J n| jd us:J 0 d S r   )r   r   r%   r   Zcustom_deliver_cancel_calledr   r   custom_deliver_cancel  s
    z9test_custom_deliver_cancel.<locals>.custom_deliver_cancelrB   )Zdeliver_cancel)	r	   r0   rH   r   r   rC   r   r3   r4   )r   r5   r   r   r   test_custom_deliver_cancel  s    4r   c              
      s   t j  fdd}| t d| tjtddr t 4 I d H <}|t	t
d t I d H  |j  W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  d S )Nc                    s    |  t dd S )NZwhoops)OSError)selfZoriginal_terminater   r   broken_terminate  s    z>test_warn_on_failed_cancel_terminate.<locals>.broken_terminater   z
.*whoops.*matchrB   )r   r   setattrrP   warnsRuntimeWarningr	   r0   rH   r   rC   r   r3   r4   )monkeypatchr   r5   r   r   r   $test_warn_on_failed_cancel_terminate
  s    r   z
posix onlyc              
      s   | tddd  tjtddr t 4 I d H <}|tt	d t
 I d H  |j  W d   I d H  q1 I d H sz0    Y  W d    n1 s0    Y  d S )Nr   c                  W   s   d S r)   r   )r,   r   r   r   r"     r#   z8test_warn_on_cancel_SIGKILL_escalation.<locals>.<lambda>z.*ignored SIGTERM.*r   rB   )r   r   rP   r   r   r	   r0   rH   r   rC   r   r3   r4   )Zautojump_clockr   r5   r   r   r   &test_warn_on_cancel_SIGKILL_escalation  s    r   c               
      s   t tj^ t 4 I d H (} | ttI d H }W d   I d H  q\1 I d H sR0    Y  W d    n1 sp0    Y  |j	dksJ d S )Nr9   )
rP   rQ   rN   r   r	   r0   r2   r   r@   r%   )r5   r&   r   r   r    test_run_process_background_fail'  s    Zr   /dev/fdz,requires a way to iterate through open filesc                     s   t td } ttI d H  t td | ks6J ttj tt	I d H  W d    n1 sf0    Y  t td | ksJ tt
  tdgI d H  W d    n1 s0    Y  t td | ksJ d S )Nr   z	/dev/fd/0)setSyncPathiterdirr   r<   rP   rQ   rN   r   r@   PermissionError)Zstarting_fdsr   r   r   test_for_leaking_fds.  s    ,.r   c               	      s  d  d d fdd} t tdI d H }t 4 I d H }|| | t I d H  t ts`J |  t	 " |j
  |  W d    n1 s0    Y  td   I d H  W d    n1 s0    Y    sJ dW d   I d H  q1 I d H s
0    Y  d S )N)returnc                    s    t   |  I d H     d S r)   )r   r+   r   r   Znoticed_exitr   r   wait_and_tellD  s    z7test_subprocess_pidfd_unnotified.<locals>.wait_and_tellrB   ry   z,child task wasn't woken after poll, DEADLOCK)r   rC   r	   r0   rH   r   r=   r   r   r   rD   r+   rW   r   is_set)r   r&   r5   r   r   r    test_subprocess_pidfd_unnotifiedA  s    
&
,r   )Gr   r   r   rN   r   	functoolsr   pathlibr   r   rP   async_generatorr    r   r   r   r	   r
   r   r   r   r   Z_core.tests.tutilr   r   Zlowlevelr   Ztestingr   r   namer   r   r   r   r   r<   r@   rM   rC   r(   r.   r6   markZparametrizeZbackground_process_paramrA   rF   rI   rU   rZ   rh   rk   r~   r   r   r   r   r   r   Zskipifr   r   r   r   r   r   existsr   r   r   r   r   r   <module>   s   ,



	





F+

B



