Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.11/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.11/test/__pycache__/test_posix.cpython-311.opt-1.pyc

�

SԚg�u����dZddlmZddlmZddlmZddlmZddlmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ	ddlZn#e$rddlZYnwxYw	ddlZn
#e$rdZYnwxYwe
j�ej��ejd	z��Zeje
j d
koej!pej"d��Z#d�Z$eje$��d
��Z%Gd�dej&��Z'Gd�dej&��Z(Gd�dej&��Z)Gd�d��Z*eje+e
d��d��Gd�dej&e*����Z,eje+e
d��d��Gd�dej&e*����Z-eje
jdkd��Gd �d!ej&����Z.d"�Z/e0d#krej1��dSdS)$zTest posix functions�)�support)�
import_helper)�	os_helper)�warnings_helper)�assert_python_okN)�contextmanagerz-dummy-symlink�z(test is only meaningful on 32-bit buildsc���ttd��sdS	tjd��n2#t$r%}|jtjkrYd}~dSYd}~nd}~wwxYwdS)N�sched_getschedulerFrT)�hasattr�posixr�OSError�errno�ENOSYS)�es �,/usr/local/lib/python3.11/test/test_posix.py�_supports_schedr)s����5�.�/�/���u��
� ��#�#�#�#�������7�e�l�"�"��5�5�5�5�5�#�"�"�"�"����������4s�.�
A�A�Azrequires POSIX scheduler APIc��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�ZCejeed{��d|��ej3ejDd}��d~�����ZEeFjGejeed��d���ej3ejDd}��d��������ZHeFjGejeed���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��ZYeFjGd����ZZd��Z[eFjGd����Z\ejeed���d���d����Z]ejeed���d���d����Z^d��Z_d��Z`eFjad����ZbeFjad����Zcejeed���d���eFjad������Zdejeed���d���eFjad������Zed��Zfejeed���d���d����Zgejeed���d���d����Zhejeed���d���d����Zid��Zjd��Zkejeed���d���d����Zlejeed���d���ejeed��d��ejeed���d���d��������Zmejeed¦�dæ�ejeedĦ�dŦ�ej9��dƄ������ZnejeeodǦ�dȦ�ejeedɦ�dʦ�d˄����Zpejeed̦�dͦ�ZqejeedΦ�dϦ�ZreqdЄ��ZseqejeedѦ�dҦ�dӄ����ZteudԄ��Zvejeedզ�d֦�dׄ��Zwerd؄��Zxerdل��Zyej3ej4dڦ�ejejzd�kdܦ�d݄����Z{ejeedަ�dߦ�d���Z|d�Z}d�Z~d�Zejeed��d��d���Z�d#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.setUp8s������	�(�)�*:�;�;�;�
�)�"�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.testNoArgFunctionsAs�������%�	@�	@�D� ���d�3�3�J��%��\�\�$�'�'�@�@��J�L�L�L��%�%�i��Q�?�?�?�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@��	@�	@s�'A)�)A-	�0A-	�	getresuidztest needs posix.getresuid()c��tj��}|�t|��d��|D]}|�|d���dS�N�r)r
r>�assertEqual�len�assertGreaterEqual)r#�user_ids�vals   r�test_getresuidzPosixTester.test_getresuidQs_���?�$�$������X����*�*�*��	,�	,�C��#�#�C��+�+�+�+�	,�	,��	getresgidztest needs posix.getresgid()c��tj��}|�t|��d��|D]}|�|d���dSr@)r
rIrBrCrD)r#�	group_idsrFs   r�test_getresgidzPosixTester.test_getresgidYs_���O�%�%�	�����Y����+�+�+��	,�	,�C��#�#�C��+�+�+�+�	,�	,rH�	setresuidztest needs posix.setresuid()c��tj��}|�tj|���|�tjddd����dS�N���)r
r>�assertIsNonerM)r#�current_user_idss  r�test_setresuidzPosixTester.test_setresuidasV��!�?�,�,�����%�/�+;�<�=�=�=����%�/�"�b�"�5�5�6�6�6�6�6rHc��tj��}d|vr.|ddzddf}|jttjg|�R�dSdS�Nrr5rP)r
r>r8rrM)r#rR�new_user_idss   r�test_setresuid_exceptionz$PosixTester.test_setresuid_exceptionisa��!�?�,�,���$�$�$�,�Q�/��1�2�r�:�L��D��g�u��F��F�F�F�F�F�F�%�$rH�	setresgidztest needs posix.setresgid()c��tj��}|�tj|���|�tjddd����dSrO)r
rIrQrX)r#�current_group_idss  r�test_setresgidzPosixTester.test_setresgidrsV��"�O�-�-�����%�/�+<�=�>�>�>����%�/�"�b�"�5�5�6�6�6�6�6rHc��tj��}d|vr.|ddzddf}|jttjg|�R�dSdSrU)r
rIr8rrX)r#rZ�
new_group_idss   r�test_setresgid_exceptionz$PosixTester.test_setresgid_exceptionzsa��"�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�	tjtj����j	}n"#t$rtjd���wxYw	tj|d��|�
d��dS#t$r0}|�|jt j��Yd}~dSd}~wwxYwdS)NrA�foorzneed a pwd entry�
z+Expected OSError to be raised by initgroups)r8r9r
r_�object�osr3�pwdr`�pw_name�KeyError�unittest�SkipTest�failrrBr�EPERM)r#r;rs   r�test_initgroupszPosixTester.test_initgroups�s`��	
���)�U�%5�6�6�6����)�U�%5�t�<�<�<����)�U�%5�q�%�@�@�@����)�U�%5�u�a����J�J�J��9�;�;�!���
<��|�E�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$�?*C*�*D	�
D9�9
E3�%E.�.E3�statvfsztest needs posix.statvfs()c�h�|�tjtj����dS�N)�
assertTruer
rnre�curdirr"s r�test_statvfszPosixTester.test_statvfs�s(��	
����
�b�i�0�0�1�1�1�1�1rH�fstatvfsztest needs posix.fstatvfs()c�x�ttj��}	|�t	j|�������|�t	j|�������|���dS#|���wxYwrp)	rrrrqr
rt�filenorn�close�r#�fps  r�
test_fstatvfszPosixTester.test_fstatvfs�s����)�"�
#�
#��	��O�O�E�N�2�9�9�;�;�7�7�8�8�8��O�O�E�M�"�)�)�+�+�6�6�7�7�7��H�H�J�J�J�J�J��B�H�H�J�J�J�J���s�A2B#�#B9�	ftruncateztest needs posix.ftruncate()c�6�ttjd��}	|�d��|���tj|���d��|���dS#|���wxYw)N�w+�testr)	rrr�write�flushr
r{rvrwrxs  r�test_ftruncatezPosixTester.test_ftruncate�sw���)�"�D�
)�
)��	��H�H�V�����H�H�J�J�J��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#1swxYwYtjtjd��dS)N�wr~r)rrrrr�r
r�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��}|dkrotjtj�tj��d��tj
|tjddgtj��ntj
|d���tj|��dS#tj|��wxYw)Nr�-c�pass��exitcode)rer�sys�
executable�O_RDONLY�fork�chdir�path�splitr
r��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�BC�C5�waitidztest needs posix.waitid()c��tj��}|dkrztjtj�t
j��d��tjt
jt
jddgtj	��dStj
tj|tj��}|�
||j��dS)Nrr�r�)rer�r�r�r�r�r�r
r�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���#�.�$��)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��tj
|tjd��tj
|tjd��tj
|��dS#tj
|��wxYw)N�testr�)rerrr�O_WRONLY�O_CREATr�lseek�SEEK_SETr
r��F_LOCK�F_ULOCKrw�r#�fds  r�
test_lockfzPosixTester.test_lockfs���
�W�Y�%�r�{�R�Z�'?�
@�
@��	��H�R��!�!�!��H�R��B�K�(�(�(��K��E�L�!�,�,�,��K��E�M�1�-�-�-��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�A5C�C�preadztest needs posix.pread()c���tjtjtjtjz��}	tj|d��tj|dtj��|�	dtj|dd����|�	dtj|d����tj
|��dS#tj
|��wxYw)Nr�rsesr�r5ste)rerrr�O_RDWRr�rr�r�rBr
r��readrwr�s  r�
test_preadzPosixTester.test_pread"s���
�W�Y�%�r�y�2�:�'=�
>�
>��	��H�R��!�!�!��H�R��B�K�(�(�(����U�E�K��A�q�$9�$9�:�:�:����U�E�J�r�1�$5�$5�6�6�6��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�BC�C,�preadvztest needs posix.preadv()c��tjtjtjtjz��}	tj|d��d�dD��}|�tj	||d��d��|�gd�t|����tj|��dS#tj|��wxYw)N�test1tt2t3t5t6t6t8c�,�g|]}t|����Sr���	bytearray��.0�is  r�
<listcomp>z+PosixTester.test_preadv.<locals>.<listcomp>3���3�3�3�A�9�Q�<�<�3�3�3rH��rAr�rA�
�st1tt2st3ts5t)rerrrr�r�rrBr
r��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�A0B>�>C�	RWF_HIPRIztest needs posix.RWF_HIPRIc��tjtjtjtjz��}	tj|d��d�dD��}|�tj	||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�rrBr
r�r�r��NotImplementedError�skipTestrr�EINVAL�ENOTSUPrirjrw)r#r�r��insts    r�test_preadv_flagszPosixTester.test_preadv_flags9s6���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�A;B4�3D0�4D�D0�	D�4D�D�D0�0Ec�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_32bitsOs���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��tj
|dd��|�dtj|d����tj
|��dS#tj
|��wxYw)Nr�r�xxr5stxxtr�)rerrrr�r�rr�r�r
r�rBr�rwr�s  r�test_pwritezPosixTester.test_pwrite\s���
�W�Y�%�r�y�2�:�'=�
>�
>��	��H�R��!�!�!��H�R��B�K�(�(�(��L��U�A�&�&�&����W�e�j��Q�&7�&7�8�8�8��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�A4C�C�pwritevztest needs posix.pwritev()c�&�tjtjtjtjz��}	tj|d��tj|dtj��tj	|gd�d��}|�
|d��tj|dtj��|�
dtj|d����tj
|��dS#tj
|��wxYw)Nr�r�stest1stt2st3r�r�sxxtest1tt2t3�d)rerrrr�r�rr�r�r�rBr
r�rw�r#r��ns   r�test_pwritevzPosixTester.test_pwritevgs���
�W�Y�%�r�y�2�:�'=�
>�
>��		��H�R������H�R��B�K�(�(�(��
�2�8�8�8�!�<�<�A����Q��#�#�#��H�R��B�K�(�(�(����_�e�j��S�.A�.A�B�B�B��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�B,C:�:Dzos.RWF_SYNCztest needs os.RWF_SYNCc�<�tjtjtjtjz��}	tj|d��tj|dtj��tj	|gd�dtj
��}|�|d��tj|dtj��|�dtj
|d����tj|��dS#tj|��wxYw)Nr�rr�r�r�s
xxtest1tt2r�)rerrrr�r�rr�r�r��RWF_SYNCrBr
r�rwr�s   r�test_pwritev_flagszPosixTester.test_pwritev_flagsus����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�r�3�,?�,?�@�@�@��H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�B7D�Dc��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
j|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�r
r�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��	tjddd��dS#t$r!}|jtjkr�Yd}~dSd}~wwxYw)N����rr�)r
r�rr�EBADF�r#r�s  r�test_posix_fallocate_errnoz&PosixTester.test_posix_fallocate_errno�sg��	��!�#�q�"�-�-�-�-�-���	�	�	��z�U�[�(�(��)�(�(�(�(�(�����	���s��
A�A�A�
posix_fadvisez test needs posix.posix_fadvise()c��tjtjtj��}	tj|ddt
j��tj|��dS#tj|��wxYw�Nr)	rerrrr�r
r�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"�"A8c��	tjdddtj��dS#t$r!}|jtjkr�Yd}~dSd}~wwxYw)Nrr)r
rr	rrrrs  r�test_posix_fadvise_errnoz$PosixTester.test_posix_fadvise_errno�sl��	����Q��5�+D�E�E�E�E�E���	�	�	��z�U�[�(�(��)�(�(�(�(�(�����	���s�!%�
A�A�Az!test needs fd support in os.utimec
���tj��}tjtjtj��}	t
j|��t
j|d��|�ttj|d��|�ttj||df��|�ttj|d|f��t
j|t|��t|��f��t
j|||f��|�ttj|||f||f���|�ttj||dfd���|�ttj|d|df���t
j|t|��t|t|��z
dz��f��t
j|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��O�O�O��K��D�!�!�!����i���b�,�G�G�G����i���b�3��+�F�F�F����i���b�4��+�F�F�F��K��S��X�X�s�3�x�x�0�1�1�1��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��S��X�X�s�C�#�c�(�(�N�c�+A�'B�'B�C�D�D�D��K���C���#�s�S��X�X�~��.D�*E�*E�F�G�G�G�G�
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s�G6I
�
I z.test needs follow_symlinks support in os.utimec��tj��}tjtjdd���|�ttjtjdd���|�ttjtj|dfd���|�ttjtjd|fd���tjtjt|��t|��fd���tjtj||fd���tjtjd���dS)NF��follow_symlinksr�rr
rrrr8r9r�r#rs  r�test_utime_nofollow_symlinksz(PosixTester.test_utime_nofollow_symlinks�s&���i�k�k��
��I�$�d�E�B�B�B�B����)�U�[�)�2B�&��	�	?�	?�	?����)�U�[�)�2B���+�u�	�	>�	>�	>����)�U�[�)�2B���+�u�	�	>�	>�	>�
��I�$�s�3�x�x��S���&:�$)�	+�	+�	+�	+�
��I�$�s�C�j�%�H�H�H�H�
��I�$�e�<�<�<�<�<�<rH�writevztest needs posix.writev()c�0�tjtjtjtjz��}	tj|d��}|�|d��tj|dtj	��|�dtj|d����	tj|g��}|�|d��n#t$rYnwxYwtj
|��dS#tj
|��wxYw)Nr�r�r�
test1tt2t3)rerrrr�r�rrBr�r�r
r�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�r�2�,>�,>�?�?�?�
*��|�B��+�+��� � ��q�)�)�)�)���
�
�
���
����
�H�R�L�L�L�L�L��B�H�R�L�L�L�L���s0�A4C?�-C�C?�
C&�#C?�%C&�&C?�?Dc��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�`�tjtjtjtjz��}	tj|d��tj|dtj��d�dD��}|�	tj||��d��|�	gd�d�|D����	tj|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�rBr
r$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�BD�C1�D�1
C>�;D�=C>�>D�D-c�.�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�>�ttj��}	tj|�����}|�|t��tj	|��|�	��dS#|�	��wxYwrp)
rrrr
r+rv�assertIsInstancerrerw)r#ryr�s   r�test_dupzPosixTester.test_dup&sv���)�"�
#�
#��	���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��|�ttjd����dkd��dS)N�
CS_garbage�CS_PATHrT)r8rr
r/rBrCr"s r�test_confstrzPosixTester.test_confstr2sQ��	
���*�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��}	tj|���|�����|���|���dS#|���|���wxYwrp)rrrr
r4rvrw)r#�fp1�fp2s   r�	test_dup2zPosixTester.test_dup28s����9�#�$�$���9�#�$�$��	��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�9B�*C�	O_CLOEXECzneeds os.O_CLOEXECr���c��tjtjtjtjz��}|�tj|��|�tj	|����dSrp)
rerrrr�r9rrw�assertFalse�get_inheritabler�s  r�test_oscloexeczPosixTester.test_oscloexecDs\���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r
rBr�s  r�
test_osexlockzPosixTester.test_osexlockLs���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r
r8rr�r@rC)r#�fd1�fd2r�s    r�
test_osshlockzPosixTester.test_osshlock\s����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	j|�������|�t	j|�������|�tdtjt|�������|���dS#|���wxYw�Nz4should be string, bytes, os.PathLike or integer, not)rrrrqr
rIrv�stat�assertRaisesRegexr9�floatrwrxs  r�
test_fstatzPosixTester.test_fstatms����)�"�
#�
#��	��O�O�E�K��	�	���4�4�5�5�5��O�O�E�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�B8C)�)C?c
��|�tjtj����|�tjtjtj������|�tdtjttjtj������|�
tdtjd��|�
tdtjttj����|�
tdtjttjtj������dSrK)
rqr
rLrrre�fsencode�assertWarnsRegex�DeprecationWarningr�rMr9r�r"s r�	test_statzPosixTester.test_stat{s(������
�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�2�tjdkr+tj�dt
j��}nt
j}tj|��|�t
j|��	tj
|tjtj
z��n/#t$r"}|�d|z��Yd}~nd}~wwxYw|�tjtj|��j����dS)N�vxworksz/fifos/�posix.mkfifo(): %s)r�r�rer��joinrrrrr
rUrL�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��D�L�4�<�$?�@�@�@�@���	4�	4�	4��M�M�.��2�3�3�3�3�3�3�3�3�����	4��������
�e�j��&;�&;�&C�D�D�E�E�E�E�Es�=,B*�*
C�4C�C�mknod�S_IFIFOzdon't have mknod()/S_IFIFOc�2�tjtj��tjtjztjz}	tjtj|d��|�	tj
tjtj��j����nS#t$rF}|�
|jtjtjtjf��Yd}~nd}~wwxYwtjtj��	tjtj|dd���dS#t$rG}|�
|jtjtjtjf��Yd}~dSd}~wwxYw)Nr)r��mode�device�dir_fd)rrrrLrbrZr[r
rarqr]r^r�assertInrrlr��EACCES)r#rdrs   r�
test_mknodzPosixTester.test_mknod�sw��
	���)�*�*�*��|�d�l�*�T�\�9��	Q��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�Y�-�D���
�
�
�
�
�
���	N�	N�	N��M�M�!�'�E�K���u�|�#L�M�M�M�M�M�M�M�M�M�����	N���s0� B/�/
C?�9<C:�:C?�!"E�
F�<F�F�makedevztest needs posix.makedev()c�2�tjtj��}|j}|�|t��|�|d��tj|��}|�|t��|�|d��|�	tj|��|��|�
ttjt|����|�
ttj��|�
ttftjd��tj|��}|�|t��|�|d��|�	tj|��|��|�
ttjt|����|�
ttj��|�
ttftjd��|�	tj||��|��|�
ttjt|��|��|�
ttj|t|����|�
ttj|��|�
ttj��dS)NrrP)r
rLrr�st_devr-rrD�majorrBr8r9rNr�
OverflowError�minorrj)r#�st�devrmros     r�test_makedevzPosixTester.test_makedev�sI��
�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
�x�������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|�||	|����|||���id
S)z/Common code for chown, fchown and lchown tests.c�����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() behaviorN)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�chownzrequires os.chown()�getgid() is a stubc�L�tjtj��|�t
tjtjdd��tjtj��|�	tjtjtj
��dSrO)rerrrr8rr
r��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�r
r�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�r
r�r6r"s r�test_lchownzPosixTester.test_lchown1sk��	�	�)�"�#�#�#�
�
�>�9�#3�4�4�4��#�#�E�L�)�2B�$+�E�7�D�$A�$A�	C�	C�	C�	C�	CrHr�ztest needs posix.chdir()c��tjtj��|�t
tjtj��dSrp)r
r�rerrr8rrrr"s r�
test_chdirzPosixTester.test_chdir:s7��
��B�I�������'�5�;�	�0@�A�A�A�A�ArHc�~�|�tjtjt
j����dSrp)rgrrr
�listdirrerrr"s r�test_listdirzPosixTester.test_listdir?s+���
�
�i�&��
�b�i�(@�(@�A�A�A�A�ArHc�h�|�tjtj����dSrp)rgrrr
r�r"s r�test_listdir_defaultz PosixTester.test_listdir_defaultBs'��	
�
�
�i�&��
���8�8�8�8�8rHc��|�tjtj��tjd����dS�N�.)rgrerQrrr
r�r"s r�test_listdir_byteszPosixTester.test_listdir_bytesGs5��	
�
�
�b�k�)�"2�3�3�U�]�4�5H�5H�I�I�I�I�IrHc��ttfD]�}|�t��5t	j|d����}ddd��n#1swxYwY|�tjtj
��|��|D]*}|�t|��t���+��dSr�)r��
memoryview�assertWarnsrSr
r�rgrerQrr�assertIs�typer�)r#�cls�namesr;s    r�test_listdir_bytes_likez#PosixTester.test_listdir_bytes_likeLs����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��tjtj��tj��}|�tj|��|�ttjd����ttj|������|�ttjd����ttj|������dS)N�.)	r
rr'r�rrwrB�sortedr�)r#�fs  r�test_listdir_fdzPosixTester.test_listdir_fdTs���
�J�u�|�~�~�u�~�6�6�������Q�'�'�'�����5�=��%�%�&�&��5�=��#�#�$�$�	�	�	�
	
����5�=��%�%�&�&��5�=��#�#�$�$�	�	�	�	�	rH�accessztest needs posix.access()c�~�|�tjtjt
j����dSrp)rqr
r�rrre�R_OKr"s r�test_accesszPosixTester.test_accesscs+�������Y�%5�r�w�?�?�@�@�@�@�@rH�umaskztest needs posix.umask()c��tjd��}|�|t��tj|��dSr)r
r�r-r)r#�old_masks  r�
test_umaskzPosixTester.test_umaskgs;���;�q�>�>�����h��,�,�,�
��H�����rH�strerrorztest needs posix.strerror()c�T�|�tjd����dSr)rqr
r�r"s r�
test_strerrorzPosixTester.test_strerrorms&��	
�����q�)�)�*�*�*�*�*rH�pipeztest needs posix.pipe()c��tj��\}}tj|��tj|��dSrp)r
r�rerw)r#�reader�writers   r�	test_pipezPosixTester.test_pipers7���������
������
�������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_pipe2xs���	
���)�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�P�tj��}tjtjd��|�ttjtjd��|�ttjtj|df��|�ttjtjd|f��tjtjt|��t|��f��tjtj||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�2�tj|��j}	|tjtjztjzz}|||fi|��|�tj|��j|��tj|��r;	t|d��5	ddd��n#1swxYwYn#t$rYnwxYw|tjtjztjzz}|||fi|��|�tj|��j|��tj|��r)t|d��5	ddd��n#1swxYwYtj||��dS#tj||��wxYw)Nzwb+)rerLr^�S_IWOTH�S_IWGRPr[rB�S_ISREGrr\r
�chmod)r#�
chmod_func�target�kwargsrd�new_modes      r�check_chmodzPosixTester.check_chmod�s���w�v���&��	&����t�|� ;�d�l� J�K�K�H��J�v�x�2�2�6�2�2�2����R�W�V�_�_�4�h�?�?�?��|�D�!�!�
���f�e�,�,������������������������&�����D������t�|�d�l�:�T�\�I�J�H��J�v�x�2�2�6�2�2�2����R�W�V�_�_�4�h�?�?�?��|�D�!�!�
��&�%�(�(����������������������
�K���%�%�%�%�%��E�K���%�%�%�%���sy�A5E?�B;�!B/�#B;�/B3�3B;�6B3�7B;�:E?�;
C�E?�C�BE?�E�E?�E!�!E?�$E!�%E?�?Fc�Z�|�tjtj��dSrp)r�r
r�rrr"s r�test_chmod_filezPosixTester.test_chmod_file�s#�������i�&6�7�7�7�7�7rHc��tjdz}tj|��|�tj|��|S)N�d)rrr
�mkdirr�rmdir�r#r�s  r�tempdirzPosixTester.tempdir�s:���!�C�'��
��F���������V�,�,�,��
rHc�n�|���}|�tj|��dSrp)r�r�r
r�r�s  r�test_chmod_dirzPosixTester.test_chmod_dir�s-�������������f�-�-�-�-�-rH�lchmodztest needs os.lchmod()c��|�tjtj��|�tjtjd���dS�NFr)r�r
r�rrr�r"s r�test_lchmod_filezPosixTester.test_lchmod_file�sC�������y�'7�8�8�8������i�&6���N�N�N�N�NrHc��|���}|�tj|��|�tj|d���dSr�)r�r�r
r�r�r�s  r�test_lchmod_dirzPosixTester.test_lchmod_dir�sJ�������������v�.�.�.������f�e��D�D�D�D�DrHc��tj|��j}tj|��j}	|tjtjztjzz}|||fi|��|�tj|��j|��|�tj|��j|��|tjtjztjzz}|||fi|��|�tj|��j|��|�tj|��j|��tj	||��dS#tj	||��wxYwrp)
rerLr^r�r�r�r[rBr
r��r#r�r��linkr��target_mode�	link_moder�s        r�check_chmod_linkzPosixTester.check_chmod_link�sF���g�f�o�o�-���H�T�N�N�*�	�
	-�"�t�|�d�l�'B�T�\�'Q�%R�R�H��J�t�X�0�0��0�0�0����R�W�V�_�_�4�h�?�?�?����R�X�d�^�^�3�Y�?�?�?�"�d�l�T�\�&A�D�L�&P�Q�H��J�t�X�0�0��0�0�0����R�W�V�_�_�4�h�?�?�?����R�X�d�^�^�3�Y�?�?�?��K���,�,�,�,�,��E�K���,�,�,�,���s�DE&�&E=c��tj|��j}tj|��j}|tjtjztjzz}|||fi|��|�tj|��j|��|�tj|��j|��|tjtjztjzz}|||fi|��|�tj|��j|��|�tj|��j|��dSrp)rerLr^r�r�r�r[rBr�s        r�check_lchmod_linkzPosixTester.check_lchmod_link�s���g�f�o�o�-���H�T�N�N�*�	������!<�t�|�!K�L�L���
�4��,�,�V�,�,�,���������0�+�>�>�>������$���/��:�:�:����t�|� ;�d�l� J�K���
�4��,�,�V�,�,�,���������0�+�>�>�>������$���/��:�:�:�:�:rHc��tj}tjdz}tj||��|�t
j|��tjdkr#|�t
j	||��dS|�
t
j	||��|�
t
j	||d���dS)N�-link�ntTr)rrrer�rr
rr;r�r�r��r#r�r�s   r�test_chmod_file_symlinkz#PosixTester.test_chmod_file_symlink�s����!����'�)��
�
�6�4� � � ������d�+�+�+�
�7�d�?�?��"�"�5�;���=�=�=�=�=��!�!�%�+�v�t�<�<�<��!�!�%�+�v�t�T�!�R�R�R�R�RrHc��|���}tjdz}tj||d���|�tj|��tjdkr#|�	tj
||��dS|�tj
||��|�tj
||d���dS)Nr�T)�target_is_directoryr�r)r�rrrer�rr
rr;r�r�r�r�s   r�test_chmod_dir_symlinkz"PosixTester.test_chmod_dir_symlinks�����������'�)��
�
�6�4�T�:�:�:�:������d�+�+�+�
�7�d�?�?��"�"�5�;���=�=�=�=�=��!�!�%�+�v�t�<�<�<��!�!�%�+�v�t�T�!�R�R�R�R�RrHc�.�tj}tjdz}tj||��|�t
j|��|�t
j||d���|�t
j	||��dS�Nr�Fr)
rrrer�rr
rr�r�r�r�s   r�test_lchmod_file_symlinkz$PosixTester.test_lchmod_file_symlinks����!����'�)��
�
�6�4� � � ������d�+�+�+����u�{�F�D�%��P�P�P����u�|�V�T�:�:�:�:�:rHc�>�|���}tjdz}tj||��|�tj|��|�tj	||d���|�tj
||��dSr�)r�rrrer�rr
rr�r�r�r�s   r�test_lchmod_dir_symlinkz#PosixTester.test_lchmod_dir_symlinks�����������'�)��
�
�6�4� � � ������d�+�+�+����u�{�F�D�%��P�P�P����u�|�V�T�:�:�:�:�:rHc���tj|��}|�t|d����|jtjz}	|||fi|��nD#t$r7}|jtjkr�d}|�	|��Yd}~nd}~wwxYw	tj|��}|�
|jtjz|j��	t|d��}	n<#t$r/}
|�
|
jtj��Yd}
~
nd}
~
wwxYwtj||j��dS#tj||j��wxYw)N�st_flags�2chflag UF_IMMUTABLE not supported by underlying fsr})rerLrqrr��UF_IMMUTABLErr�
EOPNOTSUPPr�rBrrlr
�chflags)r#�chflags_func�target_filer�rp�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�+�r�{�3�3�3�3�3��E�M�+�r�{�3�3�3�3���sO�
A�
B�"-B�B�AE�C0�/E�0
D)�:%D$�E�$D)�)E�E$rztest needs os.chflags()c�Z�|�tjtj��dSrp)rr
rrrr"s r�test_chflagszPosixTester.test_chflags8s#���'�'��
�y�7G�H�H�H�H�HrH�lchflagsztest needs os.lchflags()c��|�tjtj��|�tjtjd���dSr�)rr
r	rrrr"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�0�tj||d���Sr�)r
r)r�rs  r�chflags_nofollowz;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollowLs���=��u�e�D�D�D�DrHr�)rerLrrrqrrrr�r�r�r
r	r�r�rrr�r�rB)
r#�	testfn_st�dummy_symlink_str�fnrrr��
new_testfn_st�new_dummy_symlink_sts
          r�test_lchflags_symlinkz!PosixTester.test_lchflags_symlinkBs����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)Nr�)	rer;rr�r
r��itemsrBr�)r#�	item_type�k�vs    r�test_environzPosixTester.test_environcs��
�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#1swxYwYtjdkr�|�t��5tjdd	��ddd��n#1swxYwY|�t��5tjd
d��ddd��n#1swxYwY|�t��5tjdd
��ddd��dS#1swxYwYdSdS)NzFRUITVEGETABLE�cabbage�FRUITzorangeVEGETABLE=cabbagezFRUIT=ORANGE�lemonr
sFRUITVEGETABLEscabbagesFRUITsorangeVEGETABLE=cabbagesFRUIT=ORANGEslemon)r8rre�putenvr;r"s r�test_putenvzPosixTester.test_putenvls��
�
�
�z�
*�
*�	5�	5��I�(�)�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�
�
�z�
*�
*�	<�	<��I�g�:�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�
�
�
�z�
*�
*�	/�	/��I�n�g�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�
�7�g����"�"�:�.�.�
;�
;��	�-�z�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;��"�"�:�.�.�
B�
B��	�(�$@�A�A�A�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B����
B�
B�
B�
B��"�"�:�.�.�
5�
5��	�/�8�4�4�4�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5�
5�
5��si�=�A�A�"B�B�B�)C�C�C�D"�"D&�)D&�E)�)E-�0E-�F1�1F5�8F5r'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��abspathrrr�r��rmtree)r#�dirnamerr�	base_path�_create_and_do_getcwds    @r�test_getcwd_long_pathnamesz&PosixTester.test_getcwd_long_pathnames{s����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}|�|tj||����dS)NrrA)rfr`rer3rgr
r()r#�user�groups   r�test_getgrouplistzPosixTester.test_getgrouplist�s_���|�B�I�K�K�(�(��+����R�Y�[�[�)�)�!�,���
�
�e�U�/��e�<�<�=�=�=�=�=rHr,ztest needs os.getegid()�popenztest needs os.popen()c�.�tjd��5}|������}|���}ddd��n#1swxYwY	td�|���D����}n#t$rt��}YnwxYw|�|stj	d���tjdkrgddl}|�
d��pd}td�|�d	��dd
�D����dkrtj	d���|�t!j����}|�|p|t!j��hk��dS)
Nzid -G 2>/dev/nullc3�4K�|]}t|��V��dSrp�r)r��gs  r�	<genexpr>z-PosixTester.test_getgroups.<locals>.<genexpr>�s(����<�<��S��V�V�<�<�<�<�<�<rHzneed working 'id -G'�darwinr�MACOSX_DEPLOYMENT_TARGETz10.3c3�4K�|]}t|��V��dSrpr0)r�r�s  rr2z-PosixTester.test_getgroups.<locals>.<genexpr>�s(����8�8��S��V�V�8�8�8�8�8�8rHr�r�)r�r:z$getgroups(2) is broken prior to 10.6)rer-r��striprw�setr�rrirjr�r��	sysconfig�get_config_var�tuple�symmetric_differencer
r/rqr,)r#�idg�groups�ret�
idg_groupsr8�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_constants�s6��	�
�
�
�
�
�
�
�
�
���
���
����rH�sched_yieldzdon't have scheduling support�sched_setaffinityz!don't have sched affinity supportc�,�tj��dSrp)r
rMr"s r�test_sched_yieldzPosixTester.test_sched_yield�s��	������rH�sched_get_priority_maxz!requires sched_get_priority_max()c���tj}tj|��}tj|��}|�|t
��|�|t
��|�||��tjdkrN|�	ttjd��|�	ttjd��dSdS)Nr3i��)r
�SCHED_RR�sched_get_priority_minrQr-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��d�tj���D��}tjd��}|�||��	tjtj����}|�||��n-#t$r }|jtj	kr�Yd}~nd}~wwxYw|�
ttjd��|�
ttjd��tjd��}|�|j
t��tj�d��s�	tjd||��tjd|��n-#t$r }|jtj	kr�Yd}~nd}~wwxYw|�
ttjd|��|�
ttjd||��|�
t(tjd|d��|�
t(tjdd��tjd��}|�
t(tjd|��d}tj|��}|�
t,tjd|��tj|���}|�
t,tjd|��dS)Nc�B�g|]\}}|�d���|��S)�SCHED_�r�)r�r;�scheds   rr�zDPosixTester.test_get_and_set_scheduler_and_param.<locals>.<listcomp>�s<��=�=�=���u�"&�/�/�(�";�";�=�u�=�=�=rHrrP�r�r��+l���)�sched_priority)r
�__dict__rrrgrer2rrrlr8�sched_getparamr-r`rr�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_param�s���=�=���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�8�����-��)=�q�%�H�H�H�H�Hs0�%B�
B:�B5�5B:�+F	�	
F3�F.�.F3�sched_rr_get_intervalzno functionc�D�	tjd��}nB#t$r5}|jtjkr�|�d��Yd}~nd}~wwxYw|�|t��|�|d��|�	|d��dS)Nrz only works on SCHED_RR processesgg�?)
r
rlrrr�r�r-rNrD�
assertLess)r#�intervalrs   r�test_sched_rr_get_intervalz&PosixTester.test_sched_rr_get_intervals���	>��2�1�5�5�H�H���	>�	>�	>��w�%�,�&�&���M�M�<�=�=�=�=�=�=�=�=�����	>����	
���h��.�.�.�����"�-�-�-�����"�%�%�%�%�%s��
A�+A�Ac���tjd��}|�|t��|�t|��d��tj�d��s&|�	ttjd��|D]I}|�|t��|�|d��|�|d���JdS)Nrr5r�rPr	)
r
�sched_getaffinityr-r7rDrCr�r�r�r8rrrn)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	�J�tjd��}|�tjdt	|����t|��dkr|���tjd|��|�tjd��|��	tjdg��n#t$rYnwxYw|�	ttjddg��|�	ttjdttd����|�	ttjdddzg��tj�d��s)|�	ttjd|��dSdS)Nrr5i�����0X�r�rP)r
rrrrNr�rC�poprBrr8r�maprrnr�r�r�)r#rss  r�test_sched_setaffinityz"PosixTester.test_sched_setaffinity.so���&�q�)�)������/��D��J�J�?�?�?��t�9�9�q�=�=��H�H�J�J�J�
���4�(�(�(�����0��3�3�T�:�:�:�	��#�A�r�*�*�*�*���	�	�	�
�D�	����
	
���*�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�	Js�(B>�>
C�
CzNo dynamic linking on WASIr
zPOSIX-only testc�f�tjtjtjtjdSrp)r
�	RTLD_LAZY�RTLD_NOW�RTLD_GLOBAL�
RTLD_LOCALr"s r�test_rtld_constantszPosixTester.test_rtld_constantsHs*��	���
���
���
����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�assertLessEqualr�r8rrirj)r#ryr �fnor�s     r�
test_fs_holeszPosixTester.test_fs_holesQs����)�"�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	�J�dD]�}tt|d��}|��dtjfD]]}	|d|���#t$rA}|�d�|��t|����Yd}~n d}~wwxYw|�d|z����dS)zf
        Test functions that call path_error2(), providing two filenames in their exceptions.
        )�rename�replacer�N�noodly2�doesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r6rerrrrg�formatrrk)r#r;�function�dstrs     r�test_path_error2zPosixTester.test_path_error2ls���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�r�r�rLr�s    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)r8rrer�r�rrr��
isinstancer\rBr�rwr0)r#r�s  r�test_pidfd_openzPosixTester.test_pidfd_open�s��
�
�
�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)��__name__�
__module__�__qualname__r$r=ri�
skipUnlessrr
rGrLrSrWr[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}r�r�skip_unless_working_chmodr�r�r�r�r�r�r�r�r�r�r�r�r�r��cpython_onlyr�r�r�r�r�r�r�r�r�r��skip_unless_symlinkr�r�r�r�rrrrrr r'r,rB�signalrL�requires_sched_h�requires_sched_affinityrPrX�requires_schedrkrprur{r;r�r�r�r�r�r�r�rHrrr6s�������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�-�-�/D�E�E��X�_�W�*�,@�A�A�O�O�B�A�F�E�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�&�&�&�*�(�8�8�)�(�8�����(�.�.�)�(�.��X������1�1�3K�L�L�O�O�M�L�O��X������1�1�3K�L�L�E�E�M�L�E�

-�
-�
-�
;�
;�
;��"�	S�	S�#�"�	S��"�	S�	S�#�"�	S��X������1�1�3K�L�L��"�;�;�#�"�M�L�;��X������1�1�3K�L�L��"�;�;�#�"�M�L�;�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�
5�
5�
5��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�2�X�_�W�_�&B�C�C��X����G�+�->�?�?���@�?�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	j|��|�tj|��tj	�
||��}tj|��5}|||fV�ddd��dS#1swxYwYdS)Nr5�_�base)r��countrrr
r�rr�rer�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�-C�C�	Cc#��K�|���5\}}}tj|��|�tj|��|||fV�ddd��dS#1swxYwYdSrp)r�rr�rr
r�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\}}}|�tj|tj|�����ddd��dS#1swxYwYdS�N�rf)r�rqr
r�rer�r�s    r�test_access_dir_fdz!TestPosixDirFd.test_access_dir_fd�s���
�
�
�
 �
 �	H�$<�V�T�8��O�O�E�L��r�w�v�F�F�F�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�	H�	Hs�9A�A�"Az'test needs dir_fd support in os.chmod()c��|���5\}}}tj|tj��tj|tjtjz|���tj|��}|�|jtjztjtjz��ddd��dS#1swxYwYdSr�)	r�r
r�rLrZr[rBr^�S_IRWXU)r#rfr;r��ss     r�test_chmod_dir_fdz TestPosixDirFd.test_chmod_dir_fd�s���
�
�
�
 �
 �	:�$<�V�T�8��K��$�,�/�/�/��K��d�l�T�\�9�&�I�I�I�I��
�8�$�$�A����Q�Y���5�!�\�D�L�8�
:�
:�
:�		:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:�	:�	:s�B%C�C�Cr�z'test needs dir_fd support in os.chown()r�c���|���5\}}}tj|tj��tj��|���ddd��dS#1swxYwYdSr�)r�r
r�rer3r.r�s    r�test_chown_dir_fdz TestPosixDirFd.test_chown_dir_fd�s����
�
�
 �
 �	G�$<�V�T�8��K��b�i�k�k�2�9�;�;�v�F�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	G�	Gs�?A!�!A%�(A%z&test needs dir_fd support in os.stat()c
�*�|���5\}}}t|d��5}|�d��ddd��n#1swxYwY|�tj|��t	j|��}t	j||���}|�||��t	j|d���}|�||��|�tdtj|t	j
�����|�tdtj|t|�����|�ttj|d���ddd��dS#1swxYwYdS)Nr�z	testline
r�zshould be integer or None, notl F�x:^V)r�rrrr
rrLrBrMr9r'rNr8rn)r#rfr;r��outfile�s1�s2s       r�test_stat_dir_fdzTestPosixDirFd.test_stat_dir_fd�s���
�\�\�^�^�	5�7���h��h��$�$�
,���
�
�l�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,��O�O�E�L�(�3�3�3���H�%�%�B���D��0�0�0�B����R��$�$�$���H�T�2�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��}tj|d|���tj||���|�t
tj|||���|�t
tj|d|���|�t
tj||df|���|�t
tj|d|f|���|�t
tj||df|���tj|t
|��t
|��f|���tj|||f|���tj|t
|��t
|t
|��z
dz��f|���tj||t
|��t
|t
|��z
dz��f���tjtjvr)	tj|d|���n#t$rYnwxYwddd��dS#1swxYwYdS)Nr�r�xr)rfr*F)rrf)
r�rr
rr8r9rrer�r)r#rfr;r�rs     r�test_utime_dir_fdz TestPosixDirFd.test_utime_dir_fd�s���
�
�
�
 �
 �	�$<�V�T�8��)�+�+�C��K��d�6�2�2�2�2��K��V�,�,�,�,����i���d�!�&�
�
2�
2�
2����i���d�*�6�
�
;�
;�
;����i���d�"�D�k�&�
�
:�
:�
:����i���d�#�S�k�&�
�
:�
:�
:����i���d�"�C�j��
�
9�
9�
9��K��s�3�x�x��S���2�6�B�B�B�B��K��s�C�j��8�8�8�8��K����X�X�s�C�#�c�(�(�N�c�#9�:�:�;�F�
L�
L�
L�
L��K��V�#&�s�8�8�S�#��C���.�C�1G�-H�-H�"I�
K�
K�
K�
K��x�2�6�6�6���K��e�F�K�K�K�K�K��!�����D�����3	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s6�HI�H6�5I�6
I�I�I�I�I�Iz5WASI: symlink following on path_link is not supportedr�z&test needs dir_fd support in os.link()c�&�|���5\}}}|���5\}}}	tj||||���n/#t$r"}|�d|z��Yd}~nd}~wwxYw|�tj|��|�tj	|��dtj	|��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)N��
src_dir_fd�
dst_dir_fdzposix.link(): %sr5)
r�r�r
r�r\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�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��1�1�!�4��
�<�(�(��+�
-�
-�
-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-����		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-����		-�		-�		-�		-�		-�		-s^�D�C.�A
�C.�
A9�A4�/C.�4A9�9A)C.�"D�.C2	�2D�5C2	�6D�D
�
D
z'test needs dir_fd support in os.mkdir()c��|���5\}}}tj||���|�tj|��tj|��ddd��dS#1swxYwYdSr�)r�r
r�rr�rLr�s    r�test_mkdir_dir_fdz TestPosixDirFd.test_mkdir_dir_fd!s���
�\�\�^�^�	!�7���h��K��V�,�,�,�,��O�O�E�K��2�2�2��J�x� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s�AA1�1A5�8A5rarbzAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c�J�|���5\}}}tjtjztjz}	tj||d|���|�t
j|��|�	tj
tj|��j����nS#t$rF}|�
|jtjtjtjf��Yd}~nd}~wwxYwddd��dS#1swxYwYdS)Nrr�)r�rLrbrZr[r
rarrrqr]r^rrgrrlr�rh)r#rfr;r�rdrs      r�test_mknod_dir_fdz TestPosixDirFd.test_mknod_dir_fd(s^���\�\�^�^�
	M�7���h��<�$�,�.���=�D�
M���D�$��&�9�9�9�9������h�7�7�7�����
�e�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�B8�AD�8
D�<D�>D�D�D�D�Dz&test needs dir_fd support in os.open()c��|���5\}}}t|d��5}|�d��ddd��n#1swxYwY|�tj|��t	j|tj|���}	t	j|d��}|�d|��t	j	|��n#t	j	|��wxYw	ddd��dS#1swxYwYdS)Nrs	testline
r��	)
r�rrrr
rr�r�rBrw)r#rfr;r�r�r�r�s       r�test_open_dir_fdzTestPosixDirFd.test_open_dir_fd;si��
�\�\�^�^�		 �7���h��h��%�%�
-���
�
�m�,�,�,�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-�
-����
-�
-�
-�
-��O�O�E�L�(�3�3�3���D�%�.��@�@�@�B�
 ��j��Q�'�'��� � ���4�4�4���B��������B���������		 �		 �		 �		 �		 �		 �		 �		 �		 �		 �		 �		 ����		 �		 �		 �		 �		 �		 sM�D�A�D�A	�D�A	�AD�+C�D�C/�/D�D�D�readlinkz*test needs dir_fd support in os.readlink()c�&�|���5\}}}tjd|��|�tj|��|�t	j||���d��ddd��dS#1swxYwYdS�Nr�r�)r�rer�rr
rrBr�r�s    r�test_readlink_dir_fdz#TestPosixDirFd.test_readlink_dir_fdHs����\�\�^�^�	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�	M��A$B�B
�
B
z(test needs dir_fd support in os.rename()c�J�|���5\}}}|���5\}}}tj||||���tj|��tj||��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�)r�r�r
r�rL)r#rfr;r�r��name2�	fullname2s       r�test_rename_dir_fdz!TestPosixDirFd.test_rename_dir_fdPs+��
�
�
�
 �
 �	.�$<�V�T�8�
�\�\�^�^�	.�:���	��L��u�$*�w�
@�
@�
@�
@��J�y�!�!�!��L��H�-�-�-�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.�	.����	.�	.�	.�	.�	.�	.s5�B�AB�4B�B	�B�B	�B�B�Bz)test needs dir_fd support in os.symlink()c�&�|���5\}}}tjd||���|�tj|��|�tj|��d��ddd��dS#1swxYwYdSr�)r�r
r�rrrBr�r�s    r�test_symlink_dir_fdz"TestPosixDirFd.test_symlink_dir_fdYs���
�\�\�^�^�	B�7���h��M�)�T�&�9�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�	Br�z(test needs dir_fd support in os.unlink()c��|���5\}}}tj|��tj|��	tj||���|�ttj|��n&#|�tj|���xYw	ddd��dS#1swxYwYdSr�)	r�rr�r
rLrr8rrr�s    r�test_unlink_dir_fdz!TestPosixDirFd.test_unlink_dir_fd`s���
�\�\�^�^�	�7���h��'��1�1�1��J�x� � � �
���T�&�1�1�1�1��!�!�'�5�:�x�@�@�@�@��
������h�7�7�7�����A�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s)�-B4�<B�?B4�#B#�#B4�4B8�;B8rUz(test needs dir_fd support in os.mkfifo()c���|���5\}}}	tj|tjtjz|���n/#t$r"}|�d|z��Yd}~nd}~wwxYw|�tj	|��|�
tjtj|��j����ddd��dS#1swxYwYdS)Nr�rX)
r�r
rUrLrZr[r\r�rrrqr]r^)r#rfr;r�rs     r�test_mkfifo_dir_fdz!TestPosixDirFd.test_mkfifo_dir_fdls8��
�\�\�^�^�	I�7���h�
8���T�4�<�$�,�#>�v�N�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;�C$�.A
�	C$�

A6�A1�,C$�1A6�6A!C$�$C(�+C(N),r�r�r�r�rr�r�rir�rer��supports_dir_fdr�r�r�rr�r�rr}r�rLr�rr�r�r�r�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�&�tj��dkrtjd���t	td��stjd���t
jdkrtjd���tj��|_dS)Nrznot enough privilegesr/zneed posix.getgroupsr3zgetgroups(2) is broken on OSX)	r
r3rirjrr�r�r/�saved_groupsr"s rr$zPosixGroupsTester.setUpys~���<�>�>�Q����#�$;�<�<�<��u�k�*�*�	<��#�$:�;�;�;��<�8�#�#��#�$C�D�D�D�!�O�-�-����rHc�(�ttd��rtj|j��dSttd��rLt	jtj����j}tj||jd��dSdS)N�	setgroupsr_r)	rr
r�r�rfr`r3rgr_�r#r;s  r�tearDownzPosixGroupsTester.tearDown�s����5�+�&�&�	9��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����j}t	j||��|�|t	j	����dSr�)
�maxr�rfr`r
r3rgr_rgr/)r#r1r;s   rrmz!PosixGroupsTester.test_initgroups�sm��

��!�(�a�S�)�)�A�-���|�E�L�N�N�+�+�3��
���q�!�!�!��
�
�a���*�*�+�+�+�+�+rHr�ztest needs posix.setgroups()c��dgttd����fD]=}tj|��|�|tj�����>dS)Nr�)r�r�r
r��assertListEqualr/)r#r=s  r�test_setgroupsz PosixGroupsTester.test_setgroups�sa���s�D��r���O�O�,�	<�	<�F��O�F�#�#�#�� � ����):�):�;�;�;�;�	<�	<rHN)r�r�r�r$r�rir�rr
rmr�r�rHrr�r�ws�������.�.�.�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)Nrr)r�r��r#�argss  r�python_argsz_PosixSpawnMixin.python_args�s�����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�scriptrr�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)	rrer��waitpidrB�assertNotEqual�FileNotFoundErrorr\�filename)r#rr��pid2�status�excs      r�test_no_such_executablez(_PosixSpawnMixin.test_no_such_executable�s���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)
Nrz^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r�rrb�barr�rr	)
rrrrrrrer�rr�rrBr�)r#�envfiler
rr�r�s      r�test_specify_environmentz)_PosixSpawnMixin.test_specify_environment�s(���"�����	�(�'�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_actions�sQ���o�o���a� ����J��	�
�
��	��S�1�-�-�-�-�-�-rHc��|�|jd|jtjg���}t	j|d���dSrr!r#s  r�test_empty_file_actionsz(_PosixSpawnMixin.test_empty_file_actions�sQ���o�o���a� ����J��	�
�
��	��S�1�-�-�-�-�-�-rHc��|�tjtjddgtjd���}tj|d���dS)Nr�r�F��resetidsrr��rr�r�rer�rr�r#s  r�test_resetids_explicit_defaultz/_PosixSpawnMixin.test_resetids_explicit_default�sQ���o�o��N�
�^�T�6�*��J��	�
�
��	��S�1�-�-�-�-�-�-rHc��|�tjtjddgtjd���}tj|d���dS)Nr�r�Tr(rr�r*r#s  r�
test_resetidsz_PosixSpawnMixin.test_resetids�sQ���o�o��N�
�^�T�6�*��J��	�
�
��	��S�1�-�-�-�-�-�-rHc���|�t��5|�tjtjddgt
jd���ddd��dS#1swxYwYdS)Nr�r�r(�r8r9rr�r�rer�r"s r�test_resetids_wrong_typez)_PosixSpawnMixin.test_resetids_wrong_type�s���
�
�
�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�)rr�r�rer�r1rr�r#s  r�test_setpgroupz_PosixSpawnMixin.test_setpgroup�sW���o�o��N�
�^�T�6�*��J��j�l�l�	�
�
��	��S�1�-�-�-�-�-�-rHc���|�t��5|�tjtjddgt
jd���ddd��dS#1swxYwYdS)Nr�r��023r3r/r"s r�test_setpgroup_wrong_typez*_PosixSpawnMixin.test_setpgroup_wrong_types���
�
�
�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�	9r1�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�dedentrr�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�
r8r9rr�r�rer�rr��NSIGr"s r�test_setsigmask_wrong_typez+_PosixSpawnMixin.test_setsigmask_wrong_types��
�
�
�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_inheritabler>r?rr�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)Nr;r���	setsigdefr�)r�r@�SIG_IGNr>r?rr�r�rer�rr�)r#�original_handlerr�r�s    r�test_setsigdefz_PosixSpawnMixin.test_setsigdefJs���"�=�����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�rCrTrDr5rEr"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�	PrHr^zbpo-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��rerrTr>r?rr�r�r�rerr��r#�policy�priorityr�r�s     r�test_setscheduler_only_paramz-_PosixSpawnMixin.test_setscheduler_only_paramks����&�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���dSr\r^r_s     r�test_setscheduler_with_policyz._PosixSpawnMixin.test_setscheduler_with_policys����&�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�rr�)
re�POSIX_SPAWN_OPENr��realpath�__file__r��POSIX_SPAWN_CLOSE�POSIX_SPAWN_DUP2rr"r�rr�)r#r r�s   r�test_multiple_file_actionsz+_PosixSpawnMixin.test_multiple_file_actions�s���
�
 �!�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)
Nrrr�rp)i90r5r�rAr�)r"r8r9rrer�rirrfrhr�rs  r�test_bad_file_actionsz&_PosixSpawnMixin.test_bad_file_actions�sA��� ��
�
�
�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�rrr�rr	�hello)rrrrrerfr�r��O_TRUNCrLrZr[rrr�rr�rrBr�)r#r�r
r rr�r�s       r�test_open_filez_PosixSpawnMixin.test_open_file�sG���"�����	�(�'�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�rrr�rr	zis closed %d)rrrrrrrer�rirr�rrBr�rr)r#�	closefiler
rr�r�s      r�test_close_filez _PosixSpawnMixin.test_close_file�sK���$�	����	�(�)�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)Nrorr5r�rrr�rr	rp)rrrrrrerjrvrrr�rr�rBr�)r#�dupfiler
�	childfiler rr�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)&r�r�r�r�r�r"rrrrrr$r&r+r-r0r5r8rir�rr�rArGrRrXrZr�r�r�r�rbrdrkrmrrrur8r�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)�TestPosixSpawnryN)r�r�r�r6r
rr�rHrr{r{�s!���������
�t�4�4�J�J�JrHr{�posix_spawnpztest needs os.posix_spawnpc�H�eZdZeedd��Zejd���ZdS)�TestPosixSpawnPr|Nc���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�PATHrrr�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�rhr>r?r)r#�temp_dir�program�program_fullpathr��
spawn_argsr�rs        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)	r�r�r�r6r
rrr�r�r�rHrr~r~�sD�����������5�5�J��"�+�+�#�"�+�+�+rHr~r3ztest 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_r\)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��dSrpr0)r��parts  rr2z-TestPosixWeaklinking.setUp.<locals>.<genexpr>-s(����T�T�4�S��Y�Y�T�T�T�T�T�TrHr�)r8r��get_config_vars�	availabler:�mac_verr�)r#r8r�r�s   @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)r�rirjr�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)r�r�rqrrer=r"s rr�z!TestPosixWeaklinking.test_pwritev3s������~�.�.�.��<�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�)
r�r�rgr
�_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_FACCESSATr�r�r�rr�zfollow_symlinks unavailableFrzeffective_ids unavailableT)�
effective_ids)r�r�rgr
r�r�rMr�rer�r�r"s rr�z TestPosixWeaklinking.test_accessHs�����/�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_FCHMODATr��HAVE_LCHMODr�r�i�rr�)
r�r�rgr
r�r�rMr�rer�r"s r�
test_chmodzTestPosixWeaklinking.test_chmodYs������/�/�/��<�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_FCHOWNATr��HAVE_LCHOWNr�r�rr�)
r�r�rgr
r�r�rMr�rer�r"s rr�zTestPosixWeaklinking.test_chownes������/�/�/��<�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_LINKATr�zsrc_dir_fd unavailable�sourcer�r�r�zdst_dir_fd unavailable�r�r�r�r��dataTrF)r�r�rgr
r�r�rMr�rer�rr�r�rYrrr�r8�FileExistsError)r#r%�	link_path�target_path�source_pathrys      r�	test_linkzTestPosixWeaklinking.test_linkqsp�����}�-�-�-��<�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_FDOPENDIRr�zClistdir: path should be string, bytes, os.PathLike or None, not intrzCscandir: path should be string, bytes, os.PathLike or None, not int)r�r�rgr
r�r�rMr9rer��scandirr"s r�test_listdir_scandirz)TestPosixWeaklinking.test_listdir_scandir�sa�����/�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_MKDIRATr�r��dirrr�)
r�r�rgr
r�r�rMr�rer�r"s r�
test_mkdirzTestPosixWeaklinking.test_mkdir�s������~�.�.�.��<�8�#�#��M�M�.�%�*?�@�@�@�@�@�
���^�U�-B�C�C�C��'�'�(;�=Q�R�R�
*�
*����q�)�)�)�)�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*����
*�
*�
*�
*�
*�
*r�c�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�
HAVE_MKFIFOAT�rcrr�r�rr�)
r�r�rgr
r�r�rMr�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�
,�
,��	�&��+�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�
,�
,r�c�^�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	dd���ddd��dS#1swxYwYdS)N�HAVE_MKNODATr�r�r�rr�)
r�r�rgr
r�r�rMr�rerar"s rrizTestPosixWeaklinking.test_mknod�s������~�.�.�.��<�7�"�"��M�M�.�%�*?�@�@�@�@�@�
���^�U�-B�C�C�C��'�'�(;�=Q�R�R�
+�
+�����*�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�
+�
+r�c��|�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_RENAMEATr�z%src_dir_fd and dst_dir_fd unavailable�a�brr�r�)r�r�rgr
r�r�rMr�rer�r�r"s r�test_rename_replacez(TestPosixWeaklinking.test_rename_replace�s�������/�/�/��<�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_UNLINKATr�r�r�rr�)r�r�rgr
r�r�rMr�rerr�r"s r�test_unlink_rmdirz&TestPosixWeaklinking.test_unlink_rmdir�sp������/�/�/��<�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_OPENATr�r�r�rr�)r�r�rgr
r�r�rMr�rerr�r"s r�	test_openzTestPosixWeaklinking.test_open�s������}�-�-�-��<�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_READLINKATr�r�r�rr�)
r�r�rgr
r�r�rMr�rer�r"s r�
test_readlinkz"TestPosixWeaklinking.test_readlink�s������0�1�1�1��<�8�#�#��M�M�+�U�-B�C�C�C�C�C�
���.��0E�F�F�F��'�'�(;�=Q�R�R�
/�
/���F�A�.�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�
/�
/r�c�`�|�d��|jdkr"|�dtj��dS|�dtj��|�td��5tj	ddd���ddd��dS#1swxYwYdS)N�HAVE_SYMLINKATr�r�r�r�rr�)
r�r�rgr
r�r�rMr�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�rcr�r�rr�)
r�r�rgr
r�r�rMr�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)r�r�r�r$r�r�rTr�r�r�r�r�r�r`rir�r�r�r�r�r�r�rHrr�r� 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�+�+�+�+�+rHr�c�,�tj��dSrp)r�
reap_childrenr�rHr�tearDownModuler�	s��������rH�__main__)2�__doc__r~r�test.supportrrr�test.support.script_helperrrr�r�rrer�rLr�rirr>�
contextlibrr
�ImportErrorr�rfr�rY�
gettempdirrr�r��maxsizer}r�r�rr��TestCaserr�r�r�rr{r~r�r�r��mainr�rHr�<module>r�s�����������&�&�&�&�&�&�"�"�"�"�"�"�(�(�(�(�(�(�7�7�7�7�7�7�����
�
�
�
�
�
�
�
�����	�	�	�	�������������������������%�%�%�%�%�%���L�L�L�L������������������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��u0�u0�u0�u0�u0�(�#�u0�u0�u0�r+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�	A%�$A%�)A.�.A8�7A8

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