Sindbad~EG File Manager

Current Path : /proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/
Upload File :
Current File : //proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/test_subprocess.cpython-312.opt-2.pyc

�

'ΜgԈ���ddlZddlmZddlmZddlmZddlmZddlmZddlmZddl	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZdd	lmZ	ddl Z 	ddl"Z"	ddl#Z#	ddl$Z$ejJrejLd
��ejNsejLd��ejPdk(Z)e)rd
Z*ndZ*dZ+e,e-e.fZ/ej`ddfa1d�Z2Gd�dejf�Z4Gd�de5�Z6Gd�dejn�Z8Gd�de4�Z9Gd�de4�Z:d�Z;ejxe)d�Gd�d e4��Z=ej|e)d!�Gd"�d#e4��Z?Gd$�d%ejf�Z@ej|eAed&�d'�Gd(�d)e9��ZBej|e)d*�Gd+�d,e4��ZCGd-�d.e4�ZDeEd/k(rej��yy#e!$rdZ Y���wxYw#e!$rdZ"Y���wxYw#e!$rdZ#Y���wxYw#dZ$Y���xYw)0�N)�mock)�support)�check_sanitizer)�
import_helper)�	os_helper)�warnings_helper)�assert_python_ok)�FakePathztest is not helpful for PGOztest module requires subprocess�win32z@import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY);�)�nonexisting_i_hope�-c�passc���tjd�}|�ytj|tj�r(tj|g�jdk(r|fayyy)N�truer)	�shutil�which�os�access�X_OK�
subprocess�run�
returncode�ZERO_RETURN_CMD)�
shell_trues �1/usr/local/lib/python3.12/test/test_subprocess.py�setUpModulerJsU�����f�%�J����
�	�	�*�b�g�g�&����
�|�$�/�/�1�4�%�-��	5�	'�c��eZdZd�Zd�Zy)�BaseTestCasec�,�tj�y�N)r�
reap_children��selfs r�setUpzBaseTestCase.setUpUs��	���rc�
�tsYtjD]}|j��tj�|jtjd�|j
�tj�y)Nzsubprocess._active not empty)	�	mswindowsr�_active�wait�_cleanup�assertFalse�
doCleanupsrr#)r%�insts  r�tearDownzBaseTestCase.tearDownZs\���"�*�*���	�	��+����!�����"�"�$B�
�	
�������rN��__name__�
__module__�__qualname__r&r/�rrr r Ts�� �

 rr c��eZdZy)�PopenTestExceptionN)r1r2r3r4rrr6r6gs��rr6c��eZdZ	d�Zy)�PopenExecuteChildRaisesc��td��)NzForced Exception for Test)r6)r%�args�kwargss   r�_execute_childz&PopenExecuteChildRaises._execute_childos�� �!<�=�=rN)r1r2r3r<r4rrr8r8ks���>rr8c�x	�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zej*d�d��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z e!jDe#d�d��Z$e!jDe#d�d ��Z%e!jDe#d�d!��Z&d"�Z'd#�Z(d$�Z)d%�Z*d&�Z+d'�Z,e!jDe#d(�d)��Z-e!jDe#d(�d*��Z.d+�Z/e!jDe0jbe0jdk7d,�d-��Z3e!jDe0jbe0jdk7d,�e!jDe4jj�d.�d/���Z6d0�Z7d1�Z8d2�Z9d3�Z:d4�Z;d5�Z<d6�Z=d7�Z>d8�Z?d9�Z@d:�ZAd;�ZBd<�ZCd=�ZDd>�ZEd?�ZFe!j�eHxr	eIeHd@�dA�dB��ZJe!j�eHxr	eIeHd@�dA�dC��ZKdD�ZLe!j�e0j�dEk(dF�dG��ZNe!jDe0j�dEk(dH�e!jDe4j�dI�dJk(dK�e!jDePdL�M�dN�dO����ZQe!jDe4j�dI�dJk(dP�e!jDePdL�M�dN�dQ���ZRdR�ZSdS�ZTe!j�e0j�dEk(dF�dT��ZUdU�ZVdV�ZWdW�ZXdX�ZYdY�ZZdZ�Z[d[�Z\d\�Z]d]�Z^d^�Z_d_�Z`d`�Zada�Zbdb�Zcdc�Zddd�Zede�Zfdf�Zgdg�Zhdh�Zidi�Zjdj�Zkdk�Zldl�Zmdm�Zndn�Zodo�Zpej*dp�dq��Zqdr�Zrds�Zsdt�Ztdu�Zudv�Zvdw�Zwdx�Zxdy�Zye!j�eIezdz�d{�e!j�eIe{d|�d}�e!j�eIe{d~�d�d�����Z|e!j�e{j�j�d�e{j��z�d��d���Z�e!jDe#d��d���Z�e!jDe#d��d���Z�d��Z�e!jDe4j�d��d��e��j
d��d����Z�e!j�eIe�d��d��d���Z�y�)��ProcessTestCasec��tjttjtjtj��}	|j	|j
tj�|j	|jtj�|j	|jtj�|j
j�|jj�|jj�|j�y#|j
j�|jj�|jj�|j�wxYw)N��stdin�stdout�stderr)r�Popenr�PIPE�assertIsInstancerA�io�BufferedIOBaserBrC�closer*�r%�ps  r�test_io_buffered_by_defaultz+ProcessTestCase.test_io_buffered_by_defaultus������_�#-�?�?�:�?�?�$.�O�O�
5��	��!�!�!�'�'�2�+<�+<�=��!�!�!�(�(�B�,=�,=�>��!�!�!�(�(�B�,=�,=�>�
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H��
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H�s�	A>D&�&A Fc��tjttjtjtjd��}	|j	|j
tj�|j	|jtj�|j	|jtj�|j
j�|jj�|jj�|j�y#|j
j�|jj�|jj�|j�wxYw)Nr)rArBrC�bufsize)rrDrrErFrArG�	RawIOBaserBrCrIr*rJs  r�test_io_unbuffered_worksz(ProcessTestCase.test_io_unbuffered_works�s������_�#-�?�?�:�?�?�$.�O�O�Q�
@��	��!�!�!�'�'�2�<�<�8��!�!�!�(�(�B�L�L�9��!�!�!�(�(�B�L�L�9�
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H��
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H�s�
A>D'�'A Fc�t�tjtjddg�}|j	|d�y�Nr�import sys; sys.exit(47)�/�r�call�sys�
executable�assertEqual�r%�rcs  r�
test_call_seqzProcessTestCase.test_call_seq�s0��
�_�_�c�n�n�d�8�:�;������R� rc��|jtjtjtj
ddgd��y)Nr�while True: pass皙�����?��timeout)�assertRaisesr�TimeoutExpiredrVrWrXr$s r�test_call_timeoutz!ProcessTestCase.test_call_timeout�s7��
	
���*�3�3�Z�_�_��>�>�4�1C�D�"%�	�	'rc�Z�tjt�}|j|d�y�Nr)r�
check_callrrYrZs  r�test_check_call_zeroz$ProcessTestCase.test_check_call_zero�s"��
�
"�
"�?�
3������Q�rc��|jtj�5}tjtj
ddg�ddd�|j
jjd�y#1swY�0xYwrR)	rbr�CalledProcessErrorrgrWrXrY�	exceptionr�r%�cs  r�test_check_call_nonzeroz'ProcessTestCase.test_check_call_nonzero�sa��
�
�
�z�<�<�
=���!�!�3�>�>�4�#=�#?�
@�>�	
������/�/��4�>�
=���'A6�6A?c�|�tjtjddg�}|j	d|�|jtd�5tjgd��ddd�|jtd�5tjgd��ddd�y#1swY�@xYw#1swYyxYw)	Nr�
print('BDFL')�BDFLz2stdout argument not allowed, it will be overridden�rBz1check argument not allowed, it will be overriddenF��check)r�check_outputrWrX�assertIn�assertRaisesRegex�
ValueError�r%�outputs  r�test_check_outputz!ProcessTestCase.test_check_output�s����(�(������7�9���
�
�g�v�&�
�
#�
#�J�D�F��#�#�B�t�4�F��
#�
#�J�C�E��#�#�B�e�4�E�E�	F�F��E�E�s�B&�B2�&B/�2B;c��|jtj�5}tjtj
ddg�ddd�|j
jjd�y#1swY�0xYw)Nrzimport sys; sys.exit(5)�)	rbrrjrvrWrXrYrkrrls  r�test_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzero�s`��
�
�
�z�<�<�
=���#�#��^�^�T�+D�E�
G�>�	
������/�/��3�>�
=�roc��tjtjddgtj��}|jd|�y)Nr�$import sys; sys.stderr.write('BDFL')�rCrr)rrvrWrX�STDOUTrwrzs  r�test_check_output_stderrz(ProcessTestCase.test_check_output_stderr�s:���(�(�����'M�N�!�(�(�*��	
�
�
�g�v�&rc��tj�}|j|j�|j	d�|jd�t
jtjddg|��}|jd|�y)N�pearrr�6import sys; sys.stdout.write(sys.stdin.read().upper())�rA�PEAR)�tempfile�
TemporaryFile�
addCleanuprI�write�seekrrvrWrXrw)r%�tfr{s   r�test_check_output_stdin_argz+ProcessTestCase.test_check_output_stdin_arg�sl��
�
#�
#�
%��������!�
�����
����
��(�(�����I�K����	
�
�
�g�v�&rc�x�tjtjddgd��}|j	d|�y)Nrr�r���inputr��rrvrWrXrwrzs  r�test_check_output_input_argz+ProcessTestCase.test_check_output_input_arg�s7���(�(�����I�K����	
�
�
�g�v�&rc�z�	tjtjddgd��}|j	d|�y)Nr�3import sys; print('XX' if sys.stdin.read() else '')r�sXX�rrvrWrX�assertNotInrzs  r�test_check_output_input_nonez,ProcessTestCase.test_check_output_input_none�s<��J��(�(�����F�H����	
�����'rc�z�tjtjddgdd��}|j	d|�y)Nrr�T)r��text�XXr�rzs  r�!test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_text�s;���(�(�����F�H���'��	
����v�&rc�z�tjtjddgdd��}|j	d|�y)Nrr�T)r��universal_newlinesr�r�rzs  r�/test_check_output_input_none_universal_newlinesz?ProcessTestCase.test_check_output_input_none_universal_newlines�s;���(�(�����F�H��t�5��	
����v�&rc�|�tjtjddgddd��}|j	d|�y)Nrzprint('foo')�utf-8�ignore)r��encoding�errors�foor�rzs  r�,test_check_output_input_none_encoding_errorsz<ProcessTestCase.test_check_output_input_none_encoding_errors�s7���(�(�����~�6��W�X�?��	
�
�
�e�V�$rc�8�|jt�5}tjtj
ddgtj��}|jd�ddd�|jdjjd�y#1swY�3xYw)Nr�print('will not be run')rsz-Expected ValueError when stdout arg supplied.rBr)rbryrrvrWrXrB�failrwrkr:�r%rmr{s   r�test_check_output_stdout_argz,ProcessTestCase.test_check_output_stdout_arg�st��
�
�
�z�
*�a��,�,��^�^�T�+E�F��:�:�'�F�
�I�I�E�F�	+�
	
�
�
�h���� 0� 0�� 3�4�+�
*�s�AB�Bc��tj�}|j|j�|j	d�|jd�|j
t�5}tjtjddg|d��}|jd�ddd�|jdjjd�|jd	|jjd�y#1swY�\xYw)
Nr�rrr��hare�rAr��7Expected ValueError when stdin and input args supplied.rAr�)r�r�r�rIr�r�rbryrrvrWrXr�rwrkr:�r%r�rmr{s    r�&test_check_output_stdin_with_input_argz6ProcessTestCase.test_check_output_stdin_with_input_args���
�
#�
#�
%��������!�
�����
����
�
�
�
�z�
*�a��,�,��^�^�T�+E�F��G�-�F�
�I�I�O�P�	+�
	
�
�
�g�q�{�{�/�/��2�3��
�
�g�q�{�{�/�/��2�3�
+�
*�s�';C=�=D�walltimec�*�|jtj�5}tjtj
ddgd��}|j
d�ddd�|jjjd�y#1swY�0xYw)Nr�Mimport sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)�r`zExpected TimeoutExpired.rr)
rbrrcrvrWrXr�rYrkr{r�s   r�test_check_output_timeoutz)ProcessTestCase.test_check_output_timeouts{���
�
�z�8�8�
9�Q��,�,��^�^�T�(�)���F�
�I�I�0�1�:�	
������+�+�W�5�:�
9�s�:B	�	Bc��tjj�}d|d<tjt
jddg|��}|j|d�y)N�banana�FRUITrz5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")��env�)r�environ�copyrrVrWrXrY)r%�newenvr[s   r�test_call_kwargsz ProcessTestCase.test_call_kwargssT�������"��"��w��
�_�_�c�n�n�d�G�H�"(�)��	
����Q�rc��tj�5}|jttj
d��tj
jjj}dg|dzz}|jttj
g|���ddd�|jj�d�y#1swY�*xYw)Nr�)�invalid_arg_namerr)r�captured_stderrrb�	TypeErrorrrD�__init__�__code__�co_argcountrY�getvalue)r%�s�argcount�
too_many_argss    r�test_invalid_argsz!ProcessTestCase.test_invalid_args)s����
$�
$�
&�!����i��)9�)9�A��N�!�'�'�0�0�9�9�E�E�H��C�8�a�<�0�M��D���i��)9�)9�J�M�J�	'�
	
�������r�*�'�
&�s�BC�Cc�z�tjtjddgtjtj��}|j|jj�|j|jj�|j�|j|jd�y)Nr�print("banana")�rBrC)rrDrWrXrEr�rBrIrCr*rYrArJs  r�test_stdin_nonezProcessTestCase.test_stdin_none3ss�����c�n�n�d�4E�F� *���
���
I����������'���������'�	����������$�'rc���d}tjtjd|gtjtj��}|j|jj�|j|jj�|j�\}}|j|jd|�|j|j�d�y)Nz�import sys; from subprocess import Popen, PIPE;p = Popen([sys.executable, "-c", "print('test_stdout_none')"],          stdin=PIPE, stderr=PIPE);p.wait(); assert p.stdout is None;rr�rstest_stdout_none�
rrDrWrXrEr�rBrIrC�communicaterYr�rstrip�r%�coderK�out�errs     r�test_stdout_nonez ProcessTestCase.test_stdout_none<s���5��
���c�n�n�d�D�9�$.�O�O�J�O�O�
M����������'���������'��=�=�?���S�������q�#�.��������':�;rc�z�tjtjddgtjtj��}|j|jj�|j|jj�|j�|j|jd�y)Nrr��rArB)rrDrWrXrEr�rBrIrAr*rYrCrJs  r�test_stderr_nonez ProcessTestCase.test_stderr_noneSss�����c�n�n�d�4E�F�)���z���
H����������'�������
�
�&�	����������4�(rc��|dgz}tj|fi|��}|j�|jd|j�y�NrSrT)rrDr*rYr)r%�pre_argsr;r:rKs     r�_assert_pythonzProcessTestCase._assert_python\sD���5�6�6�����T�,�V�,��	��������Q�\�\�*rc���tjjtjjtj
�d�}|j
|dgtj
��y�N�doesnotexistr�rX)r�path�join�dirnamerWrXr��r%r�s  r�test_executablezProcessTestCase.test_executabledsH���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�S�^�^��Lrc��tjjtjjtj
�d�}|j
|dgtjtj
���yr�)rr�r�r�rWrXr��fsencoder�s  r�test_bytes_executablez%ProcessTestCase.test_bytes_executableosU���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�')�{�{�3�>�>�'B�	�	Drc���tjjtjjtj
�d�}|j
|dgttj
���yr�)rr�r�r�rWrXr�r
r�s  r�test_pathlike_executablez(ProcessTestCase.test_pathlike_executableusQ���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�'/����'?�	�	Arc��tjdg}|j|�|jt|j|t
d��y)Nrrr�)rWrXr�rb�NONEXISTING_ERRORS�NONEXISTING_CMD)r%r�s  r� test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedence{sI���N�N�D�)�����H�%����,��-�-�x�%4�Q�%7�	�	9rz"executable argument replaces shellc�H�|jgtjd��y�NT)rX�shell)r�rWrXr$s r�test_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shell�s��	
���B�3�>�>���Frc�n�|jgtjtj�d��yr�)r�rr�rWrXr$s r�$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell�s)�����B�2�;�;�s�~�~�+F�"&�	�	(rc�Z�|jgttj�d��yr�)r�r
rWrXr$s r�'test_pathlike_executable_replaces_shellz7ProcessTestCase.test_pathlike_executable_replaces_shell�s%�����B�8�C�N�N�+C�"&�	�	(rc��tj|�5tj�cddd�S#1swYyxYwr")r�
change_cwdr�getcwd)r%�cwds  r�_normalize_cwdzProcessTestCase._normalize_cwd�s'���
!�
!�#�
&��9�9�;�'�
&�
&�s�4�=c��tjjtj�}tjj|�Sr")rr��realpathrWrX�split)r%�python_paths  r�_split_python_pathz"ProcessTestCase._split_python_path�s-���g�g�&�&�s�~�~�6���w�w�}�}�[�)�)rc��tj|ddgfdtji|��}|j|jj
�|j
�|jd|j�tjj}|j||�||jj�j���y)Nrzcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rBrT)rrDrEr�rBrIr*rYrrr��normcase�read�decode)r%�expected_cwd�
python_argr;rKrs      r�_assert_cwdzProcessTestCase._assert_cwd�s���
���j�$�-�.�
(�&0�_�_�

(�!'�
(��	
��������'�	��������Q�\�\�*��7�7�#�#������,�/�!�!�(�(�-�-�/�"8�"8�":�;�	=rc��tj�}|j|�}|j|tj
|��y�N�r)r��
gettempdirrr
rWrX�r%�temp_dirs  r�test_cwdzProcessTestCase.test_cwd�s9���&�&�(���&�&�x�0������3�>�>�x��@rc��tj�}|j|�}|j|tj
t
j|���yr)r�rrr
rWrXrr�rs  r�test_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytes�sB���&�&�(���&�&�x�0������3�>�>�r�{�{�8�7L��Mrc��tj�}|j|�}|j|tj
t
|���yr)r�rrr
rWrXr
rs  r�test_cwd_with_pathlikez&ProcessTestCase.test_cwd_with_pathlike�s>���&�&�(���&�&�x�0������3�>�>�x��7I��Jrz"pending resolution of issue #15533c��|j�\}}tjjtj|�}tj�5}|jttj|g�|jttj|g|��|j|�}|j|||��ddd�y#1swYyxYwr�
rrr�r��curdirr�temp_cwdrb�FileNotFoundErrorrrDrr
)r%�
python_dir�python_base�
rel_python�	wrong_dirs     r�test_cwd_with_relative_argz*ProcessTestCase.test_cwd_with_relative_arg�s���#'�"9�"9�";��
�K��W�W�\�\�"�)�)�[�9�
�
�
�
�
!�Y�
���/��1A�1A�)�l�
,����/��1A�1A�)�l�	�
�
;��,�,�Z�8�J����Z����D�"�
!�
!�s
�A4C�Cc���|j�\}}tjjtj|�}d}tj�5}|jttj|g|��|jttj|g||��|j|�}|j||||��ddd�y#1swYyxYw)N�somethingyoudonthaver��rXrr)r%rrr �doesntexistr!s      r�!test_cwd_with_relative_executablez1ProcessTestCase.test_cwd_with_relative_executable�s���#'�"9�"9�";��
�K��W�W�\�\�"�)�)�[�9�
�,��
�
�
�
!�Y�
���/��1A�1A�*�m�
�
�
D����/��1A�1A�*�m�
�"+�
�
-��,�,�Z�8�J����Z���!+�
�
-�"�
!�
!�s
�A8C�C"c��|j�\}}tjj||�}tjjtj|�}tj�5}|jttj|g|��|j|�}|j|||��ddd�y#1swYyxYwr)
rrr�r�rrrrbrrrDrr
)r%rr�
abs_pythonr r!s      r�test_cwd_with_absolute_argz*ProcessTestCase.test_cwd_with_absolute_arg�s���#'�"9�"9�";��
�K��W�W�\�\�*�k�:�
��W�W�\�\�"�)�)�[�9�
�
�
�
�
!�Y�
���/��1A�1A�)�l�	�
�
;��+�+�I�6�I����Y�
�	��B�
"�
!�
!�s
�6AC
�
CzTest is not venv-compatiblec��|j�\}}|j|�}|j|dtj|��y)Nr$r%)rrr
rWrX)r%rrs   r�test_executable_with_cwdz(ProcessTestCase.test_executable_with_cwd�sI��#'�"9�"9�";��
�K��(�(��4�
�����%;�$'�N�N�
�	�	Drz#need an installed Python. See #7774c�l�|jtj�dtj��y)Nr$r�)r
rr�rWrXr$s r�test_executable_without_cwdz+ProcessTestCase.test_executable_without_cwds)��	
�������&<�$'�N�N�	�	4rc�2�tjtjddgtj��}|j
j
d�|j
j�|j�|j|jd�y)Nr�0import sys; sys.exit(sys.stdin.read() == "pear")r�r�r�)rrDrWrXrErAr�rIr*rYrrJs  r�test_stdin_pipezProcessTestCase.test_stdin_pipe
sf�����c�n�n�d�K�M�(�o�o�
/��	
���
�
�g��	���
�
��	����������q�)rc��tj�}|j|j�|j	�}tj|d�tj|dd�tjtjddg|��}|j�|j|jd�y�Nr�rrr0r�r�)r�r�r�rI�filenorr��lseekrrDrWrXr*rYr�r%r��drKs    r�test_stdin_filedesz"ProcessTestCase.test_stdin_filedess���
�
#�
#�
%��������!��I�I�K��
����G��
����A�q�����c�n�n�d�K�M� �
"��	
����������q�)rc�N�tj�}|j|j�|j	d�|jd�t
jtjddg|��}|j�|j|jd�yr3)
r�r�r�rIr�r�rrDrWrXr*rYr�r%r�rKs   r�test_stdin_fileobjz"ProcessTestCase.test_stdin_fileobj!sz��
�
#�
#�
%��������!�
�����
����
����c�n�n�d�K�M�!�
#��	
����������q�)rc���tjtjddgtj��}|5|j|jj�d�ddd�y#1swYyxYw)Nr�&import sys; sys.stdout.write("orange")rs�orange�rrDrWrXrErYrBr	rJs  r�test_stdout_pipez ProcessTestCase.test_stdout_pipe-sS�����c�n�n�d�B�D� *���
1������Q�X�X�]�]�_�i�8��Q�Q���+A-�-A6c�l�tj�}|j|j�|j	�}tjtjddg|��}|j�tj|dd�|jtj|d�d�y)Nrr=rsr�r>�r�r�r�rIr4rrDrWrXr*rr5rYr	r6s    r�test_stdout_filedesz#ProcessTestCase.test_stdout_filedes5s���
�
#�
#�
%��������!��I�I�K�����c�n�n�d�B�D� !�
#��	
����
����A�q���������D�)�9�5rc�4�tj�}|j|j�t	j
tjddg|��}|j�|jd�|j|j�d�y)Nrr=rsrr>�r�r�r�rIrrDrWrXr*r�rYr	r:s   r�test_stdout_fileobjz#ProcessTestCase.test_stdout_fileobjAsp��
�
#�
#�
%��������!����c�n�n�d�B�D� "�
$��	
����
����
��������I�.rc���tjtjddgtj��}|5|j|jj�d�ddd�y#1swYyxYw)Nr�*import sys; sys.stderr.write("strawberry")r��
strawberry)rrDrWrXrErYrCr	rJs  r�test_stderr_pipez ProcessTestCase.test_stderr_pipeLsS�����c�n�n�d�F�H� *���
1������Q�X�X�]�]�_�m�<��Q�Q�rAc�l�tj�}|j|j�|j	�}tjtjddg|��}|j�tj|dd�|jtj|d�d�y)NrrJr�rrCrKrDr6s    r�test_stderr_filedesz#ProcessTestCase.test_stderr_filedesTs���
�
#�
#�
%��������!��I�I�K�����c�n�n�d�F�H� !�
#��	
����
����A�q���������D�)�=�9rc�4�tj�}|j|j�t	j
tjddg|��}|j�|jd�|j|j�d�y)NrrJr�rrKrGr:s   r�test_stderr_fileobjz#ProcessTestCase.test_stderr_fileobj`sp��
�
#�
#�
%��������!����c�n�n�d�F�H� "�
$��	
����
����
��������M�2rc�4�tjtjddgtjtj��}|j�\}}|j
|d�|j
|d�|j
|jd�y)Nrz�import sys, subprocess;rc = subprocess.call([sys.executable, "-c",    "import sys;"    "sys.stderr.write('42')"],    stderr=subprocess.STDOUT);sys.exit(rc)r�s42rr�rrDrWrXrEr�rYr�r%rKrBrCs    r�,test_stderr_redirect_with_no_stdout_redirectz<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectks{��
���c�n�n�d�-�.�%/�O�O�$.�O�O�
5��������������'������%�������q�)rc��tjtjddgtjtj
��}|5|j
|jj�d�ddd�y#1swYyxYw)Nr�Rimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")r��appleorange)	rrDrWrXrEr�rYrBr	rJs  r�test_stdout_stderr_pipez'ProcessTestCase.test_stdout_stderr_pipe�s_�����c�n�n�d�;�<�
%/�O�O�$.�$5�$5�

7������Q�X�X�]�]�_�n�=��Q�Q�s�+A<�<Bc�6�tj�}|j|j�t	j
tjddg||��}|j�|jd�|j|j�d�y)NrrVr�rrWrGr:s   r�test_stdout_stderr_filez'ProcessTestCase.test_stdout_stderr_file�sv��
�
#�
#�
%��������!����c�n�n�d�;�<�
%'�$&�

(��	
����
����
��������N�3rc���d}tjtjd|gtjtj��}|j|jj�|j|jj�|j�\}}|j|jd|�|j|j�d�y)Nz�import sys, subprocess; rc = subprocess.call([sys.executable, "-c",     "import os, sys; sys.exit(os.write(sys.stdout.fileno(), b'test with stdout=1'))"], stdout=1); assert rc == 18rr�rstest with stdout=1r�r�s     r�test_stdout_filedes_of_stdoutz-ProcessTestCase.test_stdout_filedes_of_stdout�s���"��

���c�n�n�d�D�9�$.�O�O�J�O�O�
M����������'���������'��=�=�?���S�������q�#�.��������'<�=rc���tjtjddgtj��}|j�|j
|jd�y)Nrz'for i in range(10240):print("x" * 1024)rs)rrDrWrX�DEVNULLr*rYrBrJs  r�test_stdout_devnullz#ProcessTestCase.test_stdout_devnull�sN�����c�n�n�d�2�3�&0�%7�%7�
9��	
����������4�(rc���tjtjddgtj��}|j�|j
|jd�y)Nrz=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r�)rrDrWrXr^r*rYrCrJs  r�test_stderr_devnullz#ProcessTestCase.test_stderr_devnull�sN�����c�n�n�d�=�>�&0�%7�%7�	
9��
	
����������4�(rc���tjtjddgtj��}|j�|j
|jd�y)Nrzimport sys;sys.stdin.read(1)r�)rrDrWrXr^r*rYrArJs  r�test_stdin_devnullz"ProcessTestCase.test_stdin_devnull�sN�����c�n�n�d�2�3�%/�$6�$6�
8��	
����������$�'r�F_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.c�p�tj�\}}	tj|tj�}tj|�tj|�|dz}tj�}||krtjd��tjtjddgtjtjtj|��}	|j|j|j fD]D}|j#tj|j%�tj�|��F|jj'd�|jj	�|jj	�|j j	�|j)�|j+�y#tj|�tj|�wxYw#|j)�|j+�wxYw)N�z+default pipesize too small to perform test.r�Qimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")�rArBrC�pipesizer�)r�pipe�fcntlrdrIr�get_pagesize�unittest�SkipTestrrDrWrXrErArBrCrYr4r��killr*)r%�test_pipe_r�test_pipe_w�pipesize_defaultri�pagesize_defaultrK�fifos        r�test_pipesizeszProcessTestCase.test_pipesizes�s���$&�7�7�9� ��[�	"�$�{�{�;��8J�8J�K���H�H�[�!��H�H�[�!�#�q�(��"�/�/�1���&�&��#�#�=�?�
?����
�^�^�T�*�
+��/�/�*�/�/��?�?�X�
7��	����!�(�(�A�H�H�5��� � ��K�K����
�u�/A�/A�B���6�
�G�G�M�M�'�"�
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H�
�F�F�H��7
�H�H�[�!��H�H�[�!��2
�F�F�H�
�F�F�H�s�$G$�0CH�$,H�"H5c�d�tjtjddgtjtjtjd��}|5	tj�\}}	tj|tj�}tj|tj�}tj|�tj|�|jtj|jj�tj�|�|jtj|jj�tj�|�|jtj|jj�tj�|�|j�	ddd�y#tj|�tj|�wxYw#|j�wxYw#1swYyxYw)Nrrg���rh)rrDrWrXrErrjrkrdrIrYrAr4rBrCro)r%�proc�fp_r�fp_w�default_read_pipesize�default_write_pipesizes      r�test_pipesize_defaultz%ProcessTestCase.test_pipesize_default�s{�����
�^�^�T�*�
+��/�/�*�/�/��?�?�R�1���
��W�W�Y�
��d�#�,1�K�K��e�>P�>P�,Q�)�-2�[�[��u�?Q�?Q�-R�*��H�H�T�N��H�H�T�N�� � ��K�K��
�
� 1� 1� 3�U�5G�5G�H�)�+�� � ��K�K���� 2� 2� 4�e�6H�6H�I�*�,�� � ��K�K���� 2� 2� 4�e�6H�6H�I�*�,��	�	��-�T���H�H�T�N��H�H�T�N���	�	���-�T�s>�H&�H�2AG"�:DH�H&�",H�H�H#�#H&�&H/c�,�tjj�}d|d<tjt
jddgtj|��5}|j�\}}|j|d�ddd�y#1swYyxYw)N�oranger�r�2import sys,os;sys.stdout.write(os.getenv("FRUIT"))�rBr�r>)
rr�r�rrDrWrXrEr�rY�r%r�rKrBrCs     r�test_envzProcessTestCase.test_envs}�������"��"��w��
�
�
�s�~�~�t� F�G�&0�_�_�"(�	*�./��]�]�_�N�F�F����V�Y�/�
*�*�*�s�&B
�
BrzWindows only issuec�H�tjj�}d|d<d|d<d|d<d|d<tjgd	�tj
|�
�5}|j
�\}}|j|j�d�ddd�y#1swYyxYw)N�cherry�fRUit�lemon�fruitrr�r��frUit��CMDz/c�SETr�r�sfrUit=banana)	rr�r�rrDrEr�rY�strip)r%r�rKrB�_s     r�test_win32_duplicate_envsz)ProcessTestCase.test_win32_duplicate_envss��������"��"��w��!��w��"��w��"��w��
�
�
�;�%/�_�_�"(�*�-.��
�
��I�F�A����V�\�\�^�_�=�	*�*�*�s�4B�B!z#cannot test an empty env on Windows�Py_ENABLE_SHAREDr�zEThe Python shared library cannot be loaded with an empty environment.T)�addressz)AddressSanitizer adds to the environment.c��	d�}tjtjddgtji��5}|j�\}}t
|j��}|j|t�|D�cgc]}||�s|��}}|j|g�ddd�ycc}w#1swYyxYw)Nc�Z�	d|vxs%d|vxs|dk(xs|jd�xs|dk(S)N�	VERSIONER�__CF�
LD_PRELOAD�SANDBOX�LC_CTYPE)�
startswith)�ns r�is_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore2sI��L� �1�$�$��!��$���%�$�)*���i�)@�$���O�
%rrz)import os; print(list(os.environ.keys()))r�)rrDrWrXrEr��evalr�rF�listrY)r%r�rKrBrC�child_env_names�ks       r�test_empty_envzProcessTestCase.test_empty_env(s���	:�	%��
�
�s�~�~�t�J�L�%/�_�_�"�>�AB��]�]�_�N�F�F�"�6�<�<�>�2�O��!�!�/�4�8�*9�?�/�Q�&:�1�&=� !�/�O�?����_�b�1�>�>��?�
>�>�s�AB6�B1�B6�1B6�6B?zLThe Python shared library cannot be loaded without some system environments.c�:�ddi}tjddg}tjdk(rgd�}tj|tj
tj
|��5}|j
�\}}|jrHtjr8td|jd	d
��td|jd	d
��|j|jd�|j|j�d
�ddd�y#1swYyxYw)Nr�rrz;import sys,os;sys.stdout.write("fruit="+os.getenv("fruit"))rr�)rBrCr�zSTDOUT:�ascii�replacezSTDERR:rsfruit=orange)rWrX�platformrrDrEr�rr�verbose�printr
rYr�)r%r��cmdrKrBrCs      r�test_one_environment_variablez-ProcessTestCase.test_one_environment_variableEs����8�$���~�~�t� O�P���<�<�7�"�/�C�
�
�
�c�*�/�/�*�/�/�W]�
^�bc��]�]�_�N�F�F��|�|�����i����w�	�!B�C��i����w�	�!B�C����Q�\�\�1�-����V�\�\�^�_�=�
_�
^�
^�s
�$B$D�Dc�N�tjdz}|jt�5t	j
|ddg�ddd�|jt�5t	j
tjddg�ddd�y#1swY�NxYw#1swYyxYw)N�rrzpass#)rWrXrbryrrD)r%r�s  r�test_invalid_cmdz ProcessTestCase.test_invalid_cmdYs{���n�n�t�#��
�
�
�z�
*����c�4��0�1�+��
�
�z�
*����c�n�n�d�I�>�?�+�
*�	+�
*��+�
*�s�B�'B�B�B$c��tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<tjtjd	d
gt
j|��5}|j�\}}|j|d�ddd�y#1swY��KxYw#1swY��xYw#1swY��xYw#1swYyxYw)
N�cabbagezFRUITVEGETABLEr�zorangeVEGETABLE=cabbager�r�zFRUIT=ORANGEzorange=lemonrz3import sys, os;sys.stdout.write(os.getenv("FRUIT"))r�sorange=lemon)
rr�r�rbryrrDrrWrXrEr�rYr�s     r�test_invalid_envz ProcessTestCase.test_invalid_envcsZ�������"��%.��!�"�
�
�
�z�
*����_�&�9�+������"��5��w��
�
�
�z�
*����_�&�9�+������"��!(��~��
�
�
�z�
*����_�&�9�+������"��(��w��
�
�
�s�~�~�t� F�G�&0�_�_�"(�	*�./��]�]�_�N�F�F����V�_�5�
*�*�%+�
*��+�
*��+�
*��*�*�s/�F�F+�1F7�/&G�F(�+F4�7G�Gc��tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<|jt�5tjt|��ddd�y#1swY�fxYw#1swYyxYw)Nr�zFRUIT=VEGETABLEr�z==FRUIT)rr�r�rbryrrDr)r%r�s  r�test_win32_invalid_envz&ProcessTestCase.test_win32_invalid_env�s��������"��$-�� �!�
�
�
�z�
*����_�&�9�+������"��%��y��
�
�
�z�
*����_�&�9�+�
*�+�
*��
+�
*�s�B:�C�:C�Cc���tjtjddgtj��}|jd�|j
|jd�y)Nrz/import sys;sys.exit(sys.stdin.read() == "pear")r�r�r�rRrJs  r�test_communicate_stdinz&ProcessTestCase.test_communicate_stdin�sQ�����c�n�n�d�E�F�$.�?�?�
4��	
�
�
�g��������q�)rc���tjtjddgtj��}|j�\}}|j
|d�|j
|d�y)Nrz)import sys; sys.stdout.write("pineapple")rs�	pineapple�rrDrWrXrEr�rYrSs    r�test_communicate_stdoutz'ProcessTestCase.test_communicate_stdout�s\�����c�n�n�d�I�K�$.�O�O�
5���=�=�?���������.������&rc���tjtjddgtj��}|j�\}}|j
|d�|j
|d�y)Nrz)import sys; sys.stderr.write("pineapple")r�r�r�rSs    r�test_communicate_stderrz'ProcessTestCase.test_communicate_stderr�s\�����c�n�n�d�I�K�$.�O�O�
5���=�=�?���������&������.rc��tjtjddgtjtjtj��}|j|jj�|j|jj�|j|jj�|jd�\}}|j|d�|j|d�y)NrzNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())r@�bananar�)rrDrWrXrEr�rBrIrCrAr�rYrSs    r�test_communicatez ProcessTestCase.test_communicate�s������c�n�n�d�C�D�$.�?�?�$.�O�O�$.�O�O�

5��	
��������'���������'�������
�
�&��=�=��3���������+������.rc��tjtjddgdtjtjtj��}|jtj|jdd��|j�\}}|j|d�|j|j�d�y)	Nrz~import sys,os,time;sys.stderr.write("pineapple\n");time.sleep(1);sys.stderr.write("pear\n");sys.stdout.write(sys.stdin.read())T)r�rArBrCr�g333333�?r`spineapple
pear
)
rrDrWrXrErbrcr�rY�encoderSs    r�test_communicate_timeoutz(ProcessTestCase.test_communicate_timeout�s������c�n�n�d�C�D�15�#-�?�?�$.�O�O�$.�O�O�	
5��	
���*�3�3�Q�]�]�H�"%�	�	'��=�=�?���������*��������*>�?rc�$�tjtjddgtj��}|jtj|jd��|j�\}}|jt|�d�y)Nrz�import sys,os,time;sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));rsg�������?r`i)
rrDrWrXrErbrcr�rY�len)r%rKrBr�s    r�%test_communicate_timeout_large_outputz5ProcessTestCase.test_communicate_timeout_large_output�ss�����c�n�n�d�E�F�%/�O�O�	
5��	
���*�3�3�Q�]�]�C��P��m�m�o��������V��m�4rc�>�dD�]}dD�]}dD�]}i}|rtj|d<|rtj|d<|rtj|d<|s�Htjtfi|��}|j	�|j
�%|j
|j
j�|j�%|j
|jj�|j���|j
|jj�������y)N�FTrArBrC)
rrErDrr�rA�
assertTrue�closedrBrC)r%�
stdin_pipe�stdout_pipe�stderr_pipe�optionsrKs      r�test_communicate_pipe_fd_leakz-ProcessTestCase.test_communicate_pipe_fd_leak�s���'�J�,��#0�K� �G�!�+5�?�?���(�"�,6�O�O���)�"�,6�O�O���)�"� �"�(�(��D�G�D�A��M�M�O��w�w�*���������7��x�x�+���������8��x�x�+���������8�#$1� -�(rc��tjtjddg�}|j	�\}}|j|d�|j|d�y)NrrS)rrDrWrXr�rYrSs    r�test_communicate_returnsz(ProcessTestCase.test_communicate_returns�sR�����c�n�n�d�8�:�
;���=�=�?���������&������&rc��tj�\}}tj|�tj|�tjt
jddtjzgtjtjtj��}|j|jj�|j|jj�|j|jj�dtjz}|j|�\}}|j||�y)Nrzpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())r@�a)rrjrIrrDrWrXr�
PIPE_MAX_SIZErEr�rBrCrAr�rY)r%�x�yrK�string_to_writerBrCs       r�test_communicate_pipe_bufz)ProcessTestCase.test_communicate_pipe_buf�s����w�w�y���1�
�����
��������c�n�n�d�C�&�3�3�	4�5�$.�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&���!6�!6�6���=�=��9���������1rc�0�tjtjddgtjtjtj��}|j|jj�|j|jj�|j|jj�|jjd�|jd�\}}|j|d�|j|d�y)Nrz0import sys,os;sys.stdout.write(sys.stdin.read())r@r�ssplitsbananasplitr)
rrDrWrXrEr�rBrIrCrAr�r�rYrSs    r�test_writes_before_communicatez.ProcessTestCase.test_writes_before_communicates������c�n�n�d�C�D�$.�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&�	���
�
�i� ��=�=��2���������0������%rc�`�tjddtzdzg}dD�]~}tj|fidtj
dtj
|di��}|5|jjd�|jj�|j|jj�d�|jjd	�|jj�|j|jj�|j|jj�d
�|j|jjd�d	�|j|jj�d�ddd����y#1swY���xYw)
Nr�import sys,os;a@buf = sys.stdout.buffer;buf.write(sys.stdin.readline().encode());buf.flush();buf.write(b"line2\n");buf.flush();buf.write(sys.stdin.read().encode());buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");)r�r�rArBTzline1
zline3
zline2
�zline4
line5
line6
line7
line8)rWrX�	SETBINARYrrDrErAr��flushrYrB�readlinerIr�r	)r%r:�extra_kwargrKs    r� test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_texts?���N�N�D��y�(�
&�
&�'��(:�K�� � ��>�'�:�?�?�*2�J�O�O�*5�t�*=�>�A�����
�
�i�(����
�
��� � ����!2�!2�!4�i�@����
�
�i�(����
�
����������/�� � ����!2�!2�!4�!*�,�� � ������q�!1�!*�,�� � �������!D�F���	:���s
�D9F#�#F-	c��tjtjddtzdzgtj
tj
d��}|j
|jj�|j
|jj�|j�\}}|j|d�y)Nrr�z�buf = sys.stdout.buffer;buf.write(b"line2\n");buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");r�)rCrBr�z#line2
line4
line5
line6
line7
line8)rrDrWrXr�rEr�rBrIrCr�rYrSs    r�#test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicateEs������c�n�n�d�.��:�8�8�
9�%/�O�O�$.�O�O�01�!
3��"	
��������'���������'��=�=�?��������C�	Erc��tjtjddtztjd�zgtjd��}|jd�\}}|j|jd�y)Nrr�a
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r�)rAr��line1
line3
r)rrDrWrXr��textwrap�dedentrEr�rYrrSs    r�)test_universal_newlines_communicate_stdinz9ProcessTestCase.test_universal_newlines_communicate_stdin^ss�����c�n�n�d�.��:�X�_�_�N"�>#�#�$�$.�?�?�01�
3���=�=�)9�:����������q�)rc���tjttjtjd��}|j	�|j|jd�y)NT)rArBr�r)rrDrrEr�rYrrJs  r�.test_universal_newlines_communicate_input_nonez>ProcessTestCase.test_universal_newlines_communicate_input_nonelsF��

���_�#-�?�?�$.�O�O�04�
6��	
�
�
��������q�)rc�@�tjtjddtztjd�zgtjtjtjd��}|j|jj�|j|jj�|jd�\}}|j|jd�|jd|�|j|j!d	��y)
Nrr�a�
                               s = sys.stdin.buffer.readline()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line2\r")
                               sys.stderr.buffer.write(b"eline2\n")
                               s = sys.stdin.buffer.read()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line4\n")
                               sys.stdout.buffer.write(b"line5\r\n")
                               sys.stderr.buffer.write(b"eline6\r")
                               sys.stderr.buffer.write(b"eline7\r\nz")
                              T)rArCrBr�r�rzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrDrWrXr�r�r�rEr�rBrIrCr�rYrr�r�rSs    r�7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderrxs������c�n�n�d�.��:�X�_�_�N"�>#�#�$�$.�?�?�$.�O�O�$.�O�O�04�!
6��"	
��������'���������'��=�=�)9�:����������q�)����>��G�	
����)�)�*D�E�Frc��dD]v}d|z}tjd|g}tj|tjtj|��}|jd��\}}|j
|d��xy)N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r)rArBr�rr�z1
2
3
4)rWrXrrDrEr�rY)r%r�r�r:�popenrBrCs       r�-test_universal_newlines_communicate_encodingsz=ProcessTestCase.test_universal_newlines_communicate_encodings�s~��0�H�L���D��N�N�D�$�/�D��$�$�T�+5�?�?�,6�O�O�.6�8�E�#�.�.�R�.�8�N�F�F����V�\�2�0rc��dD]�\}}d}tjd|g}tj|tjtjd|��}|jd��\}}|j
|dj|����y)	N))r�r)r�u��)�surrogateescapeu��)�backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')rr�)rArBr�r�rr�z[{}])rWrXrrDrEr�rY�format)r%r��expectedr�r:r�rBrCs        r�test_communicate_errorsz'ProcessTestCase.test_communicate_errors�s���!
��F�H�>�D��N�N�D�$�/�D��$�$�T�+5�?�?�,6�O�O�.5�,2�	4�E�
#�.�.�R�.�8�N�F�F����V�V�]�]�8�%<�=�%!
rc�,�tsd}nd}g}tj�}	t|�D]u}	tj
j
|tj�}|jt	j|tjtjz���w|j!d|z�td�D]%}t	j"|j%���'td�D]|}t'j(t*j,ddgt&j.t&j.t&j.��}|j1d	�d
}|j3|d	��~	|D]}	t	j"|	��t5j6|�y#t$r*}|jtjk7r�Yd}~��d}~wwxYw#|D]}	t	j"|	��t5j6|�wxYw)Niiz4failed to reach the file descriptor limit (tried %d)�
�rz-import sys;sys.stdout.write(sys.stdin.read())r@slimer)r(r��mkdtemp�rangerr�r�r�TESTFN�append�open�O_WRONLY�O_CREAT�OSError�errno�EMFILE�skipTestrI�poprrDrWrXrEr�rYr�rmtree)
r%�max_handles�handles�tmpdir�i�tmpfile�erK�data�hs
          r�test_no_leakingzProcessTestCase.test_no_leaking�s�����K��K����!�!�#��	"��;�'��� �g�g�l�l�6�9�3C�3C�D�G��N�N�2�7�7�7�B�K�K��
�
�4J�#K�L�(��
�
�!�#.�/�0��2�Y���������'���2�Y���$�$�c�n�n�d�'K�&L�,6�?�?�,6�O�O�,6�O�O�=���}�}�W�-�a�0��� � ��w�/�����������M�M�&�!��1���w�w�%�,�,�.������,���������M�M�&�!�s6�G �A2F*�$CG �*	G�3G�G �G�G � 3Hc�t�|jtjgd��d�|jtjgd��d�|jtjgd��d�|jtjgd��d�|jtjgd	��d
�|jtjgd��d�|jtjgd
��d�|jtjddg�d�y)N)za b cr7rz"a b c" d e)�ab"c�\r7z	ab\"c \ d)rz \r7z
ab\"c " \\" d)za\\\bzde fgr	za\\\b "de fg" h)za\"brmr7z
a\\\"b c d)za\\b cr7rz"a\\b c" d e)za\\b\ cr7rz
"a\\b\ c" d e�abrzab "")rYr�list2cmdliner$s r�test_list2cmdlinez!ProcessTestCase.test_list2cmdline�s�������0�0�1D�E�&�	(�����0�0�1D�E�&�	(�����0�0�1E�F�+�	-�����0�0�1K�L�-�	/�����0�0�1D�E�(�	*�����0�0�1G�H�)�	+�����0�0�1I�J�+�	-�����0�0�$���<� �	"rc��tjtjddgtj��}|j|jj�|j|j��tj|jj�d�|j�|j|j�d�y)Nrzimport os; os.read(0, 1)r��Ar)rrDrWrXrEr�rArI�assertIsNone�pollrr�r4r*rYrJs  r�	test_pollzProcessTestCase.test_poll�s������c�n�n�d�8�:�#-�?�?�
4��	
������
�
�&����!�&�&�(�#�
��������!�4�(�	�����������1�%rc��tjt�}|j|j	�d�|j|j	�d�yrf�rrDrrYr*rJs  r�	test_waitzProcessTestCase.test_waits>�����_�-���������1�%��������1�%rc��tjtjddg�}|j	tj
�5}|j
d��ddd�|jdtj��|j|j
tj��d�y#1swY�_xYw)Nrzimport time; time.sleep(0.3)�-C��6?r`z0.0001r)
rrDrWrXrbrcr*rw�strrkrYr�
SHORT_TIMEOUT)r%rKrms   r�test_wait_timeoutz!ProcessTestCase.test_wait_timeout	s������c�n�n�"�$B�D�
E��
�
�
�z�8�8�
9�Q�
�F�F�6�F�"�:��
�
�h��A�K�K� 0�1��������(=�(=��>��B�:�
9�s�B7�7Cc��|jt�5tjtd�ddd�y#1swYyxYw)Nr)rbr�rrDrr$s r�test_invalid_bufsizez$ProcessTestCase.test_invalid_bufsizes.���
�
�y�
)����_�h�7�*�
)�
)�s	�:�Ac���tjtd�}|j|j	�d�tjtd��}|j|j	�d�y)Nr)rNrrJs  r�test_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_nonesR�����_�d�3���������1�%����_�d�;���������1�%rc��tjtjddgtjtjtj
d|��5}|jj|�tj|jj��|jj�}tj�5	|jj�ddd�d|_ddd�|j!j"d�|j!|�y#t$rY�QwxYw#1swY�VxYw#1swY�SxYw)NrzDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r�)rArBrCrNr�r)rrDrWrXrEr^rAr�rrIr4rBr�r�SuppressCrashReportr�rYr)r%�liner�r�rK�	read_lines      r�_test_bufsize_equal_onez'ProcessTestCase._test_bufsize_equal_ones��
�
�
�s�~�~�t�64�5�%/�O�O�%/�_�_�%/�%7�%7�&'�1C�E�IJ�
�G�G�M�M�$���H�H�Q�W�W�^�^�%�&����)�)�+�I��,�,�.���G�G�M�M�O�/�
�A�G�!E�"	
������q�)�����H�-��	�����/�.��E�E�sC�A7E�D?�D0�*E�0	D<�9D?�;D<�<D?�?E	�E�Ec�0�d}|j||d��y)Nzline
T�r�)r&�r%r$s  r� test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_mode5s�����$�$�T�4�D�$�Irc���dtjj�z}|jtd�5|j|dd��ddd�y#1swYyxYw)Nslinezline bufferingrFr()r�linesepr��assertWarnsRegex�RuntimeWarningr&r)s  r�"test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_mode;sN������*�*�,�,��
�
"�
"�>�3C�
D��(�(��s�u�(�M�E�
D�
D�s�A�A�cpuc���td�D]X}|jt�5tjt
tjtj��ddd��Zy#1swY�exYw)NrCr�)r�rbr�rrDr�rE)r%rs  r�test_leaking_fds_on_errorz)ProcessTestCase.test_leaking_fds_on_errorBsN���t��A��"�"�#5�6�� � ��(2���(2���9�7�6��6�6�s�9A(�(A1	c���	ddl}|jtjdt�d��}tjd|g}tj|tjd��}|5|j�d}ddd�|jd	�|j|jd�y#ttf$r|j	d�Y��wxYw#1swY�^xYw)
Nrzneed msvcrt.CrtSetReportModezL
            import msvcrt
            import subprocess

            cmd = a

            for report_type in [msvcrt.CRT_WARN,
                                msvcrt.CRT_ERROR,
                                msvcrt.CRT_ASSERT]:
                msvcrt.CrtSetReportMode(report_type, msvcrt.CRTDBG_MODE_FILE)
                msvcrt.CrtSetReportFile(report_type, msvcrt.CRTDBG_FILE_STDERR)

            try:
                subprocess.Popen(cmd,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
            except OSError:
                pass
        rT)rCr�r�r)�msvcrt�CrtSetReportMode�AttributeError�ImportErrorr�r�r�r�rWrXrrDrEr�rYr)r%r4r�r�rxrCs      r�test_nonexisting_with_pipesz+ProcessTestCase.test_nonexisting_with_pipesOs���	:���#�#����$�#�%�&	�	 �
��&�~�~�t�T�*������'1���37�9����%�%�'��*�F�������$�������!�,��;��,�	:��M�M�8�9�	:��4�T�s�B5�*C�5 C�C�C$c�z��g��fd�}tj|��}|j�	|jt�5tjtt
jt
jt
j��ddd�|j�d}�D]}	tj|��|�|�y#1swY�=xYw#t$r}|}Yd}~�<d}~wwxYw#|j�d}�D]0}	tj|��#t$r}|}Yd}~�*d}~wwxYw|�|�wxYw)Nc���td�D]:}�jtj��t	j
d��<y)N�g����MbP?)r��extendrrj�time�sleep)r�fdss �r�open_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fds{s/����2�Y���
�
�2�7�7�9�%��
�
�5�!�r)�targetr@)�	threading�Thread�startrbr�rrDr�rEr�rrI)r%r@�t�exc�fdrr?s      @r�test_double_close_on_errorz*ProcessTestCase.test_double_close_on_errorxs�����	"�
���H�-��	���	�	��"�"�7�+�� � ��'1���(2���(2���9�,�
�F�F�H��C�����H�H�R�L�����	��!,�+�����C����
�F�F�H��C�����H�H�R�L�����C����
����	��sf�C-�AC	�
C-�-C�	C�C-�	C*�C%�%C*�-D:�D�D:�	D1	�%D,	�'D:�,D1	�1	D:c�*���	tjtjddg��|j	�j
d�g���fd�}t
jd|�}|j�trd}nd}�jtj��|j	�j
|d�	��j�|j	�j
|d
�	�|j�|j	dd|fd
|fg��y)Nrzimport time; time.sleep(12)c����jd�j�f��j��j��jd�jf��j��jd�jf�y)N�thread-start-poll-result�thread-after-kill-and-wait�thread-after-second-wait)r�rror*r)rx�resultss��r�kill_proc_timer_threadzDProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_thread�sb����N�N�6��	�	��D�E��I�I�K��I�I�K��N�N�8�$�/�/�J�K��I�I�K��N�N�6����H�Ir皙�����?r�i����r`z*unexpected result in wait from main thread��msgz&unexpected result in second main wait.)rKNrLrM)rrDrWrXrYrrB�TimerrDr(r*rrr�)r%rOrE�expected_errorcoderxrNs    @@r�test_threadsafe_waitz$ProcessTestCase.test_threadsafe_wait�s���M��������!>�!@�A��������$�/���	J�
�O�O�C�!7�8��	���	��!"��"$��
	
�	�	�'�/�/�	�0�������*<�I�	�	K�	
�	�	��������*<�E�	�	G�	
����
	
���<�7�9K�L�5�7I�J�L�!�	"rc���djd�}tjtjd|g�}|j|j
d�t|��y)N�;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0rsHello World!)r�rrvrWrXr�r�r�)r%r�r{s   r�test_issue8780zProcessTestCase.test_issue8780�sQ���x�x�#�$��
�(�(�#�.�.�$��)E�F������)�)�/�:�E�&�M�Jrc���tj�\}}tj�\}}tj�\}}	tjdg|||��|jt
jj|��|jt
jj|��|jt
jj|��y#t$r�tj|�tj|�tj|�tj|�tj|�tj|�Y��wxYw)N�*r@)r��mkstemprrDr�rrI�remover,r��exists)r%�ifhandle�ifname�ofhandle�ofname�efhandle�efnames       r� test_handles_closed_on_exceptionz0ProcessTestCase.test_handles_closed_on_exception�s��$�+�+�-���&�#�+�+�-���&�#�+�+�-���&�		����s�e�8�H��
�	
���������/�0����������/�0����������/�0���	��H�H�X���I�I�f���H�H�X���I�I�f���H�H�X���I�I�f��
	�s�C,�,BE7�6E7c��tjttjtjtj��}|j	|j
j�|j	|jj�|j	|jj�|jddz�y)Nr@�x�)
rrDrrEr�rBrIrCrAr�rJs  r�test_communicate_epipez&ProcessTestCase.test_communicate_epipe�sw�����_�#-�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&�	�
�
�d�U�l�#rc�|�dddgdddfgd�dddftjd�dd	d
fg}tjjjtjd�5|D]@\}}}}t
j||��}||_|jt|�|��B	ddd�y#1swYyxYw)
N)�lsT�{z#<Popen: returncode: 123 args: 'ls'>)�daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTrzP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>rjFz&<Popen: returncode: None args: ['ls']>)rjz	--my-optsrlzP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>z
my-tool.py�z4<Popen: returncode: 7 args: <FakePath 'my-tool.py'>>r<�r�)rr
rmr�patch�objectrrDrrY�repr)r%�casesr�r�r��sxrKs       r�	test_reprzProcessTestCase.test_repr�s���D�
a��V�U�D�"J�K�
+�U�D�
_�
a�
�
�
��
-�u�a�
C�
E�	
���]�]�
 �
 �
'�
'�
�(8�(8�:J�
K�(-�$��U�D�"��$�$�S��6��#���� � ��a��"�-�).�L�
K�
K�s
�"AB2�2B;c���tjttj��}|j	|j
j�|j�|jddz�y)Nr�rfrg)	rrDrrEr�rArIr*r�rJs  r�!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdinsH�����_�#-�?�?�
4��������
�
�&�	����	�
�
�d�U�l�#r�SIGUSR1zRequires signal.SIGUSR1rozRequires os.kill�getppidzRequires os.getppidc�~�d�}tjtj|�}|jtjtj|�tjddg}dD]C}|t
ji}tj|fi|��5}|j�ddd��Ey#1swY�PxYw)Nc��yr"r4)�signum�frames  r�handlerz7ProcessTestCase.test_communicate_eintr.<locals>.handler���rrz7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r�)	�signalrwr�rWrXrrErDr�)r%r}�old_handlerr:�stream�kw�processs       r�test_communicate_eintrz&ProcessTestCase.test_communicate_eintrs���	��m�m�F�N�N�G�<������
�
�v�~�~�{�C�����8�9��+�F��*�/�/�*�B��!�!�$�-�"�-���#�#�%�.�-�+�-�-�s�B3�3B<	�/proc/%d/fdzLinux specificc�z�	dtj�z}tj|�}|jt�5tttjtjtj��ddd�tj|�}|j||�y#1swY�1xYw)Nr�r@)
r�getpid�listdirrbr6r8rrrErY)r%�fd_directory�fds_before_popen�fds_after_exceptions    r�!test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leak%s���	J�$�r�y�y�{�2���:�:�l�3��
�
�
�1�
2�#�#�:�?�?�%�?�?�:�?�?�
D�3�!�j�j��6�����)�+>�?�3�
2�s�>B1�1B:z+behavior currently not supported on Windowsc���|jt�5}tjgd��ddd�|j	j
jd�y#1swY�0xYw)N)�/opt/nonexistent_binary�with�somer:r�)rbrrrVrYrk�filenamerls  r�%test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filename7sI��
�
�
�0�
1�Q��O�O�O�P�2�������-�-�/H�I�2�
1�s�A�A&c���|jt�5}tjddgd��ddd�|j	j
jd�y#1swY�0xYw)N�exit�0z/some/nonexistent/directoryr)rbrrrDrYrkr�rls  r� test_file_not_found_with_bad_cwdz0ProcessTestCase.test_file_not_found_with_bad_cwd=sQ��
�
�
�0�
1�Q����f�c�]�0M�N�2�������-�-�/L�M�2�
1�s�A�A(c���|jtjttj
�|jtjttj
�yr")rFrrD�bytes�types�GenericAlias�CompletedProcessrr$s r�test_class_getitemsz#ProcessTestCase.test_class_getitemsCsD�����j�.�.�u�5�u�7I�7I�J����j�9�9�#�>��@R�@R�Sr�
HAVE_VFORKz!vfork() not enabled by configure.�subprocess._fork_execc���|jtj�td�|_|jt�5tjtjddg�ddd�|j�|j|jjd�tjjtdd�5|jt�5tjtjddg�ddd�|j|j djd�ddd�y#1swY��xYw#1swY�IxYw#1swYyxYw)Nzjust testing argsrrrw�
_USE_VFORKF)r�rr��RuntimeError�side_effectrbrrWrX�assert_called_once�	call_argsr:rrorpr,�call_args_list)r%�mock_fork_execs  r�test__use_vforkzProcessTestCase.test__use_vforkGs��	
���
�-�-�.�%1�2E�%F��"�
�
�
�|�
,��N�N�C�N�N�D�&�9�:�-��)�)�+�����0�0�5�5�b�9�:�
�Z�Z�
�
�z�<��
?��"�"�<�0��������f�=�>�1����^�:�:�2�>�C�C�B�G�H�@�
?�	-�
,��
1�0��@�
?�s0�'E
�E"�''E�3E"�
E�E	�E"�"E+�_winapizneed subprocess._winapic���tjt�}|5tjjtjdtjj��}|5}|jd�|j|jd�d|_ddd�|j|j�d�ddd�y#1swY�2xYw#1swYyxYw)N�WaitForSingleObject��return_valuerwr)
rrDrrrorpr��
WAIT_OBJECT_0r*�assert_called_once_with�_handlerrY)r%rxro�	mock_waits    r�test_wait_negative_timeoutz*ProcessTestCase.test_wait_negative_timeoutVs�������0��
��J�J�%�%��"�"�%�'�/�/�=�=�&�?�E��)��	�	�"�
��1�1�$�,�,��B�"&����

���T�Y�Y�[�!�,��T�
����T�s$�AC�'5C
�(C�
C	�C�C"N)�r1r2r3rLrPr\rdrhrnr|rr�r�r�r�r�r�r�r�r�r�requires_resourcer�r�r�r�r�r�r�r�r�r�r�rm�skipIfr(r�r�r�rrr
rrrr"r'r*rW�base_prefix�prefixr,�	sysconfig�is_python_buildr.r1r8r;r@rErHrLrNrPrTrXrZr\r_rarc�
skipUnlessrk�hasattrrur}r�r�r��get_config_varrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
rrrrrr!r&r*r/r2r8rHrUrXrdrhrtrvrrr�r��isdirr�r�r�r�r�rror�rr�r4rrr>r>ssa����!�'� �
5�5�4�'�
'�'�(�'�'�%�5�4��W���z�*�
6�+�
6� �+�(�<�.)�+�	M�D�A�9��X�_�_�Y� D�E�G�F�G�
�X�_�_�Y� D�E�(�F�(��X�_�_�Y� D�E�(�F�(�
�*�=�&A�N�
K�
�X�_�_�Y� D�E�
E�F�
E��X�_�_�Y� D�E�-�F�-�$C��X�_�_�S�_�_��
�
�2�2�4�D�4�D��X�_�_�S�_�_��
�
�2�2�4��X�_�_�.�Y�.�.�0�:�<�4�<�4�4�*�*�
*�9�
6�	/�=�
:�	3�*�*
>�
4�>�&)�)�(��X����A�7�5�.�#A�@�B�!�B�!�F�X����A�7�5�.�#A�@�B��B��@	0��X�������0�2F�G�
>�H�
>��X�_�_�S�\�\�W�,�:�<��X�_�_�-�Y�-�-�.@�A�Q�F�2�3��X�_�_�_�T�2�@�B�2�B�3�<�2�,�X�_�_�-�Y�-�-�.@�A�Q�F�9�:��X�_�_�_�T�2�@�B�
>�B�:�

>�@�6�<�X�������0�2F�G�
:�H�
:�*�'�/�
/�@�&5�"9�,'�2�.&� %F�NE�2*�
*�G�83�,>�*%"�N"�$	&�&�C�8�&�.�,J�N��W���u�%�
9�&�
9�'-�R�:2"�h	K�1�(	$�.�"$��X������3�2�4��X�����V�,�+�-��X�����Y�/�.�0�&�0�-�4�&�&�X��������}�y�r�y�y�{�'B�C�)�+�@�+�@� �X�_�_�Y� M�N�J�O�J�
�X�_�_�Y� M�N�N�O�N�
T��X�_�_�1��1�1�,�?�?�8�:��T�Z�Z�'�(�
I�)�:�
I��X�����Y�7�2�4�-�4�-rr>c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Ze
jd�d��Zd
�Zd�Zd�Zd�Zej*ed�d��Zd�Zd�Zd�Zej6ed�d��Zd�Zy)�RunFuncTestCasec�V�	tjd|g}tj|fi|��S)Nr�rWrXrr)r%r�r;�argvs    r�
run_pythonzRunFuncTestCase.run_pythonhs)��B�����d�+���~�~�d�-�f�-�-rc���|jd�}|j|jd�|jtj
�5|j
�ddd�y#1swYyxYwr�)r�rYrrbrrj�check_returncode�r%�cps  r�test_returncodezRunFuncTestCase.test_returncodemsQ��
�_�_�7�
8���������+�
�
�
�z�<�<�
=����!�>�
=�
=�s�
A'�'A0c���|jtj�5}|jdd��ddd�|j	j
jd�y#1swY�0xYw)NrSTrtrT)rbrrjr�rYrkrrls  r�
test_checkzRunFuncTestCase.test_checktsQ��
�
�
�z�<�<�
=���O�O�6�d�O�C�>�������/�/��4�>�
=�s�A#�#A,c�r�tjtd��}|j|jd�y)NTrtr)rrrrYrr�s  r�test_check_zerozRunFuncTestCase.test_check_zeroys&��
�^�^�O�4�
8���������*rc��|jtj�5|jdd��ddd�y#1swYyxYw)Nr^rr`)rbrrcr�r$s r�test_timeoutzRunFuncTestCase.test_timeout~s5��
�
�
�z�8�8�
9��O�O�.��O�?�:�
9�
9�s	�=�Ac�~�|jdtj��}|jd|j�y)Nrqrsrr�r�rrErwrBr�s  r�test_capture_stdoutz#RunFuncTestCase.test_capture_stdout�s*��
�_�_�_�Z�_�_�_�
E���
�
�g�r�y�y�)rc�~�|jdtj��}|jd|j�y)Nr�r�rr)r�rrErwrCr�s  r�test_capture_stderrz#RunFuncTestCase.test_capture_stderr�s1��
�_�_�C�$.�O�O��5���
�
�g�r�y�y�)rc�"�tj�}|j|j�|j	d�|jd�|j
d|tj��}|jd|j�y)Nr�rr�r�r�)r�r�r�rIr�r�r�rrErwrB)r%r�r�s   rr�z+RunFuncTestCase.test_check_output_stdin_arg�sj��
�
#�
#�
%��������!�
�����
����
�
�_�_�I������2��	
�
�
�g�r�y�y�)rc��|jddtj��}|jd|j�y)Nr�r�)r�rBr�r�r�s  rr�z+RunFuncTestCase.test_check_output_input_arg�s5��
�_�_�H��j�o�o��7��	
�
�
�g�r�y�y�)rc���tj�}|j|j�|j	d�|jd�|j
td��5}|jd|d��}ddd�|jdjjd�|jd	|jjd�y#1swY�\xYw)
Nr�rr�rQr�r�r�rAr�)r�r�r�rIr�r�rbryr�rwrkr:r�s    rr�z6RunFuncTestCase.test_check_output_stdin_with_input_arg�s���
�
#�
#�
%��������!�
�����
����
�
�
�
�z�K��M�PQ��_�_�%?�+-�W�%�>�F�M�	
�
�
�g�q�{�{�/�/��2�3��
�
�g�q�{�{�/�/��2�3�M�M�s�)C�C"r�c�H�|jtj�5}|jddtj��}ddd�|jjjd�|j|jjd�y#1swY�VxYw)Nr�r�)rarBrr)	rbrrcr�rErYrkr{rB)r%rmr�s   rr�z)RunFuncTestCase.test_check_output_timeout�s��
�
�
�z�8�8�
9�Q����(��j�o�o�!�7�B�:�	
������+�+�W�5�������+�+�W�5�:�
9�s�#B�B!c��tjj�}d|d<|jd|��}|j	|j
d�y)Nr�r�zCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r��!)rr�r�r�rYr)r%r�r�s   r�test_run_kwargszRunFuncTestCase.test_run_kwargs�sM�������"��"��w��
�_�_�M�!'��)��	
�������+rc��trdnd}tj|�}|�|j|�d��t	|�}tj|t
j��}|j|jd�|jt�5tj|t
jd��ddd�y#1swYyxYw)Nztree.comrjz required for this testrsrT)rBr�)r(rrr�r
rrr^rYrrbr�)r%�progr��ress    r�test_run_with_pathlike_pathz+RunFuncTestCase.test_run_with_pathlike_path�s���'�z�D���|�|�D�!���<��M�M�T�F�"9�:�;���~���n�n�T�*�*<�*<�=���������+�
�
�
�y�
)��N�N�4�
�(:�(:�$�G�*�
)�
)�s�'C�Cc��tjtj�}|ddg}t	j
|�}|j
|jd�y)Nrsimport sys; sys.exit(57)�9)rr�rWrXrrrYr�r%r�r:r�s    r�&test_run_with_bytes_path_and_argumentsz6RunFuncTestCase.test_run_with_bytes_path_and_arguments�sC���{�{�3�>�>�*���d�7�8���n�n�T�"���������,rc��ttj�}|ddg}tj|�}|j|jd�y)Nrzimport sys; sys.exit(57)r�)r
rWrXrrrYrr�s    r�)test_run_with_pathlike_path_and_argumentsz9RunFuncTestCase.test_run_with_pathlike_path_and_arguments�s?������'���d�6�7���n�n�T�"���������,rz#Maybe test trigger a leak on Ubuntuc�X�tjddg}tj|i��y)Nrrr�r�)r%r:s  r�test_run_with_an_empty_envz*RunFuncTestCase.test_run_with_an_empty_env�s$������f�-��	���t��$rc��|jdd��}|jd|j�|jd|j�y)Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')T��capture_outputrrsFLUFL)r�rwrBrCr�s  r�test_capture_outputz#RunFuncTestCase.test_capture_output�sE��
�_�_�:�-1��2��	
�
�
�g�r�y�y�)��
�
�h��	�	�*rc��tj�}|j|j�|j	t
d��5}|j
dd|��}ddd�|jdjjd�|jd|jjd�y#1swY�\xYw)	NzAExpected ValueError when stdout and capture_output args supplied.rQr�T)r�rBrBrr��
r�r�r�rIrbryr�rwrkr:r�s    r�#test_stdout_with_capture_output_argz3RunFuncTestCase.test_stdout_with_capture_output_arg����
�
#�
#�
%��������!�
�
�
�z�"��$�'(��_�_�%?�59�"�%�F�F�$�
	
�
�
�h���� 0� 0�� 3�4��
�
�&����(8�(8��(;�<�
$�$���B7�7Cc��tj�}|j|j�|j	t
d��5}|j
dd|��}ddd�|jdjjd�|jd|jjd�y#1swY�\xYw)	NzAExpected ValueError when stderr and capture_output args supplied.rQr�T)r�rCrCrr�r�r�s    r�#test_stderr_with_capture_output_argz3RunFuncTestCase.test_stderr_with_capture_output_arg�r�r�z)requires posix like 'sleep' shell commandc�J�	tj�}	tjdddd��|j	d�|j|z
dd�d��	�y#tj
$r2}tj�}t
j�}Yd}~�\d}~wwxYw)
Nzsleep 3Tr_)r�rar�zTimeoutExpired not raised.g�?z/TimeoutExpired was delayed! Bad traceback:
```
z```rQ)	r=�	monotonicrrr�rc�	traceback�
format_exc�
assertLess)r%�before_secsrF�
after_secs�stackss     r�.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_outputs���X��n�n�&��	4��N�N�9�D�#�*.�
0�
�I�I�2�3����
�[�0�#�O�!�(�#�'�	�	(���(�(�	,����)�J��)�)�+�F��	,�s�A�B"�0(B�B"c�x�tjd�}tjtj
dd|gd��}|jj�}|jt|�d|�|j|djd��|j|d	jd
��y)Nz�            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingrTr�rfrs<string>:2: EncodingWarning: r�s<string>:3: EncodingWarning: )r�r�rrrWrXrC�
splitlinesrYr�r�r�)r%r�r��liness    r�test_encoding_warningz%RunFuncTestCase.test_encoding_warnings������ ���
�^�^�S�^�^�-F��d�S�+/�1���	�	�$�$�&������U��Q��.�����a��+�+�,L�M�N�����a��+�+�,L�M�NrN)r1r2r3r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�rmr�r(r�r�r�r�r�r�r�r4rrr�r�gs���.�
"�5�
+�
@�*�
*�
	*�*�4��W���z�*�6�+�6�,�H�-�-��X����$I�J�%�K�%�+�
=�
=� �X�_�_�Y� K�L�
(�M�
(�Orr�c��dD]"}ts�
	tj|�|cStjd��#t$rY�EwxYw)N)�staff�nogroup�grp�nobody�	nfsnobodyz?No identified group name to use for this test on this platform.)r�getgrnam�KeyErrorrmrn)�
name_groups r�_get_test_grp_namer,sQ��H�
��
����Z�(���
I���� a�b�b��	�
��
�s�=�	A	�A	zPOSIX specific testsc���eZdZ�fd�Zd�Zd�Zd�Zd�ZGd�dej�Z
ejd�d	��Z
ejd�d
��Zej ej$j'd�d�d
��Zd�Zej,eed�xr	eed�d�d��Zej,eed�d�d��Zej eed�d�d��Zej,eed�d�d��Zej eed�d�d��Zej,eed�d�d��Zej,eed�d�d ��Zd!�Zd"�Z ej e!xs
eed#�d$�d%��Z"d&�Z#d'�Z$d(�Z%d)�Z&d*�Z'd+�Z(Gd,�d-ej�Z)ej ej$j'd.�d/�d0��Z*d1�Z+ej e,jZd2k(d3�d4��Z.d5�Z/d6�Z0d7�Z1d8�Z2d9�Z3d:�Z4d;�Z5ej e,jZjmd<�d=�d>��Z7d?�Z8d@�Z9dA�Z:dB�Z;dC�Z<dD�Z=dE�Z>dF�Z?dG�Z@dH�ZAdI�ZBdJ�ZCdK�ZDdL�ZEdM�ZFdN�ZGdO�ZHdP�ZIdQ�ZJdR�ZKdS�ZLdT�ZMdU�ZNdV�ZOdW�ZPdX�ZQdY�ZRdZ�ZSej e,jZjmd[�xr9ej�d\�j�ej�d]�j�k(d^�d_��ZVeWj�d`da�db��ZYdc�ZZdd�Z[de�Z\df�Z]dg�Z^dh�Z_di�Z`dj�Zadk�Zbdl�ZceWj�dm��ZeeWj�dn��Zfdo�Zgdp�Zhdq�Zidr�Zjej,ekdsuxr	eekdt�du�dv��Zldw�Zmdx�Zndy�Zodz�Zp�xZqS){�POSIXProcessTestCasec�0��t�|��d|_y)Nz/_this/pa.th/does/not/exist)�superr&�_nonexistent_dir�r%�	__class__s �rr&zPOSIXProcessTestCase.setUp;s���
��
�� =��rc��	tj|j�|jd|jz�S#t$r
}|}Yd}~|Sd}~wwxYw)Nz,chdir to nonexistent directory %s succeeded.)r�chdirrr�r�)r%r�desired_exceptions   r�_get_chdir_exceptionz)POSIXProcessTestCase._get_chdir_exception?s`��		-��H�H�T�*�*�+�
�I�I�D��+�+�,�
-� � ���	"�!"��!� ��	"�s�A�	A�
A�Ac���	|j�}	tjtjddg|j
��}|j
d|z�y#t$r|}|j|j|j�|j|j|j�|j|j|j�Yd}~yd}~wwxYw)Nrrr�Expected OSError: %s�rrrDrWrXrr�r�rYr��strerrorr��r%rrKrs    r�test_exception_cwdz'POSIXProcessTestCase.test_exception_cwdLs���I� �5�5�7��
	B�� � �#�.�.�$��!;�%)�%:�%:�<�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E���2A�	C�#A2C�Cc���	|j�}	tjtjddg|j
��}|j
d|z�y#t$r|}|j|j|j�|j|j|j�|j|j|j�Yd}~yd}~wwxYw)Nrrr�rrrs    r�test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executable[s���P� �5�5�7��
	B�� � �#�.�.�$��!;�,0�,A�,A�C�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E�rc��	|j�}	tj|jddg�}|j	d|z�y#t
$r|}|j
|j|j�|j
|j|j�|j
|j|j�Yd}~yd}~wwxYw)Nrrr)
rrrDrr�r�rYr�rr�rs    r�test_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0js���M� �5�5�7��		B�� � �$�"7�"7��r�!B�C�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E�s�"A
�
	C�A2C
�
Cc��eZdZd�Zy)�&POSIXProcessTestCase.PopenNoDestructorc��yr"r4r$s r�__del__z.POSIXProcessTestCase.PopenNoDestructor.__del__�r~rN)r1r2r3r r4rr�PopenNoDestructorrs��	rr!r�c���	d�}||_tjdt��5|j	t
�5|j
dg�ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��|d}djtj�j�}t	j
|d|zdz�y)N�
z{:x}sOSError:�:r)r�r��EISDIRr�rr�)r:�
errpipe_write�err_codes   r�proper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_error�sA�� ��H�M��}�}�U�\�\�2�9�9�;�H��H�H�]�K�(�$:�T�$A�B�r�subprocess.os.waitpid�r��non_existent_command)r�rro�ChildProcessErrorrb�IsADirectoryErrorr!)r%�	fork_execr)s   r�test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normal�sh��L�	�!-�	��
�Z�Z�/�$5�7��"�"�#4�5��&�&�(>�'?�@�6�7�7�5�5��7�7�s"�A-�A!�A-�!A*	�&A-�-A6c�l��	d��fd�}||_tjdt��5|j	t
j�5}|jdg�ddd�ddd�|jt��tj��y#1swY�@xYw#1swY�DxYw)Ns�ޭc�<��|d}tj|��y)Nr$r)rr�)r:r'�
error_datas  �r�	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_error�s��� ��H�M�
�H�H�]�J�/�rr*r+r,)r�rror-rbr�SubprocessErrorr!rwrqrrk)r%r/r4rr3s    @r�test_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_data�s����	"�(�
�	�!*�	��
�Z�Z�/�$5�7��"�"�:�#=�#=�>�!��&�&�(>�'?�@�?�7�
	
�
�
�d�:�&��A�K�K�(8�9�?�>��7�7�s#� B*�B�B*�B'	�#B*�*B3�/proc/self/statuszneed /proc/self/statusc�Z�tjddgd��}|j�D]}|jd�s�|}n|j	d�tjddgd��}|j�D]}|jd�s�|}n|jd�	�y)
N�catr7F)�restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.rQ)rrvr�r�r��assertNotEqual)r%�default_proc_statusr$�default_sig_ign_mask�restored_proc_status�restored_sig_ign_masks      r�test_restore_signalsz)POSIXProcessTestCase.test_restore_signals�s���)�5�5��+�,� %�'��(�2�2�4�D����y�)�'+�$��5�

�M�M�B�C�)�6�6��+�,� $� &��)�3�3�5�D����y�)�(,�%��6�	
���0�2G�!3�	�	4rc�"�	tjtjddgd��}t	j
d�}t
|�}|j||�y#t$r(}|jtjk7r�Yd}~yd}~wwxYw)Nrzimport os; print(os.getsid(0))T)�start_new_sessionr)rrvrWrXr�getsid�intr;�PermissionErrorr��EPERM)r%r{�
parent_sid�	child_sidrs     r�test_start_new_sessionz+POSIXProcessTestCase.test_start_new_session�s{��
	7��,�,��^�^�T�+K�L�&*�,�F����1��J��F��I����
�I�6��
�	��w�w�%�+�+�%��&��	���(A�	B�&B	�	B�setpgid�getpgidz!no setpgid or getpgid on platformc�"�	tjtjddgd��}t	j
d�}t
|�}|j||�y#t$r(}|jtjk7r�Yd}~yd}~wwxYw)Nrzimport os; print(os.getpgid(0))r)�
process_group)rrvrWrXrrLrDr;rEr�rF)r%r{�parent_pgid�
child_pgidrs     r�test_process_group_0z)POSIXProcessTestCase.test_process_group_0�s{��
	9��,�,��^�^�T�+L�M�"#�%�F��*�*�Q�-�K��V��J�����Z�8��
�	��w�w�%�+�+�%��&��	�rJ�setreuidzno setreuid on platformc�2�tj�}|dk7rdnd|g}tjdk7rdnd}t�'	t	j
|�|j
|�|D]�}dD]�}|j||��5	tjtjdd	g||��}t|t�r t	j
|�j}n|}t|�}|j!||�ddd�����|j-t.�5tj0t2d
��ddd�|j-t4�5tj0t2tj6tj8d�
�ddd�t�=|�:|j-t.�5tj0t2|��ddd�yyy#t$rd}Y���wxYw#t"$rn}	|	j$t$j&k(r+|j!|	j(tj�n|j+|	j(�Yd}	~	��dd}	~	wwxYw#1swY��xYw#1swY��>xYw#1swY��xYw#1swYyxYw)N���darwinr�unknownr�)�user�	close_fdsrzimport os; print(os.getuid())rw�rX�)rr�rX)r�geteuidrWr��pwd�getpwnamr�r�subTestrrvrX�
isinstancer�pw_uidrDrYrEr��EACCESr�rrbryrgr�
OverflowErrorrr�)
r%�uid�
test_users�name_uidrXrYr{�user_uid�
child_userrs
          r�	test_userzPOSIXProcessTestCase.test_user�s���j�j�l��"�e�|�e���<�
�"�|�|�x�7�8�Y���?�
 ����X�&��!�!�(�+�
�D�*�	��\�\�t�y�\�A�?�!+�!8�!8�!$����!@�!B�%)�*3�	"5��&�d�C�0�'*�|�|�D�'9�'@�'@�H�'+�H�%(��[�
��(�(��X�>�%B�A�+��.�
�
�z�
*��!�!�/��;�+��
�
�}�
-��!�!�/�&(�i�i�R�Z�Z�e�
M�.��;�8�/��"�"�:�.��%�%�o�H�E�/�.�0�;��E�
 ���
 ��+�:��7�7�e�l�l�2� �,�,�Q�Z�Z����H� �-�-�a�j�j�9���	:��B�A��(+�
*��.�
-��
/�.�sm�&G�I'�)G-�,AI'�I4�:J�4J
�G*�)G*�-	I$	�6A#I	�I'�I$	�$I'�'I1�4I>�J
�
Jz setreuid() available on platformc��|jt�5tjtd��ddd�y#1swYyxYw)N�rZ�rbryrrgrr$s r�test_user_errorz$POSIXProcessTestCase.test_user_errors,��
�
�
�z�
*��!�!�/��>�+�
*�
*��	�;�A�setregidzno setregid() on platformc�6�tj�}|dk7rdndg}t�}t�|j	|�||gzD]�}dD]�}|j||��5	t
jtjddg||��}t|t�r tj|�j}n|}t|�}|j||�ddd�����|j't(�5t
j*t,d��ddd�|j't.�5t
j*t,tj0tj2d	�
�ddd�t�:|j't(�5t
j*t,|��ddd�yy#t $r&}	|j#|	j$�Yd}	~	��d}	~	wwxYw#1swY���xYw#1swY��xYw#1swY��xYw#1swYyxYw)NrTrUr�)�grouprYrzimport os; print(os.getgid())rw�rqr[)rr�rq)r�getegidrrr�r_rrvrWrXr`rr�gr_gidrDrYrErr�rbryrgrrcrr�)
r%�gid�
group_listrrqrYr{�	group_gid�child_grouprs
          r�
test_groupzPOSIXProcessTestCase.test_groups����j�j�l��"�e�|�e��7�
�'�)�
��?����j�)��3�%�'�E�*�	��\�\���\�C�A�!+�!8�!8�!$����!@�!B�&+�*3�	"5��&�e�S�1�(+���U�(;�(B�(B�I�(-�I�&)�&�k���(�(��i�@�!D�C�+�(�,�
�
�z�
*��!�!�/��<�+��
�
�}�
-��!�!�/�&(�i�i�R�Z�Z�u�
N�.��;��"�"�:�.��%�%�o�Z�H�/�.���'+�6��)�)�!�*�*�5�5��6��D�C��&+�
*��.�
-��
/�.�s[�!G*�#)F8�AG*�<G7�5:H�H�8	G'	�G"	�G*�"G'	�'G*�*G4�7H�H�Hz setregid() available on platformc��|jt�5tjtd��ddd�y#1swYyxYw)Nrkrrrlr$s r�test_group_errorz%POSIXProcessTestCase.test_group_errorGs,��
�
�
�z�
*��!�!�/��?�+�
*�
*�rn�	setgroupszno setgroups() on platformc�f�tj�}|dk7rdndg}|j||��y)NrTrU�rurv)rrs�_test_extra_groups_impl)r%rurvs   r�test_extra_groupsz&POSIXProcessTestCase.test_extra_groupsLs0���j�j�l��"�e�|�e��7�
��$�$���$�Drc�N�|jtj�g��y)Nr~)rrrsr$s r�test_extra_groups_empty_listz1POSIXProcessTestCase.test_extra_groups_empty_listRs���$�$�����"�$�Erc���t�}t�|j|�	tjt
jddg|��}tj�}tj|�}t�?|D�cgc]3}t|t�rtj|�jn|��5}}n|}|jt!|�t!|��t�;|j+t,�5tj.t0|g��ddd�yycc}w#t"$r6}	|j%|	j&�|j)d�Yd}	~	��d}	~	wwxYw#1swYyxYw)Nrz;import os, sys, json; json.dump(os.getgroups(), sys.stdout)��extra_groupsz-setgroup() EPERM; this test may require root.)rrr�rrvrWrXr�	getgroups�json�loadsr`rrrtrY�setrErr�r�rbryrgr)
r%rurvrr{�
parent_groups�child_groups�g�desired_gidsrs
          rrz,POSIXProcessTestCase._test_extra_groups_implVsA��'�)�
��?����j�)�	C��,�,��^�^�T�R�T�!+�-�F��L�L�N�M��:�:�f�-�L���)3� 5�)3�A�;E�Q��:L����Q�� 6� 6�RS� S�)3�� 5� *�����S��.��L�0A�B��;��"�"�:�.��%�%�o�4>�<�A�/�.��� 5���	K����a�j�j�)��M�M�I�J�J��	K�� /�.�s)�(D&�>8D!�:E(�&	E%�/,E � E%�(E1c�X�|jt�5tjtdg��ddd�|jt�5tjtt
jt
jdg��ddd�y#1swY�bxYw#1swYyxYw)Nrwr�r[)rr�r�)rbryrrgrrrr�r$s r�&test_extra_groups_invalid_gid_t_valuesz;POSIXProcessTestCase.test_extra_groups_invalid_gid_t_valuesvss��
�
�
�z�
*��!�!�/���E�+��
�
�z�
*��!�!�/�&(�i�i�R�Z�Z�05�w�
8�+�
*�+�
*��+�
*�s�B�;B �B� B)�umaskzPOSIX umask() is not available.c	���d}	tj�}tjj	|d�}tjtjdd|�d�gd��tj|�jdz}d}|j||t|��d	t|����
�|�tj|�yy#|�tj|�wwxYw)N�beansrzopen(z, 'w').close()�+)r�i�i�z != rQ)r�r�rr�r�rrgrWrX�stat�st_moderY�octrr)r%r�namer��
expected_modes     r�
test_umaskzPOSIXProcessTestCase.test_umasks�����	&��%�%�'�F��7�7�<�<���0�D�
�!�!��^�^�T�U�4�(�.�+I�J��
!�
�g�g�d�m�+�+�e�3�G�!�M����]�G�$'�
�$6�#7�t�C��L�>�!J�
�
L��!��
�
�f�%�"��v�!��
�
�f�%�"�s�B/C�C&c��tj�5tjtj
ddg�}|j
�ddd�|jjtj�y#1swY�5xYw)Nrzimport os; os.abort())rr#rrDrWrXr*rYrr�SIGABRTrJs  r�test_run_abortz#POSIXProcessTestCase.test_run_abort�sa��
�
(�
(�
*�� � �#�.�.�$�"9�";�<�A�
�F�F�H�+�	
���!�,�,�����7�	+�
*�s�7B�B	c�,�tjttj�d�}t|�}|j
d|j��|j
d|�|j
ttj�|�y)N�fake cmdr�SIG)rrjrDrr�rrw�lower�r%r��error_strings   r�"test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signal�si���+�+�S����-@�,@�*�M���3�x��	
�
�
�h�� 2� 2� 4�5�	
�
�
�e�\�*��
�
�c�&�.�.�)�<�8rc�j�tjdd�}t|�}|jd|�y)Ni�Ki�r�zunknown signal 9876543.�rrjrrwr�s   r�*test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signal�s,���+�+�H�j�A���3�x���
�
�/��>rc�j�tjdd�}t|�}|jd|�y)Nrfr�znon-zero exit status 2.r�r�s   r�$test_CalledProcessError_str_non_zeroz9POSIXProcessTestCase.test_CalledProcessError_str_non_zero�s,���+�+�A�z�:���3�x���
�
�/��>rc��tjtjddgtjd���}|5|j|jj�d�ddd�y#1swYyxYw)Nrr�c�.�tjdd�S)Nr��apple)r�putenvr4rr�<lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>�s���	�	�'�7�0Kr)rB�
preexec_fn�appler?rJs  r�test_preexecz!POSIXProcessTestCase.test_preexec�s^��
���c�n�n�d�E�F�%/�O�O�(K�	
M��
����Q�X�X�]�]�_�h�7��Q�Q�s�+A/�/A8c�^�d�}	tjtjddg|��}|j	d�y#tj
$r*}|j
tjd�Yd}~yd}~wt$r)}|jd|jd�Yd}~yd}~wwxYw)	Nc��td��)Nz'What if two swallows carried a coconut?�ryr4rr�raise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_it�s���F�G�Grrr�r�zEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fn�coconutr)rrDrWrXr�r5r��
_fork_execryrwr:)r%r�rKrs    r�test_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exception�s���	H�	0�� � �#�.�.�$��!;�,4�6�A�
�I�I�/�
0���)�)�	A��O�O��)�)�?�
A�
A���	0��M�M�)�Q�V�V�A�Y�/�/��	0�s!�(?�B,� A7�7B,�B'�'B,c��eZdZ	d�Zd�Zy)�+POSIXProcessTestCase._TestExecuteChildPopenc�X�||_tjj|g|��i|��yr")�	_testcaserrDr�)r%�testcaser:r;s    rr�z4POSIXProcessTestCase._TestExecuteChildPopen.__init__�s'��%�D�N����%�%�d�<�T�<�V�<rc
��	tjj|g|��i|��td�D�cgc]&}t	j
dtj���(}}	|D]k}|jj||jj�|jj�|jj�fd���m	|D]}t	j|��ycc}w#|D]}t	j|��wxYw#td�D�cgc]&}t	j
dtj���(ncc}w}}	|D]k}|jj||jj�|jj�|jj�fd���m	|D]}t	j|��w#|D]}t	j|��wxYwxYw)N��	/dev/zeroz!At least one fd was closed early.rQ)rrDr<r�rr��O_RDONLYr�r�rAr4rBrCrI)r%r:r;r��devzero_fdsrGs      rr<z:POSIXProcessTestCase._TestExecuteChildPopen._execute_child�s���
%�� � �/�/��F�t�F�v�F�).�a��2�(0�1� "�w�w�{�B�K�K�@�(0��2�%�)�����2�2� "�T�Z�Z�%6�%6�%8�$�+�+�:L�:L�:N�%)�[�[�%7�%7�%9�%;�$G�3�I�*�*�������*��2��*�������*��).�a��2�(0�1� "�w�w�{�B�K�K�@�(0��2��2�%�)�����2�2� "�T�Z�Z�%6�%6�%8�$�+�+�:L�:L�:N�%)�[�[�%7�%7�%9�%;�$G�3�I�*�*�������*��k�������*�sB�#D�+C.� A0C3�3D�H�"+E�
H�A0G$�H�$H�HN)r1r2r3r�r<r4rr�_TestExecuteChildPopenr��s��A�	=�	%rr�r�z/dev/zero required.c	��	d�}|jtj�5|j|ttj
tj
tj
|��ddd�y#1swYyxYw)Nc�,�tjd��)Nz-force the _execute_child() errpipe_data path.)rr5r4rrr�zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it�s���,�,�C�E�
Er)rArBrCr�)rbrr5r�rrE)r%r�s  r�0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes�s\��D�	E��
�
�z�9�9�
:��'�'��o�(�o�o�j�o�o�)���8�
(�
E�;�
:�
:�s�AA3�3A<c��tj�}	tj�|jtj��t	j
tjddgd���|jtj�d�tj�|jtj��t	j
tjddgd���|jtj�d�|stj�yy#|stj�wwxYw)Nrrc��yr"r4r4rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>����trr�z#Popen enabled gc when it shouldn't.c��yr"r4r4rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>	r�rzPopen left gc disabled.)
�gc�	isenabled�disabler,rrVrWrX�enabler�)r%�enableds  r�test_preexec_gc_module_failurez3POSIXProcessTestCase.test_preexec_gc_module_failure�s����,�,�.��	��J�J�L����R�\�\�^�,��O�O�S�^�^�T�2�6�'3�
5����R�\�\�^�B�
D�
�I�I�K��O�O�B�L�L�N�+��O�O�S�^�^�T�2�6�'3�
5��O�O�B�L�L�N�,E�F���
�
����7��
�
���s�DD6�6ErVz!setrlimit() seems to fail on OS Xc�R�	ddlm}m}m}�}|\}}|d|f�|j
|||�	tjtjddgd���|jd�y#t$r}|j|�Yd}~��d}~wwxYw#t$rYywxYw)Nr)�	getrlimit�	setrlimit�RLIMIT_NPROCrrc��yr"r4r4rrr�z@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>	r�rr�z.RLIMIT_NPROC had no effect; probably superuser)�resourcer�r�r�r7r�r�rrVrWrX�BlockingIOError)r%r�r�r�r��limitsr��hards        r�test_preexec_fork_failurez.POSIXProcessTestCase.test_preexec_fork_failure		s���
	�C�C��<�(���	��D��,��D�	�*����	�<��8�	L��O�O�S�^�^�T�2�6�'3�
5�
�M�M�J�K���	��M�M�#����	���	��	�s(�
A3�)B�3	B�<B�B�	B&�%B&c���tj�\}}t|dd��5}|jdtj
z�|jdtjz�ddd�tj|d�tj|�}|j�tj|�|j|jd�y#1swY�vxYw�N�wr�)r�z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i�rT)r�r[r�r�r�
unix_shellrWrXr�chmodrrDr*r\rYr)r%rG�fname�fobjrKs     r�test_args_stringz%POSIXProcessTestCase.test_args_string	s����$�$�&�	��E�
�"�c�"3�
4���J�J�x�'�"4�"4�4�5��J�J�B��~�~�&�
'�5�	���������U�#��	����
�	�	�%��������r�*�5�
4�s�AC � C)c���|jttjtj
ddgd��|jttjtj
ddgd��y)NrrSrT��startupinfo��
creationflags�rbryrrVrWrXr$s rr�z&POSIXProcessTestCase.test_invalid_args-	sb�����*�j�o�o��>�>�4�5�7�&(�	�	*�	
���*�j�o�o��>�>�4�5�7�(*�	�	,rc�:�tjj�}d|d<tjdgdtj
|��}|5|j
|jj�jd�d�ddd�y#1swYyxYw�Nr�r�zecho $FRUITr��r�rBr�s 	
r��
rr�r�rrDrErYrBr	r��r%r�rKs   r�test_shell_sequencez(POSIXProcessTestCase.test_shell_sequence8	so�������"��!��w�����m�_�A�$.�O�O�!'�
)������Q�X�X�]�]�_�2�2�<�@�(�K��Q�Q�s�:B�Bc�8�tjj�}d|d<tjddtj
|��}|5|j
|jj�jd�d�ddd�y#1swYyxYwr�r�r�s   r�test_shell_stringz&POSIXProcessTestCase.test_shell_stringB	sm�������"��!��w�����]�!�$.�O�O�!'�
)������Q�X�X�]�]�_�2�2�<�@�(�K��Q�Q�s�
:B�Bc��tj�\}}t|dd��5}|jdtj
z�|jdtjz�ddd�tj|d�tj|�}tj|�|j|d�y#1swY�\xYwr�)r�r[r�r�rr�rWrXrr�rrVr\rY)r%rGr�r�r[s     r�test_call_stringz%POSIXProcessTestCase.test_call_stringL	s����$�$�&�	��E�
�"�c�"3�
4���J�J�x�'�"4�"4�4�5��J�J�B��~�~�&�
'�5�	������
�_�_�U�
#��
�	�	�%������R� �5�
4�s�AC�Cc	��g}dD]Z}dD]S}tjj||�}tjj|�s�C|j	|��U�\|s|jd�d}tjj|�r0tjj
|�s|j	|�|D]v}tjd|dtj��}|5|j|jj�j�t|d��ddd��xy#1swY��xYw)	N)z/binz	/usr/bin/z/usr/local/bin)�bash�kshz"bash or ksh required for this testz/bin/shzecho $0T)rXr�rBr�)rr�r��isfiler�r��islinkrrDrErYrBr	r�r�)r%�shellsr�r��shrKs      r�test_specific_shellz(POSIXProcessTestCase.test_specific_shellY	s�����=�F�'���W�W�\�\�&�$�/���7�7�>�>�"�%��M�M�"�%�(�>�
��M�M�>�?�
��
�7�7�>�>�"��b�g�g�n�n�R�&8��M�M�"���B�� � ��r��(2���9�A��� � �������!6�!6�!8�%��G�:L�M������s
�4AE�E	c��tjtjtj�}	tjt
jddgdtjtjtj��}tjtj|�|jjd�t||�|�|S#tjtj|�wxYw)Nrz�if 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 T�rYrArBrCr�)r�SIGINT�default_int_handlerrrDrWrXrErBr	�getattr)r%�methodr:r�rKs     r�
_kill_processz"POSIXProcessTestCase._kill_processm	s���
�m�m�F�M�M�6�3M�3M�N��	6�� � �#�.�.�$�9%�"&�,0�'1���(2���(2���	9�A�
�M�M�&�-�-��5�	
���
�
�a�����6��D�!����
�M�M�&�-�-��5�s�AC�&C?)�netbsd�openbsdz"Due to known OS bug (issue #16762)c�L�tjtjddgdtjtjtj��}|j
j
d�tjd�t||�|�|j�y)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Tr�r�)rrDrWrXrErBr	r=r>r�r�)r%rr:rKs    r�_kill_dead_processz'POSIXProcessTestCase._kill_dead_process�	sw��

���c�n�n�d�5!�"�
(,�#-�?�?�$.�O�O�$.�O�O�
5��	
���
�
�a���
�
�1�
����6��D�!�	�
�
�rc���|jdtj�}|j�\}}|j	d|�|j|j
�d�y)N�send_signalsKeyboardInterruptr)rrr�r�rwr;r*�r%rKr�rCs    r�test_send_signalz%POSIXProcessTestCase.test_send_signal�	sL�����}�f�m�m�<���M�M�O�	��6��
�
�*�F�3����A�F�F�H�a�(rc���|jd�}|j�\}}|j|d�|j|j�tj
�y)Nror)rr�rYr*r�SIGKILLrs    r�	test_killzPOSIXProcessTestCase.test_kill�	sM�����v�&���M�M�O�	��6������%��������F�N�N�?�3rc���|jd�}|j�\}}|j|d�|j|j�tj
�y)N�	terminater)rr�rYr*r�SIGTERMrs    r�test_terminatez#POSIXProcessTestCase.test_terminate�	sM�����{�+���M�M�O�	��6������%��������F�N�N�?�3rc�D�|jdtj�y�Nr)rrr�r$s r�test_send_signal_deadz*POSIXProcessTestCase.test_send_signal_dead�	s�����
�v�}�}�=rc�&�|jd�y�Nro�rr$s r�test_kill_deadz#POSIXProcessTestCase.test_kill_dead�	s������'rc�&�|jd�y�Nrrr$s r�test_terminate_deadz(POSIXProcessTestCase.test_terminate_dead�	s������,rc��g}|D]@}tj|�}tj|�}|j|||f��B|Sr")r�get_inheritable�dupr�)r%�save_fdsr?rG�inheritable�saveds      r�	_save_fdszPOSIXProcessTestCase._save_fds�	sH�����B��,�,�R�0�K��F�F�2�J�E��J�J��E�;�/�0���
rc�t�|D]3\}}}tj|||��tj|��5y)N)r)r�dup2rI)r%r?rGr rs     r�_restore_fdsz!POSIXProcessTestCase._restore_fds�	s.��&)�"�B��{��G�G�E�2�;�7��H�H�U�O�'*rc���d}|j|�}|D]\}}}|dk(s�
|}n	|D]}tj|��tjt
jddg|tjtj��j�\}}|j|d�|j|d�|j|�y#|j|�wxYw)NrrrVr@r�r>)r!rrIrrDrWrXrEr�rYr$)	r%r?rA�	saved_fdsrGr rr�r�s	         r�check_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds�	s������N�N�3�'�	�&/�"�B��{��Q�w����'0�	)���������!�'�'�����;�)<�
#�(�o�o�(�o�o�/�0;�{�}�
�C��
���S�(�+����S�)�,����i�(��D���i�(�s�BC�C%c�(�|jdg�yrf�r'r$s r�test_close_fd_0z$POSIXProcessTestCase.test_close_fd_0�	���� � �!��%rc�(�|jdg�y�Nr�r)r$s r�test_close_fd_1z$POSIXProcessTestCase.test_close_fd_1�	r+rc�(�|jdg�y)Nrfr)r$s r�test_close_fd_2z$POSIXProcessTestCase.test_close_fd_2�	r+rc�*�|jddg�y)Nrr�r)r$s r�test_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1�	���� � �!�Q��(rc�*�|jddg�y)Nrrfr)r$s r�test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2�	r3rc�*�|jddg�y)Nr�rfr)r$s r�test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2�	r3rc�*�|jgd��y)N)rr�rfr)r$s r�test_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2�	s��	
� � ��+rc�z�	tjd�}tjd�}	tjd�tjd�tjt
jddg�j�tj|d�tj|d�tj|�tj|�y#tj|d�tj|d�tj|�tj|�wxYw)Nrr�rz*print('AssertionError:0:CLOEXEC failure.'))	rrrIrrDrWrXr*r#)r%�	new_stdin�
new_stdouts   r�test_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd�	s���K��F�F�1�I�	��V�V�A�Y�
�	!��H�H�Q�K��H�H�Q�K�

����N�N�D�@�B�
C�CG�4�6�
�G�G�I�q�!��G�G�J��"��H�H�Y���H�H�Z� ��
�G�G�I�q�!��G�G�J��"��H�H�Y���H�H�Z� �s
�AC"�"AD:c��td�D�cgc]}tj���}}	|D��cgc]\}}|��	}}}|D]\}}tj|��tj
|dd�tj|ddd�|jtd��}	t|�D]\}}tj||��tjtjddg|d|d|d��}|j�|j|�|D]}tj|dd��tj |dd	�}	tj |dd	�j#�}
|j%|	d
�|j%|
d�|D]}tj&|��ycc}wcc}}w#|j|�wxYw#D]}tj&|��wxYw)Nr�r��STDINrr�Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")rfr@rC�	got STDIN�err)r�r�r[r�unlinkr�r5r!�	enumerater#rrDrWrXr*r$r	r�rYrI)r%r�tempsrGr��temp_fdsr&�temp_fdrKr�r�s           r�test_remapping_std_fdsz+POSIXProcessTestCase.test_remapping_std_fds
s���-2�1�X�6�X���!�!�#�X��6�(	�,1�2�E�y�r�5��E�H�2�#�	��E��	�	�%� �#�
�H�H�X�a�[�(�+��H�H�X�a�[�!�Q�'����u�Q�x�0�I�
-�#,�X�#6�K�B���G�G�G�R�(�$7�
�$�$�c�n�n�d�N�&O�#�1�+�#�A�;�#�A�;�(�������!�!�)�,�������Q��"���'�'�(�1�+�t�,�C��'�'�(�1�+�t�,�2�2�4�C����S�,�/����S�&�)����������Q7��2��6�!�!�)�,����������s;�G	�G*�G�A/G*�-A,G�BG*�G*�G'�'G*�*Hc���td�D�cgc]}tj���}}|D��cgc]\}}|��	}}}	|D]\}}tj|��|jtd��}		t
|�D]\}}
tj|
|��tj|d�tj|dd�tjtjddg|||��}|j�|D]}tj|dd��tj|d�}tj|d�j!�}
|j#|	�|j%|d�|j%|
d	�|D]}tj&|��ycc}wcc}}w#|j#|	�wxYw#|D]}tj&|��wxYw)
Nr�r?rrr@r@rCrArB)r�r�r[rrCr!rDr#r�r5rrDrWrXr*r	r�r$rYrI)r%�stdin_no�	stdout_no�	stderr_norrErGr�rFr&rGrKr�r�s              r�check_swap_fdsz#POSIXProcessTestCase.check_swap_fds:
s���-2�1�X�6�X���!�!�#�X��6�(-�.��9�2�u�B���.�'	�"�	��E��	�	�%� �#����u�Q�x�0�I�
-�#,�X�#6�K�B���G�G�G�R�(�$7�����8�,�����1�a�(��$�$�c�n�n�d�N�&O�#�$�$�&������"�B��H�H�R��A�&�#��g�g�i��.���g�g�i��.�4�4�6���!�!�)�,����S�,�/����S�&�)����������Q7��.��B�!�!�)�,����������s/�F4�F9�9G�:C(F?�"5G�?G�G�G3c���|jddd�|jddd�|jddd�|jddd�|jddd�|jddd�y)Nrr�rf)rMr$s r�
test_swap_fdsz"POSIXProcessTestCase.test_swap_fdsj
sn�����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$rc�j�|jtd��}	|D]C}tj�5}t	j
|j
�|�ddd��Ettd��t|�z
j�}t	j|�gd�}i}t||�D]
\}}	||||	<�tjd�}
ttd��t|�z
j�}tjtj d|
t#|�gfi|��}|j%|d�t||�D]�\}}	t	j&|dtj(�t	j*|d�}
t-t/t0|
j3d���}tjd|�d	|�d
|�d|�d|	�d
��}|j%|	g||���	|j5|�y#1swY���xYw#|j5|�wxYw)Nr�r@z�
                import os, sys
                skipped_fd = int(sys.argv[1])
                for fd in range(3):
                    if fd != skipped_fd:
                        os.write(fd, str(fd).encode('ascii'))
            rrrCr�z"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )r!r�r�r�rr#r4r�rrI�zipr�r�rrVrWrXrrYr5�SEEK_SETr	r��maprDr
r$)r%�from_fds�to_fdsr&�from_fd�f�fd_to_close�	arg_namesr;�to_fdr��
skipped_fdr[�
read_bytes�read_fdsrRs                r�#_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closedr
s����N�N�5��8�,�	�&	)�#���+�+�-���G�G�A�H�H�J��0�.�-�$��u�Q�x�=�3�x�=�8�=�=�?�K��H�H�[�!�5�I��F�"%�h��"7����+2��y��'�(�#8��?�?�$��D��e�A�h�-�#�f�+�5�:�:�<�J����#�.�.�$��c�*�o�!N�+�#)�+�B����R��#�"%�h��"7��������!�R�[�[�1��W�W�W�d�3�
���C��):�):�7�)C� D�E���o�o�+"�"*��4��x�8'�'.�i�0&�&.�Z�/F�u�g�N�'���
� � �%��(�C�8�#8�
���i�(�I.�-��H
���i�(�s#�H�%H�F%H�H	�H�H2c��tjtd�d�D]8}tjtd�d�D]}|j	||���:y)Nr�rf)�	itertools�combinationsr��permutationsr^)r%rTrUs   r�!test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closed�
sH��!�.�.�u�Q�x��;�H�#�0�0��q��1�=���8�8��6�J�>�<rc��d�}	tjt|��|jd�y#t$rD}|jtj�|jt|�d�Yd}~yd}~wtj$rD}|jtj�|jt|�d�Yd}~yd}~wwxYw)Nc��td��)N�
surrogate:�r�r4rr�preparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepare�
s���/�0�0rr�z1Expected ValueError or subprocess.SubprocessErrorrfz!Exception occurred in preexec_fn.)rrVrr�ryrr�rYrr5�assertIsNotNone)r%rgr�s   r�test_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_message�
s���	1�
	K��O�O��"�
$�
�I�I�I�J���	;����j�3�3�4����S��X�'9�:�:���)�)�	L�� � ��!6�!6�7����S��X�'J�K�K��	L�s �2�	C�:A:�:C�:C�Cc���dD�]Y\}}|jdd�}dt|�z}tjj	�}|||<d|d<|}tjtjd|g|��}|jd	�}|j|jd�t|��|jdd�}d
t|�z}tjj	�}|||<tjtjd|g|��}|jd	�}|j|jd�t|����\y)N))�testuabc�)utest��42r�r�z&import os; print(ascii(os.getenv(%s)))�C�LC_ALLrr�s

z'import os; print(ascii(os.getenvb(%s))))
r�rqrr�r�rrvrWrXr�rYr
r�)r%�key�value�
encoded_value�scriptr��
decoded_valuerBs        r�test_undecodable_envz)POSIXProcessTestCase.test_undecodable_env�
s3��G�J�C��!�L�L��2C�D�M�>��S�	�I�F��*�*�/�/�#�C��C��H� �C��M�!�M��,�,�����v�.���F��]�]�7�+�F����V�]�]�7�3�U�=�5I�J��*�*�W�&7�8�C�>��c��J�F��*�*�/�/�#�C�$�C��H��,�,�����v�.���F��]�]�7�+�F����V�]�]�7�3�U�=�5I�J�5Hrc�4�tjtd�}ttdd�}tjjtd�\}}tj|�}t
j|g|z�}|j|d�d|dj|�jd�fz}t
j|d��}|j|d�tjj�}||d<t
j|g|z|�	�}|j|d�tjj�}tj|�|d
<t
j|g|z|�	�}|j|d�y)Nrr�s'%s' %s� r�Trn�PATHr�sPATH)rr�rr�r�rrrVrYr�r�r�r��environb)	r%�abs_programr:r��program�exitcoder�r��envbs	         r�test_bytes_programz'POSIXProcessTestCase.test_bytes_program�
sG���k�k�/�!�"4�5���O�A�B�'�(�����
�
�o�a�&8�9�
��g��+�+�g�&���?�?�K�=��#5�6������1�%��K����$��)>�)>�w�)G�H�H���?�?�3�d�3������1�%��j�j�o�o�����F���?�?�G�9�T�>�s�;������1�%��{�{���!�����D�)��W�
��?�?�G�9�T�>�t�<������1�%rc�
�tjdd��}tjdd��}tjtj
|gtjtjtjd��}|j|jd�tjtj
|gtjd��}|j�\}}ttt|jd	���}t|jj�|jj�|j j�g�}|j#||zd
|�d||z���y)Nzinput_reader.py�subprocessdata��subdir�fd_status.pyF)rArBrCrYr�rBrY�,zExpected no fds from z to be open in child, found )r�findfilerrDrWrXrEr�r�r�rSrDrrAr4rBrCr,)	r%�sleeper�	fd_status�p1�p2r{�error�
result_fds�unwanted_fdss	         r�test_pipe_cloexecz&POSIXProcessTestCase.test_pipe_cloexec�
s%���"�"�#4�=M�N���$�$�^�<L�M�	�
�
�
�s�~�~�w�7�$.�O�O�J�O�O�%/�_�_��G��	
�������,�
�
�
�s�~�~�y�9�%/�_�_��G�����(�
�����S�&�,�,�t�"4�5�6�
��B�H�H�O�O�-�r�y�y�/?�/?�/A��I�I�,�,�.�0�1��	
����l�2� ,�Z�,�-F�H�	Irc���
��tjdd��}tjdd��}d}|dzdz}tjtj
|gtjtjd�	��
tjtj
||g�
jtjd�	��|j�
j�|j�j��
fd
�}�fd�}|j|�|j|��
jj|��
jj�tj�jgggd�\}}}	|j|d
�|j�jj!�|��
jj��jj�y)Nzqcat.pyrr�zqgrep.pyszxcvbn��
F)rArBrYc�F��	�j�y#t$rYywxYwr"�r�ProcessLookupError)r�s�r�kill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1�#���
������%�
��
����	 � c�F��	�j�y#t$rYywxYwr"r�)r�s�r�kill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2r�r�r�zThe child hung)rr�rrDrWrXrErBr�r*rAr�rI�selectr�rYr	)r%�qcat�qgrep�subdatarr�r��	readfiles�ignored1�ignored2r�r�s          @@r�test_pipe_cloexec_real_toolsz1POSIXProcessTestCase.test_pipe_cloexec_real_toolssa������	�2B�C��� � ��4D�E������{�U�"��
�
�
�s�~�~�t�4�$.�O�O�J�O�O�(-�/���
�
�s�~�~�u�g�>�$&�I�I�j�o�o�(-�/��	
������ ������� �	�
	�
	
���� ����� �
�����t��
������(.�
�
�r�y�y�k�2�r�2�(N�%�	�8�X����	�#3�4���������)�4�0�
�	�	����
�	�	���rc���
�tjdd��}tj�}|j	tj
|d�|j	tj
|d�t
|��
td�D]e}tjtjtj�}|j	tj
|��
j|��g�
D]}tj|d��tjtj |gtj"d�	�}|j%�\}}t
t't(|j+d
���}|j-|�
z�
d�tjtj |gtj"d�	�}|j%�\}}t
t't(|j+d
���}|j/|�
zd�|j1d|d
�t
�
fd�td�D��}	tjtj |gtj"d|	��}|j%�\}}t
t't(|j+d
���}|j/||	z
�
zd�|j1d|d
�y)Nr�rr�rr��	TFr�r�zSome fds were closedzSome fds were left openzSubprocess failedc3�>�K�|]}�j����y�wr")r)�.0r�r@s  �r�	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>Rs�����;�(�Q�(�,�,�.�(�s�r��rBrY�pass_fdsz'Some fds not in pass_fds were left open)rr�rrjr�rIr�r�r��devnullr��add�set_inheritablerrDrWrXrEr�rSrDrrYr,rw)r%r�r?r�rGrKr{�ignored�
remaining_fds�fds_to_keepr@s          @r�test_close_fdsz#POSIXProcessTestCase.test_close_fds.s0����$�$�^�<L�M�	��g�g�i��������#�a�&�)�������#�a�&�)��s�8���q��A�������R�[�[�1�B��O�O�B�H�H�b�)��L�L����
�B����r�4�(��
���c�n�n�i�8�$.�O�O�u�
F���-�-�/�����C��V�\�\�$�%7�8�9�
������1�8�/�	1�
���c�n�n�i�8�$.�O�O�t�
E���-�-�/�����C��V�\�\�$�%7�8�9�
������1�2�	4��
�
�a��(;�<��;�%��(�;�;�����c�n�n�i�8�$.�O�O�t�&1�
3���-�-�/�����C��V�\�\�$�%7�8�9�
����-�+�5��A�B�	D��
�
�a��(;�<r�freebsdz/devz/dev/fdz.Requires fdescfs mounted on /dev/fd on FreeBSDc�b�	tjdd��}tjtj
dt
jd|z�gtj��}|j�\}}|j�}|jt|�dd|z�	�ttt|d
j!�j#d���}ttt|dj!�j#d���}|j%||zd
�	�y)Nr�rr�raK
        import os, resource, subprocess, sys, textwrap
        open_fds = set()
        # Add a bunch more fds to pass down.
        for _ in range(40):
            fd = os.open(os.devnull, os.O_RDONLY)
            open_fds.add(fd)

        # Leave a two pairs of low ones available for use by the
        # internal child error pipe and the stdout pipe.
        # We also leave 10 more open as some Python buildbots run into
        # "too many open files" errors during the test if we do not.
        for fd in sorted(open_fds)[:14]:
            os.close(fd)
            open_fds.remove(fd)

        for fd in open_fds:
            #self.addCleanup(os.close, fd)
            os.set_inheritable(fd, True)

        max_fd_open = max(open_fds)

        # Communicate the open_fds to the parent unittest.TestCase process.
        print(','.join(map(str, sorted(open_fds))))
        sys.stdout.flush()

        rlim_cur, rlim_max = resource.getrlimit(resource.RLIMIT_NOFILE)
        try:
            # 29 is lower than the highest fds we are leaving open.
            resource.setrlimit(resource.RLIMIT_NOFILE, (29, rlim_max))
            # Launch a new Python interpreter with our low fd rlim_cur that
            # inherits open fds above that limit.  It then uses subprocess
            # with close_fds=True to get a report of open fds in the child.
            # An explicit list of fds to check is passed to fd_status.py as
            # letting fd_status rely on its default logic would miss the
            # fds above rlim_cur as it normally only checks up to that limit.
            subprocess.Popen(
                [sys.executable, '-c',
                 textwrap.dedent("""
                     import subprocess, sys
                     subprocess.Popen([sys.executable, %r] +
                                      [str(x) for x in range({max_fd})],
                                      close_fds=True).wait()
                     """.format(max_fd=max_fd_open+1))],
                close_fds=False).wait()
        finally:
            resource.setrlimit(resource.RLIMIT_NOFILE, (rlim_cur, rlim_max))
        rsrfz(expected exactly two lines of output:
%rrQrr�r�zSome fds were left open.)rr�rrDrWrXr�r�rEr�r�rYr�r�rSrDr�rr,)r%r�rKr{�
unused_stderr�output_lines�
opened_fdsr�s        r�%test_close_fds_when_max_fd_is_loweredz:POSIXProcessTestCase.test_close_fds_when_max_fd_is_lowered^s��	J��$�$�^�<L�M�	�
���c�n�n�d�H�O�O�/	�^�_/	�05�0�`#-�/�/�a0
3��d!"�
�
����
��(�(�*������\�*�A�H�6�Q�	�	S���S�,�q�/�"7�"7�"9�"?�"?��"E�F�G�
��C��\�!�_�%:�%:�%<�%B�%B�4�%H�I�J�
������3�7�	�	9rr�r~c	���tjdd��}t�}td�D]�}t	j
�}|j
tj|d�|j
tj|d�t	j|dd�t	j|dd�|j|���|D�]}tjtj|gtjd|f��}|j�\}}tt!t"|j%d	���}	||hz
}
|j'||	d
�|j)|	|
zd�|j+t,�5}|j)tj.t0d|f�
��ddd�|j'dt3j4����y#1swY�2xYw)Nr�rr�r~rr�Tr�r�zfd to be passed not passedzfd to be closed passedF)rYr�zoverriding close_fds)rr�r�r�rrjr�rIr��updaterrDrWrXrEr�rSrDrrwr,�assertWarnsr.rVrr�warning)r%r�r@r�r?rGrKr{r�r��to_be_closed�contexts            r�
test_pass_fdsz"POSIXProcessTestCase.test_pass_fds�s����$�$�^�<L�M�	��5���q��A��'�'�)�C��O�O�B�H�H�c�!�f�-��O�O�B�H�H�c�!�f�-����s�1�v�t�,����s�1�v�t�,��O�O�C� �
��B�� � �#�.�.�)�!<�(2���4�+-�&�2�A� �m�m�o�O�F�G���C����d�);� <�=�M�#�r�d�?�L��M�M�"�m�-I�J����]�\�9�5�
7��!�!�.�1�W�� � ����'�"'�2�&�":�;�2�
�M�M�0�#�g�o�o�2F�G�%�2�1�s�-G)�)G2	c�2�tjdd��}tj�\}}|j	tj
|�|j	tj
|�tj|d�tj|d�||f}tj|g}|ttt|��z
}tj|tjd|��}|j�\}}t!tt"|j%d���}	|j'|	t!|�d|z�|j'tj(|�d�|j'tj(|�d�y)	Nr�rr�TFr�r�z	output=%a)rr�rrjr�rIr�rWrXr�rSrrrDrEr�r�rDrrYr)
r%rrr�non_inheritabler�r:rKr{r�r?s
          r�test_pass_fds_inheritablez.POSIXProcessTestCase.test_pass_fds_inheritable�s5���!�!�.�9I�J��')�w�w�y�$��_�������+�.�������/�2�
���;��-�
���?�E�2���1������'����S��h�'�(�(�����T�$.�O�O�t�&.�
0���-�-�/�����#�c�6�<�<��-�.�/��	
����c�(�m�[�6�-A�B�	
����+�+�K�8�$�?�����+�+�O�<�e�Drc�N�	tjdd��}g}td�D]e}tjtj
tj�}|jtj|�|j|��gtj�\}}|jtj|�|jtj|�|jd|�tjtj|g|d|d|dd|��5tj |d	�}ddd�j#d
�D�chc]
}t%|���}	}|j'|	hd�t)|�zd|���y#1swY�UxYwcc}w)
Nr�rr�rfr�rT)rArBrCrYr�rCr�>rr�rfzoutput=)rr�r�rr�r��O_RDWRr�rIr�rj�insertrrDrWrXr	rrDrY�	frozenset)
r%r�r�r�rG�stdout_r�stdout_wr{�numr?s
          r�test_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirected�sG��E��$�$�^�<L�M�	����q��A�������R�Y�Y�/�B��O�O�B�H�H�b�)��O�O�B���
 �W�W�Y���(�������(�+�������(�+�����8�$�
�
�
�s�~�~�y�9�$,�Q�K�%-�a�[�%-�a�[�(,�'/�1��W�W�X�t�,�F�
1�$*�<�<��#5�6�#5�C�s�3�x�#5��6�����i�)�H�*=�=���
�?S�T�1�1��7s�+F�F"�Fc���tjtjd�5}t	j
t||��}|j�ddd�y#1swYyxYw)N�r+)rBrA�rGr�rr�rrDrr*�r%�inoutrKs   r�%test_stdout_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fd�B��
�W�W�R�Z�Z��
&�%�� � ��(-�U�<�A�
�F�F�H�'�
&�
&���-A�A$c���tjtjd�5}t	j
t||��}|j�ddd�y#1swYyxYw)Nr�r�r�r�s   r�&test_stdout_stderr_are_single_inout_fdz;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fdsB��
�W�W�R�Z�Z��
&�%�� � ��(-�e�=�A�
�F�F�H�'�
&�
&�r�c���tjtjd�5}t	j
t||��}|j�ddd�y#1swYyxYw)Nr�)rCrAr�r�s   r�%test_stderr_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fdr�r�c�>�tjdd��}tjtj
|gtjtj��}|j�\}}|jd|jd|jd�z�y)Nzsigchild_ignore.pyrr�r�rz6sigchild_ignore.py exited non-zero with this error:
%sr�)rr�rrDrWrXrEr�rYrr
)r%�sigchild_ignorerKrBrCs     r�test_wait_when_sigchild_ignoredz4POSIXProcessTestCase.test_wait_when_sigchild_ignoreds}��!�*�*�+?�2B�D�����c�n�n�o�>�$.�O�O�J�O�O�
M�������������A�L�L�+:����w�/�+0�	1rc	���tjd�}tjtj
ddgtjd��}|j}|j|j�	|j|jd�d�|j||j|gggd�d�|j�y#|j�wxYw)	Nr�rz$import sys;sys.stdout.write("apple")r)rBrNr�sapplg)r�
import_modulerrDrWrXrErBr�rIrYr	rwr�r*)r%r�rKrWs    r�test_select_unbufferedz+POSIXProcessTestCase.test_select_unbuffered(s����,�,�X�6�����c�n�n�d�:�;�%/�O�O�%&�	
(��

�H�H�������� �	����Q�V�V�A�Y��0��M�M�!�]�V�]�]�A�3��B��<�Q�?�@�
�F�F�H��A�F�F�H�s
�5A
C�C"c	�x�tjtjddgtjtj��}|j|jj�|j|jj�t|�}|j}tjdtf�5d}ddd�tr |jtj �y|j#|tj D�cgc]
}t|���c}�y#1swY�gxYwcc}w)Nrz import sys, time;time.sleep(0.2)r�r)rrDrWrXrEr�rBrIrC�id�pidr�check_warnings�ResourceWarningr(rr)rw)r%rK�identr��os     r�test_zombie_fast_process_delz1POSIXProcessTestCase.test_zombie_fast_process_del9s���

���c�n�n�d�0�1�%/�O�O�$.�O�O�	
5��
	
��������'���������'��1����e�e��
�
+�
+�R��,A�
B��A�C�����j�0�0�1�
�M�M�%��1C�1C�!D�1C�A�"�Q�%�1C�!D�E�C�
B��"Es�D+�D7
�+D4c	��tjtjddgtjtj��}|j|jj�|j|jj�t|�}|j}tjdtf�5d}tj�ddd�t!j"|t$j&�t(r |j+tj,�n7|j/|tj,D�cgc]
}t|���c}�t1j2d�|j5t6�5tjt8tjtj��5}	ddd�ddd�|j5t6t j:|d�t(r |j+tj,�y|j=|tj,D�cgc]
}t|���c}�y#1swY���xYwcc}w#1swY��xYw#1swY��xYwcc}w)Nrzimport time;time.sleep(3)r�rrPr)rrDrWrXrEr�rBrIrCr�r�rr�r�r�
gc_collectrrorrr(rr)rwr=r>rbr�r��waitpidr�)r%rKr�r�r�rxs      r�!test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killedQs���
���c�n�n�d�.�/�%/�O�O�$.�O�O�	
5��
	
��������'���������'��1����e�e��
�
+�
+�R��,A�
B��A���� �C�	����V�^�^�$�����j�0�0�1�
�M�M�%��1C�1C�!D�1C�A�"�Q�%�1C�!D�E�	
�
�
�3��
�
�
�w�
'��!�!�/�)3���)3���:�=A��:�(�	
���'�2�:�:�s�A�6�����j�0�0�1����U�J�4F�4F�$G�4F�q�R��U�4F�$G�H�5C�
B��"E�:�:��(�
'��%Hs<�I�	I(
�9I9�I-�I9�J
�I%�-I6	�2I9�9Jc���tjdd��}tjd��|j	tj
��t
jtj|gtjd�fd���}|j�\}}ttt|jd���}|j!�|�y)	Nr�rr�r�Tc�0��tjd��Sr-)rr#)rGs�rr�zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>�s�������2�r)rBrYr�r�)rr�rrr�rIrrDrWrXrEr�r�rSrDrr�)r%r�rKr{r�r�rGs      @r�test_close_fds_after_preexecz1POSIXProcessTestCase.test_close_fds_after_preexec|s�����$�$�^�<L�M�	��V�V�A�Y��������"�%����c�n�n�i�8�$.�O�O�t�(>�
@���-�-�/�����C��V�\�\�$�%7�8�9�
�����]�+rc�
�ddl}tj�}	d�}tj�ddgddgfdgdddgfdgdgddgfdgdgddffD]q\}}}}|j	t
�5}|j
||dd||d	d	d	d	d
ddd
ddddgdd	|d�ddd�|jdtj���s	|stj�yy#1swY�IxYw#|stj�wwxYw)Nrc��yr"r4r4rrr�z5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>�s��4rrksexe�envsargTr4rwr�rfr�r�Fz
takes exactly)�_posixsubprocessr�r�r�rbr�r/r�rrkr�)	r%r��
gc_enabled�funcr:�exe_listr�env_listr�s	         r�test_fork_execz#POSIXProcessTestCase.test_fork_exec�s%��	 ��\�\�^�
� 	� �D��I�I�K��F�8�T�F�8�4���3�T�F�8�4���F�8�S�F�8�4���F�8�T�3�/�	2�-��h��X��&�&�y�1�S�$�.�.��h��b�#�x��B��B��1�a���d�A��r�1�b��e�%�2� � � ��#�c�m�m�2D�E�-2�0��
�
���%2�1��$��
�
���s$�AC)�-(C�/C)�C&	�"C)�)Dc�$�ddl}Gd�d�}tj�}	tj�ddddd|d	�|d
�ffD]�}|j	t
dj
|���5}|jd
gd
gd|ddgddddd	d
ddddddddddd�ddd�|jdtj����	|stj�yy#1swY�IxYw#|stj�wwxYw)Nrc��eZdZdZd�Zd�Zy)�JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntTc��||_yr")rp)r%rps  rr�zSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__�s	��"��
rc�L�|jrd|_|jSt�)NF)�firstrpryr$s r�__int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__�s ���:�:�!&�D�J��:�:�%� � rN)r1r2r3r�r�r�r4rr�BadIntr��s���E�
#�
!rr�)rwrfr�r�r~)rr�)���*l)r~r�)r�rmrmr�r�rfzfds_to_keep={}rQsfalseTr�rwr�r�r�)r�r�r�r�rbryr�r/rwrrkr�)r%r�r�r�r�rms      r�%test_fork_exec_sorted_fd_sanity_checkz:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check�s��	 �	!�	!��\�\�^�
�	��I�I�K�!��#������F�1�I�&�
 ���&�&�"�,�3�3�K�@�'�B�EF�$�.�.�!�
�X�J��k�4�&���B��B��1�a���d�A��d�D�"��d�$�B��
�
�m�S����-=�>�' �*��
�
���B�B����
�
���s$�AC6�7+C*�"/C6�*C3	�/C6�6Dc�L�tjt�}|5tjj|d�5}t|j_|j�|jj�ddd�ddd�y#1swY�xYw#1swYyxYw)NrA)rrDrrrorp�BrokenPipeErrorrIr�r��assert_called_with�r%rx�mock_proc_stdins   r�,test_communicate_BrokenPipeError_stdin_closezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close�sm������0��
�4�:�:�$�$�T�7�3��0?�O�!�!�-������!�!�4�4�6�4�T�T�3�3��T�T�s#�!B�AB�=B�B	�B�B#c��tjt�}|5tjj|d�5}t|j_|jd�|jjd�|jj�ddd�ddd�y#1swY�xYw#1swYyxYw)NrA�stuff)rrDrrrorpr�r�r�r�r�rIrs   r�,test_communicate_BrokenPipeError_stdin_writezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write�s�������0��
�4�:�:�$�$�T�7�3��0?�O�!�!�-����X�&��!�!�9�9�(�C��!�!�9�9�;�	4�T�T�3�3��T�T�s#�!B6�AB*�B6�*B3	�/B6�6B?c�@�tjtjdgtjtj��}|5t
jj|d�5}ttjd�5}t|j_
|j�|j_|j!d�|jj#�ddd�ddd�ddd�y#1swY�xYw#1swY�xYw#1swYyxYw)N�-hr�rA�wbr)rrDrWrXrErrorpr�rr�r�r�r�r4r�r�r�)r%rxr�dev_nulls    r�,test_communicate_BrokenPipeError_stdin_flushzAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush�s���������� 6�&0�o�o�'1���8���4�:�:�$�$�T�7�3���R�Z�Z��&�(�0?�O�!�!�-�2:�/�/�2C�O�"�"�/����X�&��!�!�9�9�;�
'�4�T�T�&�&��4�3��T�T�s=�!D�(D�A C<�#D�+D�<D�D�D	�
D�Dc��tjtjdgtjtj��}|5t
jj|d�5}t|j_
|jd��|jj�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�rAi�r`)
rrDrWrXrErrorpr�rIr�r�r�rs   r�9test_communicate_BrokenPipeError_stdin_close_with_timeoutzNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout
s���������� 6�&0�o�o�'1���8���4�:�:�$�$�T�7�3��0?�O�!�!�-����S��)��!�!�9�9�;�	4�T�T�3�3��T�T�s%�!C�(AB;�*C�;C	�C�CN�
W_STOPCODEzneed _testcapi.W_STOPCODEc�\�	t}tj|�}tj|j
d��t
jd�}tjd|j
|f��5|j�}ddd�|jd�y#1swY�xYw)Nr�r{r�r*r����)rrrDr�wait_processr��	_testcapir
rror*rY)r%r:rx�statusrs     r�test_stoppedz!POSIXProcessTestCase.test_stopped

s���	P�������%��	���T�X�X��2��%�%�a�(��
�Z�Z�/�t�x�x��>P�
Q�����J�R�	
����R�(�R�
Q�s�6B"�"B+c��tjt�}tj|j
d��|j
|j�tjd�5}|jtj�ddd�j�|j|j�y#1swY�5xYw)Nrrzos.kill)rrDrrrr�rrrrorrr�assert_not_calledrh)r%rx�	mock_kills   r�test_send_signal_racez*POSIXProcessTestCase.test_send_signal_race
s�������0��	���T�X�X��2�	
���$�/�/�*�
�Z�Z�	�
"�i����V�^�^�,�#�
	�#�#�%�	
���T�_�_�-�#�
"�s�+ B?�?Cc�~�tjtjddg�}|js|j�|js�tjj|dd���5d|_|jtj�ddd�|j�y#1swY�xYw)Nrzexit(1)rc��yr"r4r4rrr�z=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>=
s��dr)�new)
rrDrWrXrrrrorprrrrorJs  r�test_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race24
s���
���c�n�n�d�I�>�?���,�,�
�F�F�H��,�,��Z�Z�
�
�q�&�l�
�
;��A�L�
�M�M�&�.�.�)�<�	
����<�
;�s�3'B3�3B<c���tjtjddgtj��}		|jd��y#tj$rYnwxYw�.)Nrz+import os, time; os.close(1), time.sleep(2)rsr_r`)rrDrWrXrEr�rc�r%rxs  r�1test_communicate_repeated_call_after_stdout_closezFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_closeB
se���������!N�!P�'1���8���
�� � �� �-����,�,�
��
��	s�A�A"�!A"c��dt�d�}td|�\}}}|j|j�d�|j	d|�y)Nz�if 1:
        import atexit
        import subprocess

        def dummy():
            pass

        class AtFinalization:
            def __del__(self):
                print("OK")
                subprocess.Popen(zu, preexec_fn=dummy)
                print("shouldn't be printed")
        at_finalization = AtFinalization()
        rsOKs0preexec_fn not supported at interpreter shutdown)rr	rYr�rw)r%r�r�r�r�s     r�test_preexec_at_exitz)POSIXProcessTestCase.test_preexec_at_exitM
sT��
"�#2�!2�3	�
��'�t�T�2���3���������e�,��
�
�I�3�Or)rr1r2r3r&rrrrrrDr!rror0r6rmr�rr�r]r@rIr�r�rQrirmryr{r�r�rr�r(r�r�r�r�r�r�r�r�r�r�rWr�r�r�r�r�r�r�r�rr�rr	rrrrrr!r$r'r*r.r0r2r5r7r9r=rHrMrOr^rcrirtr}r�r�r�r��st_devr�r�requires_mac_verr�r�r�r�r�r�r�r�r�r�r��cpython_onlyr�r�rrr
rrrrrrr!�
__classcell__�r
s@rrr8s���>�!�
B�
B�B�*�J�,�,���T�Z�Z�'�(�A�)�A� �T�Z�Z�'�(�:�)�:�*�X�_�_������(;�<�<�-�/�4�/�4�,7� �X�����Y�/�J�G�B�	�4J�<�>�9�>�9� �X�����Z�0�2K�L�1F�M�1F�f�X�_�_�W�R��,�.P�Q�?�R�?��X�����Z�0�2M�N�'I�O�'I�R�X�_�_�W�R��,�.P�Q�@�R�@��X�����[�1�3O�P�E�Q�E�
�X�����[�1�3O�P�F�Q�F�A�@8��X�_�_�Y�:�g�b�'�&:�":�6�8�&�8�&�(8�	9�?�
?�
	8�0� %��!1�!1�%�2�X�_�_�������4�4�6K�L�E�M�E��*�X�_�_����� �"E�G�L�G�L�(+�	,�L�L�!�N�(�2�X�_�_�S�\�\�,�,�-B�C�9�;��;��*)�4�4�>�(�-���
)�2&�&�&�)�)�)�,�
!�*+�Z+�`%�()�XK�
K�&K�:&�6I�.'�R-=�`�X�_�_�S�\�\�,�,�Y�7�I��R�W�W�V�_�+�+�w�r�w�w�y�/A�/H�/H�H�E�G�I9�G�I9�`�W���b�!�$�H�%�H�BE�<U�4���	1��"F�0)I�V,�"
���%��%�N
���'��'�R7�<�
<�
<��X����$�.�>�$�Y��=�4�6�)�6�)�.�,�	�PrrzWindows specific testsc��eZdZd�Zd�Zd�Zd�Zd�Zejd��Z
d�Zd�Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�Win32ProcessTestCasec��d}d}tj�}||_||_tjt
|��y)Nr�r�r�)r�STARTUPINFO�dwFlags�wShowWindowrVr)r%�STARTF_USESHOWWINDOW�SW_MAXIMIZEr�s    r�test_startupinfoz%Win32ProcessTestCase.test_startupinfod
s@�� !���� �,�,�.��2���"-���	����$/�	1rc�p�d}d}tj||��}tjt|��y)Nr�r�)r+r,r�)rr*rVr)r%�STARTF_USERSHOWWINDOWr.r�s    r�test_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywordss
s8��!"���� �,�,�)�#�
��	����$/�	1rc�h�tj�}tj|_tj|_t
d�D�]M}t}ttjd�5}tj||tj|��}|5|j�ddd�|j|jd�ddd�|j|jtj�|j!|j"�|j!|j$�|j!|j&�|j|j
tj�|j|j(dgi���Py#1swY��xYw#1swY��xYw)Nrfr�)rBrCr�r�handle_list)rr*r-r+�SW_HIDEr,r�rr�rr�rDr�r�rYrr�	hStdInput�
hStdOutput�	hStdError�lpAttributeList)r%r�r�r��nullrxs      r�test_startupinfo_copyz*Win32ProcessTestCase.test_startupinfo_copy�
sG�� �,�,�.��(�=�=���",�"4�"4����q��A�!�C��b�j�j�#�&�$�!�'�'��/3�/9�/@�/@�4?�A����$�$�&��� � ����!�4�'�
���[�0�0�'�<�<�
>����k�3�3�4����k�4�4�5����k�3�3�4����[�4�4�j�6H�6H�I����[�8�8�=�"�:M�N�#��T��'�&�s$�.*F(�F�)$F(�F%�!F(�(F1	c��d}tjjd�tjtj
dz|��y)N�z'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r�)rWrCr�rrVrX)r%�CREATE_NEW_CONSOLEs  r�test_creationflagsz'Win32ProcessTestCase.test_creationflags�
s8�����
�
���C�D�������=�>�&8�	:rc�v�|jttjtj
ddgd���y)NrrSc��yr-r4r4rrr�z8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>�
s��Qrr�r�r$s rr�z&Win32ProcessTestCase.test_invalid_args�
s1�����*�j�o�o��>�>�4�5�7�%.�	�	0rc��Gd�dt�}|jt�5tjt
|���ddd�y#1swYyxYw)Nc��eZdZdZy)�4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvN)r1r2r3�keysr4rr�BadEnvrD�
s���DrrFr�)�dictrbr�rrDr)r%rFs  r�test_issue31471z$Win32ProcessTestCase.test_issue31471�
s:��	�T�	�
�
�
�y�
)����_�&�(�;�*�
)�
)�s�!A�Ac�x�tjtjddgd��}|j	|d�y)NrrST)rYrTrUrZs  rr�z#Win32ProcessTestCase.test_close_fds�
s5��
�_�_�c�n�n�d�8�:�(,�.��	
����R� rc	��ddl}tj�}|jtj|d�|jtj|d�g}|D]8}tj
|d�|j
|j|���:tjtjddj|d�gtjd��}|j�\}}|j|j d�t#|j%��tjtjddj|d�gtjtjd��}|j�\}}|j|j d�|j'd	|�g}tj(�}	d
|i|	_tjtjddj|d�gtjtj|	d��}|j�\}}|j|j d�|j'd	|�t-j.dt0f�5tj(�}	d
|ddi|	_tjtjddj|d�gtjtj|	d��}|j�\}}|j|j d�ddd�y#1swYyxYw)
Nrr�Trz2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Fr�)rBrCrYsOSErrorr4)rBrCr�rYz.*overriding close_fds)r4rrjr�rIr�r��
get_osfhandlerrDrWrXr�rEr�rYrrDr�rwr*r9rr�r.)
r%r4r?rrGrKrBrCr4r�s
          r�test_close_fds_with_stdioz.Win32ProcessTestCase.test_close_fds_with_stdio�
s�����g�g�i��������#�a�&�)�������#�a�&�)����B����r�4�(��N�N�6�/�/��3�4��
���c�n�n�d�R�Y�Y�Za�bc�Zd�e�g�$.�O�O�u�
F���������������q�)��F�L�L�N�����c�n�n�d�R�Y�Y�Za�bc�Zd�e�g�$.�O�O�J�O�O�W[�
]���������������q�)��
�
�j�&�)��� �,�,�.��'4�k�&B��#����c�n�n�d�R�Y�Y�Za�bc�Zd�e�g�$.�O�O�J�O�O�)4��
F���������������q�)��
�
�j�&�)��
+�
+�-E�-;�-=�>�$�0�0�2�K�+8�'�!�*�*E�K�'�� � �#�.�.�$�"V�"]�"]�^e�fg�^h�"i�"k�(2���
���-8�E�K�A��]�]�_�N�F�F����Q�\�\�1�-�>�>�>�s
�B)M�Mc�p�tj�}i|_tjt|��y)Nr��rr*r9rVr�r%r�s  r�test_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list�
s)�� �,�,�.��&(��#�����$/�	1rc�t�tj�}dgi|_tjt|��y)Nr4r�rNrOs  r�test_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list�
s.�� �,�,�.��'4�b�&9��#�����$/�	1rc��tjj�}d|d<tjdgdtj
|��}|5|j
d|jj��ddd�y#1swYyxYw�N�physalisr�r�r�r�sphysalis�	rr�r�rrDrErwrBr	r�s   rr�z(Win32ProcessTestCase.test_shell_sequence�
sb�������"��$��w�����e�W�A�$.�O�O�!'�
)����M�M�+�q�x�x�}�}��7��Q�Q�s�+B�Bc��tjj�}d|d<tjddtj
|��}|5|j
d|jj��ddd�y#1swYyxYwrTrVr�s   rr�z&Win32ProcessTestCase.test_shell_strings`�������"��$��w�����U�!�$.�O�O�!'�
)����M�M�+�q�x�x�}�}��7��Q�Q�s�
+B�B
c�,�dD]�}tjj�}d|d<tjddtj
||��}|5|j
d|jj�|�ddd���y#1swY��xYw)N)�ansi�oemrUr�r�r�)r�rBr�r�rV)r%�encr�rKs    r�test_shell_encodingsz)Win32ProcessTestCase.test_shell_encodingsst��"�C��Z�Z�_�_�&�F�(�F�7�O�� � ��a�(2���%+�*-�/�A���
�
�j�!�(�(�-�-�/�3�?���#���s�,B
�
B	c�t�tjtjdz�}|j	|d�y)Nz -c "import sys; sys.exit(47)"rTrUrZs  rr�z%Win32ProcessTestCase.test_call_strings.��
�_�_�S�^�^�=�>�?������R� rc��tjtjddgtjtjtj��}|5|j
j
d�t||�|�|j�\}}|j|d�|j�}ddd�|jd�y#1swY�xYw)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             r@r�rr)rrDrWrXrErBr	r�r�rYr*r;)r%rr:rKr�rCrs       rrz"Win32ProcessTestCase._kill_process!s������c�n�n�d�5!�"�$.�?�?�$.�O�O�$.�O�O�
5���
�H�H�M�M�!���G�A�v���%��
�
��I�A�v����V�S�)�����J��	
���J��*��Q�s
�A C�Cc���tjtjddgtjtjtj��}|5|j
j
d�tjd�t||�|�|j�\}}|j|d�|j�}ddd�|jd�y#1swY�xYw)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             r@r�rr�)
rrDrWrXrErBr	r=r>r�r�rYr*)r%rr:rKr�rCr[s       rrz'Win32ProcessTestCase._kill_dead_process6s������c�n�n�d�5!�"�$.�?�?�$.�O�O�$.�O�O�
5���
�H�H�M�M�!���J�J�q�M��G�A�v���%��
�
��I�A�v����V�S�)�����B��	
����R� ��Q�s
�A5C'�'C0c�D�|jdtj�yr)rrrr$s rr	z%Win32ProcessTestCase.test_send_signalMs�����=�&�.�.�9rc�&�|jd�yr�rr$s rrzWin32ProcessTestCase.test_killPs�����6�"rc�&�|jd�yrrbr$s rrz#Win32ProcessTestCase.test_terminateSs�����;�'rc�D�|jdtj�yr)rrrr$s rrz*Win32ProcessTestCase.test_send_signal_deadVs�����
�v�~�~�>rc�&�|jd�yrrr$s rrz#Win32ProcessTestCase.test_kill_deadYs������'rc�&�|jd�yrrr$s rrz(Win32ProcessTestCase.test_terminate_dead\s������,rN)r1r2r3r/r2r;r?r�rr$rHr�rLrPrRr�r�r\r�rrr	rrrrrr4rrr(r(a
s���
1�1� O�6:�0�
���<��<�!�0.�d1�1�8�8�
@�!�+�*!�.:�#�(�?�(�-rr(c��eZdZGd�dej�Zejjejd�d��Z	d�Z
d�Zd�Zd�Z
d	�Zy
)�	MiscTestsc�$��eZdZ	gZ�fd�Z�xZS)�MiscTests.RecordingPopenc�Z��t�|�|i|��|jj|�yr")r
r��instances_createdr�)r%r:r;r
s   �rr�z!MiscTests.RecordingPopen.__init__es)����G��d�-�f�-��"�"�)�)�$�/r)r1r2r3rlr�r%r&s@r�RecordingPopenrjas���J���	0�	0rrm�_communicatec�J�	t|_	tjj	t
jd�5}t|_tjj	t
d|j�5|jt�5|tjddgfdt
ji|��ddd�ddd�|jddD]6}|j|tjd��d|j����8g}|jD]-}|tjd	��k(s�|j|��/|j!|j"d
|j��|j%t'|�d|j��ddd�|jj(j+�}|j-�|j/�|j%g|jj(�y#1swY��ZxYw#1swY��_xYw#1swY��xYw#|jj(j+�}|j-�|j/�|j%g|jj(�wxYw)N�_waitrDrzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rBr�r`z.no open-ended wait() after the first allowed: g�?rfrQ)�KeyboardInterruptr�rrorprrDrmrbrWrXr^r�r;rVr��assertLessEqual�
call_countrYr�rlrror*)r%�popener�mock__communicater;�
mock__waitrV�sigint_callsr�s        r�_test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_killis5��	�):��%�	H����"�"�:�#3�#3�W�=��*;�
�&��Z�Z�&�&�z�7�'+�':�':�<��*�*�+<�=������"M�!N�E�(2�'9�'9�E�>D�E�>�<�'�5�5�a�b�9�D��'�'� �$�)�)�D�"9�L�)�8�8�9�;�<�:�
 "��&�5�5�D��t�y�y��6�6�$�+�+�D�1�6��$�$�Z�%:�%:�A�)3�)B�)B�%�D�� � ��\�!2�A�%/�%>�%>�!�@�->�4�)�)�;�;�?�?�A�G��L�L�N��L�L�N����R��!4�!4�!F�!F�G�/>�=��<�<��	>�=��4�)�)�;�;�?�?�A�G��L�L�N��L�L�N����R��!4�!4�!F�!F�G�s[�.H6�;H*�7H�
+H�8H�A:H*�;A"H*�H6�H�H�H'	�"H*�*H3�/H6�6A,J"c�F�|jtjd��y�NgT㥛� @r`)rxrrVr$s r�#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_kill�s���,�,�Z�_�_�e�,�Lrc�F�|jtjd��yrz)rxrrr$s r�"test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_kill�s���,�,�Z�^�^�U�,�Krc�,�d�}|j|�y)Nc�R�tj|i|��5}t�#1swYyxYwr")rrDrq)r:r;�unused_processs   r�popen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager�s&���!�!�4�2�6�2�n�'�'�3�2�s��&)rx)r%r�s  r�.test_context_manager_keyboardinterrupt_no_killz8MiscTests.test_context_manager_keyboardinterrupt_no_kill�s��	(�	
�,�,�-F�Grc���|jtjd�d�|jtjd�d�d}	t	j
�}tjj|d�}tjtrdnd|z�\}}|j|d�|�t
j|�yy#|�t
j|�wwxYw)Nz
echo xyzzy�xyzzy)rr�r�ztype zcat r)rYr�	getoutput�getstatusoutputr�r�rr�r�r(r;�rmdir)r%�dirr�rr{s     r�test_getoutputzMiscTests.test_getoutput�s�������-�-�l�;�W�E�����3�3�L�A�%�	'���	��"�"�$�C��7�7�<�<��U�+�D�'�7�7�%��6�T�9�;�N�F�F������*�������
���s������
��s
�A)C�C*c�H�	hd�}ttj�}t�}ddl}tjj�D]@\}}|j
d�r�t||jf�r�0|j|��B|j|||z
�y)N>rr]rk�Handlerrr�)r�r�__all__r��__dict__�itemsr�r`�
ModuleTyper�rY)r%�intentionally_excluded�exported�possible_exportsr�r�rps       r�test__all__zMiscTests.test__all__�s���8�!R���z�)�)�*���5���%�.�.�4�4�6�K�D�%����s�#���%�%�"2�"2�!4�5��� � ��&�7�	
����#3�6L�#L�MrN)r1r2r3rrDrmrrorprxr{r}r�r�r�r4rrrhrh_s_��0��)�)�0�
�Z�Z���z�'�'��8�)H�9�)H�VM�L�H��&Nrrh�PollSelectorz!Test needs selectors.PollSelectorc��eZdZd�Zd�Zy)�ProcessTestCaseNoPollc��tj|_tjt_t
j
|�yr")r�_PopenSelector�
orig_selector�	selectors�SelectSelectorr>r&r$s rr&zProcessTestCaseNoPoll.setUp�s,��'�6�6���$-�$<�$<�
�!����d�#rc�X�|jt_tj	|�yr")r�rr�r>r/r$s rr/zProcessTestCaseNoPoll.tearDown�s��$(�$6�$6�
�!�� � ��&rNr0r4rrr�r��s��$�
'rr�zWindows-specific testsc�F��eZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Zd�Z	�xZ
S)�CommandsWithSpacesc����t�|��tjdd�\}}|j	�|_t
j|d�t
j|�y)Nz.pyzte stsVimport sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	r
r&r�r[r�r�rr�rI)r%rWr�r
s   �rr&zCommandsWithSpaces.setUp�sP���
��
���#�#�E�7�3���5��[�[�^��
�
����c�	
�	����rc�`��tj|j�t�|��yr")rr\r�r
r/rs �rr/zCommandsWithSpaces.tearDown�s���
�	�	�$�*�*��
���rc��tj|d<tj|i|��}|5|j|jj�j
d�d|jz�ddd�y#1swYyxYw)NrB�mbcsz2 [%r, 'ab cd'])rrErDrYrBr	r
r�)r%r:r;rKs    r�with_spaceszCommandsWithSpaces.with_spaces�se��%�?�?��x�����d�-�f�-��
�����h�h�m�m��%�%�f�-��$�*�*�,�
��Q�Q�s�AA;�;Bc	�n�|jdtj�d|j�dd�d�d��y)N�"�" "�ab cdr�rn�r�rWrXr�r$s r�test_shell_string_with_spacesz0CommandsWithSpaces.test_shell_string_with_spaces�s-�����S�^�^�T�Z�Z�-4�6�=>�	�	@rc�`�|jtj|jdgd��y)Nr�r�rnr�r$s r�test_shell_sequence_with_spacesz2CommandsWithSpaces.test_shell_sequence_with_spaces�s$�����#�.�.�$�*�*�g�>�a��Hrc	�j�|jdtj�d|j�dd�d��y)Nr�r�r�r�r$s r�test_noshell_string_with_spacesz2CommandsWithSpaces.test_noshell_string_with_spaces�s$�����S�^�^�T�Z�Z�$�&�	'rc�\�|jtj|jdg�y)Nr�r�r$s r�!test_noshell_sequence_with_spacesz4CommandsWithSpaces.test_noshell_sequence_with_spaces�s�����#�.�.�$�*�*�g�>�?r)r1r2r3r&r/r�r�r�r�r�r%r&s@rr�r��s)������@�
I�'�
@rr�c�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�ContextManagerTestsc���tjtjddgtjtj��5}|j|jj�d�|j|jj�d�ddd�|jjj�|j|jj�y#1swY�TxYw)NrzAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');r�sstdoutsstderr)rrDrWrXrErYrBr	rCr�r�rs  r�	test_pipezContextManagerTests.test_pipe�s���
�
�
�s�~�~�t� =�>�&0�_�_�%/�_�_�6�
:>����T�[�[�-�-�/��;����T�[�[�-�-�/��;�6�	
������*�*�+�������*�*�+�6�6�s
�AC.�.C7c��tjtjddg�5}	ddd�|j	j
d�y#1swY�&xYw)Nrzimport sys; sys.exit(100)�d)rrDrWrXrYrrs  rr�z#ContextManagerTests.test_returncodesL��
�
�
�s�~�~�t�:�<�=�@D��=�	
������#�.�	=�=�s�A�Ac���tjtjddgtj��5}|jd�|j
|jd�ddd�y#1swYyxYw)Nrz2import sys;sys.exit(sys.stdin.read() == 'context')r�scontextr�rRrs  rr�z*ContextManagerTests.test_communicate_stdinsd��
�
�
�s�~�~�t�H�I�$.�?�?�4�8<����Z�(����T�_�_�a�0�4�4�4�s�.A.�.A7c���|jt�5tjttj
tj
��5}	ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�)rbr�rrDr�rErs  rr�z%ContextManagerTests.test_invalid_argssV��
�
�
�1�
2��!�!�/�)3���)3���:�=A��:�3�
2�:�:��3�
2�s#�9A.�A"�A.�"A+	�'A.�.A7c���	tjttjtj
dz��}|j
�}|jjdtj
z�|j|j�|jt|jddd�|j|jd�|j|jj �y)Nrf)rArNrfr)rrDrrErr��	__enter__rAr�rrrbr��__exit__rYr�r�rs  r�test_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanup!s���G�����&0�o�o�(/�(=�(=�a�(?�A���~�~���	
�
�
����� 5� 5�5�6����$�/�/�*����'�4�=�=�$��d�C�������!�,�����
�
�)�)�*rN)r1r2r3r�r�r�r�r�r4rrr�r��s��,�/�1��+rr��__main__)Grmrrkr�test.supportrrrr�test.support.script_helperr	rrWrrGr`rr�r�r=r�r�r�r�r�rrBr�r�r��test.support.os_helperr
rr7r]rrk�PGOrn�has_subprocess_supportr�r(r�r�r�NotADirectoryErrorrEr�rXrr�TestCaser �	Exceptionr6rDr8r>r�rr�rr�r(rhr�r�r�r�r1�mainr4rr�<module>r�s������(�&�"�(�7��
�
�	��	��������
�
��	���+����������;�;�
�(�
�
�9�
:�:��%�%�
�(�
�
�=�
>�>�
�\�\�W�
$�	�
�@�I��I�)��'�);�_�M���>�>�4��0��(� �8�$�$� �&	��	�>�j�.�.�>�q-�l�q-�h/BO�l�BO�J	c������2�3�eP�<�eP�4�eP�P1����Y� 8�9�{-�<�{-�:�{-�zaN��!�!�aN�H����W�Y��7�8�:�'�O�'�:�'�����Y� 8�9�(@�,�(@�:�(@�V3+�,�3+�l�z���H�M�M�O���ex���I���
��
�C�����
�C���
��E�sB�H�H�H-�H;�H�H�H*�)H*�-H8�7H8�;I

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists