Sindbad~EG File Manager

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

�

'Μg�~��D�dZddlmZddlmZddlmZddlmZddlmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ	ddlZ	ddlZe
j4j7ej8�ej:d	z�Zej>e
j@d
kxrejBxsejDd�Z#d�Z$ej>e$�d
�Z%Gd�dejL�Z'Gd�dejL�Z(Gd�dejL�Z)Gd�d�Z*ej>e+e
d�d�Gd�dejLe*��Z,ej>e+e
d�d�Gd�dejLe*��Z-ej>e
jdk(d�Gd �d!ejL��Z.Gd"�d#ejL�Z/d$�Z0e1d%k(rejd�yy#e$rddlZY���wxYw#e$rdZY���wxYw)&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�sy	tjd�y#t$r,}|jtj
k(rYd}~yYd}~yd}~wwxYw)N�sched_getschedulerFrT)�hasattr�posixr�OSError�errno�ENOSYS)�es �,/usr/local/lib/python3.12/test/test_posix.py�_supports_schedr)sU���5�.�/���
� � ��#������7�7�e�l�l�"��#����s�)�	A�A�Azrequires POSIX scheduler APIc��eZdZd�Zd�Zejeed�d�d��Z	ejeed�d�d��Z
ejeed	�d
�d��Zejeed	�d
�d��Zejeed
�d�d��Z
ejeed
�d�d��Zejeed�d�ejeed�d�d���Zejeed�d�d��Zejeed�d�d��Zejeed�d�d��Zejeed�d �d!��Zejeed"d#�ej.vd$�ej2�d%���Zejeed&�d'�ej2�d(���Zej2�d)��Zejeed*�d+�d,��Zejeed-�d.�d/��Zejeed0�d1�d2��Zejeed0�d1�ejeed3�d4�d5���Z ejeed0�d1�e!d6���Z"ejeed7�d8�d9��Z#ejeed:�d;�d<��Z$ejeed:�d;�ejeed=�d>�d?���Z%ejeed:�d;�e!d@���Z&ejeedA�dB�dC��Z'ejeedA�dB�dD��Z(ejeedE�dF�dG��Z)ejeedE�dF�dH��Z*ejejVej.vdI�dJ��Z,ejejVejZvdK�dL��Z.ejeedM�dN�dO��Z/ejeedM�dN�e!dP���Z0ejeedQ�dR�dS��Z1ejeedQ�dR�e!dT���Z2ejeedU�dV�ejfejhdW�dX���Z5ejeedY�dZ�d[��Z6ejeed\�d]�ejfejhd^�d_���Z7ejeed`�da�ejpdbdcdd�ejr�de����Z:ejeedf�dg�dh��Z;ejeedi�dj�dk��Z<ejeedl�dm�dn��Z=do�Z>ejeedp�dq�dr��Z?ejeeds�xr	ee@dt�du�dv��ZAejeedw�dx�dy��ZBdz�ZCejeed{�d|�ejfej�d}�d~���ZEeFj�ejeed�d��ejfej�d}�d�����ZHeFj�ejeed��d��d����ZIejeed��d��d���ZJd��ZKd��ZLd��ZMd��ZNejej�ej.vd��d���ZPejeed��d��d���ZQejeed��d��d���ZRejeed��d��d���ZSejeed��d��d���ZTejeed��d��ejpdbdcd��d����ZUej�ejeed��d��ejpdbdcd��d�����ZWejeed��d��d���ZXd��ZYeFj�d���ZZd��Z[eFj�d���Z\ejeed��d��d���Z]ejeed��d��d���Z^d��Z_d��Z`eFj�d���ZbeFj�d���Zcejeed��d��eFj�d����Zdejeed��d��eFj�d����Zed��Zfejeed��d��d���Zgejeed��d��d���Zhejeed��d��d���Zid��Zjd��Zkejeed��d��d���Zlejeed��d��ejeed�d�ejeed��d��d�����Zmejeed«dëejeedīdūejr�dƄ���Znejeeodǫdȫejeedɫdʫd˄��Zpejeed̫dͫZqejeedΫdϫZreqdЄ�Zseqejeedѫdҫdӄ��ZteudԄ�Zvejeedիd֫dׄ�Zwerd؄�Zxerdل�Zyejfejhdګejej�d�k(dܫd݄��Z{ejeedޫd߫d��Z|d�Z}d�Z~d�Zejeed�d�d��Z�y#)��PosixTesterc�<�|jtjtj�t	tjd�5	ddd�|jt
j��tjddt�y#1swY�HxYw)N�wb�ignorez.* potential security risk .*)�
addCleanupr�unlink�TESTFN�open�enterContextr�check_warnings�warnings�filterwarnings�RuntimeWarning��selfs r�setUpzPosixTester.setUp8sj�����	�(�(�)�*:�*:�;�
�)�"�"�D�
)��*����/�8�8�:�;�����*I� .�	0�*�
)�s�	B�Bc���gd�}|D]N}tt|d�}|��|j|�5|�|jt|d�ddd��Py#1swY�[xYw)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�J��%��\�\�$�'��L��%�%�i��Q�?�(�'�%�(�'�s�A�A"	�	getresuidztest needs posix.getresuid()c��tj�}|jt|�d�|D]}|j	|d��y�N�r)rr?�assertEqual�len�assertGreaterEqual)r$�user_ids�vals   r�test_getresuidzPosixTester.test_getresuidQs>���?�?�$������X���*��C��#�#�C��+���	getresgidztest needs posix.getresgid()c��tj�}|jt|�d�|D]}|j	|d��yrA)rrJrCrDrE)r$�	group_idsrGs   r�test_getresgidzPosixTester.test_getresgidYs>���O�O�%�	�����Y���+��C��#�#�C��+�rI�	setresuidztest needs posix.setresuid()c��tj�}|jtj|��|jtjddd��y�N���)rr?�assertIsNonerN)r$�current_user_idss  r�test_setresuidzPosixTester.test_setresuidasD��!�?�?�,�����%�/�/�+;�<�=����%�/�/�"�b�"�5�6rIc��tj�}d|vr2|ddzddf}|jttjg|���yy�Nrr6rQ)rr?r9rrN)r$rS�new_user_idss   r�test_setresuid_exceptionz$PosixTester.test_setresuid_exceptionisP��!�?�?�,���$�$�,�Q�/��1�2�r�:�L��D���g�u���F��F�%rI�	setresgidztest needs posix.setresgid()c��tj�}|jtj|��|jtjddd��yrP)rrJrRrY)r$�current_group_idss  r�test_setresgidzPosixTester.test_setresgidrsD��"�O�O�-�����%�/�/�+<�=�>����%�/�/�"�b�"�5�6rIc��tj�}d|vr2|ddzddf}|jttjg|���yyrV)rrJr9rrY)r$r[�
new_group_idss   r�test_setresgid_exceptionz$PosixTester.test_setresgid_exceptionzsP��"�O�O�-���%�%�.�q�1�!�3�R��<�M��D���g�u���G��G�&rI�
initgroupsztest needs os.initgroups()�getpwuidztest needs pwd.getpwuid()c���|jttj�|jttjd�|jttjdd�|jttjddt	��tj�dk7r[	tjtj��j}	tj|d�|jd�yy#t$rtjd��wxYw#t$r4}|j|j t j"�Yd}~yd}~wwxYw)NrB�foorzneed a pwd entry�
z+Expected OSError to be raised by initgroups)r9r:rr`�object�osr4�pwdra�pw_name�KeyError�unittest�SkipTest�failrrCr�EPERM)r$r<rs   r�test_initgroupszPosixTester.test_initgroups�s��	
���)�U�%5�%5�6����)�U�%5�%5�t�<����)�U�%5�%5�q�%�@����)�U�%5�%5�u�a���J��9�9�;�!��
<��|�|�E�L�L�N�3�;�;��
I�� � ��r�*��	�	�G�H����
<��'�'�(:�;�;�
<��
�
7�� � ����%�+�+�6�6��
7�s$�71D�)D4�D1�4	E1�=*E,�,E1�statvfsztest needs posix.statvfs()c�h�|jtjtj��y�N)�
assertTruerrorf�curdirr#s r�test_statvfszPosixTester.test_statvfs�s��	
����
�
�b�i�i�0�1rI�fstatvfsztest needs posix.fstatvfs()c�J�ttj�}	|jt	j
|j
���|jt	j|j
���|j�y#|j�wxYwrq)	rrrrrrru�filenoro�close�r$�fps  r�
test_fstatvfszPosixTester.test_fstatvfs�sb���)�"�"�
#��	��O�O�E�N�N�2�9�9�;�7�8��O�O�E�M�M�"�)�)�+�6�7��H�H�J��B�H�H�J�s�A$B�B"�	ftruncateztest needs posix.ftruncate()c��ttjd�}	|jd�|j	�tj|j�d�|j�y#|j�wxYw)N�w+�testr)	rrr�write�flushrr|rwrxrys  r�test_ftruncatezPosixTester.test_ftruncate�sW���)�"�"�D�
)��	��H�H�V���H�H�J��O�O�B�I�I�K��+��H�H�J��B�H�H�J�s�AA2�2B�truncateztest needs posix.truncate()c���ttjd�5}|jd�|j	�ddd�tjtjd�y#1swY�.xYw)N�wrr)rrrr�r�rr�rys  r�
test_truncatezPosixTester.test_truncate�sM��
�)�"�"�C�
(�B��H�H�V���H�H�J�)�	���y�'�'��+�)�
(�s�"A*�*A3�execveNz/test needs execve() to support the fd parameterc��tjtjtj�}	tj
�}|dk(rztjtjjtj�d�tj|tjddgtj�ntj|d��tj|�y#tj|�wxYw)Nr�-c�pass��exitcode)rfr�sys�
executable�O_RDONLY�fork�chdir�path�splitrr��environr�wait_processrx)r$rz�pids   r�test_fexecvezPosixTester.test_fexecve�s����W�W�S�^�^�R�[�[�
1��	��'�'�)�C��a�x���������s�~�~�6�q�9�:����R�#�.�.�$��!?����L��$�$�S�1�5��H�H�R�L��B�H�H�R�L�s�B*C4�4D�waitidztest needs posix.waitid()c���tj�}|dk(r�tjtjj	t
j�d�tjt
jt
jddgtj�ytjtj|tj�}|j||j�y)Nrr�r�)rfr�r�r�r�r�r�rr�r�r��P_PID�WEXITEDrC�si_pid)r$r��ress   r�test_waitidzPosixTester.test_waitid�s����g�g�i���!�8��H�H�R�W�W�]�]�3�>�>�2�1�5�6��L�L����#�.�.�$��)G����T��,�,�u�{�{�C����?�C����S�#�*�*�-rIc�Z�|jtd��5tjd��ddd�|jtd��5tjd��ddd�|jtd��5tjd��ddd�|jtd��5tjd	�
�ddd�|jtd��5tjd��ddd�|jtd��5tjd��ddd�|jtd��5tjd�
�ddd�|jtd��5tjdd
���ddd�|jtd��5tj�ddd�|jtd��5tjd�d��ddd�d}t	d|�y#1swY��xYw#1swY���xYw#1swY���xYw#1swY���xYw#1swY��]xYw#1swY��4xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY��xYw)NzPositional args not allowed)�msgc��yrq�r�rIr�<lambda>z3PosixTester.test_register_at_fork.<locals>.<lambda>�s��rIzArgs must be callable�)�before�three)�after_in_childsFive)�after_in_parentzArgs must not be NonezInvalid arg was allowedc��y)NrBr�r�rIrr�z3PosixTester.test_register_at_fork.<locals>.<lambda>�s��QrI)r�r�z!At least one argument is requiredc��yrqr�r�rIrr�z3PosixTester.test_register_at_fork.<locals>.<lambda>�s��trI�)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�)r9r:rf�register_at_forkr�r$�codes  r�test_register_at_forkz!PosixTester.test_register_at_fork�s���
�
�
�y�.K�
�
L�����-�M�
�
�
�y�.E�
�
F����q�)�G�
�
�
�y�.E�
�
F����w�7�G�
�
�
�y�.E�
�
F�����8�G�
�
�
�y�.E�
�
F����t�,�G�
�
�
�y�.E�
�
F����t�4�G�
�
�
�y�.E�
�
F�����5�G�
�
�
�y�.G�
�
H����t�Y�G�I��
�
�y�.Q�
�
R����!�S��
�
�y�.G�
�
H����|�B�G�I�
"��F	��t�$�yM�
L��
F�
F��
F�
F��
F�
F��
F�
F��
F�
F��
F�
F��
H�
H��S�
R��I�
H�sw�H.�H;�I�:I�0I"�&I/�I<�J	�
J�>J!�.H8�;I�I�I�"I,�/I9�<J�	J�J�!J*�lockfztest needs posix.lockf()c���tjtjtjtj
z�}	tj|d�tj|dtj�tj|tjd�tj|tjd�tj|�y#tj|�wxYw)N�testr�)rfrrr�O_WRONLY�O_CREATr��lseek�SEEK_SETrr��F_LOCK�F_ULOCKrx�r$�fds  r�
test_lockfzPosixTester.test_lockfs���
�W�W�Y�%�%�r�{�{�R�Z�Z�'?�
@��	��H�H�R��!��H�H�R��B�K�K�(��K�K��E�L�L�!�,��K�K��E�M�M�1�-��H�H�R�L��B�H�H�R�L�s
�BC � C7�preadztest needs posix.pread()c��tjtjtjtj
z�}	tj|d�tj|dtj�|jdtj|dd��|jdtj|d��tj|�y#tj|�wxYw)Nr�rsesr�r6ste)rfrrr�O_RDWRr�r�r�r�rCrr��readrxr�s  r�
test_preadzPosixTester.test_pread%s���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R��!��H�H�R��B�K�K�(����U�E�K�K��A�q�$9�:����U�E�J�J�r�1�$5�6��H�H�R�L��B�H�H�R�L�s
�BC#�#C:�preadvztest needs posix.preadv()c���tjtjtjtj
z�}	tj|d�dD�cgc]
}t|���}}|jtj||d�d�|jgd�t|��tj|�ycc}w#tj|�wxYw)N�test1tt2t3t5t6t6t8��rBr�rB�
�st1tt2st3ts5t)
rfrrrr�r�r��	bytearrayrCrr��listrx)r$r��i�bufs    r�test_preadvzPosixTester.test_preadv1s���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R�.�/�)2�3��A�9�Q�<��C�3����U�\�\�"�c�1�5�r�:����6��S�	�B��H�H�R�L��	4��
�H�H�R�L�s�C�C
�1AC�
C�C)�	RWF_HIPRIztest needs posix.RWF_HIPRIc���tjtjtjtj
z�}	tj|d�dD�cgc]
}t|���}}|jtj||dtj�d�|jgd�t|��tj*|�ycc}w#t$r|jd�Y�7t$rG}|j t j"t j$hvrt'j(d���d}~wwxYw#tj*|�wxYw)Nr�r�rBr�r�zpreadv2 not availablez0RWF_HIPRI is not supported by the current system)rfrrrr�r�r�r�rCrr�r�r��NotImplementedError�skipTestrr�EINVAL�ENOTSUPrjrkrx)r$r�r�r��insts     r�test_preadv_flagszPosixTester.test_preadv_flags<s���W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R�.�/�)2�3��A�9�Q�<��C�3����U�\�\�"�c�1�b�l�l�C�R�H����6��S�	�B�
�H�H�R�L��4��#�	3��M�M�1�2��	��z�z�e�l�l�E�M�M�:�:��'�'�(Z�[�[���	��
�H�H�R�L�sD�C!�C�1AC!�C!�!E�;E�=E�AE�E�E�E&c�4�tjtjtjtj
z�}	t
d�gdz}|jt�5}tj||d�ddd�|jjjtj�|jt|d�ddz�tj|�y#1swY�txYw#tj|�wxYw�N���r�)rfrrrr�r�r�r9rr�rC�	exceptionrr��bytesrx�r$r�r��cms    r�test_preadv_overflow_32bitsz'PosixTester.test_preadv_overflow_32bitsRs����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��U�#�$�u�,�C��"�"�7�+�r��	�	�"�c�1�%�,����R�\�\�/�/����>����U�3�q�6�]�E�5�L�9��H�H�R�L�,�+��

�H�H�R�L�s%�$D�)C4�AD�4C=�9D�D�pwriteztest needs posix.pwrite()c���tjtjtjtj
z�}	tj|d�tj|dtj�tj|dd�|jdtj|d��tj|�y#tj|�wxYw)Nr�r�xxr6stxxtr�)rfrrrr�r�r�r�r�rr�rCr�rxr�s  r�test_pwritezPosixTester.test_pwrite_s���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R��!��H�H�R��B�K�K�(��L�L��U�A�&����W�e�j�j��Q�&7�8��H�H�R�L��B�H�H�R�L�s
�A8C�C*�pwritevztest needs posix.pwritev()c�L�tjtjtjtj
z�}	tj|d�tj|dtj�tj|gd�d�}|j|d�tj|dtj�|jdtj|d��tj|�y#tj|�wxYw)Nr�r�stest1stt2st3r�r�sxxtest1tt2t3�d)rfrrrr�r�r�r�r�r�rCrr�rx�r$r��ns   r�test_pwritevzPosixTester.test_pwritevjs���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��		��H�H�R����H�H�R��B�K�K�(��
�
�2�8�!�<�A����Q��#��H�H�R��B�K�K�(����_�e�j�j��S�.A�B��H�H�R�L��B�H�H�R�L�s
�B1D�D#zos.RWF_SYNCztest needs os.RWF_SYNCc�j�tjtjtjtj
z�}	tj|d�tj|dtj�tj|gd�dtj�}|j|d�tj|dtj�|jdtj|d��tj|�y#tj|�wxYw)Nr�rr�r�r�s
xxtest1tt2r�)rfrrrr�r�r�r�r�r��RWF_SYNCrCrr�rxr�s   r�test_pwritev_flagszPosixTester.test_pwritev_flagsxs����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��		��H�H�R����H�H�R��B�K�K�(��
�
�2�8�!�R�[�[�I�A����Q��#��H�H�R��B�K�K�(����]�E�J�J�r�3�,?�@��H�H�R�L��B�H�H�R�L�s
�CD�D2c���tjtjtjtj
z�}	|j
t�5}tj|ddzgdzd�ddd�|jjjtj�tj|�y#1swY�SxYw#tj|�wxYw)N�xr�r�r)rfrrrr�r�r9rr�rCr�rr�rx�r$r�r�s   r�test_pwritev_overflow_32bitsz(PosixTester.test_pwritev_overflow_32bits�s����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��"�"�7�+�r��
�
�2��u��~��5�q�9�,����R�\�\�/�/����>��H�H�R�L�	,�+��
�H�H�R�L�s$�C�C�9<C�C�C�C.�posix_fallocatez"test needs posix.posix_fallocate()c��tjtjtjtj
z�}	t
j|dd�	tj"|�y#t$r�}|jtjk(r4tjjd�rtjd��|jtj k(r4tjjd�rtjd���d}~wwxYw#tj"|�wxYw)Nrr�)�sunos�freebsd�openbsd�gnukfreebsdz test may fail on ZFS filesystems�netbsdz test may fail on FFS filesystems)rfrrrr�r�rr�rrr�r��platform�
startswithrjrk�
EOPNOTSUPPrx)r$r�r�s   r�test_posix_fallocatez PosixTester.test_posix_fallocate�s����W�W�Y�%�%�r�{�{�R�Z�Z�'?�
@��	��!�!�"�a��,�
�H�H�R�L���	�
�z�z�U�\�\�)�c�l�l�.E�.E�>�/@��'�'�(J�K�K����u�/�/�/�C�L�L�4K�4K�H�4U��'�'�(J�K�K���	��
�H�H�R�L�s%�A3�3	D$�<B#D�D$�$D'�'D>c��	tjddd�y#t$r(}|jtjk7r�Yd}~yd}~wwxYw)N����rr�)rr�rr�EBADF�r$r�s  r�test_posix_fallocate_errnoz&PosixTester.test_posix_fallocate_errno�sA��	��!�!�#�q�"�-���	��z�z�U�[�[�(��)��	�s��	A�A�A�
posix_fadvisez test needs posix.posix_fadvise()c��tjtjtj�}	tj|ddt
j�tj|�y#tj|�wxYw�Nr)	rfrrrr�rr�POSIX_FADV_WILLNEEDrxr�s  r�test_posix_fadvisezPosixTester.test_posix_fadvise�sT���W�W�Y�%�%�r�{�{�
3��	�����A�q�%�*C�*C�D��H�H�R�L��B�H�H�R�L�s�&A0�0Bc��	tjdddtj�y#t$r(}|jtj
k7r�Yd}~yd}~wwxYw)Nr�r)rrrrrr�rs  r�test_posix_fadvise_errnoz$PosixTester.test_posix_fadvise_errno�sI��	�����Q��5�+D�+D�E���	��z�z�U�[�[�(��)��	�s�&)�	A�A�Az!test needs fd support in os.utimec
��tj�}tjtjtj
�}	t
j|�t
j|d�|jttj|d�|jttj||df�|jttj|d|f�t
j|t|�t|�f�t
j|||f�|jttj|||f||f��|jttj||dfd��|jttj|d|df��t
j|t|�t|t|�z
dz�f�t
j|t|�t|t|�z
dz�f��tj|�y#tj|�wxYw)N�NN)�nsr�e��A)
�timerfrrrr�r�utimer9r:�int�
ValueErrorrx)r$�nowr�s   r�test_utime_with_fdzPosixTester.test_utime_with_fd�s����i�i�k��
�W�W�Y�%�%�r�{�{�
3��	��K�K��O��K�K��D�!����i����b�,�G����i����b�3��+�F����i����b�4��+�F��K�K��S��X�s�3�x�0�1��K�K��S�#�J�'����j�%�+�+�r�C��:�3�PS�*��U����j�%�+�+�r�C��8���U����j�%�+�+�r�<�S�RS�H��U��K�K��S��X�s�C�#�c�(�N�c�+A�'B�C�D��K�K���C��#�s�S��X�~��.D�*E�F�G�
�H�H�R�L��B�H�H�R�L�s
�GH4�4Iz.test needs follow_symlinks support in os.utimec���tj�}tjtjdd��|jttjtjdd��|jttjtj|dfd��|jttjtjd|fd��tjtjt|�t|�fd��tjtj||fd��tjtjd��y)NF��follow_symlinksr
�r
rrrrr9r:r�r$rs  r�test_utime_nofollow_symlinksz(PosixTester.test_utime_nofollow_symlinks�s����i�i�k��
���I�$�$�d�E�B����)�U�[�[�)�2B�2B�&��	�	?����)�U�[�[�)�2B�2B���+�u�	�	>����)�U�[�[�)�2B�2B���+�u�	�	>�
���I�$�$�s�3�x��S��&:�$)�	+�
���I�$�$�s�C�j�%�H�
���I�$�$�e�<rI�writevztest needs posix.writev()c�@�tjtjtjtj
z�}	tj|d�}|j|d�tj|dtj�|jdtj|d��	tj|g�}|j|d�tj|�y#t$rY�!wxYw#tj|�wxYw)Nr�r�r�
test1tt2t3)rfrrrr�r�rrCr�r�rr�rrx)r$r�r��sizes    r�test_writevzPosixTester.test_writev�s���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��	�	�"�7�8�A����Q��#��H�H�R��B�K�K�(����]�E�J�J�r�2�,>�?�
*��|�|�B��+��� � ��q�)��H�H�R�L���
��
��
�H�H�R�L�s1�A3D�9C7�D�7	D�D�D�D�Dc���tjtjtjtj
z�}	|j
t�5}tj|ddzgdz�ddd�|jjjtj�tj|�y#1swY�SxYw#tj|�wxYw)Nr�r�r�)rfrrrr�r�r9rrrCr�rr�rxr�s   r�test_writev_overflow_32bitsz'PosixTester.test_writev_overflow_32bits�s����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��"�"�7�+�r��	�	�"�t�e�|�n�u�4�5�,����R�\�\�/�/����>��H�H�R�L�	,�+��
�H�H�R�L�s$�C�C
�8<C�
C�C�C-�readvztest needs posix.readv()c	��tjtjtjtj
z�}	tj|d�tj|dtj�dD�cgc]
}t|���}}|jtj||�d�|jgd�|D�cgc]
}t|���c}�	tj|g�}|j|d�tj|�ycc}wcc}w#t$rY�+wxYw#tj|�wxYw)Nrrr�r�r�)rfrrrr�r�r�r�r�r�rCrr r�rrx)r$r�r�r�rs     r�
test_readvzPosixTester.test_readvs��
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R��'��H�H�R��B�K�K�(�)2�3��A�9�Q�<��C�3����U�[�[��S�1�2�6����6�3�8O�3�a��q��3�8O�P�
*��{�{�2�r�*��� � ��q�)��H�H�R�L��4��8O��
�
��
��
�H�H�R�L�sN�?E�D(�:E�D-
�"E�*D2�E�(
E�2	D>�;E�=D>�>E�Ec�2�tjtjtjtj
z�}	t
d�gdz}|jt�5}tj||�ddd�|jjjtj�|jt|d�ddz�tj|�y#1swY�txYw#tj|�wxYwr�)rfrrrr�r�r�r9rr rCr�rr�r�rxr�s    r�test_readv_overflow_32bitsz&PosixTester.test_readv_overflow_32bitss����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��U�#�$�u�,�C��"�"�7�+�r�����S�!�,����R�\�\�/�/����>����U�3�q�6�]�E�5�L�9��H�H�R�L�,�+��

�H�H�R�L�s%�$C?�)C3�AC?�3C<�8C?�?D�dupztest needs posix.dup()zWASI does not have dup()c��ttj�}	tj|j��}|j
|t�tj|�|j�y#|j�wxYwrq)
rrrrr%rw�assertIsInstancerrfrx)r$rzr�s   r�test_dupzPosixTester.test_dup+s[���)�"�"�
#��	����2�9�9�;�'�B��!�!�"�c�*��H�H�R�L��H�H�J��B�H�H�J�s�AA:�:B�confstrztest needs posix.confstr()c��|jttjd�|j	ttjd��dkDd�y)N�
CS_garbage�CS_PATHrT)r9rrr)rCrDr#s r�test_confstrzPosixTester.test_confstr7s=��	
���*�e�m�m�\�B�����U�]�]�9�5�6��:�D�ArI�dup2ztest needs posix.dup2()zWASI does not have dup2()c�X�ttj�}ttj�}	tj|j�|j��|j
�|j
�y#|j
�|j
�wxYwrq)rrrrr.rwrx)r$�fp1�fp2s   r�	test_dup2zPosixTester.test_dup2=sk���9�#�#�$���9�#�#�$��	��J�J�s�z�z�|�S�Z�Z�\�2��I�I�K��I�I�K��
�I�I�K��I�I�K�s�2B�"B)�	O_CLOEXECzneeds os.O_CLOEXECr���c��tjtjtjtj
z�}|j
tj|�|jtj|��yrq)
rfrrrr�r3rrx�assertFalse�get_inheritabler�s  r�test_oscloexeczPosixTester.test_oscloexecIsR���W�W�Y�%�%�r�{�{�2�<�<�'?�
@��������"�%�����+�+�B�/�0rI�O_EXLOCKztest needs posix.O_EXLOCKc�Z�tjtjtjtj
ztjz�}|jttjtjtjtj
ztjz�tj|�ttd�r�tjtjtjtjztjz�}|jttjtjtjtj
ztjz�tj|�yy)N�O_SHLOCK)rfrrrr�r:r�r9r�
O_NONBLOCKrxr
rr<r�s  r�
test_osexlockzPosixTester.test_osexlockQs����W�W�Y�%�%��[�[����,�R�Z�Z�7�9�����'�2�7�7�I�,<�,<��+�+�b�k�k�1�"�-�-�?�	A�
������5�*�%�����)�)����R�[�[�0����;�=�B����g�r�w�w�	�0@�0@� �k�k�"�+�+�5�b�m�m�C�
E��H�H�R�L�&rIr<ztest needs posix.O_SHLOCKc�d�tjtjtjtj
ztjz�}tjtjtjtj
ztjz�}tj|�tj|�ttd�r�tjtjtjtj
ztjz�}|jttjtjtjtjztjz�tj|�yy)Nr:)rfrrrr�r<r�rxr
rr9rr�r:r=)r$�fd1�fd2r�s    r�
test_osshlockzPosixTester.test_osshlockas����g�g�i�&�&��[�[����,�R�Z�Z�7�9���g�g�i�&�&��k�k�"�+�+�-�b�j�j�8�:��
����
�
����
��5�*�%�����)�)����R�[�[�0����;�=�B����g�r�w�w�	�0@�0@� �k�k�"�+�+�5�b�m�m�C�
E��H�H�R�L�&rI�fstatztest needs posix.fstat()c	���ttj�}	|jt	j
|j
���|jt	j|j
���|jtdtjt|j
���|j�y#|j�wxYw�Nz4should be string, bytes, os.PathLike or integer, not)rrrrrrrCrw�stat�assertRaisesRegexr:�floatrxrys  r�
test_fstatzPosixTester.test_fstatrs����)�"�"�
#��	��O�O�E�K�K��	�	��4�5��O�O�E�J�J�r�y�y�{�3�4��"�"�9�J��J�J��b�i�i�k� 2�
4�
�H�H�J��B�H�H�J�s�B!C
�
Cc
��|jtjtj��|jtjtjtj���|jtdtjttjtj���|jtdtjd�|jtdtjttj��|jtdtjttjtj���yrE)rrrrFrrrf�fsencoderGr:r�r�r#s r�	test_statzPosixTester.test_stat�s�������
�
�9�#3�#3�4�5�����
�
�2�;�;�y�/?�/?�#@�A�B����y�F��
�
�I�b�k�k�)�2B�2B�&C�D�	F�	
���y�F��
�
�D�	"�	
���y�F��
�
�D��!1�!1�2�	4�	
���y�F��
�
�D����Y�-=�-=�!>�?�	ArI�mkfifozdon't have mkfifo()c�T�tjdk(r/tjj	dt
j�}nt
j}tj|�|jt
j|�	tj|tjtjz�|j!tj"tj|�j$��y#t$r}|jd|z�Yd}~�dd}~wwxYw)N�vxworksz/fifos/�posix.mkfifo(): %s)r�r�rfr��joinrrrrrrMrF�S_IRUSR�S_IWUSR�PermissionErrorr�rr�S_ISFIFO�st_mode)r$�	fifo_pathrs   r�test_mkfifozPosixTester.test_mkfifo�s����<�<�9�$������Y�	�0@�0@�A�I�!�(�(�I�����#����	�(�(�)�4�	4��L�L��D�L�L�4�<�<�$?�@�	
����
�
�e�j�j��&;�&C�&C�D�E���	4��M�M�.��2�3�3��	4�s�	5D�	D'�	D"�"D'�mknod�S_IFIFOzdon't have mknod()/S_IFIFOc��tjtj�tjtj
ztjz}	tjtj|d�|jtjtjtj�j��tjtj�	tjtj|dd��y#t$rS}|j|jtjtj tj"f�Yd}~��d}~wwxYw#t$rS}|j|jtjtj tj"f�Yd}~yd}~wwxYw)Nr)r��mode�device�dir_fd)rrrrFrZrRrSrrYrrrUrVr�assertInrrmr��EACCES)r$r\rs   r�
test_mknodzPosixTester.test_mknod�s+��
	����)�)�*��|�|�d�l�l�*�T�\�\�9��	Q��K�K�	�(�(�$��2�
�O�O�D�M�M�%�*�*�Y�5E�5E�*F�*N�*N�O�P�	����)�)�*�	N��K�K�Y�-�-�D���
���	N�
�M�M�!�'�'�E�K�K����u�|�|�#L�M�M��	N���	N��M�M�!�'�'�E�K�K����u�|�|�#L�M�M��	N�s2�%D�/'E6�	E3� A	E.�.E3�6	G�?A	G
�
G�makedevztest needs posix.makedev()c��tjtj�}|j}|j|t�|j|d�tj|�}|j|t�|j|d�|jtj|�|�|jttjt|��|jttj�dD]-}|jttftj|��/tj|�}|j|t�|j|d�|jtj|�|�|jttjt|��|jttj�dD]-}|jttftj|��/|jtj ||�|�|jttj t|�|�|jttj |t|��|jttj |�|jttj �dD]Z}|jttftj ||�|jttftj ||��\t"j$dk(rsd}|jtj|�|�|jtj|�|�|jtj ||�|�yy)Nr)�������)rdr
rerf�linuxrQ)rrFrr�st_devr'rrE�majorrCr9r:rHr�
OverflowError�minorrbr�r�)r$�st�devri�xrk�NODEVs       r�test_makedevzPosixTester.test_makedev�s���
�Z�Z�	�(�(�
)���i�i�����c�3�'�����Q�'����C� �����e�S�)�����q�)�������S�)�5�1����)�U�[�[�%��*�=����)�U�[�[�1�$�A����z�=�9�5�;�;��J�%����C� �����e�S�)�����q�)�������S�)�5�1����)�U�[�[�%��*�=����)�U�[�[�1�$�A����z�=�9�5�;�;��J�%�	
������u�e�4�c�:����)�U�]�]�E�%�L�%�H����)�U�]�]�E�5��<�H����)�U�]�]�E�:����)�U�]�]�3�+�A����z�=�9�5�=�=�!�U�S����z�=�9�5�=�=�%�QR�S�,��<�<�7�"��E����U�[�[��/��7����U�[�[��/��7����U�]�]�5�%�8�%�@�	#rIc
���������fd�}tj�}tj�}|�||�|||�|�d|�|||�|�|d�|||�tjdk(r|dv}n|dk(}t
jrn�|rQtjdk7rdnd}|�||�|||�|�dd�|||�|�||�|||�n�t	j�dvrtjd	���jt|�dd�|||��jt|�dd�|||�dtj�vr"�jt|�dd�|||�ttfD]R}	�jt|�|	|�|�|||��jt|�||	|��|||��Ty
)z/Common code for chown, fchown and lchown tests.c�����A���}�j|j|��j|j|�yyrq)rC�st_uid�st_gid)�uid�gidrF�first_paramr$�	stat_funcs   ���r�
check_statz6PosixTester._test_all_chown_common.<locals>.check_stat�s@����$� ��-��� � ����c�2�� � ����c�2�%rIrQrO)rr6rlr�)zHP-UX�SunOSz1Skipping because of non-standard chown() behaviorN)rfr4r/r�r�r�
is_emscripten�systemrjrkr9rr0�strrHr:)
r$�
chown_funcrwrxryrurv�is_root�	big_value�ts
` ``      r�_test_all_chown_commonz"PosixTester._test_all_chown_common�s����	3�
�i�i�k���i�i�k���;��S�)��3����;��C�(��3����;��R�(��3����<�<�9�$��f�}�G��a�x�G�� � �
�
�"#&�,�,�)�";���I��{�I�y�9��y�)�,��{�B��+��y�)�,��{�C��-��s�C� �
�_�_�
�"4�
4��#�#�%/�0�
0�
���g�z�;��1�E��s�C� ����g�z�;��2�F��s�C� ������&��!�!�'�:�{�B��J��3��$��e��A����i��[�!�C�&�#�N��s�C� ����i��[�#�q��v�N��s�C� �	rI�chownzrequires os.chown()�getgid() is a stubc�t�tjtj�|j	t
tjtjdd�tjtj�|jtjtjtj�yrP)rfrrrr9rrr��create_empty_filer�rFr#s r�
test_chownzPosixTester.test_chown'sl��	�	�	�)�"�"�#����'�5�;�;�	�0@�0@�"�b�I�	�#�#�I�$4�$4�5��#�#�E�K�K��1A�1A�5�:�:�NrI�fchownztest needs os.fchown()c	�J�tjtj�t	tjd�}	|j�}|j
tj|ttdd��|j�y#|j�wxYw)Nr�rC)rfrrrrrwr�rr�r7rx)r$�	test_filer�s   r�test_fchownzPosixTester.test_fchown2sw��	�	�	�)�"�"�#���)�)�3�/�	�	��!�!�#�B��'�'����b�(/��w��(E�
G�
�O�O���I�O�O��s�AB�B"�lchownztest needs os.lchown()c	��tjtj�tjt
tj�|j
tjtjttdd��y)N�lstat)
rfrrr�symlink�_DUMMY_SYMLINKr�rr�r7r#s r�test_lchownzPosixTester.test_lchownAsS��	�	�	�)�"�"�#�
�
�
�>�9�#3�#3�4��#�#�E�L�L�)�2B�2B�$+�E�7�D�$A�	CrIr�ztest needs posix.chdir()c��tjtj�|j	t
tjtj�yrq)rr�rfrsr9rrrr#s r�
test_chdirzPosixTester.test_chdirJs.��
���B�I�I�����'�5�;�;�	�0@�0@�ArIc��|jtjtjt
j��yrq)r_rrr�listdirrfrsr#s r�test_listdirzPosixTester.test_listdirOs#���
�
�i�&�&��
�
�b�i�i�(@�ArIc�h�|jtjtj��yrq)r_rrrr�r#s r�test_listdir_defaultz PosixTester.test_listdir_defaultRs��	
�
�
�i�&�&��
�
��8rIc��|jtjtj�tjd��y�N�.)r_rfrKrrrr�r#s r�test_listdir_byteszPosixTester.test_listdir_bytesWs*��	
�
�
�b�k�k�)�"2�"2�3�U�]�]�4�5H�IrIc��ttfD];}|jt�5t	j
|d��ddd��=y#1swY�HxYwr�)r��
memoryviewr9r:rr�)r$�clss  r�test_listdir_bytes_likez#PosixTester.test_listdir_bytes_like\s>���j�(�C��"�"�9�-��
�
�c�$�i�(�.�-�)�-�-�s�A�A	z)test needs fd support for posix.listdir()c���tjtj�tj�}|j	tj
|�|j
ttjd��ttj|���|j
ttjd��ttj|���y)N�.)	rrr(r�rrxrC�sortedr�)r$�fs  r�test_listdir_fdzPosixTester.test_listdir_fdas���
�J�J�u�|�|�~�u�~�~�6��������Q�'�����5�=�=��%�&��5�=�=��#�$�	�
	
����5�=�=��%�&��5�=�=��#�$�	rI�accessztest needs posix.access()c��|jtjtjt
j��yrq)rrrr�rrrf�R_OKr#s r�test_accesszPosixTester.test_accessps#��������Y�%5�%5�r�w�w�?�@rI�umaskztest needs posix.umask()c��tjd�}|j|t�tj|�yr)rr�r'r)r$�old_masks  r�
test_umaskzPosixTester.test_umaskts+���;�;�q�>�����h��,�
���H�rI�strerrorztest needs posix.strerror()c�L�|jtjd��yr)rrrr�r#s r�
test_strerrorzPosixTester.test_strerrorzs��	
������q�)�*rI�pipeztest needs posix.pipe()c��tj�\}}tj|�tj|�yrq)rr�rfrx)r$�reader�writers   r�	test_pipezPosixTester.test_pipes)���������
�����
����rI�pipe2ztest needs os.pipe2()�c���|jttjd�|jttjdd�tjd�\}}tj|�tj|�tjtj
tjz�\}}|jtj|�|jtj|�|jtj|��|jtj|��|jtj|��|jtj|��|jttj|d�	tj|dtjz�y#t$rYywxYw)N�DEADBEEFrr6r�)r9r:rfr�rxr3r=rr7r8�get_blockingrr�r�r�
PIPE_MAX_SIZE)r$�rr�s   r�
test_pipe2zPosixTester.test_pipe2�sH��	
���)�R�X�X�z�:����)�R�X�X�q�!�4��x�x��{���1�
�����
������x�x����R�]�]�2�3���1�������!�$�������!�$�����+�+�A�.�/�����+�+�A�.�/��������+�,��������+�,����'�2�7�7�A�q�1�	��H�H�Q��w�4�4�4�5���	��	�s�<'G$�$	G0�/G0c���ddl}|jttj|j
dz�|jttj|jdz�y�Nrr6)�	_testcapir9rjrfr��INT_MAX�UINT_MAX)r$r�s  r�test_pipe2_c_limitszPosixTester.test_pipe2_c_limits�sI��
	����-����9�3D�3D�q�3H�I����-����9�3E�3E��3I�JrIrztest needs posix.utime()c�p�tj�}tjtjd�|jttjtjd�|jttjtj|df�|jttjtjd|f�tjtjt|�t|�f�tjtj||f�y)Nr
rrs  r�
test_utimezPosixTester.test_utime�s����i�i�k��
���I�$�$�d�+����)�U�[�[�#�*�*�L�	:����)�U�[�[�#�*�*�S�$�K�	9����)�U�[�[�#�*�*�T�3�K�	9�
���I�$�$�s�3�x��S��&:�;�
���I�$�$�s�C�j�1rIc�\�tj|�j}	|tjtjztj
zz}|||fi|��|j
tj|�j|�tj|�r	t|d�5	ddd�|tjtjztj
zz}|||fi|��|j
tj|�j|�tj|�rt|d�5	ddd�tj||�y#1swY��xYw#t$rY��wxYw#1swY�;xYw#tj||�wxYw)Nzwb+)rfrFrV�S_IWOTH�S_IWGRPrSrC�S_ISREGrrTr�chmod)r$�
chmod_func�target�kwargsr\�new_modes      r�check_chmodzPosixTester.check_chmod�s>���w�w�v��&�&��	&�����t�|�|� ;�d�l�l� J�K�K�H��v�x�2�6�2����R�W�W�V�_�4�4�h�?��|�|�D�!���f�e�,��-��t�|�|�d�l�l�:�T�\�\�I�J�H��v�x�2�6�2����R�W�W�V�_�4�4�h�?��|�|�D�!��&�%�(��)�
�K�K���%�-�,��&�����)�(��
�K�K���%�sa�BF�&E8�2E,�4E8�<BF�F�
F�,E5�1E8�8	F�F�F�F�F�F�F+c�`�|jtjtj�yrq)r�rr�rrr#s r�test_chmod_filezPosixTester.test_chmod_file�s��������i�&6�&6�7rIc��tjdz}tj|�|j	tj
|�|S)N�d)rrr�mkdirr�rmdir�r$r�s  r�tempdirzPosixTester.tempdir�s5���!�!�C�'��
���F��������V�,��
rIc�d�|j�}|jtj|�yrq)r�r�rr�r�s  r�test_chmod_dirzPosixTester.test_chmod_dir�s!�������������f�-rI�lchmodztest needs os.lchmod()c��|jtjtj�|jtj
tjd��y�NFr)r�rr�rrr�r#s r�test_lchmod_filezPosixTester.test_lchmod_file�s;��������y�'7�'7�8�������i�&6�&6���NrIc��|j�}|jtj|�|jtj|d��yr�)r�r�rr�r�r�s  r�test_lchmod_dirzPosixTester.test_lchmod_dir�s:�������������v�.�������f�e��DrIc�Z�tj|�j}tj|�j}	|tjtj
ztjzz}|||fi|��|jtj|�j|�|jtj|�j|�|tjtj
ztjzz}|||fi|��|jtj|�j|�|jtj|�j|�tj||�y#tj||�wxYwrq)
rfrFrVr�r�r�rSrCrr��r$r�r��linkr��target_mode�	link_moder�s        r�check_chmod_linkzPosixTester.check_chmod_link�s#���g�g�f�o�-�-���H�H�T�N�*�*�	�
	-�"�t�|�|�d�l�l�'B�T�\�\�'Q�%R�R�H��t�X�0��0����R�W�W�V�_�4�4�h�?����R�X�X�d�^�3�3�Y�?�"�d�l�l�T�\�\�&A�D�L�L�&P�Q�H��t�X�0��0����R�W�W�V�_�4�4�h�?����R�X�X�d�^�3�3�Y�?��K�K���,��E�K�K���,�s
�D;F�F*c��tj|�j}tj|�j}|tjtj
ztjzz}|||fi|��|jtj|�j|�|jtj|�j|�|tjtj
ztjzz}|||fi|��|jtj|�j|�|jtj|�j|�yrq)rfrFrVr�r�r�rSrCr�s        r�check_lchmod_linkzPosixTester.check_lchmod_link�s���g�g�f�o�-�-���H�H�T�N�*�*�	��������!<�t�|�|�!K�L�L���4��,�V�,���������0�0�+�>�������$��/�/��:�����t�|�|� ;�d�l�l� J�K���4��,�V�,���������0�0�+�>�������$��/�/��:rIc��tj}tjdz}tj||�|j	t
j|�tjdk(r"|jt
j||�y|jt
j||�|jt
j||d��y)N�-link�ntTr)rrrfr�rrrr<r�r�r��r$r�r�s   r�test_chmod_file_symlinkz#PosixTester.test_chmod_file_symlinks����!�!�����'�)��
�
�
�6�4� �������d�+�
�7�7�d�?��"�"�5�;�;���=��!�!�%�+�+�v�t�<��!�!�%�+�+�v�t�T�!�RrIc��|j�}tjdz}tj||d��|jtj|�tjdk(r"|jtj||�y|jtj||�|jtj||d��y)Nr�T)�target_is_directoryr�r)r�rrrfr�rrrr<r�r�r�r�s   r�test_chmod_dir_symlinkz"PosixTester.test_chmod_dir_symlink
s�����������'�)��
�
�
�6�4�T�:�������d�+�
�7�7�d�?��"�"�5�;�;���=��!�!�%�+�+�v�t�<��!�!�%�+�+�v�t�T�!�RrIc�>�tj}tjdz}tj||�|j	t
j|�|jt
j||d��|jt
j||�y�Nr�Fr)
rrrfr�rrrr�r�r�r�s   r�test_lchmod_file_symlinkz$PosixTester.test_lchmod_file_symlinksp���!�!�����'�)��
�
�
�6�4� �������d�+����u�{�{�F�D�%��P����u�|�|�V�T�:rIc�>�|j�}tjdz}tj||�|jtj|�|jtj||d��|jtj||�yr�)r�rrrfr�rrrr�r�r�r�s   r�test_lchmod_dir_symlinkz#PosixTester.test_lchmod_dir_symlink#sp����������'�)��
�
�
�6�4� �������d�+����u�{�{�F�D�%��P����u�|�|�V�T�:rIc��tj|�}|jt|d��|jtj
z}	|||fi|��	tj|�}|j|jtj
z|j�	t|d�}	tj||j�y#t$r;}|jtjk7r�d}|j|�Yd}~��d}~wwxYw#t$r4}
|j|
jtj�Yd}
~
��d}
~
wwxYw#tj||j�wxYw)N�st_flags�2chflag UF_IMMUTABLE not supported by underlying fsr~)rfrFrrr
r��UF_IMMUTABLErrr�r�rCrrmr�chflags)r$�chflags_func�target_filer�rl�flags�errr��new_str�rs           r�_test_chflags_regular_filez&PosixTester._test_chflags_regular_file-s$��
�W�W�[�
!�������J�/�0����d�/�/�/��	���e�6�v�6�	4��W�W�[�)�F����R�[�[�4�+<�+<�<�f�o�o�N�
7��+�t�,��
�M�M�+�r�{�{�3���	��y�y�E�,�,�,��F�C��M�M�#����		���
7�� � ����%�+�+�6�6��
7��
�M�M�+�r�{�{�3�sI�
C�AE�'D�	D�1D�D�	E�$*E�E�E�E�"E=r�ztest needs os.chflags()c�`�|jtjtj�yrq)r�rr�rrr#s r�test_chflagszPosixTester.test_chflagsEs���'�'��
�
�y�7G�7G�HrI�lchflagsztest needs os.lchflags()c��|jtjtj�|jtj
tjd��yr�)r�rrrrr�r#s r�test_lchflags_regular_filez&PosixTester.test_lchflags_regular_fileIs@���'�'����	�8H�8H�I��'�'��
�
�y�7G�7G�8=�	(�	?rIc��tjtj�}|j	t|d��|j
tjt�tjtjt�tjt�}d�}tj|fD]�}|jtjz}	|t|�	tjtj�}tjt�}	|j'|j|j�|j'|jtjz|	j�|t|j���y#t$r;}|j t j"k7r�d}|j%|�Yd}~��d}~wwxYw#|t|j�wxYw)Nr�c�2�tj||d��Sr�)rr�)r�r�s  r�chflags_nofollowz;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollowYs���=�=��u�e�D�DrIr�)rfrFrrrrr
rrr�r�r�rrr�r�rrr�r�rC)
r$�	testfn_st�dummy_symlink_str�fnr�r�r��
new_testfn_st�new_dummy_symlink_sts
          r�test_lchflags_symlinkz!PosixTester.test_lchflags_symlinkOss���G�G�I�,�,�-�	�����	�:�6�7����	�(�(�.�9�
�
�
�9�#�#�^�4��8�8�N�3��	E��>�>�#3�4�B�$�-�-��0A�0A�A�E�
#��>�5�)�
>� "���	�(8�(8� 9�
�')�x�x��'?�$�� � ��!3�!3�]�5K�5K�L�� � �!1�!:�!:�T�=N�=N�!N�!5�!>�!>�@��>�#3�#<�#<�=�%5��
�
#��9�9�� 0� 0�0��J���
�
�c�"�"��	
#���>�#3�#<�#<�=�s%�
F�(BG"�	G�$1G�G�"G;c��tjdk(rt}nt}tj
j
�D];\}}|jt|�|�|jt|�|��=y)Nr�)	rfr<r}r�rr��itemsrC�type)r$�	item_type�k�vs    r�test_environzPosixTester.test_environpsZ��
�7�7�d�?��I��I��M�M�'�'�)�D�A�q����T�!�W�i�0����T�!�W�i�0�*rIc�.�|jt�5tjdd�ddd�|jt�5tjdd�ddd�|jt�5tjdd�ddd�tjdk(r�|jt�5tjdd	�ddd�|jt�5tjd
d�ddd�|jt�5tjdd
�ddd�yy#1swY��#xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY�pxYw#1swYyxYw)NzFRUITVEGETABLE�cabbage�FRUITzorangeVEGETABLE=cabbagezFRUIT=ORANGE�lemonrsFRUITVEGETABLEscabbagesFRUITsorangeVEGETABLE=cabbagesFRUIT=ORANGEslemon)r9rrf�putenvr<r#s r�test_putenvzPosixTester.test_putenvys��
�
�
�z�
*��I�I�(�)�4�+�
�
�
�z�
*��I�I�g�:�;�+�
�
�
�z�
*��I�I�n�g�.�+�
�7�7�g���"�"�:�.��	�	�-�z�:�/��"�"�:�.��	�	�(�$@�A�/��"�"�:�.��	�	�/�8�4�/�.��
+�
*��
*�
*��
*�
*��/�.��.�.��.�.�sG�E�
E�>E'�E3�9E?�-F�E�E$�'E0�3E<�?F�Fr(ztest needs posix.getcwd()c���d}tj�}tjjtj
�dz}	tj|�tj|�	tj|�t	j|�y#Ytj|�t	j|�yxYw#tj|�t	j|�wxYw)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwd)	rfr(r��abspathrrr�r��rmtree)r$�dirnamers�	base_path�_create_and_do_getcwds    @r�test_getcwd_long_pathnamesz&PosixTester.test_getcwd_long_pathnames�s����L��������G�G�O�O�I�$4�$4�5�	�A�	�	(��H�H�Y���H�H�Y��2
�H�H�V�����Y�'��3	+�
�(
�H�H�V�����Y�'��
�H�H�V�����Y�'�s�	*B�C
�!C�
C�,C<�getgrouplistztest needs posix.getgrouplist()r4ztest needs os.getuid()c��tjtj��d}tjtj��d}|j	|tj||��y)NrrB)rgrarfr4r_rr")r$�user�groups   r�test_getgrouplistzPosixTester.test_getgrouplist�sQ���|�|�B�I�I�K�(��+�����R�Y�Y�[�)�!�,���
�
�e�U�/�/��e�<�=rIr-ztest needs os.getegid()�popenztest needs os.popen()c���tjd�5}|j�j�}|j	�}ddd�	td�j
�D��}�|stjd��tjdk(rUddl}|jd�xsd}td�|j
d	�dd
D��dkrtjd��|jt!j"��}|j%|xs|t!j&�hk(�y#1swY��xYw#t$r
t�}Y��wxYw)
Nzid -G 2>/dev/nullc3�2K�|]}t|����y�wrq�r)�.0�gs  r�	<genexpr>z-PosixTester.test_getgroups.<locals>.<genexpr>�s����<�^��S��V�^���zneed working 'id -G'�darwinr�MACOSX_DEPLOYMENT_TARGETz10.3c3�2K�|]}t|����y�wrqr*)r+r�s  rr-z-PosixTester.test_getgroups.<locals>.<genexpr>�s����8�%7��S��V�%7�r.r�r�)r�r4z$getgroups(2) is broken prior to 10.6)rfr'r��striprx�setr�rrjrkr�r��	sysconfig�get_config_var�tuple�symmetric_differencerr0rrr-)r$�idg�groups�ret�
idg_groupsr4�dt�symdiffs        r�test_getgroupszPosixTester.test_getgroups�s"���X�X�)�
*�c��X�X�Z�%�%�'�F��)�)�+�C�+�	��<�V�\�\�^�<�<�J��?�*��#�#�$:�;�;��<�<�8�#���)�)�*D�E�O��B��8�R�X�X�c�]�1�Q�%7�8�8�7�B��'�'�(N�O�O��1�1�%�/�/�2C�D�����G��C�w�5�=�=�?�2C�'C�D�/+�
*���	���J�	�s�/D?� E�?E�E!� E!�SIGCHLDz2CLD_XXXX be placed in si_code for a SIGCHLD signal�
waitid_resultztest needs os.waitid_resultc���tjtjtjtjtj
tjyrq)rf�
CLD_EXITED�
CLD_KILLED�
CLD_DUMPED�CLD_TRAPPED�CLD_STOPPED�
CLD_CONTINUEDr#s r�test_cld_xxxx_constantsz#PosixTester.test_cld_xxxx_constants�s0��	�
�
�
�
�
�
�
�
�
���
���
��rI�sched_yieldzdon't have scheduling support�sched_setaffinityz!don't have sched affinity supportc�,�tj�yrq)rrIr#s r�test_sched_yieldzPosixTester.test_sched_yield�s��	���rI�sched_get_priority_maxz!requires sched_get_priority_max()c��tj}tj|�}tj|�}|j	|t
�|j	|t
�|j
||�tjdk7rK|jttjd�|jttjd�yy)Nr/i��)r�SCHED_RR�sched_get_priority_minrMr'rrEr�r�r9r)r$�pol�lo�his    r�test_sched_priorityzPosixTester.test_sched_priority�s���
�n�n��
�
)�
)�#�
.��
�
)�
)�#�
.�����b�#�&����b�#�&�����B�'��<�<�8�#����g�u�'C�'C�S�I����g�u�'C�'C�S�I�$rIc�^�tjj�D��cgc]\}}|jd�r|��}}}tjd�}|j||�	tjt
j��}|j||�|jttjd�|jttjd�tjd�}|j|jt�t j"jd�sT	tj$d||�tj&d|�|jttj&d|�|jttj$d||�|jt(tj$d|d�|jt(tj&dd�tj*d�}|jt(tj&d|�d}tj*|�}|jt,tj&d|�tj*|��}|jt,tj&d|�ycc}}w#t$r)}|jtjk7r�Yd}~��Od}~wwxYw#t$r)}|jtjk7r�Yd}~���d}~wwxYw)N�SCHED_rrQ�r�r��+l���)�sched_priority)r�__dict__rr�rr_rfr3rrrmr9�sched_getparamr'rYrr�r��sched_setscheduler�sched_setparamr:�sched_paramrj)	r$r<�sched�possible_schedulers�mine�parentr�param�larges	         r�$test_get_and_set_scheduler_and_paramz0PosixTester.test_get_and_set_scheduler_and_param�sf��8=���8L�8L�8N�=�8N���u�"&�/�/�(�";� %�8N��=��'�'��*���
�
�d�/�0�	7��-�-�b�j�j�l�;�F�

�M�M�&�"5�6����'�5�#;�#;�R�@����'�5�#7�#7��<��$�$�Q�'�����e�2�2�C�8�
�|�|�&�&�'<�=�
��(�(��D�%�8��$�$�Q��.�
���g�u�';�';�R��G����'�5�#;�#;�R��u�M����)�U�%=�%=�q�$��M����)�U�%9�%9�1�b�A��!�!�$�'�����)�U�%9�%9�1�e�D����!�!�%�(�����-��)=�)=�q�%�H��!�!�%��8�����-��)=�)=�q�%�H��K=���	��w�w�%�+�+�%��&��	��"�
��7�7�e�k�k�)��*��
�s5�J?�*'K�-K:�	K7�K2�2K7�:	L,�L'�'L,�sched_rr_get_intervalzno functionc�.�	tjd�}|j
t�|j|d�|j|d�y#t$r9}|jtjk7r�|jd�Yd}~�xd}~wwxYw)Nrz only works on SCHED_RR processesgg�?)
rrfrrr�r�r'rHrE�
assertLess)r$�intervalrs   r�test_sched_rr_get_intervalz&PosixTester.test_sched_rr_get_intervals~��	>��2�2�1�5�H�	
���h��.�����"�-�����"�%���	>��w�w�%�,�,�&���M�M�<�=�=��	>�s�A�	B�/B�Bc��tjd�}|j|t�|j	t|�d�tjjd�s%|jttjd�|D]<}|j|t�|j	|d�|j|d��>y)Nrr6r�rQr
)
r�sched_getaffinityr'r3rErDr�r�r�r9rrrh)r$�mask�cpus   r�test_sched_getaffinityz"PosixTester.test_sched_getaffinity.s����&�&�q�)�����d�C�(�����D�	�1�-��|�|�&�&�y�1����g�u�'>�'>��C��C��!�!�#�s�+��#�#�C��+��O�O�C��)�rIc	��tjd�}|jtjdt	|��t|�dkDr|j
�tjd|�|jtjd�|�	tjdg�|jttjddg�|jttjdttd��|jttjdddzg�tjj!d�s'|jttjd|�yy#t$rY��wxYw)Nrr6i�����0X�r�rQ)rrlrrJr�rD�poprCrr9r�maprrjr�r�r�)r$rms  r�test_sched_setaffinityz"PosixTester.test_sched_setaffinity;s%���&�&�q�)������/�/��D��J�?��t�9�q�=��H�H�J�
����4�(�����0�0��3�T�:�	��#�#�A�r�*�	
���*�e�&=�&=�q�3�%�H����*�e�&=�&=�q�#�c�4�.�Q����-��)@�)@�!�a��f�X�N��|�|�&�&�y�1����g�u�'>�'>��D�I�2���	�
�	�s�E<�<	F�FzNo dynamic linking on WASIrzPOSIX-only testc��tjtjtjtjyrq)r�	RTLD_LAZY�RTLD_NOW�RTLD_GLOBAL�
RTLD_LOCALr#s r�test_rtld_constantszPosixTester.test_rtld_constantsUs$��	���
���
���
��rI�	SEEK_HOLEz(test needs an OS that reports file holesc
���ttjd�5}|jd�|j	�|j�}|j
�}	t|�D]l}|j|tj||tj��|j|tj||tj���n|jttj||tj�|jttj||tj�	ddd�y#t$rt!j"d��wxYw#1swYyxYw)Nzr+bshellozOSError raised!)rrrr�r��tellrw�rangerCrfr��	SEEK_DATA�assertLessEqualr|r9rrjrk)r$rzr�fnor�s     r�
test_fs_holeszPosixTester.test_fs_holes^s
���)�"�"�E�
*�b��H�H�X���H�H�J��7�7�9�D��)�)�+�C�
;��t��A��$�$�Q�����a����(F�G��(�(��r�x�x��Q����/M�N�%��!�!�'�2�8�8�S�$����M��!�!�'�2�8�8�S�$����M�+�
*���
;�
�'�'�(9�:�:�
;��+�
*�s�AE.�C$E�E+�+E.�.E7c	�&�dD]K}tt|d�}|��dtjfD]}	|d|��|jd|z��My#t$r5}|jdj
|�t|��Yd}~��d}~wwxYw)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.)	r7rfrrrr_�formatr}rl)r$r<�function�dstrs     r�test_path_error2zPosixTester.test_path_error2ys���2�D��r�4��.�H����!�9�#3�#3�4����3�S�9�5��	�	�?�$�F�G�2�����M�M�"B�"I�"I�#�"N�PS�TU�PV�W����s�	A�	B�*B�Bc�F�tj}|dz}|jtj|�tj|�d}	|j	t
�5t
j|tjtjz�}ddd�|�t
j|�	|jtjj|��|j	t
tj|�|jtjj|��t|d�j�|j	t
tj|�y#1swY��xYw#|�t
j|�wwxYw)N�r)rrrrr9rrfrr�r�rxr7r��existsr�rF�r$r
�fn_with_NULr�s    r�test_path_with_null_characterz)PosixTester.test_path_with_null_character�s��
�
�
���4�i�����	�(�(�"�-������
��	��"�"�:�.��W�W�[�"�+�+��
�
�*B�C��/��~���������������+�,����*�b�h�h��<����������+�,��R���������*�b�g�g�{�;�/�.���~�������s$�F�#6E:�F�:F�?F�F c�l�tjtj�}|dz}|j	tj
|�tj
|�d}	|j
t�5tj|tjtjz�}ddd�|�tj|�	|jtjj|��|j
ttj|�|jtjj|��t|d�j�|j
ttj |�y#1swY��xYw#|�tj|�wwxYw)Nr�r)rfrKrrrrr9rrr�r�rxr7r�r�r�rFr�s    r�test_path_with_null_bytez$PosixTester.test_path_with_null_byte�s"��
�[�[��)�)�
*���5�j�����	�(�(�"�-������
��	��"�"�:�.��W�W�[�"�+�+��
�
�*B�C��/��~���������������+�,����*�b�h�h��<����������+�,��R���������*�b�g�g�{�;�/�.���~�������s$�!F�66F
�,F�
F�F�F3�
pidfd_openzpidfd_open unavailablec�@�|jt�5}tjd�ddd�jj
t
jk(r|jd�t|jt�r|jd|j���|j|jj
t
j�tjtjtj�d��y#1swY��xYw)NrQz"system does not support pidfd_openzpidfd_open syscall blocked: r)r9rrfr�r�rrr��
isinstancerTrCr�rxr1)r$r�s  r�test_pidfd_openzPosixTester.test_pidfd_open�s���
�
�
�w�
'�2��M�M�"��(�
�<�<������-��M�M�>�?��b�l�l�O�4��M�M�8����8H�I�J�������+�+�U�\�\�:�
������r�y�y�{�A�.�/�(�
'�s�D�D)��__name__�
__module__�__qualname__r%r>rj�
skipUnlessr
rrHrMrTrXr\r_rgrnrtr{r�r�r7rf�supports_fdr�
requires_forkr�r�r�r�r�r�r��requires_32br�r�r�r�r�r�rrrrr�supports_follow_symlinksrrrr"r$�skipIf�is_wasir(r-r2�requires_linux_version�requires_subprocessr9r>rBrIrLrXrFrarpr�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�r�rrr
rrr!r&r>�signalrH�requires_sched_h�requires_sched_affinityrLrT�requires_schedrerjrorur<r{r�r�r�r�r�r�rIrrr6sq��0�@� �X������4�7�9�,�9�,��X������4�7�9�,�9�,��X������4�7�9�7�9�7��X������4�7�9�G�9�G��X������4�7�9�7�9�7��X������4�7�9�H�9�H��X������5�5�7��X�����j�1�3N�O�I�P�7�I�.�X�����	�2�5�7�2�7�2��X�����
�3�6�8��8���X������4�7�9��9���X�����
�3�5R�S�,�T�,��X�����X�t�4����F�Hy�z��W����
��{�
��X������1�3N�O��W����.��P�.��W����=%��=%�~�X������0�2L�M�	�N�	��X������0�2L�M�	�N�	��X������1�3N�O��P���X������1�3N�O��X������4�6R�S��T�P��(�X������1�3N�O��	��P�	��X������1�3N�O��P���X�����	�2�4P�Q��R���X�����	�2�4P�Q��X�����
�6�8P�Q��R�R���X�����	�2�4P�Q����R���X�����(9�:�,�.��.��(�X�����(9�:�,�.��.���X������8�*�,��,���X������8�*�,��,���X������R�^�^�3�5X�Y��Z��(�X������R�%@�%@�@�Br�s�=�t�=��X������1�3N�O��P��*�X������1�3N�O����P���X������0�2L�M��N��*�X������0�2L�M��	��N�	��X������.�1�3��X�_�_�W�_�_�&@�A��B�3���X�����	�2�5�7�B�7�B��X������/�2�4��X�_�_�W�_�_�&A�B��C�4���X�����[�1�3G�H�#�W�#�#�A�q�"�-� �W� � �"�1�#�.�I�1�
�X�����
�3�4�6��6���X�����
�3�4�6�
�6�
��X������0�3�5�
�5�
�A�"�X������1�3H�I�F�J�F��X������0�M�W�T�9�5M�5�7�N�7�N�,�X�����	�2�4P�Q�%A�R�%A�NF!�P�X�����W�-�/D�E��X�_�_�W�*�*�,@�A�O�B�F�O��(�(��X������1�3K�L��X�_�_�W�*�*�,@�A�
�B�M�)�
��(�(��X������1�3K�L�C�M�)�C��X������0�2L�M�B�N�B�B�9�
J�
)�
�X������"�.�.�8�D�F��F���X������1�3N�O�A�P�A��X������0�2L�M��N��
�X�����
�3�6�8�+�8�+��X������/�1J�K��L��
�X�����W�-�/F�G�#�W�#�#�A�q�"�-��.�H��4
����X�����W�-�/F�G�#�W�#�#�A�q�"�-�K�.�H��K��X������0�2L�M�
2�N�
2�&�*�(�(�8�)�8���(�(�.�)�.��X������1�3K�L�O�M�O��X������1�3K�L�E�M�E�

-�
;��"�"�	S�#�	S��"�"�	S�#�	S��X������1�3K�L��"�"�;�#�M�;��X������1�3K�L��"�"�;�#�M�;�4�0�X�����	�2�4M�N�I�O�I��X�����
�3�5O�P�?�Q�?�
�X�����
�3�5O�P�>�Q�>�@1�
5��X������1�3N�O�!(�P�!(�F�X������7�9Z�[��X�����j�1�3N�O��X�����X�.�0H�I�>�J�P�\�>��X�����Y�/�1J�K��X�����W�-�/F�G� �W� � �"�E�#�H�L�E�4�X������3�5i�j��X�����_�5�7T�U��V�k��+�x�*�*�7�5�-�+H�+J�L��1�h�1�1�'�%�AT�2U�2U�W��������X�����(@�A�<�>�J�>��J��&I��&I�P�X�����(?�@�-�P�&�Q�&��
*��
*��J��J�2�X�_�_�W�_�_�&B�C��X������G�+�->�?��@�D���X�����[�1�C�E�;�E�;�2H�$<�$<�$�X�����\�2�4L�M�0�N�0rIrc�X�eZdZdZed��Zed��Zeje	je	jvd�d��Zeje	je	jvd�d��Zejee	d�xre	j e	jvd	�ej"ej&d
�d���Zeje	j*e	jvd�d
��Zeje	j.e	jvd�d��Zej"ej2d�ejee	d�xre	j4e	jvd�d���Zeje	j8e	jvd�d��Zejee	d�xr#e	j<e	jvxr	eed�d�d��Zeje	j@e	jvd�d��Z!ejee	d�xre	jDe	jvd�d��Z#eje	jHe	jvd�d ��Z%eje	jLe	jvd!�d"��Z'eje	jPe	jvd#�d$��Z)ejee	d%�xre	jTe	jvd&�d'��Z+y())�TestPosixDirFdrc#�
K�txjdz
c_tj�d|j��}tj�d|j�d�}t	j
|�|j
tj|�tjj||�}tjj|�rJ�tj|�5}|||f��ddd�y#1swYyxYw�w)Nr6�_�base)
r��countrrrr�rr�rfr�rQr��open_dir_fd)r$r<�base_dir�fullnamer^s     r�preparezTestPosixDirFd.prepare�s���������!���"�"�#�1�T�Z�Z�L�1���&�&�'�q�����D�9��
���H��������X�.��7�7�<�<��$�/���7�7�>�>�(�+�+�+�
�
"�
"�8�
,���4��*�*�-�
,�
,�s�C$D�&C7�.	D�7D�<Dc#��K�|j�5\}}}tj|�|jtj
|�|||f��ddd�y#1swYyxYw�wrq)r�rr�rrr�r$r^r<r�s    r�prepare_filezTestPosixDirFd.prepare_file�sN����
�\�\�^�7���h��'�'��1��O�O�E�L�L�(�3��4��*�*��^�^�s�A)�AA�	A)�A&�"A)z)test needs dir_fd support for os.access()c��|j�5\}}}|jtj|tj
|���ddd�y#1swYyxYw�N�r^)r�rrrr�rfr�r�s    r�test_access_dir_fdz!TestPosixDirFd.test_access_dir_fd�s@��
�
�
�
 �$<�V�T�8��O�O�E�L�L��r�w�w�v�F�G�!�
 �
 �s�:A�Az'test needs dir_fd support in os.chmod()c���|j�5\}}}tj|tj�tj|tjtj
z|��tj|�}|j
|jtjztjtj
z�ddd�y#1swYyxYwr�)	r�rr�rFrRrSrCrV�S_IRWXU)r$r^r<r��ss     r�test_chmod_dir_fdz TestPosixDirFd.test_chmod_dir_fd�s���
�
�
�
 �$<�V�T�8��K�K��$�,�,�/��K�K��d�l�l�T�\�\�9�&�I��
�
�8�$�A����Q�Y�Y����5�!�\�\�D�L�L�8�
:�	!�
 �
 �s�CC�C$r�z'test needs dir_fd support in os.chown()r�c���|j�5\}}}tj|tj�tj
�|��ddd�y#1swYyxYwr�)r�rr�rfr4r/r�s    r�test_chown_dir_fdz TestPosixDirFd.test_chown_dir_fd�sC���
�
�
 �$<�V�T�8��K�K��b�i�i�k�2�9�9�;�v�F�!�
 �
 �s�AA�A%z&test needs dir_fd support in os.stat()c
���|j�5\}}}t|d�5}|jd�ddd�|jtj
|�t	j|�}t	j||��}|j||�t	j|d��}|j||�|jtdtj|t	j���|jtdtj|t|���|jttj|d��ddd�y#1swY��,xYw#1swYyxYw)Nr�z	testline
r�zshould be integer or None, notl F�x:^V)r�rr�rrrrFrCrGr:r(rHr9rj)r$r^r<r��outfile�s1�s2s       r�test_stat_dir_fdzTestPosixDirFd.test_stat_dir_fd�s��
�\�\�^�7���h��h��$���
�
�l�+�%��O�O�E�L�L�(�3����H�%�B����D��0�B����R��$����H�T�2�B����R��$��"�"�9�.N��J�J��U�\�\�^�
#�
=��"�"�9�.N��J�J��U�6�]�
#�
<����m��J�J��V�
�
5��^�$�$���^�s"�E+�E�D!E+�E(	�#E+�+E4z'test needs dir_fd support in os.utime()c��|j�5\}}}tj�}tj|d|��tj||��|j	t
tj|||��|j	t
tj|d|��|j	t
tj||df|��|j	t
tj|d|f|��|j	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|��ddd�y#t$rY�wxYw#1swYyxYw)Nr�r
rnr)r^r+F)rr^)
r�r
rrr9r:rrfr�r)r$r^r<r�rs     r�test_utime_dir_fdz TestPosixDirFd.test_utime_dir_fd�s���
�
�
�
 �$<�V�T�8��)�)�+�C��K�K��d�6�2��K�K��V�,����i����d�!�&�
�
2����i����d�*�6�
�
;����i����d�"�D�k�&�
�
:����i����d�#�S�k�&�
�
:����i����d�"�C�j��
�
9��K�K��s�3�x��S��2�6�B��K�K��s�C�j��8��K�K����X�s�C�#�c�(�N�c�#9�:�;�F�
L��K�K��V�#&�s�8�S�#��C��.�C�1G�-H�"I�
K��x�x�2�6�6�6���K�K��e�F�K�1!�
 ��2"�����3!�
 �s*�G2H4�H%�%	H1�.H4�0H1�1H4�4H=z5WASI: symlink following on path_link is not supportedr�z&test needs dir_fd support in os.link()c���|j�5\}}}|j�5\}}}	tj||||��|j
tj|�|jtj|�dtj|�d�ddd�ddd�y#t$r}|jd|z�Yd}~��d}~wwxYw#1swY�<xYw#1swYyxYw)N��
src_dir_fd�
dst_dir_fdzposix.link(): %sr6)
r�r�rr�rTr�rrrCrF)r$r^r<r��dir_fd2�linkname�fulllinknamers        r�test_link_dir_fdzTestPosixDirFd.test_link_dir_fds����
�
�
 �$<�V�T�8�
�\�\�^�@���<�
6��
�
�4��f��Q�
�O�O�E�L�L�,�7����U�Z�Z��1�!�4��
�
�<�(��+�
-��!�
 ��#�
6��
�
�0�1�4�5�5��
6���^��!�
 �sL�C*�C�B4�AC�#C*�4	C�=C�C�C�C�C'	�#C*�*C3z'test needs dir_fd support in os.mkdir()c���|j�5\}}}tj||��|jtj|�tj
|�ddd�y#1swYyxYwr�)r�rr�rr�rFr�s    r�test_mkdir_dir_fdz TestPosixDirFd.test_mkdir_dir_fd.sJ��
�\�\�^�7���h��K�K��V�,��O�O�E�K�K��2��J�J�x� ��^�^�s�AA+�+A4rYrZzAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c�n�|j�5\}}}tjtjztjz}	tj||d|��|jt
j|�|jtjtj|�j��ddd�y#t$rS}|j|jtjtj tj"f�Yd}~�`d}~wwxYw#1swYyxYw)Nrr�)r�rFrZrRrSrrYrrrrrUrVrr_rrmr�r`)r$r^r<r�r\rs      r�test_mknod_dir_fdz TestPosixDirFd.test_mknod_dir_fd5s����\�\�^�7���h��<�<�$�,�,�.����=�D�
M����D�$��&�9�������h�7�����
�
�e�j�j��.B�.J�.J� K�L��^���
R��
�
�a�g�g����U�\�\�5�<�<�'P�Q�Q��
R��	�^�s7�7D+�	C�"A!D+�	D(�A	D#�D+�#D(�(D+�+D4z&test needs dir_fd support in os.open()c��|j�5\}}}t|d�5}|jd�ddd�|jtj
|�t	j|tj|��}	t	j|d�}|jd|�t	j|�	ddd�y#1swY��xYw#t	j|�wxYw#1swYyxYw)Nrs	testline
r��	)
r�rr�rrrr�r�rCrx)r$r^r<r�r�r�r�s       r�test_open_dir_fdzTestPosixDirFd.test_open_dir_fdHs���
�\�\�^�7���h��h��%���
�
�m�,�&��O�O�E�L�L�(�3����D�%�.�.��@�B�
 ��j�j��Q�'��� � ���4����B���^�%�%�����B����^�s:�C0�C
�AC0�(C�+C0�
C	�C0�C-�-C0�0C9�readlinkz*test needs dir_fd support in os.readlink()c��|j�5\}}}tjd|�|jtj
|�|j
t	j||��d�ddd�y#1swYyxYw�Nr�r�)r�rfr�rrrrCr�r�s    r�test_readlink_dir_fdz#TestPosixDirFd.test_readlink_dir_fdUs[���\�\�^�7���h��J�J�y�(�+��O�O�E�L�L�(�3����U�^�^�D��@�)�L��^�^���A"A<�<Bz(test needs dir_fd support in os.rename()c�0�|j�5\}}}|j�5\}}}tj||||��tj|�tj||�ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�)r�r�rr�rF)r$r^r<r�r��name2�	fullname2s       r�test_rename_dir_fdz!TestPosixDirFd.test_rename_dir_fd]su��
�
�
�
 �$<�V�T�8�
�\�\�^�:���	��L�L��u�$*�w�
@��J�J�y�!��L�L��H�-�	�!�
 �
�^��!�
 �s#�B�A	B�/B�B		�B�Bz)test needs dir_fd support in os.symlink()c��|j�5\}}}tjd||��|jtj|�|jtj|�d�ddd�y#1swYyxYwr�)r�rr�rrrCr�r�s    r�test_symlink_dir_fdz"TestPosixDirFd.test_symlink_dir_fdfsY��
�\�\�^�7���h��M�M�)�T�&�9��O�O�E�L�L�(�3����U�^�^�H�5�y�A��^�^�r�z(test needs dir_fd support in os.unlink()c�r�|j�5\}}}tj|�tj|�	tj
||��|j
ttj|�	ddd�y#|jtj
|��xYw#1swYyxYwr�)	r�rr�rrFrr9rrr�s    r�test_unlink_dir_fdz!TestPosixDirFd.test_unlink_dir_fdms���
�\�\�^�7���h��'�'��1��J�J�x� �
����T�&�1��!�!�'�5�:�:�x�@��^��
�������h�7����^�s�/B-�<B�#B*�*B-�-B6rMz(test needs dir_fd support in os.mkfifo()c���|j�5\}}}	tj|tjtj
z|��|jtj|�|jtjtj|�j��ddd�y#t$r}|jd|z�Yd}~��d}~wwxYw#1swYyxYw)Nr�rP)
r�rrMrFrRrSrTr�rrrrrUrV)r$r^r<r�rs     r�test_mkfifo_dir_fdz!TestPosixDirFd.test_mkfifo_dir_fdys���
�\�\�^�7���h�
8����T�4�<�<�$�,�,�#>�v�N�
�O�O�E�L�L�(�3��O�O�D�M�M�%�*�*�X�*>�*F�*F�G�H�
�^��#�
8��
�
�2�Q�6�7�7��
8���^�s5�C"�7B8�A!C"�8	C�C�C"�C�C"�"C+N),r�r�r�r�r	r�r�rjr�rfr��supports_dir_fdr�r�r�r
r�r�rr{r�rFr�rr�r�r�r�r�r�rYr�rr�r�r�r�r�r�r�rr�rMr�r�rIrr�r��s���
�E��	+��	+��+��+��X������b�&8�&8�8�:e�f�H�g�H��X������R�%7�%7�7�9b�c�:�d�:��X�����W�-�R�2�8�8�r�?Q�?Q�3Q�B�D��X�_�_�W�*�*�,@�A�G�B�D�G��X������B�$6�$6�6�8`�a�5�b�5�&�X������R�%7�%7�7�9b�c��d��<�X�_�_����?���X�����F��=����2�+=�+=� =�0��
-�	�	�
-��X������R�%7�%7�7�9b�c�!�d�!��X�����W�-�6� �h�h�"�*<�*<�<�6�$�T�9�5�\�^�
M�	^�
M��X������B�$6�$6�6�8`�a�
 �b�
 ��X�����Z�0�X�b�k�k�R�EW�EW�6W�E�G�M�G�M��X������b�&8�&8�8�:d�e�.�f�.��X������r�'9�'9�9�;f�g�B�h�B��X������b�&8�&8�8�:d�e�	�f�	��X�����X�.�R�2�9�9��@R�@R�3R�T~��I�@�IrIr�c��eZdZd�Zd�Zejeed�d�d��Z	ejeed�d�d��Z
y	)
�PosixGroupsTesterc�(�tj�dk7rtjd��t	td�stjd��t
jdk(rtjd��tj�|_y)Nrznot enough privilegesr0zneed posix.getgroupsr/zgetgroups(2) is broken on OSX)	rr4rjrkr
r�r�r0�saved_groupsr#s rr%zPosixGroupsTester.setUp�sk���<�<�>�Q���#�#�$;�<�<��u�k�*��#�#�$:�;�;��<�<�8�#��#�#�$C�D�D�!�O�O�-��rIc�.�ttd�r tj|j�yttd�rUt	j
tj��j}tj||jd�yy)N�	setgroupsr`r)	r
rr�r�rgrar4rhr`�r$r<s  r�tearDownzPosixGroupsTester.tearDown�sb���5�+�&��O�O�D�-�-�.�
�U�L�
)��<�<�����/�7�7�D����T�4�#4�#4�Q�#7�8�*rIr`ztest needs posix.initgroups()c��t|jxsdg�dz}tjt	j
��j}t	j||�|j|t	j��yr�)
�maxr�rgrarr4rhr`r_r0)r$r,r<s   rrnz!PosixGroupsTester.test_initgroups�s_��

��!�!�(�a�S�)�A�-���|�|�E�L�L�N�+�3�3��
����q�!��
�
�a����*�+rIr�ztest needs posix.setgroups()c��dgttd��fD];}tj|�|j	|tj
���=y)Nr�)r�rrr��assertListEqualr0)r$r9s  r�test_setgroupsz PosixGroupsTester.test_setgroups�s@���s�D��r��O�,�F��O�O�F�#�� � �����):�;�-rIN)r�r�r�r%r�rjr�r
rrnr�r�rIrr�r��sf��.�9��X������5�8�:�,�:�,��X������4�7�9�<�9�<rIr�c��eZdZejddddfZdZd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zej$eed�d�d��Zd�Zd�Zej$eed�d�d��Zd�Zeej6ej8j;d�d�d���Zeej6ej8j;d�d�d���Zd�Z d�Z!d�Z"d�Z#d�Z$y) �_PosixSpawnMixin�-I�-Sr�r�Nc�.�tjddg|��S)Nr�r�)r�r��r$�argss  r�python_argsz_PosixSpawnMixin.python_args�s������d�2�T�2�2rIc��tj}|jtj|�d|�d�}|j	d|�}|j|d|tj�}tj|d��t|d��5}|j|j�t|��ddd�y#1swYyxYw)N�2if 1:
            import os
            with open(zO, "w") as pidfile:
                pidfile.write(str(os.getpid()))
            r�rr��utf-8��encoding)rrrrr��
spawn_funcrfr�rr�rrCr�r})r$�pidfile�scriptr�r�r�s      r�test_returns_pidz!_PosixSpawnMixin.test_returns_pid�s����"�"�����	�(�(�'�2���k�"
���
����f�-���o�o�d�1�g�t�R�Z�Z�8�����S�1�-�
�'�G�
,�����Q�V�V�X�s�3�x�0�-�
,�
,�s�*C�C
c�8�d}	|j||gtj�}tj|d�\}}|j	||�|j|d�y#ttf$r&}|j	|j|�Yd}~yd}~wwxYw)N�no_such_executabler)	rrfr��waitpidrC�assertNotEqual�FileNotFoundErrorrT�filename)r$r	r��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�3B�Bc��tj}|jtj|�d|�d�}|j	d|�}|j|d|itj�ddi��}tj|d��t|d�	�5}|j|j�d�ddd�y#1swYyxYw)
Nrz^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r�rrc�barr�rr)
rrrrr�rrfr�rr�rrCr�)r$�envfilerr�r�r�s      r�test_specify_environmentz)_PosixSpawnMixin.test_specify_environment�s����"�"�����	�(�(�'�2���k�"	���
����f�-���o�o�d�1�g�t�:����:�U�E�:�<�����S�1�-�
�'�G�
,�����Q�V�V�X�u�-�-�
,�
,�s�!C�C
c��|j|jd|jtjd��}t	j
|d��y�Nr��file_actionsr��r�NOOP_PROGRAMrfr�rr��r$r�s  r�test_none_file_actionsz'_PosixSpawnMixin.test_none_file_actions�sH���o�o����a� �����J�J��	�
��	���S�1�-rIc��|j|jd|jtjg��}t	j
|d��yrrrs  r�test_empty_file_actionsz(_PosixSpawnMixin.test_empty_file_actions�sH���o�o����a� �����J�J��	�
��	���S�1�-rIc��|jtjtjddgtjd��}tj|d��y)Nr�r�F��resetidsrr��rr�r�rfr�rr�rs  r�test_resetids_explicit_defaultz/_PosixSpawnMixin.test_resetids_explicit_default�sF���o�o��N�N�
�^�^�T�6�*��J�J��	�
��	���S�1�-rIc��|jtjtjddgtjd��}tj|d��y)Nr�r�Tr!rr�r#rs  r�
test_resetidsz_PosixSpawnMixin.test_resetids�sF���o�o��N�N�
�^�^�T�6�*��J�J��	�
��	���S�1�-rIc���|jtjtjddgtjtj
���}t
j|d��y)Nr�r���	setpgrouprr�)rr�r�rfr�r2rr�rs  r�test_setpgroupz_PosixSpawnMixin.test_setpgroupsL���o�o��N�N�
�^�^�T�6�*��J�J��j�j�l�	�
��	���S�1�-rIc���|jt�5|jtjtjddgt
jd��ddd�y#1swYyxYw)Nr�r��023r()r9r:rr�r�rfr�r#s r�test_setpgroup_wrong_typez*_PosixSpawnMixin.test_setpgroup_wrong_typesJ��
�
�
�y�
)��O�O�C�N�N� �^�^�T�6�:��J�J�%�
�
9�*�
)�
)�s�AA"�"A+�pthread_sigmaskzneed signal.pthread_sigmask()c��tjd�}|jtjtjd|gt
jtjg��}tj|d��y)N�I            import signal
            signal.raise_signal(signal.SIGUSR1)r���
setsigmaskrr�)�textwrap�dedentrr�r�rfr�r��SIGUSR1rr�)r$r�r�s   r�test_setsigmaskz _PosixSpawnMixin.test_setsigmasksd����� 3�4���o�o��N�N�
�^�^�T�4�(��J�J����'�	�
��	���S�1�-rIc	���|jt�5|jtjtjddgt
jd��ddd�|jt�5|jtjtjddgt
jdg��ddd�|jt�5|jtjtjddgt
jtjtjdzg��ddd�y#1swY��xYw#1swY��xYw#1swYyxYw)Nr�r��"r1�jr6�
r9r:rr�r�rfr�rr��NSIGr#s r�test_setsigmask_wrong_typez+_PosixSpawnMixin.test_setsigmask_wrong_type#s���
�
�
�y�
)��O�O�C�N�N� �^�^�T�6�:��J�J�2�
�
7�*��
�
�y�
)��O�O�C�N�N� �^�^�T�6�:��J�J�C�5�
�
:�*��
�
�z�
*��O�O�C�N�N� �^�^�T�6�:��J�J�F�K�K�4:�K�K��M�4C�
�
D�+�
*�*�
)��*�
)��+�
*��&�AE�6AE�A$E�E
�E�E%c�6�tj�\}}|jtj|�	tj|d�tjd|�d��}	|jtjtjd|gtjd��}tj|�tjd�	�tj |d
�}t#|�}tj$tj&��}|j)||�y#t$r}|jd|���Yd}~��d}~wt$r}|jd|���Yd}~��d}~wwxYw#tj|�wxYw)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�)rfr�rrx�set_inheritabler3r4rr�r�r�r�r�rTrr�r�r�getsidr1r)	r$�rfd�wfdr�r�r�output�	child_sid�
parent_sids	         r�test_setsidz_PosixSpawnMixin.test_setsid2sA���7�7�9���S�������#�&�	����s�D�)��?�?�(��U�
�$��D�
>��o�o�c�n�n�'*�~�~�t�T�&B�&(�j�j��&�?��
�H�H�S�M����S�1�-�����c�"����K�	��Y�Y�r�y�y�{�+�
����J�	�2��'�
C��
�
� 9�#��A�B�B��"�
>��
�
� 4�S�G�<�=�=��
>��
�H�H�S�M�sB�/F�)AD2�2	E>�;E�F�E>� E9�4F�9E>�>F�Fc��tjtjtj�}tjd�}	|jtjtjd|gtjtjg��}tjtj|�tj|tj��y#tjtj|�wxYw)Nr0r���	setsigdefr�)r�r5�SIG_IGNr3r4rr�r�rfr�rr�)r$�original_handlerr�r�s    r�test_setsigdefz_PosixSpawnMixin.test_setsigdefQs���"�=�=�������H����� 3�4��	<��/�/��������t�,��
�
�!�>�>�*�	"��C�
�M�M�&�.�.�*:�;����S�F�N�N�?�;��
�M�M�&�.�.�*:�;�s
�	AC%�%&Dc	���|jt�5|jtjtjddgt
jd��ddd�|jt�5|jtjtjddgt
jdg��ddd�|jt�5|jtjtjddgt
jtjtjdzg��ddd�y#1swY��xYw#1swY��xYw#1swYyxYw)Nr�r�r8rIr9r6r:r#s r�test_setsigdef_wrong_typez*_PosixSpawnMixin.test_setsigdef_wrong_typeds���
�
�
�y�
)��O�O�C�N�N� �^�^�T�6�:��J�J�"�
�
6�*��
�
�y�
)��O�O�C�N�N� �^�^�T�6�:��J�J�3�%�
�
9�*��
�
�z�
*��O�O�C�N�N� �^�^�T�6�:��J�J�6�;�;����A�
�2N�
�
P�+�
*�*�
)��*�
)��+�
*�r=rWzbpo-34685: test can fail on BSDc	�l�tjd�}tj|�}tjd|�d|�d��}|jtjtjd|gtjdtj|�f��}tj|d��y�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��rfrrPr3r4rr�r�r�r^rr��r$�policy�priorityr�r�s     r�test_setscheduler_only_paramz-_PosixSpawnMixin.test_setscheduler_only_paramrs����&�&�q�)���,�,�V�4�����$,�,2�8�47�7?�j�A�	 !�"���o�o��N�N�
�^�^�T�4�(��J�J��R�^�^�H�5�6�	�
��	���S�1�-rIc	�l�tjd�}tj|�}tjd|�d|�d��}|jtjtjd|gtj|tj|�f��}tj|d��yrQrSrTs     r�test_setscheduler_with_policyz._PosixSpawnMixin.test_setscheduler_with_policy�s����&�&�q�)���,�,�V�4�����$,�,2�8�47�7?�j�A�	 !�"���o�o��N�N�
�^�^�T�4�(��J�J��r�~�~�h�7�8�	�
��	���S�1�-rIc�v�tjdtjjt�tj
dftjdftjddfg}|j|jd|jtj|��}tj|d��y)NrBrr6r�rr�)
rf�POSIX_SPAWN_OPENr��realpath�__file__r��POSIX_SPAWN_CLOSE�POSIX_SPAWN_DUP2rrr�rr�)r$rr�s   r�test_multiple_file_actionsz+_PosixSpawnMixin.test_multiple_file_actions�s���
�
 �
 �!�R�W�W�%5�%5�h�%?����a�P�
�
!�
!�1�%�
�
 �
 �!�Q�'�
��
�o�o�d�/�/��2�"�/�/� �j�j�+7��9��	���S�1�-rIc���|j}|jt�5|j|d|tj
dg��ddd�|jt�5|j|d|tj
dg��ddd�|jt�5|j|d|tj
dg��ddd�|jt�5|j|d|tj
dg��ddd�|jt�5|j|d|tj
tjfg��ddd�|jt�5|j|d|tj
tjddfg��ddd�|jt�5|j|d|tj
tjdfg��ddd�|jt�5|j|d|tj
tjdtd	ztjdfg��ddd�y#1swY��FxYw#1swY��xYw#1swY���xYw#1swY���xYw#1swY��WxYw#1swY��xYw#1swY��xYw#1swYyxYw)
Nrrr�rq)i90r6r�rBr�)rr9r:rrfr�r^rr[r]r�r�s  r�test_bad_file_actionsz&_PosixSpawnMixin.test_bad_file_actions�se��� � ��
�
�
�y�
)��O�O�D��G�T�2�:�:�*.��
�
1�*��
�
�y�
)��O�O�D��G�T�2�:�:�*,��
�
/�*��
�
�y�
)��O�O�D��G�T�2�:�:�*1��
�
4�*��
�
�y�
)��O�O�D��G�T�2�:�:�*2��
�
5�*��
�
�y�
)��O�O�D��G�T�2�:�:�+-�+?�+?�*A�)B�
�
D�*��
�
�y�
)��O�O�D��G�T�2�:�:�+-�+?�+?��A�*F�)G�
�
I�*��
�
�y�
)��O�O�D��G�T�2�:�:�+-�+?�+?��*F�)G�
�
I�*��
�
�z�
*��O�O�D��G�T�2�:�:�+-�+>�+>�+,�h��o�+-�;�;��+;�*<�
�
=�+�
*�+*�
)��*�
)��*�
)��*�
)��*�
)��*�
)��*�
)��+�
*�s`�(J�'(J�,(J(�1(J5�67K�
9K� 8K�5AK(�J�J%�(J2�5J?�K�K�K%�(K1c�T�tj}|jtj|�d}tj
d|tjtjztjztjtjzfg}|jd|�}|j|d|tj|��}tj |d��t#|d��5}|j%|j'�d	�ddd�y#1swYyxYw)
N�Oif 1:
            import sys
            sys.stdout.write("hello")
            r6r�rrr�rr�hello)rrrrrfr[r�r��O_TRUNCrFrRrSr�rr�rr�rrCr�)r$r�rrr�r�r�s       r�test_open_filez_PosixSpawnMixin.test_open_file�s����"�"�����	�(�(�'�2���
�
 �
 �!�W����b�j�j�(�2�:�:�5����t�|�|�+�
-�
��
����f�-���o�o�d�1�g�t�R�Z�Z�+7��9��	���S�1�-�
�'�G�
,�����Q�V�V�X�w�/�-�
,�
,�s�4!D�D'c���tj}|jtj|�d|�d�}|j	d|�}|j|d|tjtjdfg��}tj|d��t|d��5}|j|j�d	tjz�ddd�y#1swYyxYw)
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�rrzis closed %d)rrrrr�rrfr�r^rr�rrCr�rr�)r$�	closefilerr�r�r�s      r�test_close_filez _PosixSpawnMixin.test_close_file�s����$�$�	����	�(�(�)�4��
%�-�(
�������f�-���o�o�d�1�g�t�R�Z�Z�-/�-A�-A�1�,E�+F��H��	���S�1�-�
�)�g�
.�!����Q�V�V�X�~����'C�D�/�
.�
.�s�$2C�C(c��tj}|jtj|�d}t	|d�5}t
j|j�dfg}|jd|�}|j|d|t
j|��}tj|d��ddd�t	|d�	�5}|j|j�d
�ddd�y#1swY�@xYw#1swYyxYw)Nrdrr6r�rrr�rrre)rrrrrrfr_rwr�rr�rr�rCr�)r$�dupfiler�	childfilerr�r�r�s        rr2z_PosixSpawnMixin.test_dup2�s����"�"�����	�(�(�'�2����'�4�
 �I��$�$�i�&6�&6�&8�!�<��L��#�#�D�&�1�D��/�/�$�q�'�4����/;�"�=�C�� � ��q�1�!��'�G�
,�����Q�V�V�X�w�/�-�
,�!�
 ��-�
,�s�A2C0�!C<�0C9�<D)%r�r�r�r�r�rrr�rrrrrr$r&r*r-rjr�r
r�r6r<rGrMrOr�r�r�r�rWrYr`rbrgrjr2r�rIrr�r��sL���N�N�D�$��f�=�L��J�3�1�
+�
.�.�.�.�.�.�9��X�����):�;�:�<�.�<�.�
D�3�>�X�����):�;�8�:�<�:�<�"P���X�_�_�S�\�\�,�,�-B�C�6�8�.�8��.�"��X�_�_�S�\�\�,�,�-B�C�6�8�.�8��.�"
.�=�:0�(E�&0rIr��posix_spawnztest needs os.posix_spawnc� �eZdZeedd�Zy)�TestPosixSpawnrnN)r�r�r�r7rrr�rIrrprp�s����
�t�4�JrIrp�posix_spawnpztest needs os.posix_spawnpc�D�eZdZeedd�Zejd��Zy)�TestPosixSpawnPrqNc���tj�}|jtj|�d}t
jj||�}tjtj|�	t
jj|t
jdf�}|ddddf}tjd|�d��}d|f}t!|d|i�y#t$r|}Y�=wxYw)	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�mkdtemprrrrfr�rQr�r�r��pathsepr�rir3r4r)r$�temp_dir�program�program_fullpathr��
spawn_argsr�r�s        r�test_posix_spawnpz!TestPosixSpawnP.test_posix_spawnps����#�#�%�����	�(�(�(�3�1���7�7�<�<��'�:��
�
�
�3�>�>�#3�4�	��:�:�?�?�H�b�j�j��.@�#A�B�D��t�T�4��8�
����� ����d�|���$�*�T�*��%�	��D�	�s�<2C�C,�+C,)	r�r�r�r7rrrr�r}r�rIrrsrss(������5�J��"�"�+�#�+rIrsr/ztest weak linking on macOSc�x�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zy)�TestPosixWeaklinkingc��ddl}ddl}|j�}|D�chc]}|jd�s�||s�|��c}|_td�|j�djd�D��|_ycc}w)Nr�HAVE_c3�2K�|]}t|����y�wrqr*)r+�parts  rr-z-TestPosixWeaklinking.setUp.<locals>.<genexpr>4s����T�3S�4�S��Y�3S�r.r�)r4r��get_config_varsr��	availabler6�mac_verr�)r$r4r��config_vars�nms     rr%zTestPosixWeaklinking.setUp.st�����/�/�1��(3�c��"�r�}�}�W�7M�R]�^`�Ra�2��c����T�3C�8�3C�3C�3E�a�3H�3N�3N�s�3S�T�T����ds�A?�A?�A?c�P�||jvrtj|�d���y)Nz not weak-linked)r�rjrkr�s  r�_verify_availablez&TestPosixWeaklinking._verify_available6s,���t�~�~�%��#�#�t�f�,<�$=�>�>�&rIc�F�|jd�|jdk\rA|jttd�d�|jttd�d�y|jttd�d�|jttd�d�y)	N�HAVE_PWRITEV)r�r�r�zos.pwritev is not availabler�zos.readv is not availablezos.pwritev is availablezos.readv is available)r�r�rrr
rfr7r#s rr�z!TestPosixWeaklinking.test_pwritev:sz�����~�.��<�<�8�#��O�O�G�B�	�2�4Q�R��O�O�G�B��1�3N�O�
���W�R��3�5N�O����W�R��2�4K�LrIc�J�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdd��ddd�y#1swYyxYw)N�HAVE_FSTATAT�r�r��dir_fd unavailable�filerr�)
r�r�r_r�_have_functions�assertNotInrGr�rfrFr#s rrLzTestPosixWeaklinking.test_statDsu�����~�.��<�<�8�#��M�M�.�%�*?�*?�@�
���^�U�-B�-B�C��'�'�(;�=Q�R�����q�)�S�R�R���8B�B"c��|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdtjd��ddd�|j
td�5tjdtjd�	�ddd�|j
td
�5tjdtjd��ddd�y#1swY��xYw#1swY�[xYw#1swYyxYw)
N�HAVE_FACCESSATr�r�r�rr�zfollow_symlinks unavailableFrzeffective_ids unavailableT)�
effective_ids)r�r�r_rr�r�rGr�rfr�r�r#s rr�z TestPosixWeaklinking.test_accessOs������/�0��<�<�8�#��M�M�*�E�,A�,A�B�
���-�u�/D�/D�E��'�'�(;�=Q�R��	�	�&�"�'�'�!�4�S��'�'�(;�=Z�[��	�	�&�"�'�'�5�A�\��'�'�(;�=X�Y��	�	�&�"�'�'��>�Z�Y�
S�R��\�[��Z�Y�s$�8'D2�='D>�'E
�2D;�>E�
Ec��|jd�|jdk\r!|jdtj�y|jdtj�|jdtj�|j
td�5tjddd��ddd�y#1swYyxYw)	N�
HAVE_FCHMODATr��HAVE_LCHMODr�r�i�rr�)
r�r�r_rr�r�rGr�rfr�r#s r�
test_chmodzTestPosixWeaklinking.test_chmod`s�������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��M�M�-��)>�)>�?��'�'�(;�=Q�R������q�1�S�R�R�s�B:�:Cc��|jd�|jdk\r!|jdtj�y|jdtj�|jdtj�|j
td�5tjdddd��ddd�y#1swYyxYw)N�
HAVE_FCHOWNATr��HAVE_LCHOWNr�r�rr�)
r�r�r_rr�r�rGr�rfr�r#s rr�zTestPosixWeaklinking.test_chownls�������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��M�M�-��)>�)>�?��'�'�(;�=Q�R������A�a�0�S�R�R�s�B;�;Cc�
�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjddd��ddd�|j
td�5tjddd�	�ddd�|j
td�5tjdddd�
�ddd�tj�5}tjj|d�}tjj|d�}tjj|d�}t|d�5}|jd
�ddd�tj d|�|j#t$�5tj||d��ddd�|j#t$�5tj||d��ddd�ddd�y#1swY���xYw#1swY��uxYw#1swY��JxYw#1swY��xYw#1swY�{xYw#1swY�QxYw#1swYyxYw)N�HAVE_LINKATr�zsrc_dir_fd unavailable�sourcer�r�r�zdst_dir_fd unavailable�r�r�r�r��dataTrF)r�r�r_rr�r�rGr�rfr�rryr�rQrr�r�r9�FileExistsError)r$r�	link_path�target_path�source_pathrzs      r�	test_linkzTestPosixWeaklinking.test_linkxs������}�-��<�<�8�#��M�M�-��)>�)>�?�
���]�E�,A�,A�B��'�'�(;�=U�V�����(��:�W��'�'�(;�=U�V�����(��:�W��'�'�(;�=U�V�����(��a�H�W��#�#�%���G�G�L�L��F�;�	� �g�g�l�l�9�h�?�� �g�g�l�l�9�h�?���+�s�+�r��H�H�V�$�,��
�
�8�Y�/��&�&��7��G�G�K��D�I�8��&�&��7��G�G�K��E�J�8�#&�%�W�V��W�V��W�V��,�+��8�7��8�7��#&�%�sy�8H.�/H;�&I�A-I9�	I�3I9�I!�'I9�I-�I9�.H8�;I�I�I	�I9�!I*	�&I9�-I6	�2I9�9Jc���|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjd�ddd�|j
td�5tjd�ddd�y#1swY�>xYw#1swYyxYw)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�r_rr�r�rGr:rfr��scandirr#s r�test_listdir_scandirz)TestPosixWeaklinking.test_listdir_scandir�s������/�0��<�<�8�#��M�M�*�E�,A�,A�B�
���-�u�/D�/D�E��'�'�	�3x�y��
�
�1�
�z��'�'�	�3x�y��
�
�1�
�z�y�z�y��z�y�s�8C�,C�C�C c�J�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdd��ddd�y#1swYyxYw)N�HAVE_MKDIRATr�r��dirrr�)
r�r�r_rr�r�rGr�rfr�r#s r�
test_mkdirzTestPosixWeaklinking.test_mkdir�su�����~�.��<�<�8�#��M�M�.�%�*?�*?�@�
���^�U�-B�-B�C��'�'�(;�=Q�R�����q�)�S�R�R�r�c�J�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdd��ddd�y#1swYyxYw)N�
HAVE_MKFIFOAT�rdrr�r�rr�)
r�r�r_rr�r�rGr�rfrMr#s rrXz TestPosixWeaklinking.test_mkfifo�su������/��<�<�7�"��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��'�'�(;�=Q�R��	�	�&��+�S�R�R�r�c�J�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdd��ddd�y#1swYyxYw)N�HAVE_MKNODATr�r�r�rr�)
r�r�r_rr�r�rGr�rfrYr#s rrazTestPosixWeaklinking.test_mknod�su�����~�.��<�<�7�"��M�M�.�%�*?�*?�@�
���^�U�-B�-B�C��'�'�(;�=Q�R������*�S�R�R�r�c���|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjddd��ddd�|j
td�5tjddd��ddd�|j
td�5tjddd��ddd�|j
td�5tjddd��ddd�y#1swY��xYw#1swY��xYw#1swY�YxYw#1swYyxYw)	N�
HAVE_RENAMEATr�z%src_dir_fd and dst_dir_fd unavailable�a�brr�r�)r�r�r_rr�r�rGr�rfr�r�r#s r�test_rename_replacez(TestPosixWeaklinking.test_rename_replace�s������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��'�'�(;�=d�e��	�	�#�s�q�1�f��'�'�(;�=d�e��	�	�#�s�q�1�f��'�'�(;�=d�e��
�
�3���2�f��'�'�(;�=d�e��
�
�3���2�f�e�f�e��f�e��f�e��f�e�s0�8D?�/E�&E�E#�?E�E�E �#E,c���|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdd��ddd�|j
td�5tjdd��ddd�y#1swY�@xYw#1swYyxYw)N�
HAVE_UNLINKATr�r�r�rr�)r�r�r_rr�r�rGr�rfrr�r#s r�test_unlink_rmdirz&TestPosixWeaklinking.test_unlink_rmdir�s�������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��'�'�(;�=Q�R��	�	�&��+�S��'�'�(;�=Q�R������*�S�R�S�R��S�R�s�8C�.C�C�C$c�h�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdtjd��ddd�y#1swYyxYw)N�HAVE_OPENATr�r�r�rr�)r�r�r_rr�r�rGr�rfrr�r#s r�	test_openzTestPosixWeaklinking.test_open�s{�����}�-��<�<�8�#��M�M�-��)>�)>�?�
���]�E�,A�,A�B��'�'�(;�=Q�R��������A�6�S�R�R�s�8'B(�(B1c�J�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjdd��ddd�y#1swYyxYw)N�HAVE_READLINKATr�r�r�rr�)
r�r�r_rr�r�rGr�rfr�r#s r�
test_readlinkz"TestPosixWeaklinking.test_readlink�sx�����0�1��<�<�8�#��M�M�+�U�-B�-B�C�
���.��0E�0E�F��'�'�(;�=Q�R����F�A�.�S�R�R�r�c�L�|jd�|jdk\r!|jdtj�y|jdtj�|j
td�5tjddd��ddd�y#1swYyxYw)N�HAVE_SYMLINKATr�r�r�r�rr�)
r�r�r_rr�r�rGr�rfr�r#s r�test_symlinkz!TestPosixWeaklinking.test_symlink	sz�����/�0��<�<�8�#��M�M�*�E�,A�,A�B�
���-�u�/D�/D�E��'�'�(;�=Q�R��
�
�3��Q�/�S�R�R�s�8B�B#c���|jd�|jd�|jdk\rA|jdtj�|jdtj�y|jdtj�|jdtj�|j
td�5tjdd��ddd�y#1swYyxYw)N�
HAVE_FUTIMENS�HAVE_UTIMENSAT)r�rdr�r�rr�)
r�r�r_rr�r�rGr�rfrr#s rr�zTestPosixWeaklinking.test_utime	s�������/����/�0��<�<�8�#��M�M�/�5�+@�+@�A��M�M�*�E�,A�,A�B�
���_�e�.C�.C�D����-�u�/D�/D�E��'�'�(;�=Q�R������*�S�R�R�s�	C*�*C3N)r�r�r�r%r�r�rLr�r�r�r�r�r�rXrar�r�r�r�r�r�r�rIrrr's`��U�?�M�	*�?�"
2�
1�$K�N�	*�	,�	+�3�(+�	7�	/�	0�+rIrc��eZdZdZej
eed�d�ej
eed�d�ej
ejjd�d�e
jdd	d	�d
�����Zy)�NamespacesTestsz&Tests for os.unshare() and os.setns().�unsharezneeds os.unshare()�setnszneeds os.setns()z/proc/self/ns/utszneed /proc/self/ns/utsrBrc� �d}td|�y)Na�if 1:
            import errno
            import os
            import sys
            fd = os.open('/proc/self/ns/uts', os.O_RDONLY)
            try:
                original = os.readlink('/proc/self/ns/uts')
                try:
                    os.unshare(os.CLONE_NEWUTS)
                except OSError as e:
                    if e.errno == errno.ENOSPC:
                        # skip test if limit is exceeded
                        sys.exit()
                    raise
                new = os.readlink('/proc/self/ns/uts')
                if original == new:
                    raise Exception('os.unshare failed')
                os.setns(fd, os.CLONE_NEWUTS)
                restored = os.readlink('/proc/self/ns/uts')
                if original != restored:
                    raise Exception('os.setns failed')
            except PermissionError:
                # The calling process did not have the required privileges
                # for this operation
                pass
            except OSError as e:
                # Skip the test on these errors:
                # - ENOSYS: syscall not available
                # - EINVAL: kernel was not configured with the CONFIG_UTS_NS option
                # - ENOMEM: not enough memory
                if e.errno not in (errno.ENOSYS, errno.EINVAL, errno.ENOMEM):
                    raise
            finally:
                os.close(fd)
            r�rr�s  r�test_unshare_setnsz"NamespacesTests.test_unshare_setns#	s��
"��H	��t�$rIN)
r�r�r��__doc__rjr�r
rfr�r�rr�r�r�rIrr�r� 	s���0��X�����Y�/�1E�F��X�����W�-�/A�B��X��������(;�<�>V�W�#�W�#�#�A�q�!�,�%%�-�X�C�G�%%rIr�c�,�tj�yrq)r�
reap_childrenr�rIr�tearDownModuler�O	s�����rI�__main__)3r�rr�test.supportrrr�test.support.script_helperrrr�r�r
rfr�rFrvrjr r3�
contextlibr	r�ImportErrorr�rgr�rQ�
gettempdirrr�r��maxsizer{r�r�rr��TestCaserr�r�r�r
rprsrr�r�r��mainr�rIr�<module>r�s7����&�"�(�7��
�
��	�������%����������1�h�1�1�3�'�.�.�1A�A�C��#�x�"�"��K�K�%��J��!6�!6�!I�'�/�/�J�.����%��$�$�_�%6�8V�W��B0�(�#�#�B0�L,EI�X�&�&�EI�P!<��)�)�!<�HR0�R0�j
����W�R��/�1L�M�5�X�&�&�(8�5�N�5�����W�R��0�2N�O�!+�h�'�'�)9�!+�P�!+�H����S�\�\�X�-�/K�L�u+�8�,�,�u+�M�u+�p,%�h�'�'�,%�^��z���H�M�M�O���wI�����
��
�C��s$�H�H�	H�H�H�H

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