
    <|hN                        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  eed      sde_         ee d      Ze j                  d    dk\  Zej                  rdZnd	Z ee j$                  d
      Zexr ej                  Z ej*                  d       G d dej,                               Z ej0                  d       G d dej,                               Z G d dej,                        Zedk(  r ej8                          yy)    N)mock)
subprocess	mswindowsFpypy_version_info   z@import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY); newlinesr   c                      e Zd ZdZd Zd Zd Zd Z ej                  d      d        Z
 ej                  ej                  d       ej                  d	      d
               Z ej                   d      d        Z ej                  d      d        Z ej                  d      d        Z ej                   d      d        Zd Z ej                  d      d        Z ej.                  d      d        Zej2                   ej                   d      d               Z ej                  d      d        Z ej                  d      d        Z ej                  ej<                  dd dk  d      d        Zd Z y) 	TestPopenFc                     t        j                  t        j                  ddg      }| j	                  |j                         d       y )N-czimport sys; sys.exit(10)
   )r   Popensys
executableassertEqualwaitselfpopens     \/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/test__subprocess.py	test_exitzTestPopen.test_exit*   s4      #..$8R!STr*    c                     t        j                  t        j                  ddg      }t	        j
                  |g       | j                  |j                         d       y )Nr   zimport sys; sys.exit(11)   )r   r   r   r   geventr   r   pollr   s     r   	test_waitzTestPopen.test_wait.   sB      #..$8R!STUGr*r   c                     | j                  t              5 }t        j                  dg      j	                          d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)N*   )assertRaisesOSErrorr   r   r   r   	exceptionerrnor   excs     r   test_child_exceptionzTestPopen.test_child_exception3   s\    w' 	+3cU#((*	+ 	,,a0	+ 	+s   %A**A3c                 :   t        j                         }t        j                  t        j
                  ddgt        j                        }|j                          |j                  j                          ~t        j                         }| j                  ||       y )Nr   zprint()stdout)	greentestget_number_open_filesr   r   r   r   PIPEr   r+   closer   )r   
num_beforep	num_afters       r   	test_leakzTestPopen.test_leak9   sl    446
cnndI>$.OO5		335	Y/r   hangsc                    t        j                  t        j                  ddddgt         j                  t         j                  t         j                        }|j                  d      \  }}| j                  |d       t        j                  j                  d      r|j                  d      sJ y | j                  |d       y )	N-Wignorer   zNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read()))stdinr+   stderrs   bananaz-dbgs	   pineapple)	r   r   r   r   r.   communicater   endswith
startswithr   r1   r+   r9   s       r   test_communicatezTestPopen.test_communicateD   s    cnndH"CD
 $.??$.OO$.OO5 ==3+>>""6*$$\222V\2r   zWindows does weird things herezSometimes segfaultsc                 z   t        j                  t        j                  ddddgt         j                  t         j                  t         j                  d      }|j                  d      \  }}| j                  |t               | j                  |t               | j                  |d       | j                  |d	       y )
Nr6   r7   r   zfimport sys,os;sys.stderr.write("pineapple\r\n\xff\xff\xf2\xf9\r\n");sys.stdout.write(sys.stdin.read())T)r8   r+   r9   universal_newlinesu   banana
ÿÿòù
u   banana
ÿÿòù
u   pineapple
ÿÿòù
)	r   r   r   r   r.   r:   assertIsInstancestrr   r=   s       r   test_communicate_universalz$TestPopen.test_communicate_universalU   s    
 h5	 //????#
 ==)IJfc*fc*5	7 	8	:r   z'Windows IO is weird; this doesn't raisec                 R   t        j                  t        j                  ddddgt         j                  t         j                  t         j                  dd      5 }| j                  t              5  |j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr6   r7   r   z6import os, sys; os.write(sys.stdout.fileno(), b"\xff")T)r8   r+   r9   textr@   )r   r   r   r   r.   r"   UnicodeDecodeErrorr:   )r   r1   s     r   test_communicate_undecodablez&TestPopen.test_communicate_undecodableq   s     NN(>	 !oojoo!d
 	  ""#56   	  	    	  	 s$   B/B BB	BB&c                 n   t        j                  t        j                  ddt        z   dz   gt         j
                  dd      5 }|j                  j                         }t        r,t        s| j                  |d       n%| j                  |d       n| j                  |d       d d d        y # 1 sw Y   y xY w)	Nr   import sys,os;a	  sys.stdout.write("line1\n");sys.stdout.flush();sys.stdout.write("line2\r");sys.stdout.flush();sys.stdout.write("line3\r\n");sys.stdout.flush();sys.stdout.write("line4\r");sys.stdout.flush();sys.stdout.write("\nline5");sys.stdout.flush();sys.stdout.write("\nline6");   r+   r@   bufsize#line1
line2
line3
line4
line5
line6%line1
line2
line3

line4

line5
line6%line1
line2line3
line4
line5
line6r   r   r   r   	SETBINARYr.   r+   readpython_universal_newlines python_universal_newlines_brokenr   r   r1   r+   s      r   test_universal1zTestPopen.test_universal1   s    NND$y0
44 "#$%
 !	Q& XX]]_F(7$$V%OQ $$V%SU   !OQA!	Q !	Q !	Q   AB++B4c                 n   t        j                  t        j                  ddt        z   dz   gt         j
                  dd      5 }|j                  j                         }t        r,t        s| j                  |d       n%| j                  |d       n| j                  |d       d d d        y # 1 sw Y   y xY w)	Nr   rI   zsys.stdout.write("line1\n");sys.stdout.flush();sys.stdout.write("line2\r");sys.stdout.flush();sys.stdout.write("line3\r\n");sys.stdout.flush();sys.stdout.write("line4\r\nline5");sys.stdout.flush();sys.stdout.write("\nline6");rJ   rK   rM   rN   rO   rP   rU   s      r   test_universal2zTestPopen.test_universal2   s    NND$y04	4 "#$!
 	Q" XX]]_F(7$$V%OQ $$V%SU   !OQ=	Q 	Q 	QrW   zUses 'grep' commandc                 D   t        j                         \  }}t        j                  |      }t        j                  ddg|      5 }	 t        j                  d       | j                  |j                         d        |j                         |j                          |j                          t        j                  |       	 d d d        y # |j                         |j                          |j                          t        j                  |       w xY w# 1 sw Y   y xY w)NgreprE   )r8   皙?)ospiper   
FileObjectr   timesleepr   r   killr/   )r   rwr8   r1   s        r   test_nonblock_removedzTestPopen.test_nonblock_removed   s     wwy1%%a(vv.e< 	 

3  40668#FFH	 	 668#FFH	 	s&   D5C=ADADDDc                 6   t        d      D ]s  }| j                  t              5 }t        j                  d      5  	 d d d        d d d        | j                  j                  j                  t        j                         u y # 1 sw Y   HxY w# 1 sw Y   LxY w)N   this_name_must_not_exist)	ranger"   r#   r   r   r   r$   r%   ENOENT)r   _r'   s      r   test_issue148zTestPopen.test_issue148   s    q 	@A""7+ s%%&@A  S]]00%,,?	@  s!   BBBBBB	c                    | j                  t        j                        5 }t        j                  t        j
                  ddg       d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)Nr   zimport sys; sys.exit(44),   )	r"   r   CalledProcessErrorcheck_outputr   r   r   r$   
returncoder&   s     r   test_check_output_keyword_errorz)TestPopen.test_check_output_keyword_error   sg    z<<= 	X##S^^T;U$VW	X 	1126	X 	Xs   'A66A?z!The default buffer changed in Py3c                 H   t        j                  t        j                  dddgt         j                  t         j                        5 }|j
                  j                  d       |j                  j                         }d d d        | j                  d       y # 1 sw Y   xY w)Nz-ur   z2import sys; sys.stdout.write(sys.stdin.readline())r8   r+   s   foobar
)
r   r   r   r   r.   r8   writer+   readliner   )r   r1   rc   s      r   test_popen_bufsizezTestPopen.test_popen_bufsize   s     tEG oojoo
 	$ GGMM+&!!#A	$ 	K(	$ 	$s   6BB!zNot sure why?c                 Z    ddl m} g |j                  dd      } fd} ||      }|j                          |j	                           j                  t              d        j                  t        d   t                      j                  d   j                  d   d       y )	Nr   )monkey	threadingThreadc                      j                  t              5 } t        j                  j	                  dd       d d d        j                   j                         y # 1 sw Y   %xY w)Nzecho 123T)shell)r"   	TypeErrorr   r   r   appendr$   )r'   exr   s    r   fnz6TestPopen.test_subprocess_in_native_thread.<locals>.fn  sU    ""9- @!!''
$'?@IIcmm$@ @s   "AA&)targetrJ   z5child watchers are only available on the default loop)r   ry   get_originalstartjoinr   len
assertTrue
isinstancer~   args)r   ry   r{   r   threadr   s   `    @r    test_subprocess_in_native_threadz*TestPopen.test_subprocess_in_native_thread   s    
 	" $$[(;	%
 r"R!$
2a5)4b9AA(_`r   c                    t        j                  t        j                  ddgfdt         j                  i|5 }|j                         \  }}d d d        | j                  |       | j                         y # 1 sw Y   -xY w)Nr   passr+   )r   r   r   r   r.   r:   rA   assertIsNone)r   kwargskindprocr+   r9   s         r   __test_no_outputzTestPopen.__test_no_output  s    v.
!
 
 	0 !--/NFF	0 	fd+&!	0 	0s   A88BzGSometimes segfaults; https://travis-ci.org/gevent/gevent/jobs/327357682c                 4    | j                  ddit               y )Nr@   T_TestPopen__test_no_outputrB   r   s    r   9test_universal_newlines_text_mode_no_output_is_always_strzCTestPopen.test_universal_newlines_text_mode_no_output_is_always_str%  s     	3T:C@r   Nr!   )r      zNeed encoding argumentc                 4    | j                  ddit               y )Nencodingzutf-8r   r   s    r   'test_encoded_text_mode_no_output_is_strz1TestPopen.test_encoded_text_mode_no_output_is_str-  s    
 	z73S9r   c                 0    | j                  i t               y )N)r   bytesr   s    r   )test_default_mode_no_output_is_always_strz3TestPopen.test_default_mode_no_output_is_always_str4  s     	b%(r   )!__name__
__module____qualname__error_fatalr   r   r(   r3   r,   skipOnLibuvOnPyPyOnWinr>   skipIfr   r   skipOnLibuvOnCIOnPyPyrC   skipOnWindowsrG   rV   rY   re   rl   rr   	skipOnPy3rw   ignores_leakcheckr   r   r   r   version_infor   r    r   r   r   r   #   s   
 K++
1	0 &Y%%g.3 /3  Yj**68$Y$$%:;: <8:2 YFG  H * &Y%%g."Q /"QH &Y%%g. Q / QD Y23 4(@ &Y%%g.7 /7 Y<=
) >
)   Y_-a . !a. &Y%%g.	" /	" %Y$$ &Z [A[A Yc&&r*V35MN: O:)r   r   zTesting POSIX fd closingc                   v   e Zd Z ej                  d       ej                  d       ej                  d      d                      Z ej                  d       ej                  d      d               Z ej                  d       ej                  d       ej                  d       ej                  d      d                             Z ej                  d       ej                  d	      d
               Z ej                  d       ej                  d       ej                  d	      d                      Z	y)TestFDszos.closerangez"gevent.subprocess._set_inheritablezos.closec                 r   d}t         j                  j                  |d        |j                  t	        j
                  dd      t	        j
                  dt         j                        g       |j                  t	        j
                  dd      t	        j
                  dd      g       |j                  d       y )N      rg   r   r      Tr   r   )r   r   _close_fds_brute_forceassert_has_callsr   callMAXFDassert_called_once_with)r   r/   set_inheritable
closerangekeeps        r   test_close_fds_brute_forcez"TestFDs.test_close_fds_brute_force=  s    
 	//d;##IIaOIIa))*%
 	
 	((IIaIIa*
 	
 	%%a(r   z.gevent.subprocess.Popen._close_fds_brute_forcez
os.listdirc                 x    d|_         t        j                  j                  dg d       |j	                  g d       y )NzNot an Integerpath*   )return_valuer   r   _close_fds_from_pathr   )r   listdirbrute_forces      r   #test_close_fds_from_path_bad_valuesz+TestFDs.test_close_fds_from_path_bad_valuesU  s4      0--fb"=++B3r   c                 |   d}g d|_         t        j                  j                  d|d       | j	                  g |j
                         |j                  t        j                  dd      t        j                  dd      g       |j                  t        j                  d      t        j                  d	      g       y )
Nr   )1637r   r   r   Trg   r   %   )	r   r   r   r   r   
mock_callsr   r   r   )r   r/   r   r   r   r   s         r   test_close_fds_from_pathz TestFDs.test_close_fds_from_path]  s    

  0--fdA>Z223((IIaIIa*
 	
 	IIaLIIbM 
 	r   zos.path.isdirc                     d|_         t        j                  j                  g d       |j	                  g d       |j                  t        j                  d      t        j                  d      g       y )NFr   /proc/self/fdz/dev/fd)r   r   r   
_close_fdsr   r   r   r   )r   isdirr   s      r   test_close_fds_no_dirzTestFDs.test_close_fds_no_dirx  s]     ###B+++B3IIo&IIi  
 	r   z,gevent.subprocess.Popen._close_fds_from_pathc                     d|_         t        j                  j                  dgd       | j	                  g |j
                         |j                  ddgd       y )NTrg   r   r   )r   r   r   r   r   r   r   )r   r   r   	from_paths       r   test_close_fds_with_dirzTestFDs.test_close_fds_with_dir  sN     "##QC,[334))/A3Cr   N)
r   r   r   r   patchr   r   r   r   r   r   r   r   r   r   :  sT    TZZ TZZ45TZZ
)  6 !)* TZZ@ATZZ4  B4 TZZTZZ TZZ45TZZ
  6 ! . TZZ@ATZZ  ! B TZZ>?TZZ@ATZZ D ! B @Dr   r   c                      e Zd Zej                  Z ej                  d      d        Zd Zd Z	d Z
d Z ej                  d      d        Z ej                  d      d	        Z ej                  d      d
        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Zd Z ej(                  d      d        Zy)RunFuncTestCaser   c                 T    t         j                  d|g}t        j                  |fi |S )z4Run Python code in a subprocess using subprocess.runr   )r   r   r   run)r   coder   argvs       r   
run_pythonzRunFuncTestCase.run_python  s(     d+~~d-f--r   c                     | j                  d      }| j                  |j                  d       | j                  t        j
                        5  |j                          d d d        y # 1 sw Y   y xY w)Nimport sys; sys.exit(47)/   )r   r   rq   r"   r   ro   check_returncoder   cps     r   test_returncodezRunFuncTestCase.test_returncode  sZ    __78+z<<= 	"!	" 	" 	"s   A''A0c                     | j                  t        j                        5 }| j                  dd       d d d        | j	                  j
                  j                  d       y # 1 sw Y   0xY w)Nr   Tcheckr   )r"   r   ro   r   r   r$   rq   r   cs     r   
test_checkzRunFuncTestCase.test_check  s\    z<<= 	DOO6dOC	D//4	D 	Ds   A##A,c                 b    | j                  dd      }| j                  |j                  d       y )Nzimport sys; sys.exit(0)Tr   r   )r   r   rq   r   s     r   test_check_zerozRunFuncTestCase.test_check_zero  s)    __6d_C*r   c                     | j                  t        j                        5  | j                  dd       d d d        y # 1 sw Y   y xY w)Nzwhile True: passg-C6?)timeout)r"   r   TimeoutExpiredr   r   s    r   test_timeoutzRunFuncTestCase.test_timeout  sB    
 z889 	@OO.O?	@ 	@ 	@s	   =Ar4   c                 ~    | j                  dt        j                        }| j                  d|j                         y )Nzprint('BDFL')r*      BDFLr   r   r.   assertInr+   r   s     r   test_capture_stdoutz#RunFuncTestCase.test_capture_stdout  s,     ___Z___Egryy)r   c                 ~    | j                  dt        j                        }| j                  d|j                         y )Nz$import sys; sys.stderr.write('BDFL'))r9   r   )r   r   r.   r   r9   r   s     r   test_capture_stderrz#RunFuncTestCase.test_capture_stderr  s1    __C$.OO  5gryy)r   c                    t        j                         5 }|j                  d       |j                  d       | j	                  d|t
        j                        }| j                  d|j                         d d d        y # 1 sw Y   y xY w)N   pearr   6import sys; sys.stdout.write(sys.stdin.read().upper())rt      PEAR)	tempfileTemporaryFileru   seekr   r   r.   r   r+   )r   tfr   s      r   test_check_output_stdin_argz+RunFuncTestCase.test_check_output_stdin_arg  sq     ##% 	.HHWGGAJH ! 2B MM'299-	. 	. 	.s   A!A??Bc                     | j                  ddt        j                        }| j                  d|j                         y )Nr   r   )inputr+   r   r   r   s     r   test_check_output_input_argz+RunFuncTestCase.test_check_output_input_arg  s7     __D*//  3 	gryy)r   c                    t        j                         5 }|j                  d       |j                  d       | j	                  t
        d      5 }| j                  d|d       d d d        | j                  dj                  j                  d          | j                  d	|j                  j                  d          d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)
Nr   r   z7Expected ValueError when stdin and input args supplied.)msgzprint('will not be run')s   hare)r8   r   r8   r   )
r   r   ru   r   r"   
ValueErrorr   r   r$   r   )r   r   r   s      r   &test_check_output_stdin_with_input_argz6RunFuncTestCase.test_check_output_stdin_with_input_arg  s     ##% 	8HHWGGAJ"":'` # b 9ef :&(   99 MM'1;;#3#3A#67MM'1;;#3#3A#67	8 	89 9	8 	8s$   :CC$ACC	CCc                 H   | j                  t        j                        5 }| j                  ddt        j                         d d d        | j                  j                  j                  d       | j                  |j                  j                  d       y # 1 sw Y   VxY w)NzMimport sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)r   )r   r+   r   )	r"   r   r   r   r.   r   r$   outputr+   r   s     r   test_check_output_timeoutz)RunFuncTestCase.test_check_output_timeout  s    z889 
	3QOO' *//  	3
	3 	++W5++W5
	3 
	3s   #BB!c                     t         j                  j                         }d|d<   | j                  d|      }| j	                  |j
                  d       y )NbananaFRUITzCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31))env!   )r]   environcopyr   r   rq   )r   newenvr   s      r   test_run_kwargszRunFuncTestCase.test_run_kwargs  sM    ""w__ U!'  ) 	+r   z)requires posix like 'sleep' shell commandc                     | j                  d      5  | j                  t        j                        5  t        j                  dddd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr\   zsleep 3T)r}   r   capture_output)runs_in_given_timer"   r   r   r   r   s    r   .test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_output  sj     $$S) 	4"":#<#<= 4yc.244	4 	44 4	4 	4s"    A)AA)A&	"A))A2N)r   r   r   r,   LARGE_TIMEOUT__timeout__skipWithoutResourcer   r   r   r   r   r   r   r   r   r   r  r  r  r   r  r   r   r   r   r     s1    ))K"Y""<0. 1.
"5
+
@ &Y%%g.* /*
 &Y%%g.* /*
 &Y%%g.. /. &Y%%g.* /* &Y%%g.
8 /
8 &Y%%g.6 /6 , YHI4 J4r   r   __main__)r   r]   r%   unittestr`   r   gevent.testingtestingr,   r   r   r   hasattrr   PYPYr   PY3rQ   r+   rS   rT   r  TestCaser   r   r   r   r   mainr   r   r   <module>r      s*   
 	     "   z;' J s'(	qQ RII $CJJ
;  $'#?:+?+?  |,T)	"" T) -T)l 34RDh RD 5RDhs4i(( s4j zINN r   