Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_posix.cpython-311.opt-2.pyc
�

�Ke�`����	ddlmZddlmZddlmZddlmZddlmZejd��Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ	ddlZn
#e$rdZYnwxYwej�ej��ejd	z��Zejejd
koej pej!d��Z"d�Z#eje#��d
��Z$Gd�dej%��Z&Gd�dej%��Z'Gd�dej%��Z(Gd�d��Z)eje*ed��d��Gd�dej%e)����Z+eje*ed��d��Gd�dej%e)����Z,ejejdkd��Gd �d!ej%����Z-d"�Z.e/d#krej0��dSdS)$�)�support)�
import_helper)�	os_helper)�warnings_helper)�assert_python_ok�posixN)�contextmanagerz-dummy-symlink�z(test is only meaningful on 32-bit buildsc���ttd��sdS	t�d��n2#t$r%}|jtjkrYd}~dSYd}~nd}~wwxYwdS)N�sched_getschedulerFrT)�hasattrrr�OSError�errno�ENOSYS)�es �9/usr/local/apps/python3/lib/python3.11/test/test_posix.py�_supports_schedr's����5�.�/�/���u��
� � ��#�#�#�#�������7�e�l�"�"��5�5�5�5�5�#�"�"�"�"����������4s�4�
A#�A�A#zrequires POSIX scheduler APIc�l�eZdZd�Zd�Zejeed��d��d���Z	ejeed��d��d���Z
ejeed	��d
��d���Zejeed	��d
��d���Zejeed
��d��d���Z
ejeed
��d��d���Zejeed��d��ejeed��d��d�����Zejeed��d��d���Zejeed��d��d���Zejeed��d��d���Zejeed��d ��d!���Zejeed"d#��ejvd$��ej��d%�����Zejeed&��d'��ej��d(�����Zej��d)���Zejeed*��d+��d,���Zejeed-��d.��d/���Zejeed0��d1��d2���Zejeed0��d1��ejeed3��d4��d5�����Z ejeed0��d1��e!d6�����Z"ejeed7��d8��d9���Z#ejeed:��d;��d<���Z$ejeed:��d;��ejeed=��d>��d?�����Z%ejeed:��d;��e!d@�����Z&ejeedA��dB��dC���Z'ejeedA��dB��dD���Z(ejeedE��dF��dG���Z)ejeedE��dF��dH���Z*ejej+ejvdI��dJ���Z,ejej+ej-vdK��dL���Z.ejeedM��dN��dO���Z/ejeedM��dN��e!dP�����Z0ejeedQ��dR��dS���Z1ejeedQ��dR��e!dT�����Z2ejeedU��dV��ej3ej4dW��dX�����Z5ejeedY��dZ��d[���Z6ejeed\��d]��ej3ej4d^��d_�����Z7ejeed`��da��ej8dbdcdd��ej9��de�������Z:ejeedf��dg��dh���Z;ejeedi��dj��dk���Z<ejeedl��dm��dn���Z=do�Z>ejeedp��dq��dr���Z?ejeeds��oee@dt��du��dv���ZAejeedw��dx��dy���ZBdz�ZCeDjEej3ejFd{��d|�����ZGeDjEejeed}��d~��ej3ejFd{��d�������ZHeDjEejeed���d���d������ZIejeed���d���d����ZJd��ZKd��ZLd��ZMd��ZNejejOejvd���d����ZPejeed���d���d����ZQejeed���d���d����ZRejeed���d���d����ZSejeed���d���d����ZTejeed���d���ej8dbdcd���d������ZUejVejeed���d���ej8dbdcd���d��������ZWejeed���d���d����ZXd��ZYejeed���d���d����ZZejeed���d���d����Z[ejeed���d���d����Z\d��Z]d��Z^ejeed���d���d����Z_ejeed���d���ejeed��d��ejeed���d���d��������Z`ejeed���d���ejeed���d���ej9��d��������Zaejeebd���d���ejeed���d���d������Zcejeed���d���Zdejeed���d���Zeedd����Zfedejeed���d¦�dÄ����ZgehdĄ��ZiejeedŦ�dƦ�dDŽ��ZjeedȄ��ZkeedɄ��Zlej3ej4dʦ�d˄��Zmejeed̦�dͦ�d΄��ZndτZodЄZpdфZqejeedҦ�dӦ�dԄ��Zrd#S)��PosixTesterc�B�|�tjtj��t	tjd��5	ddd��n#1swxYwY|�t
j����tj	ddt��dS)N�wb�ignorez.* potential security risk .*)�
addCleanupr�unlink�TESTFN�open�enterContextr�check_warnings�warnings�filterwarnings�RuntimeWarning��selfs r�setUpzPosixTester.setUp6s������	�(�)�*:�;�;�;�
�)�"�D�
)�
)�	�	��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	����/�8�:�:�;�;�;����*I� .�	0�	0�	0�	0�	0s�A�A�Ac���gd�}|D]m}tt|d��}|�S|�|��5|��|�t|d��ddd��n#1swxYwY�ndS)N)�ctermid�getcwd�getcwdb�uname�times�
getloadavg�getegid�geteuid�getgid�	getgroups�getpid�getpgrp�getppid�getuid�sync�)�getattrr�subTest�assertRaises�	TypeError)r#�NO_ARG_FUNCTIONS�name�
posix_funcs    r�testNoArgFunctionszPosixTester.testNoArgFunctions?s�������%�	@�	@�D� ���d�3�3�J��%��\�\�$�'�'�@�@��J�L�L�L��%�%�i��Q�?�?�?�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@��	@�	@s�'A)�)A-	�0A-	�	getresuidztest needs posix.getresuid()c��t���}|�t|��d��|D]}|�|d���dS�N�r)rr>�assertEqual�len�assertGreaterEqual)r#�user_ids�vals   r�test_getresuidzPosixTester.test_getresuidOsa���?�?�$�$������X����*�*�*��	,�	,�C��#�#�C��+�+�+�+�	,�	,��	getresgidztest needs posix.getresgid()c��t���}|�t|��d��|D]}|�|d���dSr@)rrIrBrCrD)r#�	group_idsrFs   r�test_getresgidzPosixTester.test_getresgidWsa���O�O�%�%�	�����Y����+�+�+��	,�	,�C��#�#�C��+�+�+�+�	,�	,rH�	setresuidztest needs posix.setresuid()c���t���}|�tj|���|�t�ddd����dS�N���)rr>�assertIsNonerM)r#�current_user_idss  r�test_setresuidzPosixTester.test_setresuid_sZ��!�?�?�,�,�����%�/�+;�<�=�=�=����%�/�/�"�b�"�5�5�6�6�6�6�6rHc��t���}d|vr.|ddzddf}|jttjg|�R�dSdS�Nrr5rP)rr>r8rrM)r#rR�new_user_idss   r�test_setresuid_exceptionz$PosixTester.test_setresuid_exceptiongsc��!�?�?�,�,���$�$�$�,�Q�/��1�2�r�:�L��D��g�u��F��F�F�F�F�F�F�%�$rH�	setresgidztest needs posix.setresgid()c���t���}|�tj|���|�t�ddd����dSrO)rrIrQrX)r#�current_group_idss  r�test_setresgidzPosixTester.test_setresgidpsZ��"�O�O�-�-�����%�/�+<�=�>�>�>����%�/�/�"�b�"�5�5�6�6�6�6�6rHc��t���}d|vr.|ddzddf}|jttjg|�R�dSdSrU)rrIr8rrX)r#rZ�
new_group_idss   r�test_setresgid_exceptionz$PosixTester.test_setresgid_exceptionxsc��"�O�O�-�-���%�%�%�.�q�1�!�3�R��<�M��D��g�u��G��G�G�G�G�G�G�&�%rH�
initgroupsztest needs os.initgroups()�getpwuidztest needs pwd.getpwuid()c��|�ttj��|�ttjd��|�ttjdd��|�ttjddt	����tj��dkr�	tjt�����j	}n"#t$rtjd���wxYw	t�|d��|�
d��dS#t$r0}|�|jt j��Yd}~dSd}~wwxYwdS)NrA�foorzneed a pwd entry�
z+Expected OSError to be raised by initgroups)r8r9rr_�object�osr3�pwdr`�pw_name�KeyError�unittest�SkipTest�failrrBr�EPERM)r#r;rs   r�test_initgroupszPosixTester.test_initgroups�se��	
���)�U�%5�6�6�6����)�U�%5�t�<�<�<����)�U�%5�q�%�@�@�@����)�U�%5�u�a����J�J�J��9�;�;�!���
<��|�E�L�L�N�N�3�3�;�����
<�
<�
<��'�(:�;�;�;�
<����
I�� � ��r�*�*�*��	�	�G�H�H�H�H�H���
7�
7�
7�� � ���%�+�6�6�6�6�6�6�6�6�6�����
7�����s$�?0C0�0D�E�
E?�%E:�:E?�statvfsztest needs posix.statvfs()c�t�|�t�tj����dS�N)�
assertTruerrnre�curdirr"s r�test_statvfszPosixTester.test_statvfs�s*��	
����
�
�b�i�0�0�1�1�1�1�1rH�fstatvfsztest needs posix.fstatvfs()c��ttj��}	|�t�|�������|�t�|�������|���dS#|���wxYwrp)	rrrrqrrt�filenorn�close�r#�fps  r�
test_fstatvfszPosixTester.test_fstatvfs�s����)�"�
#�
#��	��O�O�E�N�N�2�9�9�;�;�7�7�8�8�8��O�O�E�M�M�"�)�)�+�+�6�6�7�7�7��H�H�J�J�J�J�J��B�H�H�J�J�J�J���s�A>B/�/C�	ftruncateztest needs posix.ftruncate()c�B�ttjd��}	|�d��|���t
�|���d��|���dS#|���wxYw)N�w+�testr)	rrr�write�flushrr{rvrwrxs  r�test_ftruncatezPosixTester.test_ftruncate�sy���)�"�D�
)�
)��	��H�H�V�����H�H�J�J�J��O�O�B�I�I�K�K��+�+�+��H�H�J�J�J�J�J��B�H�H�J�J�J�J���s�AB�B�truncateztest needs posix.truncate()c��ttjd��5}|�d��|���ddd��n#1swxYwYt
�tjd��dS)N�wr~r)rrrrr�rr�rxs  r�
test_truncatezPosixTester.test_truncate�s���
�)�"�C�
(�
(�	�B��H�H�V�����H�H�J�J�J�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	���y�'��+�+�+�+�+s�*A�A�A�execveNz/test needs execve() to support the fd parameterc��tjtjtj��}	tj��}|dkrutjtj�tj��d��t�
|tjddgtj��ntj
|d���tj|��dS#tj|��wxYw)Nr�-c�pass��exitcode)rer�sys�
executable�O_RDONLY�fork�chdir�path�splitrr��environr�wait_processrw)r#ry�pids   r�test_fexecvezPosixTester.test_fexecve�s����W�S�^�R�[�
1�
1��	��'�)�)�C��a�x�x�������s�~�6�6�q�9�:�:�:����R�#�.�$��!?���L�L�L�L��$�S�1�5�5�5�5��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�B$C%�%C;�waitidztest needs posix.waitid()c���tj��}|dkr�tjtj�t
j��d��t�t
jt
jddgtj	��dSt�
tj|tj��}|�
||j��dS)Nrr�r�)rer�r�r�r�r�r�rr�r�r��P_PID�WEXITEDrB�si_pid)r#r��ress   r�test_waitidzPosixTester.test_waitid�s����g�i�i���!�8�8��H�R�W�]�]�3�>�2�2�1�5�6�6�6��L�L���#�.�$��)G���T�T�T�T�T��,�,�u�{�C���?�?�C����S�#�*�-�-�-�-�-rHc�T�|�td���5tjd���ddd��n#1swxYwY|�td���5tjd���ddd��n#1swxYwY|�td���5tjd���ddd��n#1swxYwY|�td���5tjd	�
��ddd��n#1swxYwY|�td���5tjd���ddd��n#1swxYwY|�td���5tjd���ddd��n#1swxYwY|�td���5tjd�
��ddd��n#1swxYwY|�td���5tjdd
����ddd��n#1swxYwY|�td���5tjd�d���ddd��n#1swxYwYd}t	d|��dS)NzPositional args not allowed)�msgc��dSrp�r�rHr�<lambda>z3PosixTester.test_register_at_fork.<locals>.<lambda>�s���rHzArgs must be callable�)�before�three)�after_in_childsFive)�after_in_parentzArgs must not be NonezInvalid arg was allowedc��dS)NrAr�r�rHrr�z3PosixTester.test_register_at_fork.<locals>.<lambda>�s��Q�rH)r�r�c��dSrpr�r�rHrr�z3PosixTester.test_register_at_fork.<locals>.<lambda>�s��t�rH�)r�r�a�if 1:
            import os

            r, w = os.pipe()
            fin_r, fin_w = os.pipe()

            os.register_at_fork(before=lambda: os.write(w, b'A'))
            os.register_at_fork(after_in_parent=lambda: os.write(w, b'C'))
            os.register_at_fork(after_in_child=lambda: os.write(w, b'E'))
            os.register_at_fork(before=lambda: os.write(w, b'B'),
                                after_in_parent=lambda: os.write(w, b'D'),
                                after_in_child=lambda: os.write(w, b'F'))

            pid = os.fork()
            if pid == 0:
                # At this point, after-forkers have already been executed
                os.close(w)
                # Wait for parent to tell us to exit
                os.read(fin_r, 1)
                os._exit(0)
            else:
                try:
                    os.close(w)
                    with open(r, "rb") as f:
                        data = f.read()
                        assert len(data) == 6, data
                        # Check before-fork callbacks
                        assert data[:2] == b'BA', data
                        # Check after-fork callbacks
                        assert sorted(data[2:]) == list(b'CDEF'), data
                        assert data.index(b'C') < data.index(b'D'), data
                        assert data.index(b'E') < data.index(b'F'), data
                finally:
                    os.write(fin_w, b'!')
            r�)r8r9re�register_at_forkr)r#�codes  r�test_register_at_forkz!PosixTester.test_register_at_fork�s���
�
�
�y�.K�
�
L�
L�	.�	.�����-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�
�
�
�y�.E�
�
F�
F�	*�	*���q�)�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�
�
�
�y�.E�
�
F�
F�	8�	8���w�7�7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�
�
�
�y�.E�
�
F�
F�	9�	9����8�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�
�
�
�y�.E�
�
F�
F�	-�	-���t�,�,�,�,�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�
�
�
�y�.E�
�
F�
F�	5�	5���t�4�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�
�
�y�.E�
�
F�
F�	6�	6����5�5�5�5�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�
�
�
�y�.G�
�
H�
H�	H�	H���t�Y�Y�G�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H��
�
�y�.G�
�
H�
H�	H�	H���|�|�B�G�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�
"��F	��t�$�$�$�$�$s��?�A�A�&B�B�B�/C�C�C�8D�D�!D�E#�#E'�*E'�
F,�,F0�3F0�G5�5G9�<G9�I�I�I�'J�J�J�lockfztest needs posix.lockf()c���tjtjtjtjz��}	tj|d��tj|dtj��t�
|tjd��t�
|tjd��tj
|��dS#tj
|��wxYw)N�testr�)rerrr�O_WRONLY�O_CREATr�lseek�SEEK_SETrr��F_LOCK�F_ULOCKrw�r#�fds  r�
test_lockfzPosixTester.test_lockfs���
�W�Y�%�r�{�R�Z�'?�
@�
@��	��H�R��!�!�!��H�R��B�K�(�(�(��K�K��E�L�!�,�,�,��K�K��E�M�1�-�-�-��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�BC�C%�preadztest needs posix.pread()c��tjtjtjtjz��}	tj|d��tj|dtj��|�	dt�|dd����|�	dt�|d����tj
|��dS#tj
|��wxYw)Nr�rsesr�r5ste)rerrr�O_RDWRr�rr�r�rBrr��readrwr�s  r�
test_preadzPosixTester.test_pread s���
�W�Y�%�r�y�2�:�'=�
>�
>��	��H�R��!�!�!��H�R��B�K�(�(�(����U�E�K�K��A�q�$9�$9�:�:�:����U�E�J�J�r�1�$5�$5�6�6�6��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�BC"�"C8�preadvztest needs posix.preadv()c��tjtjtjtjz��}	tj|d��d�dD��}|�t�	||d��d��|�gd�t|����tj|��dS#tj|��wxYw)N�test1tt2t3t5t6t6t8c�,�g|]}t|����Sr���	bytearray��.0�is  r�
<listcomp>z+PosixTester.test_preadv.<locals>.<listcomp>1���3�3�3�A�9�Q�<�<�3�3�3rH��rAr�rA�
�st1tt2st3ts5t)rerrrr�r�rrBrr��listrw)r#r��bufs   r�test_preadvzPosixTester.test_preadv,s���
�W�Y�%�r�y�2�:�'=�
>�
>��	��H�R�.�/�/�/�3�3��3�3�3�C����U�\�\�"�c�1�5�5�r�:�:�:����6�6�6��S�	�	�B�B�B��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�A6C�C�	RWF_HIPRIztest needs posix.RWF_HIPRIc��tjtjtjtjz��}	tj|d��d�dD��}|�t�	||dtj
��d��|�gd�t|����nf#t$r|�
d��YnEt$r9}|jtjtjhvrt%jd����d}~wwxYwtj|��dS#tj|��wxYw)	Nr�c�,�g|]}t|����Sr�r�r�s  rr�z1PosixTester.test_preadv_flags.<locals>.<listcomp>=r�rHr�rAr�r�zpreadv2 not availablez0RWF_HIPRI is not supported by the current system)rerrrr�r�rrBrr�r�r��NotImplementedError�skipTestrr�EINVAL�ENOTSUPrirjrw)r#r�r��insts    r�test_preadv_flagszPosixTester.test_preadv_flags7s8���W�Y�%�r�y�2�:�'=�
>�
>��	��H�R�.�/�/�/�3�3��3�3�3�C����U�\�\�"�c�1�b�l�C�C�R�H�H�H����6�6�6��S�	�	�B�B�B�B��"�	3�	3�	3��M�M�1�2�2�2�2�2��	�	�	��z�e�l�E�M�:�:�:��'�(Z�[�[�[������	����
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s6�BB:�9D6�:D�D6�	D�$4D�D�D6�6Ec�0�tjtjtjtjz��}	t
d��gdz}|�t��5}tj	||d��ddd��n#1swxYwY|�
|jjtj
��|�
t|d��ddz��tj|��dS#tj|��wxYw�N���r�)rerrrr�r�r�r8rr�rB�	exceptionrr��bytesrw�r#r�r��cms    r�test_preadv_overflow_32bitsz'PosixTester.test_preadv_overflow_32bitsMs���W�Y�%�r�y�2�:�'=�
>�
>��	��U�#�#�$�u�,�C��"�"�7�+�+�
&�r��	�"�c�1�%�%�%�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&�
&����
&�
&�
&�
&����R�\�/���>�>�>����U�3�q�6�]�]�E�5�L�9�9�9��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s0�-C?�%B�<C?�B�C?�B�AC?�?D�pwriteztest needs posix.pwrite()c���tjtjtjtjz��}	tj|d��tj|dtj��t�
|dd��|�dt�|d����tj
|��dS#tj
|��wxYw)Nr�r�xxr5stxxtr�)rerrrr�r�rr�r�rr�rBr�rwr�s  r�test_pwritezPosixTester.test_pwriteZs���
�W�Y�%�r�y�2�:�'=�
>�
>��	��H�R��!�!�!��H�R��B�K�(�(�(��L�L��U�A�&�&�&����W�e�j�j��Q�&7�&7�8�8�8��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�BC�C$�pwritevztest needs posix.pwritev()c�2�tjtjtjtjz��}	tj|d��tj|dtj��tj	|gd�d��}|�
|d��tj|dtj��|�
dt�|d����tj
|��dS#tj
|��wxYw)Nr�r�stest1stt2st3r�r�sxxtest1tt2t3�d)rerrrr�r�rr�r�r�rBrr�rw�r#r��ns   r�test_pwritevzPosixTester.test_pwriteves���
�W�Y�%�r�y�2�:�'=�
>�
>��		��H�R������H�R��B�K�(�(�(��
�2�8�8�8�!�<�<�A����Q��#�#�#��H�R��B�K�(�(�(����_�e�j�j��S�.A�.A�B�B�B��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�B2D�Dzos.RWF_SYNCztest needs os.RWF_SYNCc�H�tjtjtjtjz��}	tj|d��tj|dtj��tj	|gd�dtj
��}|�|d��tj|dtj��|�dt�
|d����tj|��dS#tj|��wxYw)Nr�rr�r�r�s
xxtest1tt2r�)rerrrr�r�rr�r�r��RWF_SYNCrBrr�rwr�s   r�test_pwritev_flagszPosixTester.test_pwritev_flagsss����W�Y�%�r�y�2�:�'=�
>�
>��		��H�R������H�R��B�K�(�(�(��
�2�8�8�8�!�R�[�I�I�A����Q��#�#�#��H�R��B�K�(�(�(����]�E�J�J�r�3�,?�,?�@�@�@��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�B=D�D!c��tjtjtjtjz��}	|�t��5}tj|ddzgdzd��ddd��n#1swxYwY|�	|j
jtj��tj
|��dS#tj
|��wxYw)N�xr�r�r)rerrrr�r�r8rr�rBr�rr�rw�r#r�r�s   r�test_pwritev_overflow_32bitsz(PosixTester.test_pwritev_overflow_32bits�s����W�Y�%�r�y�2�:�'=�
>�
>��	��"�"�7�+�+�
:�r��
�2��u��~��5�q�9�9�9�
:�
:�
:�
:�
:�
:�
:�
:�
:�
:�
:����
:�
:�
:�
:����R�\�/���>�>�>��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s/�C�A<�0C�<B�C�B�-C�C�posix_fallocatez"test needs posix.posix_fallocate()c��tjtjtjtjz��}	t�|dd��n[#t$rN}|j	tj
kr3tj�
d��rtjd����d}~wwxYw	tj|��dS#tj|��wxYw)Nrr�)�sunos�freebsd�netbsd�openbsd�gnukfreebsdz test may fail on ZFS filesystems)rerrrr�r�rr�rrr�r��platform�
startswithrirjrw)r#r�r�s   r�test_posix_fallocatez PosixTester.test_posix_fallocate�s����W�Y�%�r�{�R�Z�'?�
@�
@��
	��!�!�"�a��,�,�,�,���		�		�		�
�z�U�\�)�)�c�l�.E�.E�H�/J�/J�)��'�(J�K�K�K������		����
-�
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s*�A�C�
B-�A	B(�(B-�-C�Cc��	t�ddd��dS#t$r!}|jtjkr�Yd}~dSd}~wwxYw)N����rr�)rr�rr�EBADF�r#r�s  r�test_posix_fallocate_errnoz&PosixTester.test_posix_fallocate_errno�sj��	��!�!�#�q�"�-�-�-�-�-���	�	�	��z�U�[�(�(��)�(�(�(�(�(�����	���s� �
A�A�A�
posix_fadvisez test needs posix.posix_fadvise()c��tjtjtj��}	t
�|ddt
j��tj|��dS#tj|��wxYw�Nr)	rerrrr�rr�POSIX_FADV_WILLNEEDrwr�s  r�test_posix_fadvisezPosixTester.test_posix_fadvise�s_���W�Y�%�r�{�
3�
3��	�����A�q�%�*C�D�D�D��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�'A(�(A>c��	t�dddtj��dS#t$r!}|jtjkr�Yd}~dSd}~wwxYw)Nrr)rrr	rrrrs  r�test_posix_fadvise_errnoz$PosixTester.test_posix_fadvise_errno�so��	�����Q��5�+D�E�E�E�E�E���	�	�	��z�U�[�(�(��)�(�(�(�(�(�����	���s�'+�
A�A�Az!test needs fd support in os.utimec
��tj��}tjtjtj��}	t�|��t�|d��|�ttj|d��|�ttj||df��|�ttj|d|f��t�|t|��t|��f��t�|||f��|�ttj|||f||f���|�ttj||dfd���|�ttj|d|df���t�|t|��t|t|��z
dz��f��t�|t|��t|t|��z
dz��f���tj|��dS#tj|��wxYw)N�NN)�nsr�e��A)
�timererrrr�r�utimer8r9�int�
ValueErrorrw)r#�nowr�s   r�test_utime_with_fdzPosixTester.test_utime_with_fd�s����i�k�k��
�W�Y�%�r�{�
3�
3��	��K�K��O�O�O��K�K��D�!�!�!����i���b�,�G�G�G����i���b�3��+�F�F�F����i���b�4��+�F�F�F��K�K��S��X�X�s�3�x�x�0�1�1�1��K�K��S�#�J�'�'�'����j�%�+�r�C��:�3�PS�*��U�U�U����j�%�+�r�C��8���U�U�U����j�%�+�r�<�S�RS�H��U�U�U��K�K��S��X�X�s�C�#�c�(�(�N�c�+A�'B�'B�C�D�D�D��K�K���C���#�s�S��X�X�~��.D�*E�*E�F�K�G�G�G�
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�HI.�.Jz.test needs follow_symlinks support in os.utimec���tj��}t�tjdd���|�ttjtjdd���|�ttjtj|dfd���|�ttjtjd|fd���t�tjt|��t|��fd���t�tj||fd���t�tjd���dS)NF��follow_symlinksr�rrrrrr8r9r�r#rs  r�test_utime_nofollow_symlinksz(PosixTester.test_utime_nofollow_symlinks�s+���i�k�k��
���I�$�d�E��B�B�B����)�U�[�)�2B�&��	�	?�	?�	?����)�U�[�)�2B���+�u�	�	>�	>�	>����)�U�[�)�2B���+�u�	�	>�	>�	>�
���I�$�s�3�x�x��S���&:�$)�	�	+�	+�	+�
���I�$�s�C�j�%��H�H�H�
���I�$�e��<�<�<�<�<rH�writevztest needs posix.writev()c�H�tjtjtjtjz��}	tj|d��}|�|d��tj|dtj	��|�dt�|d����	t�|g��}|�|d��n#t$rYnwxYwtj
|��dS#tj
|��wxYw)Nr�r�r�
test1tt2t3)rerrrr�r�rrBr�r�rr�rrw)r#r�r��sizes    r�test_writevzPosixTester.test_writev�s��
�W�Y�%�r�y�2�:�'=�
>�
>��	��	�"�7�8�8�A����Q��#�#�#��H�R��B�K�(�(�(����]�E�J�J�r�2�,>�,>�?�?�?�
*��|�|�B��+�+��� � ��q�)�)�)�)���
�
�
���
����
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s0�A:D�3C%�D�%
C2�/D�1C2�2D�D!c��tjtjtjtjz��}	|�t��5}tj|ddzgdz��ddd��n#1swxYwY|�	|j
jtj��tj
|��dS#tj
|��wxYw)Nr�r�r�)rerrrr�r�r8rrrBr�rr�rwr�s   r�test_writev_overflow_32bitsz'PosixTester.test_writev_overflow_32bits�s����W�Y�%�r�y�2�:�'=�
>�
>��	��"�"�7�+�+�
6�r��	�"�t�e�|�n�u�4�5�5�5�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6����R�\�/���>�>�>��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s/�C�A;�/C�;A?�?C�A?�-C�C�readvztest needs posix.readv()c�x�tjtjtjtjz��}	tj|d��tj|dtj��d�dD��}|�	t�||��d��|�	gd�d�|D����	t�|g��}|�	|d��n#t$rYnwxYwtj
|��dS#tj
|��wxYw)Nrrc�,�g|]}t|����Sr�r�r�s  rr�z*PosixTester.test_readv.<locals>.<listcomp>r�rHr�r�r�c�,�g|]}t|����Sr�)r�r�s  rr�z*PosixTester.test_readv.<locals>.<listcomp>	s��8O�8O�8O�a��q���8O�8O�8OrH)rerrrr�r�rr�r�rBrr$rrw)r#r�r�r s    r�
test_readvzPosixTester.test_readvs+��
�W�Y�%�r�y�2�:�'=�
>�
>��	��H�R��'�'�'��H�R��B�K�(�(�(�3�3��3�3�3�C����U�[�[��S�1�1�2�6�6�6����6�6�6�8O�8O�3�8O�8O�8O�P�P�P�
*��{�{�2�r�*�*��� � ��q�)�)�)�)���
�
�
���
����
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s0�BD#�C=�&D#�=
D
�D#�	D
�
D#�#D9c�.�tjtjtjtjz��}	t
d��gdz}|�t��5}tj	||��ddd��n#1swxYwY|�
|jjtj
��|�
t|d��ddz��tj|��dS#tj|��wxYwr�)rerrrr�r�r�r8rr$rBr�rr�r�rwr�s    r�test_readv_overflow_32bitsz&PosixTester.test_readv_overflow_32bitss���W�Y�%�r�y�2�:�'=�
>�
>��	��U�#�#�$�u�,�C��"�"�7�+�+�
"�r����S�!�!�!�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"����
"�
"�
"�
"����R�\�/���>�>�>����U�3�q�6�]�]�E�5�L�9�9�9��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s0�-C>�%B�;C>�B�C>�B�AC>�>D�dupztest needs posix.dup()zWASI does not have dup()c�J�ttj��}	t�|�����}|�|t��tj	|��|�	��dS#|�	��wxYwrp)
rrrrr+rv�assertIsInstancerrerw)r#ryr�s   r�test_dupzPosixTester.test_dup$sx���)�"�
#�
#��	����2�9�9�;�;�'�'�B��!�!�"�c�*�*�*��H�R�L�L�L��H�H�J�J�J�J�J��B�H�H�J�J�J�J���s�AB�B"�confstrztest needs posix.confstr()c���|�ttjd��|�tt�d����dkd��dS)N�
CS_garbage�CS_PATHrT)r8rrr/rBrCr"s r�test_confstrzPosixTester.test_confstr0sS��	
���*�e�m�\�B�B�B�����U�]�]�9�5�5�6�6��:�D�A�A�A�A�ArH�dup2ztest needs posix.dup2()zWASI does not have dup2()c��ttj��}ttj��}	t�|���|�����|���|���dS#|���|���wxYwrp)rrrrr4rvrw)r#�fp1�fp2s   r�	test_dup2zPosixTester.test_dup26s����9�#�$�$���9�#�$�$��	��J�J�s�z�z�|�|�S�Z�Z�\�\�2�2�2��I�I�K�K�K��I�I�K�K�K�K�K��
�I�I�K�K�K��I�I�K�K�K�K���s�?B�*C�	O_CLOEXECzneeds os.O_CLOEXECr���c��tjtjtjtjz��}|�tj|��|�tj	|����dSrp)
rerrrr�r9rrw�assertFalse�get_inheritabler�s  r�test_oscloexeczPosixTester.test_oscloexecBs\���W�Y�%�r�{�2�<�'?�
@�
@�������"�%�%�%�����+�B�/�/�0�0�0�0�0rH�O_EXLOCKztest needs posix.O_EXLOCKc���tjtjtjtjztjz��}|�ttjtjtjtjztj	z��tj
|��ttd��r�tjtjtjtj
ztjz��}|�ttjtjtjtjztj	z��tj
|��dSdS)N�O_SHLOCK)rerrrr�r@r�r8r�
O_NONBLOCKrwr
rrBr�s  r�
test_osexlockzPosixTester.test_osexlockJs���W�Y�%��[���,�R�Z�7�9�9�����'�2�7�I�,<��+�b�k�1�"�-�?�	A�	A�	A�
�������5�*�%�%�	����)���R�[�0���;�=�=�B����g�r�w�	�0@� �k�"�+�5�b�m�C�
E�
E�
E��H�R�L�L�L�L�L�	�	rHrBztest needs posix.O_SHLOCKc���tjtjtjtjztjz��}tjtjtjtjztjz��}tj|��tj|��ttd��r�tjtjtjtjztjz��}|�
ttjtjtjtj
ztjz��tj|��dSdS)Nr@)rerrrr�rBr�rwr
rr8rr�r@rC)r#�fd1�fd2r�s    r�
test_osshlockzPosixTester.test_osshlockZs����g�i�&��[���,�R�Z�7�9�9���g�i�&��k�"�+�-�b�j�8�:�:��
���
�
�
�
���
�
�
��5�*�%�%�	����)���R�[�0���;�=�=�B����g�r�w�	�0@� �k�"�+�5�b�m�C�
E�
E�
E��H�R�L�L�L�L�L�	�	rH�fstatztest needs posix.fstat()c	��ttj��}	|�t�|�������|�t�|�������|�tdtjt|�������|���dS#|���wxYw�Nz4should be string, bytes, os.PathLike or integer, not)rrrrqrrIrv�stat�assertRaisesRegexr9�floatrwrxs  r�
test_fstatzPosixTester.test_fstatks����)�"�
#�
#��	��O�O�E�K�K��	�	���4�4�5�5�5��O�O�E�J�J�r�y�y�{�{�3�3�4�4�4��"�"�9�J��J��b�i�i�k�k� 2� 2�
4�
4�
4�
�H�H�J�J�J�J�J��B�H�H�J�J�J�J���s�CC5�5Dc
��|�t�tj����|�t�tjtj������|�tdtjttjtj������|�
tdtjd��|�
tdtjttj����|�
tdtjttjtj������dSrK)
rqrrLrrre�fsencode�assertWarnsRegex�DeprecationWarningr�rMr9r�r"s r�	test_statzPosixTester.test_statys,������
�
�9�#3�4�4�5�5�5�����
�
�2�;�y�/?�#@�#@�A�A�B�B�B����0�F��
�I�b�k�)�2B�&C�&C�D�D�	F�	F�	F�	
���y�F��
�D�	"�	"�	"�	
���y�F��
�D��!1�2�2�	4�	4�	4�	
���y�F��
�D���Y�-=�!>�!>�?�?�	A�	A�	A�	A�	ArH�mkfifozdon't have mkfifo()c�J�tjdkr+tj�dt
j��}nt
j}tj|��|�t
j|��	t�
|tjtj
z��n/#t$r"}|�d|z��Yd}~nd}~wwxYw|�tjt�|��j����dS)N�vxworksz/fifos/�posix.mkfifo(): %s)r�r�rer��joinrrrrrrUrL�S_IRUSR�S_IWUSR�PermissionErrorr�rq�S_ISFIFO�st_mode)r#�	fifo_pathrs   r�test_mkfifozPosixTester.test_mkfifo�s����<�9�$�$�����Y�	�0@�A�A�I�I�!�(�I����#�#�#����	�(�)�4�4�4�	4��L�L��D�L�4�<�$?�@�@�@�@���	4�	4�	4��M�M�.��2�3�3�3�3�3�3�3�3�����	4��������
�e�j�j��&;�&;�&C�D�D�E�E�E�E�Es�=2B0�0
C�:C�C�mknod�S_IFIFOzdon't have mknod()/S_IFIFOc�V�tjtj��tjtjztjz}	t�tj|d��|�	tj
t�tj��j����nS#t$rF}|�
|jtjtjtjf��Yd}~nd}~wwxYwtjtj��	t�tj|dd���dS#t$rG}|�
|jtjtjtjf��Yd}~dSd}~wwxYw)Nr)r��mode�device�dir_fd)rrrrLrbrZr[rrarqr]r^r�assertInrrlr��EACCES)r#rdrs   r�
test_mknodzPosixTester.test_mknod�s}��
	���)�*�*�*��|�d�l�*�T�\�9��	Q��K�K�	�(�$��2�2�2�
�O�O�D�M�%�*�*�Y�5E�*F�*F�*N�O�O�P�P�P�P���	N�	N�	N�
�M�M�!�'�E�K���u�|�#L�M�M�M�M�M�M�M�M�����	N����	���)�*�*�*�	N��K�K�Y�-�D���
�
�
�
�
�
���	N�	N�	N��M�M�!�'�E�K���u�|�#L�M�M�M�M�M�M�M�M�M�����	N���s0�&B;�;
D�<D�D�-(E�
F(�!<F#�#F(�makedevztest needs posix.makedev()c�z�t�tj��}|j}|�|t��|�|d��t�|��}|�|t��|�|d��|�	t�|��|��|�
ttjt|����|�
ttj��|�
ttftjd��t�|��}|�|t��|�|d��|�	t�|��|��|�
ttjt|����|�
ttj��|�
ttftjd��|�	t�||��|��|�
ttjt|��|��|�
ttj|t|����|�
ttj|��|�
ttj��dS)NrrP)rrLrr�st_devr-rrD�majorrBr8r9rNr�
OverflowError�minorrj)r#�st�devrmros     r�test_makedevzPosixTester.test_makedev�sU��
�Z�Z�	�(�
)�
)���i�����c�3�'�'�'�����Q�'�'�'����C� � �����e�S�)�)�)�����q�)�)�)�������S�)�)�5�1�1�1����)�U�[�%��*�*�=�=�=����)�U�[�1�1�1����:�}�5�u�{�B�G�G�G����C� � �����e�S�)�)�)�����q�)�)�)�������S�)�)�5�1�1�1����)�U�[�%��*�*�=�=�=����)�U�[�1�1�1����:�}�5�u�{�B�G�G�G�������u�e�4�4�c�:�:�:����)�U�]�E�%�L�L�%�H�H�H����)�U�]�E�5��<�<�H�H�H����)�U�]�E�:�:�:����)�U�]�3�3�3�3�3rHc
�z����	���fd�}tj��}tj��}|�||��|||��|�d|��|||��|�|d��|||��tjdkr|dv}n|dk}t
jr�n|r`tjdkrdnd}|�||��|||��|�dd��|||��|�||��|||��n�t	j��dvrtj	d	�����
t|�dd��|||����
t|�dd��|||��dtj��vr*��
t|�dd��|||��ttfD]h}	��
t|�|	|��|��|||����
t|�||	|����|||���idS)
Nc�����C����}��|j|����|j|��dSdSrp)rB�st_uid�st_gid)�uid�gidrL�first_paramr#�	stat_funcs   ���r�
check_statz6PosixTester._test_all_chown_common.<locals>.check_stat�sV����$� �y��-�-��� � ���c�2�2�2�� � ���c�2�2�2�2�2�%�$rHrPrW)rr5rlr�)zHP-UX�SunOSz1Skipping because of non-standard chown() behavior)rer3r.r�r�r�
is_emscripten�systemrirjr8rr/�strrNr9)
r#�
chown_funcryrzr{rwrx�is_root�	big_value�ts
` ``      r�_test_all_chown_commonz"PosixTester._test_all_chown_common�s������=�	3�	3�	3�	3�	3�	3�	3�
�i�k�k���i�k�k���
�;��S�)�)�)��
�3������
�;��C�(�(�(��
�3������
�;��R�(�(�(��
�3������<�9�$�$��f�}�G�G��a�x�G�� �)	%�
�
�%	%�"#&�,�)�";�";����I��J�{�I�y�9�9�9��J�y�)�,�,�,��J�{�B��+�+�+��J�y�)�,�,�,��J�{�C��-�-�-��J�s�C� � � � �
�_�
�
�"4�
4�
4��#�%/�0�0�
0�
���g�z�;��1�E�E�E��J�s�C� � � ����g�z�;��2�F�F�F��J�s�C� � � ������&�&��!�!�'�:�{�B��J�J�J��
�3��$�$�$��e��	!�	!�A����i��[�!�!�C�&�&�#�N�N�N��J�s�C� � � ����i��[�#�q�q��v�v�N�N�N��J�s�C� � � � �		!�	!rH�getgid() is a stubc�L�tjtj��|�t
tjtjdd��tjtj��|�	tjtjtj
��dSrO)rerrrr8rr�chown�create_empty_filer�rLr"s r�
test_chownzPosixTester.test_chownss��	�	�)�"�#�#�#����'�5�;�	�0@�"�b�I�I�I�	�#�I�$4�5�5�5��#�#�E�K��1A�5�:�N�N�N�N�NrH�fchownztest needs os.fchown()c	�d�tjtj��t	tjd��}	|���}|�tj|ttdd����|�
��dS#|�
��wxYw)Nr�rI)rerrrrrvr�rr�r6rw)r#�	test_filer�s   r�test_fchownzPosixTester.test_fchown s���	�	�)�"�#�#�#���)�3�/�/�	�	��!�!�#�#�B��'�'���b�(/��w��(E�(E�
G�
G�
G�
�O�O�������I�O�O�������s�A	B�B/�lchownztest needs os.lchown()c	��tjtj��tjt
tj��|�tjtjttdd����dS)N�lstat)
rerrr�symlink�_DUMMY_SYMLINKr�rr�r6r"s r�test_lchownzPosixTester.test_lchown/sk��	�	�)�"�#�#�#�
�
�>�9�#3�4�4�4��#�#�E�L�)�2B�$+�E�7�D�$A�$A�	C�	C�	C�	C�	CrHr�ztest needs posix.chdir()c��t�tj��|�t
tjtj��dSrp)rr�rerrr8rrrr"s r�
test_chdirzPosixTester.test_chdir8s9��
���B�I�������'�5�;�	�0@�A�A�A�A�ArHc��|�tjt�t
j����dSrp)rgrrr�listdirrerrr"s r�test_listdirzPosixTester.test_listdir=s-���
�
�i�&��
�
�b�i�(@�(@�A�A�A�A�ArHc�t�|�tjt�����dSrp)rgrrrr�r"s r�test_listdir_defaultz PosixTester.test_listdir_default@s)��	
�
�
�i�&��
�
���8�8�8�8�8rHc��|�tjtj��t
�d����dS�N�.)rgrerQrrrr�r"s r�test_listdir_byteszPosixTester.test_listdir_bytesEs7��	
�
�
�b�k�)�"2�3�3�U�]�]�4�5H�5H�I�I�I�I�IrHc��ttfD]�}|�t��5t�|d����}ddd��n#1swxYwY|�tjtj
��|��|D]*}|�t|��t���+��dSr�)r��
memoryview�assertWarnsrSrr�rgrerQrr�assertIs�typer�)r#�cls�namesr;s    r�test_listdir_bytes_likez#PosixTester.test_listdir_bytes_likeJs����j�(�	1�	1�C��!�!�"4�5�5�
1�
1��
�
�c�c�$�i�i�0�0��
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1����
1�
1�
1�
1��M�M�"�+�i�&6�7�7��?�?�?��
1�
1���
�
�d�4�j�j�%�0�0�0�0�
1�		1�	1s�$A�A	�"A	z)test needs fd support for posix.listdir()c�>�t�t���tj��}|�tj|��|�tt�d����tt�|������|�tt�d����tt�|������dS)N�.)	rrr'r�rrwrB�sortedr�)r#�fs  r�test_listdir_fdzPosixTester.test_listdir_fdRs���
�J�J�u�|�|�~�~�u�~�6�6�������Q�'�'�'�����5�=�=��%�%�&�&��5�=�=��#�#�$�$�	�	�	�
	
����5�=�=��%�%�&�&��5�=�=��#�#�$�$�	�	�	�	�	rH�accessztest needs posix.access()c��|�t�tjt
j����dSrp)rqrr�rrre�R_OKr"s r�test_accesszPosixTester.test_accessas-��������Y�%5�r�w�?�?�@�@�@�@�@rH�umaskztest needs posix.umask()c��t�d��}|�|t��t�|��dSr)rr�r-r)r#�old_masks  r�
test_umaskzPosixTester.test_umaskes?���;�;�q�>�>�����h��,�,�,�
���H�����rH�strerrorztest needs posix.strerror()c�`�|�t�d����dSr)rqrr�r"s r�
test_strerrorzPosixTester.test_strerrorks(��	
������q�)�)�*�*�*�*�*rH�pipeztest needs posix.pipe()c��t���\}}tj|��tj|��dSrp)rr�rerw)r#�reader�writers   r�	test_pipezPosixTester.test_pipeps9����������
������
�������rH�pipe2ztest needs os.pipe2()�c���|�ttjd��|�ttjdd��tjd��\}}tj|��tj|��tjtjtjz��\}}|�tj|��|�tj|��|�tj	|����|�tj	|����|�tj
|����|�tj
|����|�ttj|d��	tj
|dtjz��dS#t$rYdSwxYw)N�DEADBEEFrr5r�)r8r9rer�rwr9rCrr=r>�get_blockingrr�rr�
PIPE_MAX_SIZE)r#�rr�s   r�
test_pipe2zPosixTester.test_pipe2vs���	
���)�R�X�z�:�:�:����)�R�X�q�!�4�4�4��x��{�{���1�
������
�������x���R�]�2�3�3���1������!�$�$�$������!�$�$�$�����+�A�.�.�/�/�/�����+�A�.�.�/�/�/�������+�+�,�,�,�������+�+�,�,�,����'�2�7�A�q�1�1�1�	��H�Q��w�4�4�5�5�5�5�5���	�	�	��D�D�	���s�?"G#�#
G1�0G1c���ddl}|�ttj|jdz��|�ttj|jdz��dS�Nrr5)�	_testcapir8rnrer��INT_MAX�UINT_MAX)r#r�s  r�test_pipe2_c_limitszPosixTester.test_pipe2_c_limits�sZ��
	�������-���9�3D�q�3H�I�I�I����-���9�3E��3I�J�J�J�J�JrHrztest needs posix.utime()c�t�tj��}t�tjd��|�ttjtjd��|�ttjtj|df��|�ttjtjd|f��t�tjt|��t|��f��t�tj||f��dS)Nrrrs  r�
test_utimezPosixTester.test_utime�s����i�k�k��
���I�$�d�+�+�+����)�U�[�#�*�L�	:�	:�	:����)�U�[�#�*�S�$�K�	9�	9�	9����)�U�[�#�*�T�3�K�	9�	9�	9�
���I�$�s�3�x�x��S���&:�;�;�;�
���I�$�s�C�j�1�1�1�1�1rHc���tj|��}|�t|d����|jtjz}	|||fi|��nD#t$r7}|jtjkr�d}|�	|��Yd}~nd}~wwxYw	tj|��}|�
|jtjz|j��	t|d��}	n<#t$r/}
|�
|
jtj��Yd}
~
nd}
~
wwxYwt�||j��dS#t�||j��wxYw)N�st_flags�2chflag UF_IMMUTABLE not supported by underlying fsr})rerLrqr
r��UF_IMMUTABLErr�
EOPNOTSUPPr�rBrrlr�chflags)r#�chflags_func�target_file�kwargsrp�flags�errr��new_str�rs           r�_test_chflags_regular_filez&PosixTester._test_chflags_regular_file�s���
�W�[�
!�
!�������J�/�/�0�0�0���d�/�/��	��L��e�6�6�v�6�6�6�6���	�	�	��y�E�,�,�,��F�C��M�M�#�������������		����	4��W�[�)�)�F����R�[�4�+<�<�f�o�N�N�N�
7��+�t�,�,�����
7�
7�
7�� � ���%�+�6�6�6�6�6�6�6�6�����
7����
�M�M�+�r�{�3�3�3�3�3��E�M�M�+�r�{�3�3�3�3���sO�
A�
B�"-B�B�AE�C0�/E�0
D)�:%D$�E�$D)�)E�"E0r�ztest needs os.chflags()c�Z�|�tjtj��dSrp)r�rr�rrr"s r�test_chflagszPosixTester.test_chflags�s#���'�'��
�y�7G�H�H�H�H�HrH�lchflagsztest needs os.lchflags()c��|�tjtj��|�tjtjd���dS�NFr)r�rr�rrr�r"s r�test_lchflags_regular_filez&PosixTester.test_lchflags_regular_file�sP���'�'���	�8H�I�I�I��'�'��
�y�7G�8=�	(�	?�	?�	?�	?�	?rHc��tjtj��}|�t|d����|�tjt��tj	tjt��tj
t��}d�}tj|fD�]$}|j
tjz}	|t|��nD#t$r7}|jt jkr�d}|�|��Yd}~nd}~wwxYw	tjtj��}tj
t��}	|�|j
|j
��|�|j
tjz|	j
��|t|j
����#|t|j
��wxYwdS)Nr�c�<�t�||d���Sr�)rr�)r�r�s  r�chflags_nofollowz;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollow�s���=�=��u�e�=�D�D�DrHr�)rerLrrrqr
rrr�r�r�rr�r�r�rrr�r�rB)
r#�	testfn_st�dummy_symlink_str��fnr�r�r��
new_testfn_st�new_dummy_symlink_sts
          r�test_lchflags_symlinkz!PosixTester.test_lchflags_symlink�s����G�I�,�-�-�	�����	�:�6�6�7�7�7����	�(�.�9�9�9�
�
�9�#�^�4�4�4��8�N�3�3��	E�	E�	E��>�#3�4�	>�	>�B�$�-��0A�A�E�
#���>�5�)�)�)�)���
#�
#�
#��9�� 0�0�0��J���
�
�c�"�"�"�"�"�"�"�"�����	
#����

>� "��	�(8� 9� 9�
�')�x��'?�'?�$�� � ��!3�]�5K�L�L�L�� � �!1�!:�T�=N�!N�!5�!>�@�@�@���>�#3�#<�=�=�=�=����>�#3�#<�=�=�=�=����%	>�	>s%�
C�
D �)-D�D �$BG�Gc��tjdkrt}nt}tj���D]K\}}|�t|��|��|�t|��|���LdS)N�nt)	rer;rr�rr��itemsrBr�)r#�	item_type�k�vs    r�test_environzPosixTester.test_environ�s��
�7�d�?�?��I�I��I��M�'�'�)�)�	1�	1�D�A�q����T�!�W�W�i�0�0�0����T�!�W�W�i�0�0�0�0�	1�	1rHc�\�|�t��5tjdd��ddd��n#1swxYwY|�t��5tjdd��ddd��n#1swxYwY|�t��5tjdd��ddd��n#1swxYwY|�t��5tjdd��ddd��n#1swxYwY|�t��5tjd	d
��ddd��n#1swxYwY|�t��5tjdd��ddd��dS#1swxYwYdS)
NzFRUITVEGETABLE�cabbagesFRUITVEGETABLEscabbage�FRUITzorangeVEGETABLE=cabbagesFRUITsorangeVEGETABLE=cabbagezFRUIT=ORANGE�lemonsFRUIT=ORANGEslemon)r8rre�putenvr"s r�test_putenvzPosixTester.test_putenv�s���
�
�
�z�
*�
*�	5�	5��I�(�)�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�
�
�z�
*�
*�	7�	7��I�)�:�6�6�6�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�
�
�
�z�
*�
*�	<�	<��I�g�:�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�
�
�
�z�
*�
*�	>�	>��I�h� <�=�=�=�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�
�
�
�z�
*�
*�	/�	/��I�n�g�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�
�
�
�z�
*�
*�	1�	1��I�o�x�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1si�=�A�A�"B�B�B�)C�C�C�0D�D�D�7E�E� E�>F!�!F%�(F%r'ztest needs posix.getcwd()c����d}tj��}tj�tj��dz}	tj|��tj|��n0#Ytj|��t	j|��dSxYw	tj|��t	j|��dS#tj|��t	j|��wxYw)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwd)	rer'r��abspathrr�mkdirr��rmtree)r#�dirnamerr�	base_path�_create_and_do_getcwds    @r�test_getcwd_long_pathnamesz&PosixTester.test_getcwd_long_pathnamess����L��������G�O�O�I�$4�5�5�	�A�	�	(��H�Y�����H�Y������	+�
�(
�H�V������Y�'�'�'�'�'����5
 �2
�H�V������Y�'�'�'�'�'��
�H�V������Y�'�'�'�'���s$�(A-�,C�-B�/C�C�*C2�getgrouplistztest needs posix.getgrouplist()r3ztest needs os.getuid()c��tjtj����d}tjtj����d}|�|t
�||����dS)NrrA)rfr`rer3rgrr�)r#�user�groups   r�test_getgrouplistzPosixTester.test_getgrouplist&sb���|�B�I�K�K�(�(��+����R�Y�[�[�)�)�!�,���
�
�e�U�/�/��e�<�<�=�=�=�=�=rHr,ztest needs os.getegid()�popenztest needs os.popen()c�F�tjd��5}|������}|���}ddd��n#1swxYwY	td�|���D����}n#t$rt��}YnwxYw|�|stj	d���tjdkrgddl}|�
d��pd}td�|�d	��dd
�D����dkrtj	d���|�t �����}|�|p|t ���hk��dS)
Nzid -G 2>/dev/nullc3�4K�|]}t|��V��dSrp�r)r��gs  r�	<genexpr>z-PosixTester.test_getgroups.<locals>.<genexpr>8s(����<�<��S��V�V�<�<�<�<�<�<rHzneed working 'id -G'�darwinr�MACOSX_DEPLOYMENT_TARGETz10.3c3�4K�|]}t|��V��dSrpr)r�r�s  rrz-PosixTester.test_getgroups.<locals>.<genexpr>Bs(����8�8��S��V�V�8�8�8�8�8�8rHr�r�)r�r:z$getgroups(2) is broken prior to 10.6)rerr��striprw�setr�rrirjr�r��	sysconfig�get_config_var�tuple�symmetric_differencerr/rqr,)r#�idg�groups�ret�
idg_groupsr
�dt�symdiffs        r�test_getgroupszPosixTester.test_getgroups/s����X�)�
*�
*�	�c��X�X�Z�Z�%�%�'�'�F��)�)�+�+�C�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	��<�<�V�\�\�^�^�<�<�<�<�<�J�J���	�	�	����J�J�J�	�����?�*�?��#�$:�;�;�;��<�8�#�#������)�)�*D�E�E�O��B��8�8�R�X�X�c�]�]�1�Q�3�%7�8�8�8�8�8�7�B�B��'�(N�O�O�O��1�1�%�/�/�2C�2C�D�D�����G��C�w�5�=�=�?�?�2C�'C�D�D�D�D�Ds#�;A�A �#A �(+B�B/�.B/�SIGCHLDz2CLD_XXXX be placed in si_code for a SIGCHLD signal�
waitid_resultztest needs os.waitid_resultc��tjtjtjtjtjtjdSrp)re�
CLD_EXITED�
CLD_KILLED�
CLD_DUMPED�CLD_TRAPPED�CLD_STOPPED�
CLD_CONTINUEDr"s r�test_cld_xxxx_constantsz#PosixTester.test_cld_xxxx_constantsLs6��	�
�
�
�
�
�
�
�
�
���
���
����rH�sched_yieldzdon't have scheduling support�sched_setaffinityz!don't have sched affinity supportc�8�t���dSrp)rr"r"s r�test_sched_yieldzPosixTester.test_sched_yield[s��	�������rH�sched_get_priority_maxz!requires sched_get_priority_max()c���tj}t�|��}t�|��}|�|t
��|�|t
��|�||��tjdkrN|�	ttjd��|�	ttjd��dSdS)Nri��)r�SCHED_RR�sched_get_priority_minr&r-rrDr�r�r8r)r#�pol�lo�his    r�test_sched_priorityzPosixTester.test_sched_priority`s���
�n��
�
)�
)�#�
.�
.��
�
)�
)�#�
.�
.�����b�#�&�&�&����b�#�&�&�&�����B�'�'�'��<�8�#�#����g�u�'C�S�I�I�I����g�u�'C�S�I�I�I�I�I�$�#rHc�v�d�tj���D��}t�d��}|�||��	t�tj����}|�||��n-#t$r }|jtj	kr�Yd}~nd}~wwxYw|�
ttjd��|�
ttjd��t�d��}|�|j
t��tj�d��s�	t�d||��t�d|��n-#t$r }|jtj	kr�Yd}~nd}~wwxYw|�
ttjd|��|�
ttjd||��|�
t(tjd|d��|�
t(tjdd��t�d��}|�
t(tjd|��d}t�|��}|�
t,tjd|��t�|���}|�
t,tjd|��dS)Nc�B�g|]\}}|�d���|��S)�SCHED_�r�)r�r;�scheds   rr�zDPosixTester.test_get_and_set_scheduler_and_param.<locals>.<listcomp>rs<��=�=�=���u�"&�/�/�(�";�";�=�u�=�=�=rHrrP�r�r��+l���)�sched_priority)r�__dict__r�rrgrer2rrrlr8�sched_getparamr-r5rr�r�r��sched_setscheduler�sched_setparamr9�sched_paramrn)r#�possible_schedulers�mine�parentr�param�larges       r�$test_get_and_set_scheduler_and_paramz0PosixTester.test_get_and_set_scheduler_and_paramps���=�=���8L�8L�8N�8N�=�=�=���'�'��*�*���
�
�d�/�0�0�0�	7��-�-�b�j�l�l�;�;�F�

�M�M�&�"5�6�6�6�6��	�	�	�	��w�%�+�%�%��&�%�%�%�%�����	����
	
���'�5�#;�R�@�@�@����'�5�#7��<�<�<��$�$�Q�'�'�����e�2�C�8�8�8�
�|�&�&�'<�=�=�	H�
��(�(��D�%�8�8�8��$�$�Q��.�.�.�.���
�
�
��7�e�k�)�)��*�)�)�)�)�����
����
���g�u�';�R��G�G�G����'�5�#;�R��u�M�M�M����)�U�%=�q�$��M�M�M����)�U�%9�1�b�A�A�A��!�!�$�'�'�����)�U�%9�1�e�D�D�D����!�!�%�(�(�����-��)=�q�%�H�H�H��!�!�%��!�8�8�����-��)=�q�%�H�H�H�H�Hs0�+B�
C�&C�C�/7F'�'
G�1G�G�sched_rr_get_intervalzno functionc�P�	t�d��}nB#t$r5}|jtjkr�|�d��Yd}~nd}~wwxYw|�|t��|�|d��|�	|d��dS)Nrz only works on SCHED_RR processesgg�?)
rrArrr�r�r-rNrD�
assertLess)r#�intervalrs   r�test_sched_rr_get_intervalz&PosixTester.test_sched_rr_get_interval�s���	>��2�2�1�5�5�H�H���	>�	>�	>��w�%�,�&�&���M�M�<�=�=�=�=�=�=�=�=�����	>����	
���h��.�.�.�����"�-�-�-�����"�%�%�%�%�%s��
A�+A�Ac���t�d��}|�|t��|�t|��d��tj�d��s&|�	ttjd��|D]I}|�|t��|�|d��|�|d���JdS)Nrr5r�rPr
)
r�sched_getaffinityr-rrDrCr�r�r�r8rrrC)r#�mask�cpus   r�test_sched_getaffinityz"PosixTester.test_sched_getaffinity�s����&�&�q�)�)�����d�C�(�(�(�����D�	�	�1�-�-�-��|�&�&�y�1�1�	D����g�u�'>��C�C�C��	*�	*�C��!�!�#�s�+�+�+��#�#�C��+�+�+��O�O�C��)�)�)�)�	*�	*rHc	��t�d��}t|��dkr|���t�d|��|�t�d��|��|�ttjdg��|�ttjddg��|�ttjdttd����|�ttjdddzg��tj
�d��s)|�ttjd|��dSdS)Nrr5i�����0X�r�rP)rrGrC�popr#rBr8rr�maprrnr�r�r�)r#rHs  r�test_sched_setaffinityz"PosixTester.test_sched_setaffinity�s7���&�&�q�)�)���t�9�9�q�=�=��H�H�J�J�J�
����4�(�(�(�����0�0��3�3�T�:�:�:����'�5�#:�A�r�B�B�B����*�e�&=�q�3�%�H�H�H����*�e�&=�q�#�c�4�.�.�Q�Q�Q����-��)@�!�a��f�X�N�N�N��|�&�&�y�1�1�	J����g�u�'>��D�I�I�I�I�I�	J�	JrHzNo dynamic linking on WASIc�f�tjtjtjtjdSrp)r�	RTLD_LAZY�RTLD_NOW�RTLD_GLOBAL�
RTLD_LOCALr"s r�test_rtld_constantszPosixTester.test_rtld_constants�s*��	���
���
���
����rH�	SEEK_HOLEz(test needs an OS that reports file holesc
��ttjd��5}|�d��|���|���}|���}	t|��D]j}|�|tj
||tj����|�|tj
||tj
�����k|�ttj
||tj��|�ttj
||tj
��n"#t$rt!jd���wxYw	ddd��dS#1swxYwYdS)Nzr+bshellozOSError raised!)rrrrr��tellrv�rangerBrer��	SEEK_DATA�assertLessEqualrWr8rrirj)r#ryr �fnor�s     r�
test_fs_holeszPosixTester.test_fs_holes�s����)�"�E�
*�
*�	;�b��H�H�X�����H�H�J�J�J��7�7�9�9�D��)�)�+�+�C�
;��t���O�O�A��$�$�Q����a���(F�(F�G�G�G��(�(��r�x��Q���/M�/M�N�N�N�N��!�!�'�2�8�S�$���M�M�M��!�!�'�2�8�S�$���M�M�M�M���
;�
;�
;�
�'�(9�:�:�:�
;����N�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;�	;�	;s+�AE=�.CE
�E=�
E,�,E=�=F�Fc	�L�	dD]�}tt|d��}|��dtjfD]]}	|d|���#t$rA}|�d�|��t|����Yd}~n d}~wwxYw|�d|z����dS)N)�rename�replace�link�noodly2�doesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r6rerrrrg�formatrrk)r#r;�function�dstrs     r�test_path_error2zPosixTester.test_path_error2�s���	�2�	H�	H�D��r�4��.�.�H����!�9�#3�4�
H�
H����H�3�S�9�9�9�9�������M�M�"B�"I�"I�#�"N�"N�PS�TU�PV�PV�W�W�W��E�E�E�E�E����������	�	�?�$�F�G�G�G��	H�	Hs�=�
B�6B�Bc�\�tj}|dz}|�tj|��tj|��d}	|�t
��5t
j|tjtj	z��}ddd��n#1swxYwY|�t
j
|��n#|�t
j
|��wwxYw|�tj�
|����|�t
tj|��|�tj�
|����t|d���
��|�t
tj|��dS)N�r)rrrrr8rrerr�r�rwr=r��existsr�rL�r#r��fn_with_NULr�s    r�test_path_with_null_characterz)PosixTester.test_path_with_null_character�s���
�
���4�i�����	�(�"�-�-�-�������
��	��"�"�:�.�.�
D�
D��W�[�"�+��
�*B�C�C��
D�
D�
D�
D�
D�
D�
D�
D�
D�
D�
D����
D�
D�
D�
D��~����������~��������������������+�+�,�,�,����*�b�h��<�<�<���������+�+�,�,�,��R������������*�b�g�{�;�;�;�;�;s0�	B>�#-B�B>�B � B>�#B �$B>�>Cc��tjtj��}|dz}|�tj|��tj|��d}	|�t��5tj|tj	tj
z��}ddd��n#1swxYwY|�tj|��n#|�tj|��wwxYw|�tj
�|����|�ttj|��|�tj
�|����t|d�����|�ttj|��dS)Nr�r)rerQrrrrr8rrr�r�rwr=r�rkr�rLrls    r�test_path_with_null_bytez$PosixTester.test_path_with_null_bytes���
�[��)�
*�
*���5�j�����	�(�"�-�-�-�������
��	��"�"�:�.�.�
D�
D��W�[�"�+��
�*B�C�C��
D�
D�
D�
D�
D�
D�
D�
D�
D�
D�
D����
D�
D�
D�
D��~����������~��������������������+�+�,�,�,����*�b�h��<�<�<���������+�+�,�,�,��R������������*�b�g�{�;�;�;�;�;s0�C�5-B.�"C�.B2�2C�5B2�6C�C)�
pidfd_openzpidfd_open unavailablec�"�|�t��5}tjd��ddd��n#1swxYwY|jjt
jkr|�d��t|jt��r|�d|j����|�
|jjt
j��tjtjtj
��d����dS)NrPz"system does not support pidfd_openzpidfd_open syscall blocked: r)r8rrerqr�rrr��
isinstancer\rBr�rwr0)r#r�s  r�test_pidfd_openzPosixTester.test_pidfd_opens��
�
�
�w�
'�
'�	�2��M�"����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�<����-�-��M�M�>�?�?�?��b�l�O�4�4�	K��M�M�I���I�I�J�J�J������+�U�\�:�:�:�
����r�y�{�{�A�.�.�/�/�/�/�/s�<�A�A)s�__name__�
__module__�__qualname__r$r=ri�
skipUnlessr
rrGrLrSrWr[r^rfrmrsrzr�r�r6re�supports_fdr�
requires_forkr�r�r�r�r�r�r��requires_32br�r�r�r�r�rrr
rrr�supports_follow_symlinksrr!r#r(r*�skipIf�is_wasir.r3r8�requires_linux_version�requires_subprocessr?rDrHrOrTr`rLrirrr�r�skip_unless_working_chmodr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��cpython_onlyr�r�r�r�r�r�r�r�r�rr�signalr!�requires_sched_h�requires_sched_affinityr%r-�requires_schedr@rErJrPrVr^rhrnrprtr�rHrrr4s�������0�0�0�@�@�@� �X������4�4�7�9�9�,�,�9�9�,��X������4�4�7�9�9�,�,�9�9�,��X������4�4�7�9�9�7�7�9�9�7��X������4�4�7�9�9�G�G�9�9�G��X������4�4�7�9�9�7�7�9�9�7��X������4�4�7�9�9�H�H�9�9�H��X������5�5�5�7�7��X�����j�1�1�3N�O�O�I�I�P�O�7�7�I�.�X�����	�2�2�5�7�7�2�2�7�7�2��X�����
�3�3�6�8�8���8�8���X������4�4�7�9�9���9�9���X�����
�3�3�5R�S�S�,�,�T�S�,��X�����X�t�4�4���F�Hy�z�z��W����
�
���{�z�
��X������1�1�3N�O�O��W����.�.���P�O�.��W����:%�:%���:%�x�X������0�0�2L�M�M�	�	�N�M�	��X������0�0�2L�M�M�	�	�N�M�	��X������1�1�3N�O�O���P�O���X������1�1�3N�O�O��X������4�4�6R�S�S���T�S�P�O��(�X������1�1�3N�O�O��	�	��\�P�O�	��X������1�1�3N�O�O���P�O���X�����	�2�2�4P�Q�Q���R�Q���X�����	�2�2�4P�Q�Q��X�����
�6�6�8P�Q�Q���R�Q�R�Q���X�����	�2�2�4P�Q�Q�����\�R�Q���X�����(9�:�:�,�.�.���.�.��$�X�����(9�:�:�,�.�.���.�.���X������8�8�*�,�,���,�,���X������8�8�*�,�,���,�,���X����R�^�3�5X�Y�Y���Z�Y��(�X����R�%@�@�Br�s�s�=�=�t�s�=��X������1�1�3N�O�O���P�O��*�X������1�1�3N�O�O�����\�P�O���X������0�0�2L�M�M���N�M��*�X������0�0�2L�M�M��	�	��\�N�M�	��X������.�.�1�3�3��X�_�W�_�&@�A�A���B�A�3�3���X�����	�2�2�5�7�7�B�B�7�7�B��X������/�/�2�4�4��X�_�W�_�&A�B�B���C�B�4�4���X�����[�1�1�3G�H�H�#�W�#�A�q�"�-�-� �W� �"�"�1�1�#�"�.�-�I�H�1�
�X�����
�3�3�4�6�6���6�6���X�����
�3�3�4�6�6�
�
�6�6�
��X������0�0�3�5�5�
�
�5�5�
�A�A�A�"�X������1�1�3H�I�I�F�F�J�I�F��X������0�0�M�W�W�T�9�5M�5M�5�7�7�N�N�7�7�N�,�X�����	�2�2�4P�Q�Q�4�4�R�Q�4�8F!�F!�F!�P�(��X�_�W�*�,@�A�A�O�O�B�A�)�(�O��(��X������1�1�3K�L�L��X�_�W�*�,@�A�A�
�
�B�A�M�L�)�(�
��(��X������1�1�3K�L�L�C�C�M�L�)�(�C��X������0�0�2L�M�M�B�B�N�M�B�B�B�B�9�9�9�
J�J�J�
1�1�1��X����"�.�8�D�F�F���F�F���X������1�1�3N�O�O�A�A�P�O�A��X������0�0�2L�M�M���N�M��
�X�����
�3�3�6�8�8�+�+�8�8�+��X������/�/�1J�K�K���L�K��
�X�����W�-�-�/F�G�G�#�W�#�A�q�"�-�-���.�-�H�G��4
���X�����W�-�-�/F�G�G�#�W�#�A�q�"�-�-�K�K�.�-�H�G���K��X������0�0�2L�M�M�
2�
2�N�M�
2�4�4�4�0�X�����	�2�2�4M�N�N�I�I�O�N�I��X�����
�3�3�5O�P�P�?�?�Q�P�?�
�X�����
�3�3�5O�P�P�>�>�Q�P�>�@1�1�1�1�1�1��X������1�1�3N�O�O�!(�!(�P�O�!(�F�X������7�7�9Z�[�[��X�����j�1�1�3N�O�O��X�����X�.�.�0H�I�I�>�>�J�I�P�O�\�[�>��X�����Y�/�/�1J�K�K��X�����W�-�-�/F�G�G� �W� �"�"�E�E�#�"�H�G�L�K�E�4�X������3�3�5i�j�j��X�����_�5�5�7T�U�U���V�U�k�j��+�x�*�7�7�5�-�+H�+H�+J�L�L��1�h�1�'�'�%�AT�2U�2U�2U�W�W����������X�����(@�A�A�<�>�>�J�J�>�>���J��&I�&I��^�&I�P�X�����(?�@�@�-�P�P�&�&�Q�P�&��
*�
*���
*��
J�
J���
J��X�_�W�_�&B�C�C���D�C���X�����[�1�1�C�E�E�;�;�E�E�;�2H�H�H�$<�<�<�$<�<�<�$�X�����\�2�2�4L�M�M�0�0�N�M�0�0�0rHrc�f�eZdZdZed���Zed���Zeje	j
e	jvd��d���Zeje	j
e	jvd��d���Zejee	d��o
e	je	jvd	��ejejd
��d�����Zeje	je	jvd��d
���Zeje	je	jvd��d���Zejejd��ejee	d��o
e	je	jvd��d�����Zeje	je	jvd��d���Zejee	d��oe	je	jvoeed��d��d���Zeje	j e	jvd��d���Z!ejee	d��o
e	j"e	jvd��d���Z#eje	j$e	jvd��d ���Z%eje	j&e	jvd!��d"���Z'eje	j(e	jvd#��d$���Z)ejee	d%��o
e	j*e	jvd&��d'���Z+d(S))�TestPosixDirFdrc#�K�txjdz
c_tj�d|j��}tj�d|j�d�}t�|��|�tj|��tj	�
||��}tj|��5}|||fV�ddd��dS#1swxYwYdS)Nr5�_�base)r��countrrrr�r�rmdirrer�rY�open_dir_fd)r#r;�base_dir�fullnamerfs     r�preparezTestPosixDirFd.prepare.s��������!����"�1�1�T�Z�1�1���&�9�9���9�9�9��
���H���������X�.�.�.��7�<�<��$�/�/��
�
"�8�
,�
,�	+���4��*�*�*�*�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�	+�	+s�3C�C�Cc#��K�|���5\}}}tj|��|�tj|��|||fV�ddd��dS#1swxYwYdSrp)r�rr�rrr�r#rfr;r�s    r�prepare_filezTestPosixDirFd.prepare_file:s�����
�\�\�^�^�	+�7���h��'��1�1�1��O�O�E�L�(�3�3�3��4��*�*�*�*�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�	+�	+s�AA$�$A(�+A(z)test needs dir_fd support for os.access()c���|���5\}}}|�t�|tj|�����ddd��dS#1swxYwYdS�N�rf)r�rqrr�rer�r�s    r�test_access_dir_fdz!TestPosixDirFd.test_access_dir_fdAs���
�
�
�
 �
 �	H�$<�V�T�8��O�O�E�L�L��r�w�v�L�F�F�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�	H�	Hs�?A!�!A%�(A%z'test needs dir_fd support in os.chmod()c���|���5\}}}t�|tj��t�|tjtjz|���t�|��}|�|jtjztjtjz��ddd��dS#1swxYwYdSr�)	r�r�chmodrLrZr[rBr^�S_IRWXU)r#rfr;r��ss     r�test_chmod_dir_fdz TestPosixDirFd.test_chmod_dir_fdFs���
�
�
�
 �
 �	:�$<�V�T�8��K�K��$�,�/�/�/��K�K��d�l�T�\�9�&�K�I�I�I��
�
�8�$�$�A����Q�Y���5�!�\�D�L�8�
:�
:�
:�		:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�	:�	:s�B7C�C� Cr�z'test needs dir_fd support in os.chown()r�c���|���5\}}}t�|tj��tj��|���ddd��dS#1swxYwYdSr�)r�rr�rer3r.r�s    r�test_chown_dir_fdz TestPosixDirFd.test_chown_dir_fdOs����
�
�
 �
 �	G�$<�V�T�8��K�K��b�i�k�k�2�9�;�;�v�K�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	G�	Gs�AA'�'A+�.A+z&test needs dir_fd support in os.stat()c
�Z�|���5\}}}t|d��5}|�d��ddd��n#1swxYwY|�tj|��t�|��}t�||���}|�||��t�|d���}|�||��|�tdtj|t�
�����|�tdtj|t|�����|�ttj|d���ddd��dS#1swxYwYdS)Nr�z	testline
r�zshould be integer or None, notl F�x:^V)r�rrrrrrLrBrMr9r'rNr8rn)r#rfr;r��outfile�s1�s2s       r�test_stat_dir_fdzTestPosixDirFd.test_stat_dir_fdVs���
�\�\�^�^�	5�7���h��h��$�$�
,���
�
�l�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,��O�O�E�L�(�3�3�3����H�%�%�B����D���0�0�B����R��$�$�$����H�T��2�2�B����R��$�$�$��"�"�9�.N��J��U�\�\�^�^�
#�
=�
=�
=��"�"�9�.N��J��U�6�]�]�
#�
<�
<�
<����m��J��V�
�
5�
5�
5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s5�F �A�F �A	�F �A	�D?F � F$�'F$z'test needs dir_fd support in os.utime()c��|���5\}}}tj��}t�|d|���t�||���|�t
tj|||���|�t
tj|d|���|�t
tj||df|���|�t
tj|d|f|���|�t
tj||df|���t�|t
|��t
|��f|���t�|||f|���t�|t
|��t
|t
|��z
dz��f|���t�||t
|��t
|t
|��z
dz��f���tjtjvr/	t�|d|���n#t$rYnwxYwddd��dS#1swxYwYdS)Nr�r�xr)rfr*F)rrf)
r�rrrr8r9rrer|r)r#rfr;r�rs     r�test_utime_dir_fdz TestPosixDirFd.test_utime_dir_fdjs���
�
�
�
 �
 �	�$<�V�T�8��)�+�+�C��K�K��d�6�K�2�2�2��K�K��V�K�,�,�,����i���d�!�&�
�
2�
2�
2����i���d�*�6�
�
;�
;�
;����i���d�"�D�k�&�
�
:�
:�
:����i���d�#�S�k�&�
�
:�
:�
:����i���d�"�C�j��
�
9�
9�
9��K�K��s�3�x�x��S���2�6�K�B�B�B��K�K��s�C�j��K�8�8�8��K�K����X�X�s�C�#�c�(�(�N�c�#9�:�:�;�F�
�
L�
L�
L��K�K��V�#&�s�8�8�S�#��C���.�C�1G�-H�-H�"I�
�
K�
K�
K��x�2�6�6�6���K�K��e�F�K�K�K�K�K��!�����D�����3	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s6�H,I=�I �I=� 
I-�*I=�,I-�-I=�=J�Jz5WASI: symlink following on path_link is not supportedrbz&test needs dir_fd support in os.link()c�J�|���5\}}}|���5\}}}	t�||||���n/#t$r"}|�d|z��Yd}~nd}~wwxYw|�tj|��|�t�	|��dt�	|��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)N��
src_dir_fd�
dst_dir_fdzposix.link(): %sr5)
r�r�rrbr\r�rrrBrL)r#rfr;r��dir_fd2�linkname�fulllinknamers        r�test_link_dir_fdzTestPosixDirFd.test_link_dir_fd�s����
�
�
 �
 �		-�$<�V�T�8�
�\�\�^�^�		-�@���<�
6��
�
�4��f��
�Q�Q�Q�Q��"�
6�
6�
6��
�
�0�1�4�5�5�5�5�5�5�5�5�����
6�����O�O�E�L�,�7�7�7����U�Z�Z��1�1�!�4��
�
�<�(�(��+�
-�
-�
-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-����		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-����		-�		-�		-�		-�		-�		-s^�D�D�A�D�
A?�A:�5D�:A?�?A5D�4D�D	�D�D	�D�D�Dz'test needs dir_fd support in os.mkdir()c��|���5\}}}t�||���|�tj|��t�|��ddd��dS#1swxYwYdSr�)r�rr�rr�rLr�s    r�test_mkdir_dir_fdz TestPosixDirFd.test_mkdir_dir_fd�s���
�\�\�^�^�	!�7���h��K�K��V�K�,�,�,��O�O�E�K��2�2�2��J�J�x� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s�AA=�=B�BrarbzAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c�b�|���5\}}}tjtjztjz}	t
�||d|���|�t
j|��|�	tj
t
�|��j����nS#t$rF}|�
|jtjtjtjf��Yd}~nd}~wwxYwddd��dS#1swxYwYdS)Nrr�)r�rLrbrZr[rrarrrqr]r^rrgrrlr�rh)r#rfr;r�rdrs      r�test_mknod_dir_fdz TestPosixDirFd.test_mknod_dir_fd�sa���\�\�^�^�
	M�7���h��<�$�,�.���=�D�
M����D�$��&��9�9�9������h�7�7�7�����
�e�j�j��.B�.B�.J� K� K�L�L�L�L��
�
R�
R�
R��
�
�a�g���U�\�5�<�'P�Q�Q�Q�Q�Q�Q�Q�Q�����
R����	
	M�
	M�
	M�
	M�
	M�
	M�
	M�
	M�
	M�
	M�
	M�
	M����
	M�
	M�
	M�
	M�
	M�
	Ms<�+D$�C�A%D$�
D�<D�
D$�D�D$�$D(�+D(z&test needs dir_fd support in os.open()c�J�|���5\}}}t|d��5}|�d��ddd��n#1swxYwY|�tj|��t�|tj|���}	t�|d��}|�d|��t�	|��n#t�	|��wxYw	ddd��dS#1swxYwYdS)Nrs	testline
r��	)
r�rrrrrr�r�rBrw)r#rfr;r�r�r�r�s       r�test_open_dir_fdzTestPosixDirFd.test_open_dir_fd�sp��
�\�\�^�^�		 �7���h��h��%�%�
-���
�
�m�,�,�,�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-����
-�
-�
-�
-��O�O�E�L�(�3�3�3����D�%�.���@�@�B�
 ��j�j��Q�'�'��� � ���4�4�4����B���������B���������		 �		 �		 �		 �		 �		 �		 �		 �		 �		 �		 �		 ����		 �		 �		 �		 �		 �		 sM�D�A�D�A	�D�A	�A
D�1C+�D�+D�D�D�D�readlinkz*test needs dir_fd support in os.readlink()c�2�|���5\}}}tjd|��|�tj|��|�t�||���d��ddd��dS#1swxYwYdS�Nr�r�)r�rer�rrrrBr�r�s    r�test_readlink_dir_fdz#TestPosixDirFd.test_readlink_dir_fd�s����\�\�^�^�	M�7���h��J�y�(�+�+�+��O�O�E�L�(�3�3�3����U�^�^�D��^�@�@�)�L�L�L�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M�	M�	Ms�A*B�B�Bz(test needs dir_fd support in os.rename()c�n�|���5\}}}|���5\}}}t�||||���t�|��t�||��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�)r�r�rr`rL)r#rfr;r�r��name2�	fullname2s       r�test_rename_dir_fdz!TestPosixDirFd.test_rename_dir_fd�s0��
�
�
�
 �
 �	.�$<�V�T�8�
�\�\�^�^�	.�:���	��L�L��u�$*�w�
�
@�
@�
@��J�J�y�!�!�!��L�L��H�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s5�B*�AB�B*�B	�B*�B	�B*�*B.�1B.z)test needs dir_fd support in os.symlink()c�>�|���5\}}}t�d||���|�tj|��|�t�|��d��ddd��dS#1swxYwYdSr�)r�rr�rrrBr�r�s    r�test_symlink_dir_fdz"TestPosixDirFd.test_symlink_dir_fd�s���
�\�\�^�^�	B�7���h��M�M�)�T�&�M�9�9�9��O�O�E�L�(�3�3�3����U�^�^�H�5�5�y�A�A�A�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B�	B�	Bs�A0B�B�Bz(test needs dir_fd support in os.unlink()c��|���5\}}}tj|��t�|��	t�||���|�ttj|��n&#|�tj|���xYw	ddd��dS#1swxYwYdSr�)	r�rr�rrLrr8rrr�s    r�test_unlink_dir_fdz!TestPosixDirFd.test_unlink_dir_fd�s���
�\�\�^�^�	�7���h��'��1�1�1��J�J�x� � � �
����T�&��1�1�1��!�!�'�5�:�x�@�@�@�@��
������h�7�7�7�����A�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s*�3C�	AB�C�#B/�/C�C�CrUz(test needs dir_fd support in os.mkfifo()c��|���5\}}}	t�|tjtjz|���n/#t$r"}|�d|z��Yd}~nd}~wwxYw|�tj	|��|�
tjt�|��j����ddd��dS#1swxYwYdS)Nr�rX)
r�rrUrLrZr[r\r�rrrqr]r^)r#rfr;r�rs     r�test_mkfifo_dir_fdz!TestPosixDirFd.test_mkfifo_dir_fd�s;��
�\�\�^�^�	I�7���h�
8����T�4�<�$�,�#>�v��N�N�N�N��"�
8�
8�
8��
�
�2�Q�6�7�7�7�7�7�7�7�7�����
8�����O�O�E�L�(�3�3�3��O�O�D�M�%�*�*�X�*>�*>�*F�G�G�H�H�H�
	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I����	I�	I�	I�	I�	I�	Is;�C0�4A�C0�
A<�A7�2C0�7A<�<A'C0�0C4�7C4N),rurvrwr�r	r�r�rirxrer��supports_dir_fdr�r�r�r
r�r}rr}r�rLr�rr�r~rbr�r�r�rar�rr�r�r�r`r�r�r�rr�rUr�r�rHrr�r�+s3������
�E��	+�	+��^�	+��+�+��^�+��X����b�&8�8�:e�f�f�H�H�g�f�H��X����R�%7�7�9b�c�c�:�:�d�c�:��X�����W�-�-�R�2�8�r�?Q�3Q�B�D�D��X�_�W�*�,@�A�A�G�G�B�A�D�D�G��X����B�$6�6�8`�a�a�5�5�b�a�5�&�X����R�%7�7�9b�c�c���d�c��<�X�_���?����X�����F���=���2�+=� =�0���
-�
-�	��	��
-��X����R�%7�7�9b�c�c�!�!�d�c�!��X�����W�-�-�6� �h�"�*<�<�6�$�W�T�9�5�5�\�^�^�
M�
M�	^�^�
M��X����B�$6�6�8`�a�a�
 �
 �b�a�
 ��X�����Z�0�0�X�b�k�R�EW�6W�E�G�G�M�M�G�G�M��X����b�&8�8�:d�e�e�.�.�f�e�.��X����r�'9�9�;f�g�g�B�B�h�g�B��X����b�&8�8�:d�e�e�	�	�f�e�	��X�����X�.�.�R�2�9��@R�3R�T~���I�I�@��I�I�IrHr�c��eZdZd�Zd�Zejeed��d��d���Z	ejeed��d��d���Z
d	S)
�PosixGroupsTesterc�>�t���dkrtjd���t	td��stjd���t
jdkrtjd���t���|_dS)Nrznot enough privilegesr/zneed posix.getgroupsrzgetgroups(2) is broken on OSX)	rr3rirjr
r�r�r/�saved_groupsr"s rr$zPosixGroupsTester.setUp�s����<�<�>�>�Q����#�$;�<�<�<��u�k�*�*�	<��#�$:�;�;�;��<�8�#�#��#�$C�D�D�D�!�O�O�-�-����rHc�L�ttd��r!t�|j��dSttd��rXt	jt�����j}t�||jd��dSdS)N�	setgroupsr_r)	r
rr�r�rfr`r3rgr_�r#r;s  r�tearDownzPosixGroupsTester.tearDown�s����5�+�&�&�	9��O�O�D�-�.�.�.�.�.�
�U�L�
)�
)�	9��<������/�/�7�D����T�4�#4�Q�#7�8�8�8�8�8�	9�	9rHr_ztest needs posix.initgroups()c�*�t|jpdg��dz}tjt�����j}t�||��|�|t�	����dSr�)
�maxr�rfr`rr3rgr_rgr/)r#rr;s   rrmz!PosixGroupsTester.test_initgroupsst��

��!�(�a�S�)�)�A�-���|�E�L�L�N�N�+�+�3��
����q�!�!�!��
�
�a����*�*�+�+�+�+�+rHr�ztest needs posix.setgroups()c���dgttd����fD]I}t�|��|�|t������JdS)Nr�)r�rZrr��assertListEqualr/)r#rs  r�test_setgroupsz PosixGroupsTester.test_setgroupsse���s�D��r���O�O�,�	<�	<�F��O�O�F�#�#�#�� � �����):�):�;�;�;�;�	<�	<rHN)rurvrwr$r�rirxr
rrmr�r�rHrr�r��s�������.�.�.�9�9�9��X������5�5�8�:�:�,�,�:�:�,��X������4�4�7�9�9�<�<�9�9�<�<�<rHr�c��eZdZejddddfZdZd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zejeed��d��d���Zd�Zd�Zejeed��d��d���Zd�Zeejej�d��d��d�����Zeejej�d��d��d�����Z d�Z!d�Z"d�Z#d�Z$d �Z%dS)!�_PosixSpawnMixin�-I�-Sr�r�Nc�&�tjddg|�RS)Nr�r�)r�r��r#�argss  r�python_argsz_PosixSpawnMixin.python_argss�����d�2�T�2�2�2rHc���tj}|�tj|��d|�d�}|�d|��}|�|d|tj��}tj	|d���t|d���5}|�|���t|����ddd��dS#1swxYwYdS)N�2if 1:
            import os
            with open(zO, "w") as pidfile:
                pidfile.write(str(os.getpid()))
            r�rr��utf-8��encoding)rrrrr��
spawn_funcrer�rr�rrBr�r)r#�pidfile�scriptr�r�r�s      r�test_returns_pidz!_PosixSpawnMixin.test_returns_pid$s���"�����	�(�'�2�2�2�������
����f�-�-���o�o�d�1�g�t�R�Z�8�8����S�1�-�-�-�-�
�'�G�
,�
,�
,�	1�����Q�V�V�X�X�s�3�x�x�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�6C�C�!Cc�L�d}	|�||gtj��}tj|d��\}}|�||��|�|d��dS#ttf$r&}|�|j|��Yd}~dSd}~wwxYw)N�no_such_executabler)	r�rer��waitpidrB�assertNotEqual�FileNotFoundErrorr\�filename)r#r�r��pid2�status�excs      r�test_no_such_executablez(_PosixSpawnMixin.test_no_such_executable2s���1��	+��/�/�"4�#5�"6�"$�*�.�.�C��:�c�1�-�-�L�D�&����T�3�'�'�'������*�*�*�*�*��"�?�3�	?�	?�	?����S�\�+=�>�>�>�>�>�>�>�>�>�����	?���s�"A,�,B#�=B�B#c��tj}|�tj|��d|�d�}|�d|��}|�|d|itj�ddi���}tj	|d���t|d�	��5}|�|���d��ddd��dS#1swxYwYdS)
Nr�z^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r�rrb�barr�r�r�)
rrrrr�r�rer�rr�rrBr�)r#�envfiler�r�r�r�s      r�test_specify_environmentz)_PosixSpawnMixin.test_specify_environmentAs(���"�����	�(�'�2�2�2�������
����f�-�-���o�o�d�1�g�t�:���:�U�E�:�:�<�<����S�1�-�-�-�-�
�'�G�
,�
,�
,�	.�����Q�V�V�X�X�u�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s�)C�C�Cc��|�|jd|jtjd���}t	j|d���dS�Nr��file_actionsr��r��NOOP_PROGRAMrer�rr��r#r�s  r�test_none_file_actionsz'_PosixSpawnMixin.test_none_file_actionsPsQ���o�o���a� ����J��	�
�
��	��S�1�-�-�-�-�-�-rHc��|�|jd|jtjg���}t	j|d���dSr�r�r�s  r�test_empty_file_actionsz(_PosixSpawnMixin.test_empty_file_actionsYsQ���o�o���a� ����J��	�
�
��	��S�1�-�-�-�-�-�-rHc��|�tjtjddgtjd���}tj|d���dS)Nr�r�F��resetidsrr��r�r�r�rer�rr�r�s  r�test_resetids_explicit_defaultz/_PosixSpawnMixin.test_resetids_explicit_defaultbsQ���o�o��N�
�^�T�6�*��J��	�
�
��	��S�1�-�-�-�-�-�-rHc��|�tjtjddgtjd���}tj|d���dS)Nr�r�Tr�rr�rr�s  r�
test_resetidsz_PosixSpawnMixin.test_resetidsksQ���o�o��N�
�^�T�6�*��J��	�
�
��	��S�1�-�-�-�-�-�-rHc���|�t��5|�tjtjddgt
jd���ddd��dS#1swxYwYdS)Nr�r�r��r8r9r�r�r�rer�r"s r�test_resetids_wrong_typez)_PosixSpawnMixin.test_resetids_wrong_typets���
�
�
�y�
)�
)�	7�	7��O�O�C�N� �^�T�6�:��J��
�
7�
7�
7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	7�	7��;A#�#A'�*A'c���|�tjtjddgtjtj�����}t
j|d���dS)Nr�r���	setpgrouprr�)r�r�r�rer�r1rr�r�s  r�test_setpgroupz_PosixSpawnMixin.test_setpgroupzsW���o�o��N�
�^�T�6�*��J��j�l�l�	�
�
��	��S�1�-�-�-�-�-�-rHc���|�t��5|�tjtjddgt
jd���ddd��dS#1swxYwYdS)Nr�r��023r	rr"s r�test_setpgroup_wrong_typez*_PosixSpawnMixin.test_setpgroup_wrong_type�s���
�
�
�y�
)�
)�	9�	9��O�O�C�N� �^�T�6�:��J�%�
�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	9�	9r�pthread_sigmaskzneed signal.pthread_sigmask()c���tjd��}|�tjtjd|gt
jtjg���}tj
|d���dS)N�I            import signal
            signal.raise_signal(signal.SIGUSR1)r���
setsigmaskrr�)�textwrap�dedentr�r�r�rer�r��SIGUSR1rr�)r#r�r�s   r�test_setsigmaskz _PosixSpawnMixin.test_setsigmask�sp���� 3�4�4���o�o��N�
�^�T�4�(��J���'�	�
�
��	��S�1�-�-�-�-�-�-rHc	���|�t��5|�tjtjddgt
jd���ddd��n#1swxYwY|�t��5|�tjtjddgt
jdg���ddd��n#1swxYwY|�t��5|�tjtjddgt
jtj	tj	dzg���ddd��dS#1swxYwYdS)Nr�r��"r�jr5�
r8r9r�r�r�rer�rr��NSIGr"s r�test_setsigmask_wrong_typez+_PosixSpawnMixin.test_setsigmask_wrong_type�s��
�
�
�y�
)�
)�	7�	7��O�O�C�N� �^�T�6�:��J�2�
�
7�
7�
7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7��
�
�y�
)�
)�	:�	:��O�O�C�N� �^�T�6�:��J�C�5�
�
:�
:�
:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:��
�
�z�
*�
*�	D�	D��O�O�C�N� �^�T�6�:��J�F�K�4:�K��M�4C�
�
D�
D�
D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	D�6�;A"�"A&�)A&�<C�C�C�4AE�E�Ec�>�tj��\}}|�tj|��	tj|d��tjd|�d���}	|�tj	tj	d|gtj
d���}nY#t$r"}|�d|����Yd}~n2d}~wt$r"}|�d|����Yd}~nd}~wwxYwtj|��n#tj|��wxYwtj|d�	��tj|d
��}t#|��}tjtj����}|�||��dS)NTz0
                import os
                fd = z`
                sid = os.getsid(0)
                os.write(fd, str(sid).encode())
            r�)�setsidzsetsid is not supported: zsetsid failed with: rr�r�)rer�rrw�set_inheritablerrr�r�r�r�r�r�r\rr�r�r�getsidr0r�)	r#�rfd�wfdr�r�r��output�	child_sid�
parent_sids	         r�test_setsidz_PosixSpawnMixin.test_setsid�s����7�9�9���S������#�&�&�&�	���s�D�)�)�)��?�$��$�$�$���D�
>��o�o�c�n�'*�~�t�T�&B�&(�j��&�?�?����'�
C�
C�
C��
�
�A�#�A�A�B�B�B�B�B�B�B�B�����"�
>�
>�
>��
�
�<�S�<�<�=�=�=�=�=�=�=�=�����
>����
�H�S�M�M�M�M��B�H�S�M�M�M�M������S�1�-�-�-�-����c�"�"����K�K�	��Y�r�y�{�{�+�+�
����J�	�2�2�2�2�2sG�-D�&:B!� D�!
C7�+C�D�
C7�C2�-D�2C7�7D�D%c���tjtjtj��}tjd��}	|�tjtjd|gtj	tjg���}tjtj|��n$#tjtj|��wxYwtj|tj���dS)Nrr���	setsigdefr�)r�r�SIG_IGNrrr�r�r�rer�rr�)r#�original_handlerr�r�s    r�test_setsigdefz_PosixSpawnMixin.test_setsigdef�s���"�=�����H�H���� 3�4�4��	<��/�/������t�,��
�!�>�*�	"���C�
�M�&�.�*:�;�;�;�;��F�M�&�.�*:�;�;�;�;������S�F�N�?�;�;�;�;�;�;s�AB$�$!Cc	���|�t��5|�tjtjddgt
jd���ddd��n#1swxYwY|�t��5|�tjtjddgt
jdg���ddd��n#1swxYwY|�t��5|�tjtjddgt
jtj	tj	dzg���ddd��dS#1swxYwYdS)Nr�r�rr*rr5rr"s r�test_setsigdef_wrong_typez*_PosixSpawnMixin.test_setsigdef_wrong_type�s��
�
�
�y�
)�
)�	6�	6��O�O�C�N� �^�T�6�:��J�"�
�
6�
6�
6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6��
�
�y�
)�
)�	9�	9��O�O�C�N� �^�T�6�:��J�3�%�
�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9��
�
�z�
*�
*�	P�	P��O�O�C�N� �^�T�6�:��J�6�;���A�
�2N�
�
P�
P�
P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P����	P�	P�	P�	P�	P�	Prr3zbpo-34685: test can fail on BSDc	�T�tjd��}tj|��}tjd|�d|�d���}|�tjtjd|gtjdtj	|��f���}tj|d���dS�NrzF            import os, sys
            if os.sched_getscheduler(0) != zV:
                sys.exit(101)
            if os.sched_getparam(0).sched_priority != z:
                sys.exit(102)r�)�	schedulerr��rerr)rrr�r�r�r�r:rr��r#�policy�priorityr�r�s     r�test_setscheduler_only_paramz-_PosixSpawnMixin.test_setscheduler_only_param�s����&�q�)�)���,�V�4�4���� !�,2� !� !�8@�	 !� !� !�"�"���o�o��N�
�^�T�4�(��J��R�^�H�5�5�6�	�
�
��	��S�1�-�-�-�-�-�-rHc	�T�tjd��}tj|��}tjd|�d|�d���}|�tjtjd|gtj|tj	|��f���}tj|d���dSr2r4r5s     r�test_setscheduler_with_policyz._PosixSpawnMixin.test_setscheduler_with_policy�s����&�q�)�)���,�V�4�4���� !�,2� !� !�8@�	 !� !� !�"�"���o�o��N�
�^�T�4�(��J��r�~�h�7�7�8�	�
�
��	��S�1�-�-�-�-�-�-rHc�J�tjdtj�t��tjdftjdftjddfg}|�|j	d|j	tj
|���}tj|d���dS)NrArr5r�r�r�)
re�POSIX_SPAWN_OPENr��realpath�__file__r��POSIX_SPAWN_CLOSE�POSIX_SPAWN_DUP2r�r�r�rr�)r#r�r�s   r�test_multiple_file_actionsz+_PosixSpawnMixin.test_multiple_file_actionss���
�
 �!�R�W�%5�%5�h�%?�%?���a�P�
�
!�1�%�
�
 �!�Q�'�
��
�o�o�d�/��2�"�/� �j�+7��9�9��	��S�1�-�-�-�-�-�-rHc�`�|j}|�t��5|�|d|tjdg���ddd��n#1swxYwY|�t��5|�|d|tjdg���ddd��n#1swxYwY|�t��5|�|d|tjdg���ddd��n#1swxYwY|�t��5|�|d|tjdg���ddd��n#1swxYwY|�t��5|�|d|tjtjfg���ddd��n#1swxYwY|�t��5|�|d|tjtjddfg���ddd��n#1swxYwY|�t��5|�|d|tjtjdfg���ddd��n#1swxYwY|�t��5|�|d|tjtjdtd	ztj
dfg���ddd��dS#1swxYwYdS)
Nrr�r�rp)i90r5r�rArj)r�r8r9r�rer�r?rr<r>r�r�s  r�test_bad_file_actionsz&_PosixSpawnMixin.test_bad_file_actionssA��� ��
�
�
�y�
)�
)�	1�	1��O�O�D��G�T�2�:�*.��
�
1�
1�
1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1��
�
�y�
)�
)�	/�	/��O�O�D��G�T�2�:�*,��
�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/��
�
�y�
)�
)�	4�	4��O�O�D��G�T�2�:�*1��
�
4�
4�
4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4��
�
�y�
)�
)�	5�	5��O�O�D��G�T�2�:�*2��
�
5�
5�
5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5��
�
�y�
)�
)�	D�	D��O�O�D��G�T�2�:�+-�+?�*A�)B�
�
D�
D�
D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D��
�
�y�
)�
)�	I�	I��O�O�D��G�T�2�:�+-�+?��A�*F�)G�
�
I�
I�
I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I����	I�	I�	I�	I��
�
�y�
)�
)�	I�	I��O�O�D��G�T�2�:�+-�+?��*F�)G�
�
I�
I�
I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I����	I�	I�	I�	I��
�
�z�
*�
*�	=�	=��O�O�D��G�T�2�:�+-�+>�+,�h��o�+-�;��+;�*<�
�
=�
=�
=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=s��+A�A� A�>+B5�5B9�<B9�+D�D�D�6+E-�-E1�4E1�6G�G�G�98H=�=I�I�"7J%�%J)�,J)�
AL#�#L'�*L'c�J�tj}|�tj|��d}tjd|tjtjztjztj
tjzfg}|�d|��}|�
|d|tj|���}tj|d���t#|d���5}|�|���d	��ddd��dS#1swxYwYdS)
N�Oif 1:
            import sys
            sys.stdout.write("hello")
            r5r�rr�r�r�r��hello)rrrrrer<r�r��O_TRUNCrLrZr[r�r�r�rr�rrBr�)r#r�r�r�r�r�r�s       r�test_open_filez_PosixSpawnMixin.test_open_file8sG���"�����	�(�'�2�2�2���
�
 �!�W���b�j�(�2�:�5���t�|�+�
-�
��
����f�-�-���o�o�d�1�g�t�R�Z�+7��9�9��	��S�1�-�-�-�-�
�'�G�
,�
,�
,�	0�����Q�V�V�X�X�w�/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s�")D�D�Dc���tj}|�tj|��d|�d�}|�d|��}|�|d|tjtjdfg���}tj
|d���t|d���5}|�|�
��d	tjz��ddd��dS#1swxYwYdS)
Nz�if 1:
            import os
            try:
                os.fstat(0)
            except OSError as e:
                with open(zq, 'w', encoding='utf-8') as closefile:
                    closefile.write('is closed %d' % e.errno)
            r�rr�r�r�r�zis closed %d)rrrrr�r�rer�r?rr�rrBr�rr)r#�	closefiler�r�r�r�s      r�test_close_filez _PosixSpawnMixin.test_close_fileLsK���$�	����	�(�)�4�4�4��
%���������f�-�-���o�o�d�1�g�t�R�Z�-/�-A�1�,E�+F��H�H��	��S�1�-�-�-�-�
�)�g�
.�
.�
.�	E�!����Q�V�V�X�X�~���'C�D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Es�&6C)�)C-�0C-c�D�tj}|�tj|��d}t	|d��5}t
j|���dfg}|�d|��}|�	|d|t
j
|���}tj|d���ddd��n#1swxYwYt	|d�	��5}|�
|���d
��ddd��dS#1swxYwYdS)NrErr5r�rr�r�r�r�rF)rrrrrrer@rvr�r�r�rr�rBr�)r#�dupfiler��	childfiler�r�r�r�s        rr8z_PosixSpawnMixin.test_dup2_s����"�����	�(�'�2�2�2����'�4�
 �
 �	2�I��$�i�&6�&6�&8�&8�!�<��L��#�#�D�&�1�1�D��/�/�$�q�'�4���/;�"�=�=�C�� ��q�1�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��'�G�
,�
,�
,�	0�����Q�V�V�X�X�w�/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s$�A8C�C�
C�)D�D�D)&rurvrwr�r�r�r�r�r�r�r�r�r�rrrrrrirxr
r�rrr(r.r0r�r}r�r�r8r:rArCrHrKr8r�rHrr�r�sg�������N�D�$��f�=�L��J�3�3�3�1�1�1�
+�
+�
+�
.�
.�
.�.�.�.�.�.�.�.�.�.�.�.�.�7�7�7�.�.�.�9�9�9��X�����):�;�;�:�<�<�.�.�<�<�.�
D�
D�
D�3�3�3�>�X�����):�;�;�8�:�:�<�<�:�:�<�"P�P�P���X�_�S�\�,�,�-B�C�C�6�8�8�.�.�8�8��^�.�"��X�_�S�\�,�,�-B�C�C�6�8�8�.�.�8�8��^�.�"
.�
.�
.�=�=�=�:0�0�0�(E�E�E�&0�0�0�0�0rHr��posix_spawnztest needs os.posix_spawnc�(�eZdZeedd��ZdS)�TestPosixSpawnrON)rurvrwr6rr�r�rHrrQrQrs!���������
�t�4�4�J�J�JrHrQ�posix_spawnpztest needs os.posix_spawnpc�H�eZdZeedd��Zejd���ZdS)�TestPosixSpawnPrRNc���tj��}|�tj|��d}t
j�||��}tjtj
|��	t
j�|t
jdf��}n#t$r|}YnwxYw|ddddf}tjd|�d���}d|f}t!|d|i�dS)	Nzposix_spawnp_test_program.exe�PATHr�r�r�r�zP
            import os
            from test import support

            args = zy
            pid = os.posix_spawnp(args[0], args, os.environ)

            support.wait_process(pid, exitcode=0)
        )�tempfile�mkdtemprrr�rer�rYr�r�r��pathsepr�rhrrr)r#�temp_dir�program�program_fullpathr��
spawn_argsr�r�s        r�test_posix_spawnpz!TestPosixSpawnP.test_posix_spawnp{s����#�%�%�����	�(�(�3�3�3�1���7�<�<��'�:�:��
�
�3�>�#3�4�4�4�	��:�?�?�H�b�j��.@�#A�B�B�D�D���	�	�	��D�D�D�	�����t�T�4��8�
�����z�z� �����d�|���$�*�T�*�*�*�*�*s�61B(�(B7�6B7)	rurvrwr6rr�r�skip_unless_symlinkr^r�rHrrTrTwsD�����������5�5�J��"�+�+�#�"�+�+�+rHrTrztest weak linking on macOSc�z�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�ZdS)�TestPosixWeaklinkingc����ddl}ddl}|�����fd��D��|_t	d�|j��d�d��D����|_dS)Nrc�N��h|]!}|�d����|�|��"S)�HAVE_r1)r��nm�config_varss  �r�	<setcomp>z-TestPosixWeaklinking.setUp.<locals>.<setcomp>�s6���c�c�c�"�r�}�}�W�7M�7M�c�R]�^`�Ra�c�2�c�c�crHc3�4K�|]}t|��V��dSrpr)r��parts  rrz-TestPosixWeaklinking.setUp.<locals>.<genexpr>�s(����T�T�4�S��Y�Y�T�T�T�T�T�TrHr�)r
r��get_config_vars�	availabler�mac_verr�)r#r
r�rfs   @rr$zTestPosixWeaklinking.setUp�s�������������/�/�1�1��c�c�c�c��c�c�c����T�T�3C�8�3C�3E�3E�a�3H�3N�3N�s�3S�3S�T�T�T�T�T����rHc�F�||jvrtj|�d����dS)Nz not weak-linked)rkrirjr�s  r�_verify_availablez&TestPosixWeaklinking._verify_available�s1���t�~�%�%��#�t�$=�$=�$=�>�>�>�&�%rHc��|�d��|jdkrT|�ttd��d��|�ttd��d��dS|�ttd��d��|�ttd��d��dS)	N�HAVE_PWRITEV)r�r�r�zos.pwritev is not availabler�zos.readv is not availablezos.pwritev is availablezos.readv is available)rnrlrqr
rer=r"s rr�z!TestPosixWeaklinking.test_pwritev�s������~�.�.�.��<�8�#�#��O�O�G�B�	�2�2�4Q�R�R�R��O�O�G�B��1�1�3N�O�O�O�O�O�
���W�R��3�3�5N�O�O�O����W�R��2�2�4K�L�L�L�L�LrHc�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�HAVE_FSTATAT�r�r��dir_fd unavailable�filerr�)
rnrlrgr�_have_functions�assertNotInrMr�rerLr"s rrTzTestPosixWeaklinking.test_stat�s������~�.�.�.��<�8�#�#��M�M�.�%�*?�@�@�@�@�@�
���^�U�-B�C�C�C��'�'�(;�=Q�R�R�
*�
*����q�)�)�)�)�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*����
*�
*�
*�
*�
*�
*��>B"�"B&�)B&c���|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dtj
d���ddd��n#1swxYwY|�td��5tj	dtj
d�	��ddd��n#1swxYwY|�td
��5tj	dtj
d���ddd��dS#1swxYwYdS)
N�HAVE_FACCESSATrsrtrurr�zfollow_symlinks unavailableFrzeffective_ids unavailableT)�
effective_ids)rnrlrgrrvrwrMr�rer�r�r"s rr�z TestPosixWeaklinking.test_access�s�����/�0�0�0��<�8�#�#��M�M�*�E�,A�B�B�B�B�B�
���-�u�/D�E�E�E��'�'�(;�=Q�R�R�
5�
5��	�&�"�'�!�4�4�4�4�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5��'�'�(;�=Z�[�[�
B�
B��	�&�"�'�5�A�A�A�A�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B����
B�
B�
B�
B��'�'�(;�=X�Y�Y�
?�
?��	�&�"�'��>�>�>�>�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?�
?����
?�
?�
?�
?�
?�
?s6�>"B,�,B0�3B0�"D�D�D�&"E�E�Ec��|�d��|jdkr"|�dtj��dS|�dtj��|�dtj��|�td��5tj	ddd���ddd��dS#1swxYwYdS)	N�
HAVE_FCHMODATrs�HAVE_LCHMODrtrui�rr�)
rnrlrgrrvrwrMr�rer�r"s r�
test_chmodzTestPosixWeaklinking.test_chmod�s������/�/�/��<�8�#�#��M�M�/�5�+@�A�A�A�A�A�
���_�e�.C�D�D�D��M�M�-��)>�?�?�?��'�'�(;�=Q�R�R�
2�
2�����q�1�1�1�1�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2����
2�
2�
2�
2�
2�
2s�C�C�
Cc��|�d��|jdkr"|�dtj��dS|�dtj��|�dtj��|�td��5tj	dddd���ddd��dS#1swxYwYdS)N�
HAVE_FCHOWNATrs�HAVE_LCHOWNrtrurr�)
rnrlrgrrvrwrMr�rer�r"s rr�zTestPosixWeaklinking.test_chown�s������/�/�/��<�8�#�#��M�M�/�5�+@�A�A�A�A�A�
���_�e�.C�D�D�D��M�M�-��)>�?�?�?��'�'�(;�=Q�R�R�
1�
1�����A�a�0�0�0�0�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1����
1�
1�
1�
1�
1�
1s�C�C�Cc�h�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	ddd���ddd��n#1swxYwY|�td��5tj	ddd�	��ddd��n#1swxYwY|�td��5tj	dddd�
��ddd��n#1swxYwYtj��5}tj�
|d��}tj�
|d��}tj�
|d��}t|d��5}|�d
��ddd��n#1swxYwYtjd|��|�t$��5tj	||d���ddd��n#1swxYwY|�t$��5tj	||d���ddd��n#1swxYwYddd��dS#1swxYwYdS)N�HAVE_LINKATrszsrc_dir_fd unavailable�source�targetr�r�zdst_dir_fd unavailable�r�r�rbr��dataTrF)rnrlrgrrvrwrMr�rerbrrZr�rYrrr�r8�FileExistsError)r#r��	link_path�target_path�source_pathrys      r�	test_linkzTestPosixWeaklinking.test_link�sp�����}�-�-�-��<�8�#�#��M�M�-��)>�?�?�?�?�?�
���]�E�,A�B�B�B��'�'�(;�=U�V�V�
;�
;����(��:�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;��'�'�(;�=U�V�V�
;�
;����(��:�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;��'�'�(;�=U�V�V�
I�
I����(��a�H�H�H�H�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I����
I�
I�
I�
I��#�%�%�
K���G�L�L��F�;�;�	� �g�l�l�9�h�?�?�� �g�l�l�9�h�?�?���+�s�+�+�%�r��H�H�V�$�$�$�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%��
�8�Y�/�/�/��&�&��7�7�J�J��G�K��D�I�I�I�I�J�J�J�J�J�J�J�J�J�J�J����J�J�J�J��&�&��7�7�K�K��G�K��E�J�J�J�J�K�K�K�K�K�K�K�K�K�K�K����K�K�K�K�#
K�
K�
K�
K�
K�
K�
K�
K�
K�
K�
K�
K����
K�
K�
K�
K�
K�
Ks��>B"�"B&�)B&�C,�,C0�3C0�D7�7D;�>D;�A1J'�G(�J'�(G,	�,J'�/G,	�02J'�"I�:J'�I
	�
J'�
I
	�J'�+J�J'�J	�J'�J	�J'�'J+�.J+c���|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	d��ddd��n#1swxYwY|�td��5tj
d��ddd��dS#1swxYwYdS)N�HAVE_FDOPENDIRrszClistdir: path should be string, bytes, os.PathLike or None, not intrzCscandir: path should be string, bytes, os.PathLike or None, not int)rnrlrgrrvrwrMr9rer��scandirr"s r�test_listdir_scandirz)TestPosixWeaklinking.test_listdir_scandirsa�����/�0�0�0��<�8�#�#��M�M�*�E�,A�B�B�B�B�B�
���-�u�/D�E�E�E��'�'�	�3x�y�y�
�
��
�1�
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��'�'�	�3x�y�y�
�
��
�1�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
�
s$�>B�B#�&B#�C'�'C+�.C+c�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�HAVE_MKDIRATrsrt�dirrr�)
rnrlrgrrvrwrMr�rer�r"s r�
test_mkdirzTestPosixWeaklinking.test_mkdir"s������~�.�.�.��<�8�#�#��M�M�.�%�*?�@�@�@�@�@�
���^�U�-B�C�C�C��'�'�(;�=Q�R�R�
*�
*����q�)�)�)�)�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*����
*�
*�
*�
*�
*�
*rxc�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�
HAVE_MKFIFOAT�rcrrtr�rr�)
rnrlrgrrvrwrMr�rerUr"s rr`z TestPosixWeaklinking.test_mkfifo-s�������/�/�/��<�7�"�"��M�M�/�5�+@�A�A�A�A�A�
���_�e�.C�D�D�D��'�'�(;�=Q�R�R�
,�
,��	�&��+�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,rxc�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�HAVE_MKNODATr�rtr�rr�)
rnrlrgrrvrwrMr�rerar"s rrizTestPosixWeaklinking.test_mknod8s������~�.�.�.��<�7�"�"��M�M�.�%�*?�@�@�@�@�@�
���^�U�-B�C�C�C��'�'�(;�=Q�R�R�
+�
+�����*�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�
+�
+rxc��|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	ddd���ddd��n#1swxYwY|�td��5tj	ddd���ddd��n#1swxYwY|�td��5tj
ddd���ddd��n#1swxYwY|�td��5tj
ddd���ddd��dS#1swxYwYdS)	N�
HAVE_RENAMEATrsz%src_dir_fd and dst_dir_fd unavailable�a�brr�r�)rnrlrgrrvrwrMr�rer`rar"s r�test_rename_replacez(TestPosixWeaklinking.test_rename_replaceCs�������/�/�/��<�8�#�#��M�M�/�5�+@�A�A�A�A�A�
���_�e�.C�D�D�D��'�'�(;�=d�e�e�
2�
2��	�#�s�q�1�1�1�1�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2����
2�
2�
2�
2��'�'�(;�=d�e�e�
2�
2��	�#�s�q�1�1�1�1�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2����
2�
2�
2�
2��'�'�(;�=d�e�e�
3�
3��
�3���2�2�2�2�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3��'�'�(;�=d�e�e�
3�
3��
�3���2�2�2�2�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�
3�
3sH�>B"�"B&�)B&�C,�,C0�3C0�D6�6D:�=D:�F�F�Fc���|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��n#1swxYwY|�td��5tj
dd���ddd��dS#1swxYwYdS)N�
HAVE_UNLINKATrsrtr�rr�)rnrlrgrrvrwrMr�rerr�r"s r�test_unlink_rmdirz&TestPosixWeaklinking.test_unlink_rmdirWsp������/�/�/��<�8�#�#��M�M�/�5�+@�A�A�A�A�A�
���_�e�.C�D�D�D��'�'�(;�=Q�R�R�
,�
,��	�&��+�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,��'�'�(;�=Q�R�R�
+�
+�����*�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�
+�
+s$�>B!�!B%�(B%�C+�+C/�2C/c�t�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dtj
d���ddd��dS#1swxYwYdS)N�HAVE_OPENATrsrtr�rr�)rnrlrgrrvrwrMr�rerr�r"s r�	test_openzTestPosixWeaklinking.test_openes������}�-�-�-��<�8�#�#��M�M�-��)>�?�?�?�?�?�
���]�E�,A�B�B�B��'�'�(;�=Q�R�R�
7�
7������A�6�6�6�6�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7�
7�
7s�>"B-�-B1�4B1c�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�HAVE_READLINKATrsrtr�rr�)
rnrlrgrrvrwrMr�rer�r"s r�
test_readlinkz"TestPosixWeaklinking.test_readlinkps������0�1�1�1��<�8�#�#��M�M�+�U�-B�C�C�C�C�C�
���.��0E�F�F�F��'�'�(;�=Q�R�R�
/�
/���F�A�.�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�
/�
/rxc�`�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	ddd���ddd��dS#1swxYwYdS)N�HAVE_SYMLINKATrsrtr�r�rr�)
rnrlrgrrvrwrMr�rer�r"s r�test_symlinkz!TestPosixWeaklinking.test_symlink{s������/�0�0�0��<�8�#�#��M�M�*�E�,A�B�B�B�B�B�
���-�u�/D�E�E�E��'�'�(;�=Q�R�R�
0�
0��
�3��Q�/�/�/�/�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0�
0����
0�
0�
0�
0�
0�
0s�>B#�#B'�*B'c��|�d��|�d��|jdkrB|�dtj��|�dtj��dS|�dtj��|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�
HAVE_FUTIMENS�HAVE_UTIMENSAT)r�rcrtr�rr�)
rnrlrgrrvrwrMr�rerr"s rr�zTestPosixWeaklinking.test_utime�s3������/�/�/����/�0�0�0��<�8�#�#��M�M�/�5�+@�A�A�A��M�M�*�E�,A�B�B�B�B�B�
���_�e�.C�D�D�D����-�u�/D�E�E�E��'�'�(;�=Q�R�R�
+�
+�����*�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�
+�
+s�C7�7C;�>C;N)rurvrwr$rnr�rTr�rr�r�r�r�r`rir�r�r�r�r�r�r�rHrrara�s,������U�U�U�?�?�?�M�M�M�	*�	*�	*�?�?�?�"
2�
2�
2�
1�
1�
1�$K�$K�$K�N���	*�	*�	*�	,�	,�	,�	+�	+�	+�3�3�3�(+�+�+�	7�	7�	7�	/�	/�	/�	0�	0�	0�+�+�+�+�+rHrac�,�tj��dSrp)r�
reap_childrenr�rHr�tearDownModuler��s��������rH�__main__)1r~r�test.supportrrr�test.support.script_helperr�
import_modulerrr�r�rrer�rLrWrirr�
contextlibr	rf�ImportErrorr�rY�
gettempdirrr�rx�maxsizer}r~r{rr��TestCaserr�r�r�r
rQrTrar�ru�mainr�rHr�<module>r�s����������&�&�&�&�&�&�"�"�"�"�"�"�(�(�(�(�(�(�7�7�7�7�7�7�	$�
�#�G�,�,������
�
�
�
�
�
�
�
�����	�	�	�	�������������������������%�%�%�%�%�%���J�J�J�J������
�C�C�C���������1�h�1�3�3�'�.�1A�A�C�C��#�x�"��K�%��J��!6�!I�'�/�J�.�������%��$�_�_�%6�%6�8V�W�W��s0�s0�s0�s0�s0�(�#�s0�s0�s0�n'EI�EI�EI�EI�EI�X�&�EI�EI�EI�P!<�!<�!<�!<�!<��)�!<�!<�!<�HX0�X0�X0�X0�X0�X0�X0�X0�v
���W�W�R��/�/�1L�M�M�5�5�5�5�5�X�&�(8�5�5�N�M�5����W�W�R��0�0�2N�O�O�!+�!+�!+�!+�!+�h�'�)9�!+�!+�P�O�!+�H���S�\�X�-�/K�L�L�u+�u+�u+�u+�u+�8�,�u+�u+�M�L�u+�p����z����H�M�O�O�O�O�O��s�#A(�(A2�1A2