403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.216.202
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Python313/Lib/test/__pycache__/test_posix.cpython-313.opt-1.pyc
�

��ir�����SrSSKJr SSKJr SSKJr SSKJr SSKJr SSK	r	SSK
r
SSKrSSKrSSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJr SSKrSSKr\R8R;\R<"5\R>S	-5r \RB"\RDS
:=(a$ \RF=(d \RH(+S5r%Sr&\RB"\&"5S
5r'"SS\RP5r)"SS\RP5r*"SS\RP5r+"SS5r,\RB"\-"\S5S5\R\"5"SS\RP\,555r/\RB"\-"\S5S5\R\"5"SS\RP\,555r0\RB"\RS:HS5"S S!\RP55r1"S"S#\RP5r2S$r3\4S%:Xa\Rj"5 gg!\a SSKrGN�f=f!\a SrGN�f=f)&zTest posix functions�)�support)�is_apple)�	os_helper)�warnings_helper��assert_python_okN)�contextmanagerz-dummy-symlink�z(test is only meaningful on 32-bit buildsc���[[S5(dg[R"S5 g![a-nUR[R
:XaSnAgSnAgSnAff=f)N�sched_getschedulerFrT)�hasattr�posixr�OSError�errno�ENOSYS)�es �$C:\Python313\\Lib\test\test_posix.py�_supports_schedr+sX���5�.�/�/���
� � ��#������7�7�e�l�l�"��#����s�/�
A&�A!�!A&zrequires POSIX scheduler APIc��\rSrSrSrSr\R"\"\	S5S5S5r
\R"\"\	S5S5S	5r\R"\"\	S
5S5S5r\R"\"\	S
5S5S
5r
\R"\"\	S5S5S5r\R"\"\	S5S5S5r\R"\"\	S5S5\R"\"\S5S5S55r\R"\"\	S5S5S5r\R"\"\	S5S5S5r\R"\"\	S5S5S5r\R"\"\	S 5S!5S"5r\R"\"\S#S$5\R0;S%5\R4"5S&55r\R"\"\	S'5S(5\R4"5S)55r\R4"5S*5r\R"\"\	S+5S,5S-5r\R"\"\	S.5S/5S05r\R"\"\	S15S25S35r \R"\"\	S15S25\R"\"\	S45S55S655r!\R"\"\	S15S25\"S755r#\R"\"\	S85S95S:5r$\R"\"\	S;5S<5S=5r%\R"\"\	S;5S<5\R"\"\	S>5S?5S@55r&\R"\"\	S;5S<5\"SA55r'\R"\"\	SB5SC5SD5r(\R"\"\	SB5SC5SE5r)\R"\"\	SF5SG5SH5r*\R"\"\	SF5SG5SI5r+\R"\RX\R0;SJ5SK5r-\R"\RX\R\;SL5SM5r/\R"\"\	SN5SO5SP5r0\R"\"\	SN5SO5\"SQ55r1\R"\"\	SR5SS5ST5r2\R"\"\	SR5SS5\"SU55r3\R"\"\	SV5SW5\Rh"\RjSX5SY55r6\R"\"\	SZ5S[5S\5r7\R"\"\	S]5S^5S_5r8\R"\"\	S`5Sa5\Rh"\RjSb5Sc55r9\R"\"\Sd5Se5\Rt"SfSgSh5\Rv"5Si555r<\R"\"\	Sj5Sk5Sl5r=\R"\"\	Sm5Sn5So5r>\R"\"\	Sp5Sq5Sr5r?\R"\"\	Ss5St5\R"\R�\R\;Su5Sv55rASwrB\R"\"\	Sx5Sy5Sz5rC\R"\"\	S{5=(a	 \"\@S|5S}5S~5rD\R"\"\	S5S�5S�5rES�rF\R"\"\S�5S�5\Rh"\R�S�5S�55rH\IR�\R"\"\	S�5S�5\Rh"\R�S�5S�555rK\IR�\R"\"\	S�5S�5S�55rL\R"\"\	S�5S�5S�5rMS�rNS�rOS�rPS�rQ\R"\	R�\R0;S�5S�5rS\R"\"\	S�5S�5S�5rT\R"\"\	S�5S�5S�5rU\R"\"\	S�5S�5S�5rV\R"\"\	S�5S�5S�5rW\R"\"\S�5S�5\Rt"SfSgS�5S�55rX\R�\R"\"\S�5S�5\Rt"SfSgS�5S�555rZ\R"\"\	S�5S�5S�5r[S�r\\IR�S�5r]S�r^\IR�S�5r_\IR�S�5r`\R"\"\	S�5S�5S�5ra\R"\"\	S�5S�5S�5rbS�rcS�rd\IR�S�5rf\IR�S�5rg\R"\"\	S�5S�5\IR�S�55rh\R"\"\	S�5S�5\IR�S�55riS�rj\R"\"\	S�5S�5S�5rk\R"\"\	S�5S�5S�5rl\R"\"\	S�5S�5S�5rmS�rnS�ro\R"\"\	S�5S�5S�5rp\R"\"\	S�5S�5\R"\"\S5S5\R"\"\S�5S�5S�555rq\R"\"\S�5S�5\R"\"\S�5S�5\Rv"5S�555rr\R"\"\sS�5S�5\R"\"\S�5S�5S�55rt\R"\"\	S�5S�5ru\R"\"\	S�5S�5rv\uS�5rw\u\R"\"\	S�5S�5S�55rx\yS�5rz\yS�5r{\yS�5r|\R"\"\	S�5S�5S�5r}\vS�5r~\vS�5r\Rh"\RjS�5\R"\GRS�:HS�5S�55r�\R"\"\S�5S�5S�5r�S�r�S�r�S�r�\R"\"\S�5S�5S�5r�S�r�g$)��PosixTester�8c�J�UR[R[R5 [	[RS5 SSS5 UR[R"55 [R"SS[5 g!,(df   NO=f)N�wb�ignorez.* potential security risk .*)�
addCleanupr�unlink�TESTFN�open�enterContextr�check_warnings�warnings�filterwarnings�RuntimeWarning��selfs r�setUp�PosixTester.setUp:sj�����	�(�(�)�*:�*:�;�
�)�"�"�D�
)��*����/�8�8�:�;�����*I� .�	0�*�
)�s�	B�
B"c���/SQnUHQn[[US5nUcMURU5 U"5 UR[US5 SSS5 MS g!,(df   Me=f)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�testNoArgFunctions�PosixTester.testNoArgFunctionsCs^����%�D� ���d�3�J��%��\�\�$�'��L��%�%�i��Q�?�(�'�%�(�'�s�A�
A,	�	getresuidztest needs posix.getresuid()c��[R"5nUR[U5S5 UHnUR	US5 M g�N�r)rrB�assertEqual�len�assertGreaterEqual)r%�user_ids�vals   r�test_getresuid�PosixTester.test_getresuidSs>���?�?�$������X���*��C��#�#�C��+���	getresgidztest needs posix.getresgid()c��[R"5nUR[U5S5 UHnUR	US5 M grD)rrNrFrGrH)r%�	group_idsrJs   r�test_getresgid�PosixTester.test_getresgid[s>���O�O�%�	�����Y���+��C��#�#�C��+�rM�	setresuidztest needs posix.setresuid()c��[R"5nUR[R"U65 UR[R"SSS55 g�N���)rrB�assertIsNonerS)r%�current_user_idss  r�test_setresuid�PosixTester.test_setresuidcsD��!�?�?�,�����%�/�/�+;�<�=����%�/�/�"�b�"�5�6rMc��[R"5nSU;a2USS-SS4nUR"[[R/UQ76 gg�Nrr8rV)rrBr;rrS)r%rX�new_user_idss   r�test_setresuid_exception�$PosixTester.test_setresuid_exceptionksN��!�?�?�,���$�$�,�Q�/��1�2�r�:�L����g�u���F��F�%rM�	setresgidztest needs posix.setresgid()c��[R"5nUR[R"U65 UR[R"SSS55 grU)rrNrWr`)r%�current_group_idss  r�test_setresgid�PosixTester.test_setresgidtsD��"�O�O�-�����%�/�/�+<�=�>����%�/�/�"�b�"�5�6rMc��[R"5nSU;a2USS-SS4nUR"[[R/UQ76 ggr\)rrNr;rr`)r%rb�
new_group_idss   r�test_setresgid_exception�$PosixTester.test_setresgid_exception|sN��"�O�O�-���%�%�.�q�1�!�3�R��<�M����g�u���G��G�&rM�
initgroupsztest needs os.initgroups()�getpwuidztest needs pwd.getpwuid()c��UR[[R5 UR[[RS5 UR[[RSS5 UR[[RSS[	55 [
R"5S:wa^[R"[R"55Rn[R"US5 URS5 gg![a [R"S5ef=f![a4nURUR [ R"5 SnAgSnAff=f)NrE�foorzneed a pwd entry�
z+Expected OSError to be raised by initgroups)r;r<rri�object�osr6�pwdrj�pw_name�KeyError�unittest�SkipTest�failrrFr�EPERM)r%r>rs   r�test_initgroups�PosixTester.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$�93D�-D;�!D8�;
E9�*E4�4E9�statvfsztest needs posix.statvfs()c�j�UR[R"[R55 g�N)�
assertTruerryro�curdirr$s r�test_statvfs�PosixTester.test_statvfs�s��	
����
�
�b�i�i�0�1rM�fstatvfsztest needs posix.fstatvfs()c�N�[[R5nUR[R
"UR
555 UR[R"UR
555 UR5 g!UR5 f=fr{)	rrrr|rr��filenory�close�r%�fps  r�
test_fstatvfs�PosixTester.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��[[RS5nURS5 UR	5 [
R"UR5S5 UR5 g!UR5 f=f)N�w+�testr)	rrr�write�flushrr�r�r�r�s  r�test_ftruncate�PosixTester.test_ftruncate�sW���)�"�"�D�
)��	��H�H�V���H�H�J��O�O�B�I�I�K��+��H�H�J��B�H�H�J�s�AA3�3B�truncateztest needs posix.truncate()c��[[RS5nURS5 UR	5 SSS5 [
R"[RS5 g!,(df   N4=f)N�wr�r)rrrr�r�rr�r�s  r�
test_truncate�PosixTester.test_truncate�sM��
�)�"�"�C�
(�B��H�H�V���H�H�J�)�	���y�'�'��+�)�
(�s�"A+�+
A9�execveNz/test needs execve() to support the fd parameterc�&�[R"[R[R5n[R
"5nUS:Xa|[R"[RR[R5S5 [R"U[RSS/[R5 O[R"USS9 [R"U5 g![R"U5 f=f)Nr�-c�pass��exitcode)ror�sys�
executable�O_RDONLY�fork�chdir�path�splitrr��environr�wait_processr�)r%r��pids   r�test_fexecve�PosixTester.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,C8�8D�waitidztest needs posix.waitid()c���[R"5nUS:Xa�[R"[RR	[
R5S5 [R"[
R[
RSS/[R5 g[R"[RU[R5nURXR5 g)Nrr�r�)ror�r�r�r�r�r�rr�r�r��P_PID�WEXITEDrF�si_pid)r%r��ress   r�test_waitid�PosixTester.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�*�*�-rMc�h�UR[SS9 [R"S5 SSS5 UR[SS9 [R"SS9 SSS5 UR[SS9 [R"SS9 SSS5 UR[SS9 [R"S	S
9 SSS5 UR[SS9 [R"SS9 SSS5 UR[SS9 [R"SS9 SSS5 UR[SS9 [R"SS
9 SSS5 UR[SS9 [R"SS
S9 SSS5 UR[SS9 [R"5 SSS5 UR[SS9 [R"SSS9 SSS5 Sn[	SU5 g!,(df   GN�=f!,(df   GN�=f!,(df   GN�=f!,(df   GN=f!,(df   GN`=f!,(df   GNA=f!,(df   GN"=f!,(df   GN=f!,(df   N�=f!,(df   N�=f)NzPositional args not allowed)�msgc��gr{�r�rMr�<lambda>�3PosixTester.test_register_at_fork.<locals>.<lambda>�s��rMzArgs must be callable�)�before�three)�after_in_childsFive)�after_in_parentzArgs must not be NonezInvalid arg was allowedc��g)NrEr�r�rMrr�r��s��QrM)r�r�z!At least one argument is requiredc��gr{r�r�rMrr�r��s��trM�)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�)r;r<ro�register_at_forkr�r%�codes  r�test_register_at_fork�!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�:H&�+H8�I
�
I�>I.�/J�"J�J#�
H�
H#�&
H5�8
I�

I�
I+�.
I=�
J�
J �#
J1�lockfztest needs posix.lockf()c��[R"[R[R[R
-5n[R"US5 [R"US[R5 [R"U[RS5 [R"U[RS5 [R"U5 g![R"U5 f=f)N�testr�)rorrr�O_WRONLY�O_CREATr��lseek�SEEK_SETrr��F_LOCK�F_ULOCKr��r%�fds  r�
test_lockf�PosixTester.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
�B	C&�&C>�preadztest needs posix.pread()c��[R"[R[R[R
-5n[R"US5 [R"US[R5 URS[R"USS55 URS[R"US55 [R"U5 g![R"U5 f=f)Nr�rsesr�r8ste)rorrr�O_RDWRr�r�r�r�rFrr��readr�r�s  r�
test_pread�PosixTester.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
�BC)�)D�preadvztest needs posix.preadv()c���[R"[R[R[R
-5n[R"US5 SVs/sHn[U5PM nnUR[R"XS5S5 UR/SQ[U55 [R"U5 gs snf![R"U5 f=f)N�test1tt2t3t5t6t6t8��rEr�rE�
�st1tt2st3ts5t)
rorrrr�r�r��	bytearrayrFrr��listr�)r%r��i�bufs    r�test_preadv�PosixTester.test_preadv3s���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R�.�/�)2�3��A�9�Q�<��C�3����U�\�\�"�1�5�r�:����6��S�	�B��H�H�R�L��	4��
�H�H�R�L�s�C�!C�6AC�C�C0�	RWF_HIPRIztest needs posix.RWF_HIPRIc���[R"[R[R[R
-5n[R"US5 SVs/sHn[U5PM nnUR[R"XS[R5S5 UR/SQ[U55 [R*"U5 gs snf![a URS5 N9[aJnUR [ R"[ R$1;a[&R("S5eeSnAff=f![R*"U5 f=f)Nr�r�rEr�r�zpreadv2 not availablez0RWF_HIPRI is not supported by the current system)rorrrr�r�r�r�rFrr�r�r��NotImplementedError�skipTestrr�EINVAL�ENOTSUPrsrtr�)r%r�r�r��insts     r�test_preadv_flags�PosixTester.test_preadv_flags>s���W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R�.�/�)2�3��A�9�Q�<��C�3����U�\�\�"�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"�6AC'�"C'�'E�E�	E�
AE�E�E�E2c�D�[R"[R[R[R
-5n[
S5/S-nUR[5n[R"XS5 SSS5 URWRR[R5 UR[US5SS-5 [R"U5 g!,(df   Nz=f![R"U5 f=f�N���r�)rorrrr�r�r�r;rr�rF�	exceptionrr��bytesr��r%r�r��cms    r�test_preadv_overflow_32bits�'PosixTester.test_preadv_overflow_32bitsTs����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��U�#�$�u�,�C��"�"�7�+�r��	�	�"�1�%�,����R�\�\�/�/����>����U�3�q�6�]�E�5�L�9��H�H�R�L�,�+��

�H�H�R�L�s%�$D�*C6�AD�6
D�D�D�pwriteztest needs posix.pwrite()c���[R"[R[R[R
-5n[R"US5 [R"US[R5 [R"USS5 URS[R"US55 [R"U5 g![R"U5 f=f)Nr�r�xxr8stxxtr�)rorrrr�r�r�r�r�rr�rFr�r�r�s  r�test_pwrite�PosixTester.test_pwriteas���
�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
�A<C�C1�pwritevztest needs posix.pwritev()c�\�[R"[R[R[R
-5n[R"US5 [R"US[R5 [R"U/SQS5nURUS5 [R"US[R5 URS[R"US55 [R"U5 g![R"U5 f=f)Nr�r�stest1stt2st3r�r�sxxtest1tt2t3�d)rorrrr�r�r�r�r�r�rFrr�r��r%r��ns   r�test_pwritev�PosixTester.test_pwritevls���
�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
�B6D�D+zos.RWF_SYNCztest needs os.RWF_SYNCc�z�[R"[R[R[R
-5n[R"US5 [R"US[R5 [R"U/SQS[R5nURUS5 [R"US[R5 URS[R"US55 [R"U5 g![R"U5 f=f)Nr�rr�r�r�s
xxtest1tt2r�)rorrrr�r�r�r�r�r��RWF_SYNCrFrr�r�rs   r�test_pwritev_flags�PosixTester.test_pwritev_flagszs����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"�"D:c���[R"[R[R[R
-5nUR
[5n[R"USS-/S-S5 SSS5 URWRR[R5 [R"U5 g!,(df   NY=f![R"U5 f=f)N�xr�r�r)rorrrr�r�r;rr�rFr�rr�r��r%r�r�s   r�test_pwritev_overflow_32bits�(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�;<C�
C�C�C7�posix_fallocatez"test needs posix.posix_fallocate()c��[R"[R[R[R
-5n[R"USS5 [R""U5 g![a�nUR[R:Xa:[RRS5(a[R"S5eUR[R :Xa:[RRS5(a[R"S5eeSnAff=f![R""U5 f=f)Nrr�)�sunos�freebsd�openbsd�gnukfreebsdz test may fail on ZFS filesystems�netbsdz test may fail on FFS filesystems)rorrrr�r�rr
rrr�r��platform�
startswithrsrt�
EOPNOTSUPPr�)r%r�r�s   r�test_posix_fallocate� 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�4U��'�'�(J�K�K���	��
�H�H�R�L�s%�A6�6
D6�B1D1�1D6�6D9�9Ec��[R"SSS5 g![a)nUR[R:waeSnAgSnAff=f)N����rr�)rr
rr�EBADF�r%r�s  r�test_posix_fallocate_errno�&PosixTester.test_posix_fallocate_errno�sA��	��!�!�#�q�"�-���	��z�z�U�[�[�(��)��	�s��
A�A	�	A�
posix_fadvisez test needs posix.posix_fadvise()c��[R"[R[R5n[
R"USS[
R5 [R"U5 g![R"U5 f=f�Nr)	rorrrr�rr�POSIX_FADV_WILLNEEDr�r�s  r�test_posix_fadvise�PosixTester.test_posix_fadvise�sT���W�W�Y�%�%�r�{�{�
3��	�����A�q�%�*C�*C�D��H�H�R�L��B�H�H�R�L�s�'A3�3Bc��[R"SSS[R5 g![a)nUR[R
:waeSnAgSnAff=f)Nrr)rrr"rrrrs  r�test_posix_fadvise_errno�$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
��[R"5n[R"[R[R
5n[R"U5 [R"US5 UR[[RUS5 UR[[RX!S45 UR[[RUSU45 [R"U[U5[U545 [R"X!U45 UR[[RX!U4X4S9 UR[[RX!S4SS9 UR[[RUSUS4S9 [R"U[U5[U[U5-
S-545 [R"U[U5[U[U5-
S-54S9 [R"U5 g![R"U5 f=f)N�NN)�nsr�e��A)
�timerorrrr�r�utimer;r<�int�
ValueErrorr�)r%�nowr�s   r�test_utime_with_fd�PosixTester.test_utime_with_fd�s����i�i�k��
�W�W�Y�%�%�r�{�{�
3��	��K�K��O��K�K��D�!����i����b�,�G����i����b��+�F����i����b�4��+�F��K�K��S��X�s�3�x�0�1��K�K��#�J�'����j�%�+�+�r��:�3�*��U����j�%�+�+�r��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
�
GH,�,Iz.test needs follow_symlinks support in os.utimec��[R"5n[R"[RSSS9 UR[[R[RSSS9 UR[[R[RUS4SS9 UR[[R[RSU4SS9 [R"[R[U5[U54SS9 [R"[RX4SS9 [R"[RSS9 g)NF��follow_symlinksr)�r,rr-rrr;r<r.�r%r0s  r�test_utime_nofollow_symlinks�(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�j�%�H�
���I�$�$�e�<rM�writevztest needs posix.writev()c�P�[R"[R[R[R
-5n[R"US5nURUS5 [R"US[R5 URS[R"US55 [R"U/5nURUS5 [R"U5 g![a N#f=f![R"U5 f=f)Nr�r�r�
test1tt2t3)rorrrr�r�r:rFr�r�rr�rr�)r%r�r�sizes    r�test_writev�PosixTester.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�A6D
�=C=�D
�=
D
�D
�	D
�
D
�
D%c���[R"[R[R[R
-5nUR
[5n[R"USS-/S-5 SSS5 URWRR[R5 [R"U5 g!,(df   NY=f![R"U5 f=f)Nr	r�r�)rorrrr�r�r;rr:rFr�rr�r�r
s   r�test_writev_overflow_32bits�'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
�:<C�
C�C�C6�readvztest needs posix.readv()c	���[R"[R[R[R
-5n[R"US5 [R"US[R5 SVs/sHn[U5PM nnUR[R"X5S5 UR/SQUVs/sHn[U5PM sn5 [R"U/5nURUS5 [R"U5 gs snfs snf![a N-f=f![R"U5 f=f)Nr<rr�r�r�)rorrrr�r�r�r�r�r�rFrrCr�rr�)r%r�r�r�r=s     r�
test_readv�PosixTester.test_readv
s���
�W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��H�H�R��'��H�H�R��B�K�K�(�)2�3��A�9�Q�<��C�3����U�[�[��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�sO�AE
�D3�:E
�D8
�+E
�3D=�
E
�3
E
�=
E
�E
�	E
�
E
�
E%c�B�[R"[R[R[R
-5n[
S5/S-nUR[5n[R"X5 SSS5 URWRR[R5 UR[US5SS-5 [R"U5 g!,(df   Nz=f![R"U5 f=fr�)rorrrr�r�r�r;rrCrFr�rr�r�r�r�s    r�test_readv_overflow_32bits�&PosixTester.test_readv_overflow_32bits s����W�W�Y�%�%�r�y�y�2�:�:�'=�
>��	��U�#�$�u�,�C��"�"�7�+�r�����!�,����R�\�\�/�/����>����U�3�q�6�]�E�5�L�9��H�H�R�L�,�+��

�H�H�R�L�s%�$D�*C5�AD�5
D�?D�D�dupztest needs posix.dup()zWASI does not have dup()c�"�[[R5n[R"UR55nUR
U[5 [R"U5 UR5 g!UR5 f=fr{)
rrrrrJr��assertIsInstancer.ror�)r%r�r�s   r�test_dup�PosixTester.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���UR[S5 [R"S5 SSS5 UR[S5 [R"S5 SSS5 [R"S5nUR[
U5S5 UR[R"[RS5U5 g!,(df   N�=f!,(df   N�=f)N�unrecognized configuration name�
CS_garbage�/configuration names must be strings or integers�G�z��?�CS_PATHr)	�assertRaisesRegexr/rrOr<�
assertGreaterrGrF�
confstr_names)r%r�s  r�test_confstr�PosixTester.test_confstr9s����
#�
#��9�
�
�M�M�,�'�
�
�
#�
#��H�
�
�M�M�$��
�
�}�}�Y�'�����3�t�9�a�(�������u�':�':�9�'E�F��M�
�
��

�
�s�C�C%�
C"�%
C3�sysconfztest needs posix.sysconf()c���UR[S5 [R"S5 SSS5 UR[S5 [R"S5 SSS5 [R"S5nURUS5 UR
[R"[RS5U5 g!,(df   N�=f!,(df   N=f)NrQ�
SC_garbagerSrT�
SC_ARG_MAXr)rVr/rr[r<rWrF�
sysconf_names)r%�arg_maxs  r�test_sysconf�PosixTester.test_sysconfJs����
#�
#��9�
�
�M�M�,�'�
�
�
#�
#��H�
�
�M�M�$��
�
�-�-��-�����7�A�&�����M�M�%�-�-�l�;�<�g�	G�
�
��

�
�s�C�C�
C�
C*�dup2ztest needs posix.dup2()zWASI does not have dup2()c�Z�[[R5n[[R5n[R"UR5UR55 UR
5 UR
5 g!UR
5 UR
5 f=fr{)rrrrrcr�r�)r%�fp1�fp2s   r�	test_dup2�PosixTester.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�3B�"B*�	O_CLOEXECzneeds os.O_CLOEXECr���c��[R"[R[R[R
-5nUR
[RU5 UR[R"U55 gr{)
rorrrr�rirr��assertFalse�get_inheritabler�s  r�test_oscloexec�PosixTester.test_oscloexechsR���W�W�Y�%�%�r�{�{�2�<�<�'?�
@��������"�%�����+�+�B�/�0rM�O_EXLOCKztest needs posix.O_EXLOCKc�l�[R"[R[R[R
-[R-5nUR[[R[R[R[R
-[R-5 [R"U5 [[S5(a�[R"[R[R[R-[R-5nUR[[R[R[R[R
-[R-5 [R"U5 gg)N�O_SHLOCK)rorrrr�rqr�r;r�
O_NONBLOCKr�r
rrsr�s  r�
test_osexlock�PosixTester.test_osexlockps����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�&rMrsztest needs posix.O_SHLOCKc�z�[R"[R[R[R
-[R-5n[R"[R[R[R
-[R-5n[R"U5 [R"U5 [[S5(a�[R"[R[R[R
-[R-5nUR[[R[R[R[R-[R-5 [R"U5 gg)Nrq)rorrrr�rsr�r�r
rr;rr�rqrt)r%�fd1�fd2r�s    r�
test_osshlock�PosixTester.test_osshlock�s����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�&rM�fstatztest needs posix.fstat()c	���[[R5nUR[R
"UR
555 UR[R"UR
555 UR[S[R[UR
555 UR5 g!UR5 f=f�Nz4should be string, bytes, os.PathLike or integer, not)rrrr|rr|r��statrVr<�floatr�r�s  r�
test_fstat�PosixTester.test_fstat�s����)�"�"�
#��	��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�C!rztest needs posix.stat()z/test needs follow_symlinks support in os.stat()c��UR[S5 [R"SSS9 SSS5 UR[S5 [R"SSS9 SSS5 g!,(df   NC=f!,(df   g=f)Nz*cannot use fd and follow_symlinks togetherrFr4r8)rVr/rrr$s r�!test_stat_fd_zero_follow_symlinks�-PosixTester.test_stat_fd_zero_follow_symlinks�sm��
�
#�
#�J�<�>��J�J�q�%�0�>��
#�
#�J�<�>��J�J�q�%�0�>�>�>�>��>�>�s�A*�A;�*
A8�;
B	c
��UR[R"[R55 UR[R"[
R"[R555 UR[S[R[[
R"[R555 UR[S[RS5 UR[S[R[[R55 UR[S[R[[
R"[R555 gr~)r|rrrrro�fsencoderVr<r�r�r$s r�	test_stat�PosixTester.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�-=�-=�!>�?�	ArM�mkfifozdon't have mkfifo()c�`�[RS:Xa/[RR	S[
R5nO[
Rn[
R"U5 UR[
RU5 [R"U[R[R-5 UR![R""[R"U5R$55 g![anURSU-5 SnANgSnAff=f)N�vxworksz/fifos/�posix.mkfifo(): %s)r�rror��joinrrrrrr�r�S_IRUSR�S_IWUSR�PermissionErrorr�r|�S_ISFIFO�st_mode)r%�	fifo_pathrs   r�test_mkfifo�PosixTester.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�6D�
D-�D(�(D-�mknod�S_IFIFOzdon't have mknod()/S_IFIFOc��[R"[R5 [R[R
-[R-n[R"[RUS5 UR[R"[R"[R5R55 [R"[R5 [R"[RUSSS9 g![aSnURUR[R[R [R"45 SnAN�SnAff=f![aSnURUR[R[R [R"45 SnAgSnAff=f)Nr)r��mode�device�dir_fd)rrrrr�r�r�rr�r|r�r�r�assertInrrvr��EACCES)r%r�rs   r�
test_mknod�PosixTester.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�4%E:�
E7�$A	E2�2E7�:
G�A	G�G�makedevztest needs posix.makedev()c��[R"[R5nURnURU[5 URUS5 [R"U5nURU[5 URUS5 UR[R"U5U5 UR[[R[U55 UR[[R5 SH.nUR[[4[RU5 M0 [R"U5nURU[5 URUS5 UR[R"U5U5 UR[[R[U55 UR[[R5 SH.nUR[[4[RU5 M0 UR[R "X55U5 UR[[R [U5U5 UR[[R U[U55 UR[[R U5 UR[[R 5 SHYnUR[[4[R XE5 UR[[4[R X45 M[ ["R$S:Xa�[&R("5(duSnUR[R"U5U5 UR[R"U5U5 UR[R "Xf5U5 ggg)Nr)�������)r�r
r�r��linuxrV)rrrr�st_devrLr.rH�majorrFr;r<r�r/�
OverflowError�minorr�r�rr�linked_to_musl)r%�st�devr��xr��NODEVs       r�test_makedev�PosixTester.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�4�c�:����)�U�]�]�E�%�L�%�H����)�U�]�]�E�5��<�H����)�U�]�]�E�:����)�U�]�]�3�+�A����z�=�9�5�=�=�!�S����z�=�9�5�=�=�%�S�,��<�<�7�"�7�+A�+A�+C�+C��E����U�[�[��/��7����U�[�[��/��7����U�]�]�5�8�%�@�	,D�"rMc
�,^^^�UUU4Sjn[R"5n[R"5nU"TXV5 U"XV5 U"TSU5 U"XV5 U"TUS5 U"XV5 [RS:XaUS;nOUS:Hn[
R(aGOU(aM[RS:waSOSnU"TX�5 U"X�5 U"TSS5 U"X�5 U"TXV5 U"XV5 O�[R"5S;a[R"S	5eTR[UTSS5 U"XV5 TR[UTSS5 U"XV5 [[S
5(a:S[R"5;a!TR[UTSS5 U"XV5 [[4HPn	TR[ UTU	"U5U5 U"XV5 TR[ UTXY"U55 U"XV5 MR g)z/Common code for chown, fchown and lchown tests.c�>�TbAT"T5nTRURU5 TRURU5 ggr{)rF�st_uid�st_gid)�uid�gidr�first_paramr%�	stat_funcs   ���r�
check_stat�6PosixTester._test_all_chown_common.<locals>.check_stats@����$� ��-��� � ����c�2�� � ����c�2�%rMrVr�)rr8rlr�)zHP-UX�SunOSz1Skipping because of non-standard chown() behaviorr2N)ror6r1r�rr�
is_emscripten�systemrsrtr;rr
r2�strr�r<)
r%�
chown_funcr�r�r�r�r��is_root�	big_value�ts
` ``      r�_test_all_chown_common�"PosixTester._test_all_chown_common
s����	3�
�i�i�k���i�i�k���;��)��3���;��C�(��3���;��R�(��3���<�<�9�$��f�}�G��a�x�G�� � �
�
�"#&�,�,�)�";���I��{�I�9��y�,��{�B��+��y�,��{�C�-��s� �
�_�_�
�"4�
4��#�#�%/�0�
0�
���g�z�;��1�E��s� ����g�z�;��2�F��s� ��r�;�'�'��B�L�L�N�*��%�%�g�z�;��A�N��s�(��e��A����i��[�!�C�&�#�N��s� ����i��[�#�q��v�N��s� �	rM�chownzrequires os.chown()�getgid() is a stubc�x�[R"[R5 UR	[
[R[RSS5 [R"[R5 UR[R[R[R5 grU)rorrrr;rrr��create_empty_filer�rr$s r�
test_chown�PosixTester.test_chownSsl��	�	�	�)�"�"�#����'�5�;�;�	�0@�0@�"�b�I�	�#�#�I�$4�$4�5��#�#�E�K�K��1A�1A�5�:�:�NrM�fchownztest needs os.fchown()c	�L�[R"[R5 [	[RS5nUR5nUR
[RU[[SS55 UR5 g!UR5 f=f)Nr�r|)rorrrrr�r�rr�r9r�)r%�	test_filer�s   r�test_fchown�PosixTester.test_fchown^sw��	�	�	�)�"�"�#���)�)�3�/�	�	��!�!�#�B��'�'����b�(/��w��(E�
G�
�O�O���I�O�O��s
�AB�B#�lchownztest needs os.lchown()c	��[R"[R5 [R"[
[R5 UR
[R[R[[SS55 g)N�lstat)
rorrr�symlink�_DUMMY_SYMLINKr�rr�r9r$s r�test_lchown�PosixTester.test_lchownmsS��	�	�	�)�"�"�#�
�
�
�>�9�#3�#3�4��#�#�E�L�L�)�2B�2B�$+�E�7�D�$A�	CrMr�ztest needs posix.chdir()c��[R"[R5 UR	[
[R[R5 gr{)rr�ror}r;rrrr$s r�
test_chdir�PosixTester.test_chdirvs.��
���B�I�I�����'�5�;�;�	�0@�0@�ArMc��UR[R[R"[
R55 gr{)r�rrr�listdirror}r$s r�test_listdir�PosixTester.test_listdir{s#���
�
�i�&�&��
�
�b�i�i�(@�ArMc�j�UR[R[R"55 gr{)r�rrrr�r$s r�test_listdir_default� PosixTester.test_listdir_default~s��	
�
�
�i�&�&��
�
��8rMc��UR[R"[R5[
R"S55 g�N�.)r�ror�rrrr�r$s r�test_listdir_bytes�PosixTester.test_listdir_bytes�s*��	
�
�
�b�k�k�)�"2�"2�3�U�]�]�4�5H�IrMc���[[4H=nUR[5 [R
"U"S55 SSS5 M? g!,(df   MQ=fr�)r��
memoryviewr;r<rr�)r%�clss  r�test_listdir_bytes_like�#PosixTester.test_listdir_bytes_like�s>���j�(�C��"�"�9�-��
�
�c�$�i�(�.�-�)�-�-�s�A�
A	z)test needs fd support for posix.listdir()c���[R"[R"5[R5nUR	[R
U5 UR
[[R"S55[[R"U555 UR
[[R"S55[[R"U555 g)N�.)	rrr*r�rr�rF�sortedr��r%�fs  r�test_listdir_fd�PosixTester.test_listdir_fd�s���
�J�J�u�|�|�~�u�~�~�6��������Q�'�����5�=�=��%�&��5�=�=��#�$�	�
	
����5�=�=��%�&��5�=�=��#�$�	rM�accessztest needs posix.access()c��UR[R"[R[
R55 gr{)r|rr�rrro�R_OKr$s r�test_access�PosixTester.test_access�s#��������Y�%5�%5�r�w�w�?�@rM�umaskztest needs posix.umask()c��[R"S5nURU[5 [R"U5 gr!)rr�rLr.)r%�old_masks  r�
test_umask�PosixTester.test_umask�s+���;�;�q�>�����h��,�
���H�rM�strerrorztest needs posix.strerror()c�N�UR[R"S55 gr!)r|rr�r$s r�
test_strerror�PosixTester.test_strerror�s��	
������q�)�*rM�pipeztest needs posix.pipe()c��[R"5up[R"U5 [R"U5 gr{)rrror�)r%�reader�writers   r�	test_pipe�PosixTester.test_pipe�s'��������
�����
����rM�pipe2ztest needs os.pipe2()�c��UR[[RS5 UR[[RSS5 [R"S5up[R"U5 [R"U5 [R"[R
[R-5upUR[RU5 UR[RU5 UR[R"U55 UR[R"U55 UR[R"U55 UR[R"U55 UR[[RUS5 [R"US[R-5 g![a gf=f)N�DEADBEEFrr8r	)r;r<rorr�rirtrrmrn�get_blockingrr�r�r�
PIPE_MAX_SIZE)r%�rr�s   r�
test_pipe2�PosixTester.test_pipe2�sD��	
���)�R�X�X�z�:����)�R�X�X�q�!�4��x�x��{���
�����
������x�x����R�]�]�2�3���������!�$�������!�$�����+�+�A�.�/�����+�+�A�.�/��������+�,��������+�,����'�2�7�7�A�q�1�	��H�H�Q��w�4�4�4�5���	��	�s�(G+�+
G8�7G8c���SSKnUR[[RUR
S-5 UR[[RURS-5 g�Nrr8)�	_testcapir;r�ror�INT_MAX�UINT_MAX)r%rs  r�test_pipe2_c_limits�PosixTester.test_pipe2_c_limits�sI��
	����-����9�3D�3D�q�3H�I����-����9�3E�3E��3I�JrMr-ztest needs posix.utime()c�v�[R"5n[R"[RS5 UR[[R[RS5 UR[[R[RUS45 UR[[R[RSU45 [R"[R[U5[U545 [R"[RX45 g)Nr)r6r7s  r�
test_utime�PosixTester.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�j�1rMc�z�[U[5(+n[R"U5RnU[R
[R-[R-)-nU"X&40UD6 UR[R"U5RU5 [R"U5(a[USUS9 SSS5 U[R
[R-[R--nU"X&40UD6 UR[R"U5RU5 [R"U5(a[USUS9 SSS5 U"X%5 g!,(df   N�=f![a N�f=f!,(df   N8=f!U"X%5 f=f)N�wb+)�closefd)�
isinstancer.rorr��S_IWOTH�S_IWGRPr�rF�S_ISREGrr�)r%�
chmod_func�target�kwargsrr��new_modes       r�check_chmod�PosixTester.check_chmod�sG�� ���-�-���w�w�v��&�&��	%�����t�|�|� ;�d�l�l� J�K�K�H��v�2�6�2����R�W�W�V�_�4�4�h�?��|�|�D�!�!���f�e�W�=��>��t�|�|�d�l�l�:�T�\�\�I�J�H��v�2�6�2����R�W�W�V�_�4�4�h�?��|�|�D�!�!��&�%��9��:�
�v�$�>�=��&�����:�9��
�v�$�sm�B
F0�F�
E>�F�BF0�+F�-F0�>
F�F�F0�F�
F�F0�F�F0�
F-�)F0�0
F:c�`�UR[R[R5 gr{)r%r�chmodrrr$s r�test_chmod_file�PosixTester.test_chmod_file�s��������i�&6�&6�7rMc��[RS-n[R"U5 UR	[R
U5 U$)N�d)rrr�mkdirr�rmdir�r%r"s  r�tempdir�PosixTester.tempdir�s5���!�!�C�'��
���F��������V�,��
rMc�d�UR5nUR[RU5 gr{)r0r%rr(r/s  r�test_chmod_dir�PosixTester.test_chmod_dirs!�������������f�-rMc�$�[[RS5nUR[R
UR
55 UR[RUR
55 SSS5 g!,(df   g=f)Nr)rrrr%r�fchmodr�r(r�s  r�test_fchmod_file�PosixTester.test_fchmod_filesT��
�)�"�"�E�
*�a����U�\�\�1�8�8�:�6����U�[�[�!�(�(�*�5�+�
*�
*�s�AB�
B�lchmodztest needs os.lchmod()c��UR[R[R5 UR[R
[RSS9 g�NFr4)r%rr9rrr(r$s r�test_lchmod_file�PosixTester.test_lchmod_files;��������y�'7�'7�8�������i�&6�&6���NrMc��UR5nUR[RU5 UR[RUSS9 gr;)r0r%rr9r(r/s  r�test_lchmod_dir�PosixTester.test_lchmod_dirs:�������������v�.�������f�e��DrMc�b�[R"U5Rn[R"U5RnU[R[R
-[R-)-nU"X740UD6 UR[R"U5RU5 UR[R"U5RU5 U[R[R
-[R--nU"X740UD6 UR[R"U5RU5 UR[R"U5RU5 [R"X%5 g![R"X%5 f=fr{)
rorr�r�rrr�rFrr(�r%r!r"�linkr#�target_mode�	link_moder$s        r�check_chmod_link�PosixTester.check_chmod_links���g�g�f�o�-�-���H�H�T�N�*�*�	�
	-�"�t�|�|�d�l�l�'B�T�\�\�'Q�%R�R�H��t�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�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��[R"U5Rn[R"U5RnU[R[R
-[R-)-nU"X740UD6 UR[R"U5RU5 UR[R"U5RU5 U[R[R
-[R--nU"X740UD6 UR[R"U5RU5 UR[R"U5RU5 gr{)rorr�r�rrr�rFrBs        r�check_lchmod_link�PosixTester.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�+�>�������$��/�/��:rMc��[Rn[RS-n[R"X5 UR	[
RU5 [RS:Xa!UR[
RX5 O UR[
RX5 UR[
RXSS9 g)N�-link�ntTr4)rrror�rrrr>rIr(rF�r%r"rCs   r�test_chmod_file_symlink�#PosixTester.test_chmod_file_symlink4s����!�!�����'�)��
�
�
�6� �������d�+�
�7�7�d�?��"�"�5�;�;��=��!�!�%�+�+�v�<����e�k�k�6���NrMc��UR5n[RS-n[R"XSS9 UR[RU5 [RS:Xa!UR[RX5 O UR[RX5 UR[RXSS9 g)NrLT)�target_is_directoryrMr4)r0rrror�rrrr>rIr(rFrNs   r�test_chmod_dir_symlink�"PosixTester.test_chmod_dir_symlink@s�����������'�)��
�
�
�6�T�:�������d�+�
�7�7�d�?��"�"�5�;�;��=��!�!�%�+�+�v�<����e�k�k�6���NrMc�4�[Rn[RS-n[R"X5 UR	[
RU5 UR[
RXSS9 UR[
RX5 g�NrLFr4)
rrror�rrrrIr(r9rNs   r�test_lchmod_file_symlink�$PosixTester.test_lchmod_file_symlinkLsj���!�!�����'�)��
�
�
�6� �������d�+����u�{�{�F�%��P����u�|�|�V�:rMc�4�UR5n[RS-n[R"X5 UR[RU5 UR[RXSS9 UR[RX5 grV)r0rrror�rrrrIr(r9rNs   r�test_lchmod_dir_symlink�#PosixTester.test_lchmod_dir_symlinkVsj����������'�)��
�
�
�6� �������d�+����u�{�{�F�%��P����u�|�|�V�:rMc��[R"U5nUR[US55 UR[R
-nU"X%40UD6 [R"U5nURUR[R
-UR5 [US5n	[R"X$R5 g![a<nUR[R:waeSnURU5 SnAN�SnAff=f![a4n
URU
R[R5 Sn
A
N�Sn
A
ff=f![R"X$R5 f=f)N�st_flags�2chflag UF_IMMUTABLE not supported by underlying fsr�)rorr|r
r]�UF_IMMUTABLErrrr�rFrrvr�chflags)r%�chflags_func�target_filer#r��flags�errr��new_str�rs           r�_test_chflags_regular_file�&PosixTester._test_chflags_regular_file`s��
�W�W�[�
!�������J�/�0����d�/�/�/��	���6�v�6�	4��W�W�[�)�F����R�[�[�4�+<�+<�<�f�o�o�N�
7��+�t�,��
�M�M�+�{�{�3���	��y�y�E�,�,�,��F�C��M�M�#����		���
7�� � ����%�+�+�6�6��
7��
�M�M�+�{�{�3�sI�	C�A
E�(D�
D�2D�D�
E�(*E�E�E�E�"Fr`ztest needs os.chflags()c�`�UR[R[R5 gr{)rfrr`rrr$s r�test_chflags�PosixTester.test_chflagsxs���'�'��
�
�y�7G�7G�HrM�lchflagsztest needs os.lchflags()c��UR[R[R5 UR[R
[RSS9 gr;)rfrrkrrr`r$s r�test_lchflags_regular_file�&PosixTester.test_lchflags_regular_file|s@���'�'����	�8H�8H�I��'�'��
�
�y�7G�7G�8=�	(�	?rMc��[R"[R5nUR	[US55 UR
[R[5 [R"[R[5 [R"[5nSn[RU4H�nUR[R-nU"[U5 [R"[R5n[R"[5n	UR'URUR5 UR'UR[R-U	R5 U"[UR5 M� g![a<nUR [ R":waeSnUR%U5 SnAN�SnAff=f!U"[UR5 f=f)Nr]c�,�[R"XSS9$r;)rr`)r�rcs  r�chflags_nofollow�;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollow�s���=�=��e�D�DrMr^)rorrrr|r
rrr�r�r�rrkr]r_rrrr�rF)
r%�	testfn_st�dummy_symlink_strq�fnrcrdr��
new_testfn_st�new_dummy_symlink_sts
          r�test_lchflags_symlink�!PosixTester.test_lchflags_symlink�ss���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(�,2G#�#G(�+Hc��[RS:Xa[nO[n[R
R
5H;up#UR[U5U5 UR[U5U5 M= g)NrM)	ror>r�r�rr��itemsrF�type)r%�	item_type�k�vs    r�test_environ�PosixTester.test_environ�sX��
�7�7�d�?��I��I��M�M�'�'�)�D�A����T�!�W�i�0����T�!�W�i�0�*rMc�z�UR[5 [R"SS5 SSS5 UR[5 [R"SS5 SSS5 UR[5 [R"SS5 SSS5 [RS:Xa�UR[5 [R"SS	5 SSS5 UR[5 [R"S
S5 SSS5 UR[5 [R"SS
5 SSS5 gg!,(df   GN.=f!,(df   GN=f!,(df   N�=f!,(df   N�=f!,(df   N�=f!,(df   g=f)NzFRUITVEGETABLE�cabbage�FRUITzorangeVEGETABLE=cabbagezFRUIT=ORANGE�lemonrsFRUITVEGETABLEscabbagesFRUITsorangeVEGETABLE=cabbagesFRUIT=ORANGEslemon)r;r/ro�putenvr>r$s r�test_putenv�PosixTester.test_putenv�s��
�
�
�z�
*��I�I�(�)�4�+�
�
�
�z�
*��I�I�g�:�;�+�
�
�
�z�
*��I�I�n�g�.�+�
�7�7�g���"�"�:�.��	�	�-�z�:�/��"�"�:�.��	�	�(�$@�A�/��"�"�:�.��	�	�/�8�4�/�.��
+�
*��
*�
*��
*�
*��/�.��.�.��.�.�sG�E�E'�E9�	F
�>F�3F,�
E$�'
E6�9
F�

F�
F)�,
F:r*ztest needs posix.getcwd()c�^�Sn[R"5n[RR[R
5S-n[R"U5 [R"U5 [R"U5 [R"U5 g! [R"U5 [R"U5 g=f![R"U5 [R"U5 f=f)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwd)	ror*r��abspathrrr-r��rmtree)r%�dirnamer}�	base_path�_create_and_do_getcwds    @r�test_getcwd_long_pathnames�&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�.D�getgrouplistztest needs posix.getgrouplist()r6ztest needs os.getuid()c��[R"[R"55Sn[R"[R"55SnUR	U[
R"X55 g)NrrE)rprjror6r�rr�)r%�user�groups   r�test_getgrouplist�PosixTester.test_getgrouplist�sO���|�|�B�I�I�K�(��+�����R�Y�Y�[�)�!�,���
�
�e�U�/�/��<�=rMr/ztest needs os.getegid()�popenztest needs os.popen()c��[R"S5nUR5R5nUR	5nSSS5 [SWR
555nWcU(d[R"S5e[RS:Xa\SSKnURS5=(d Sn[SUR
S	5SS
55S:a[R"S5eUR[ R""55nUR%U(+=(d U[ R&"51:H5 g!,(df   GN=f![a [5nGNf=f)
Nzid -G 2>/dev/nullc3�8# �UHn[U5v� M g7fr{�r.)�.0�gs  r�	<genexpr>�-PosixTester.test_getgroups.<locals>.<genexpr>�s���<�^��S��V�V�^���zneed working 'id -G'�darwinr�MACOSX_DEPLOYMENT_TARGETz10.3c3�8# �UHn[U5v� M g7fr{r�)r�rs  rr�r��s���8�%7��S��V�V�%7�r�r�r�)r�rjz$getgroups(2) is broken prior to 10.6)ror�r��stripr��setr�r/rsrtr�r�	sysconfig�get_config_var�tuple�symmetric_differencerr2r|r/)r%�idg�groups�ret�
idg_groupsr��dt�symdiffs        r�test_getgroups�PosixTester.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�/E� E,�
E)�,F�F�SIGCHLDz2CLD_XXXX be placed in si_code for a SIGCHLD signal�
waitid_resultztest needs os.waitid_resultc���[R [R [R [R [R
 [R gr{)ro�
CLD_EXITED�
CLD_KILLED�
CLD_DUMPED�CLD_TRAPPED�CLD_STOPPED�
CLD_CONTINUEDr$s r�test_cld_xxxx_constants�#PosixTester.test_cld_xxxx_constantss0��	�
�
�
�
�
�
�
�
�
���
���
��rM�sched_yieldzdon't have scheduling support�sched_setaffinityz!don't have sched affinity supportc�.�[R"5 gr{)rr�r$s r�test_sched_yield�PosixTester.test_sched_yields��	���rM�sched_get_priority_maxz!requires sched_get_priority_max()c��[Rn[R"U5n[R"U5nUR	U[
5 UR	U[
5 UR
X25 [(dKUR[[RS5 UR[[RS5 gg)Ni��)
r�SCHED_RR�sched_get_priority_minr�rLr.rHrr;r)r%�pol�lo�his    r�test_sched_priority�PosixTester.test_sched_prioritys���
�n�n��
�
)�
)�#�
.��
�
)�
)�#�
.�����b�#�&����b�#�&�����'��x����g�u�'C�'C�S�I����g�u�'C�'C�S�I�rMc���[RR5VVs/sHupURS5(dMUPM! nnn[R"S5nURXC5 [R"[R"55nURXS5 UR[[RS5 UR[[RS5 [R"S5nURUR[5 [R RS5(dU[R""SXF5 [R$"SU5 UR[[R$SU5 UR[[R"SXF5 UR[&[R"SUS5 UR[&[R$SS5 [R("S5nUR[&[R$SU5 Sn[R("U5nUR[*[R$SU5 [R("U*S9nUR[*[R$SU5 gs snnf![a GN5f=f![a GNsf=f)N�SCHED_rrV�rr�+l�����sched_priority)r�__dict__r{rrr�ror5r�r;r�sched_getparamrLr�r.r�r�sched_setscheduler�sched_setparamr<�sched_paramr�)r%r>�sched�possible_schedulers�mine�parent�param�larges        r�$test_get_and_set_scheduler_and_param�0PosixTester.test_get_and_set_scheduler_and_param)s3��8=���8L�8L�8N�=�8N���"&�/�/�(�";� %�8N��=��'�'��*���
�
�d�0�	7��-�-�b�j�j�l�;�F�
�M�M�&�6����'�5�#;�#;�R�@����'�5�#7�#7��<��$�$�Q�'�����e�2�2�C�8�
�|�|�&�&�'<�=�=�
��(�(��D�8��$�$�Q��.�
���g�u�';�';�R��G����'�5�#;�#;�R��M����)�U�%=�%=�q�$��M����)�U�%9�%9�1�b�A��!�!�$�'�����)�U�%9�%9�1�e�D����!�!�%�(�����-��)=�)=�q�%�H��!�!�%��8�����-��)=�)=�q�%�H��K=���	�
�	��$#�
��
�s/�K�K�3)K�.K&�
K#�"K#�&
K4�3K4c��[R"S5n[[RS-5H>n[R
"[R"X55nURX15 M@ [R"U5nURX15 URX15 [R"U5nURX15 URX15 [R"U5nURX15 URX15 [R"USS9nURX15 URURS5 g)Nr8rr�)rr��range�pickle�HIGHEST_PROTOCOL�loads�dumpsrF�copy�assertIsNot�deepcopy�replace�assertNotEqualr�)r%r��proto�newparams    r�test_sched_param�PosixTester.test_sched_paramRs���!�!�!�$���6�2�2�1�4�5�E��|�|�F�L�L��$>�?�H����X�-�6��9�9�U�#������)�����)��=�=��'������)�����)��<�<��&������)�����)��<�<��a�8�����H�,�����0�0�!�4rMc��[S5n[R"U5nUR5 AA[R
"5 g)N�inf)r�rr��
__reduce__r�
gc_collect)r%r�r�s   r�test_bug_140634�PosixTester.test_bug_140634es8���u����!�!�.�1��
�����E����rM�sched_rr_get_intervalzno functionc�4�[R"S5nUR
W[5 URUS5 URUS5 g![a:nUR[R:waeURS5 SnANzSnAff=f)Nrz only works on SCHED_RR processesgg�?)
rr�rrr�r�rLr�rH�
assertLess)r%�intervalrs   r�test_sched_rr_get_interval�&PosixTester.test_sched_rr_get_intervalms~��	>��2�2�1�5�H�	
���h��.�����"�-�����"�%���	>��w�w�%�,�,�&���M�M�<�=�=��	>�s�A�
B�0B�Bc��[R"S5nURU[5 UR	[U5S5 [RRS5(d%UR[[RS5 UH=nURU[5 UR	US5 URUS5 M? g)Nrr8rrVr
)
r�sched_getaffinityrLr�rHrGr�rrr;rr.r�)r%�mask�cpus   r�test_sched_getaffinity�"PosixTester.test_sched_getaffinity|s����&�&�q�)�����d�C�(�����D�	�1�-��|�|�&�&�y�1�1����g�u�'>�'>��C��C��!�!�#�s�+��#�#�C��+��O�O�C��)�rMc	�,�[R"S5nUR[RS[	U55 [U5S:�aUR
5 [R"SU5 UR[R"S5U5 [R"S/5 UR[[RSS/5 UR[[RS[[S55 UR[[RSSS-/5 [RR!S5(d'UR[[RSU5 gg![a N�f=f)Nrr8i�����0X�rrV)rr�rr�r�rG�poprFrr;r/�mapr.r�r�rr)r%r�s  r�test_sched_setaffinity�"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�1����g�u�'>�'>��D�I�2���	�
�	�s�F�
F�FzNo dynamic linking on WASIrzPOSIX-only testc��[R [R [R [R gr{)r�	RTLD_LAZY�RTLD_NOW�RTLD_GLOBAL�
RTLD_LOCALr$s r�test_rtld_constants�PosixTester.test_rtld_constants�s$��	���
���
���
��rM�	SEEK_HOLEz(test needs an OS that reports file holesc
��[[RS5nURS5 UR	5 UR5nUR
5n[U5HmnURU[R"X4[R55 URU[R"X4[R55 Mo UR[[RX2[R5 UR[[RX2[R5 SSS5 g![a [ R""S5ef=f!,(df   g=f)Nzr+bshellozOSError raised!)rrrr�r��tellr�r�rFror��	SEEK_DATA�assertLessEqualrr;rrsrt)r%r�r=�fnor�s     r�
test_fs_holes�PosixTester.test_fs_holes�s���)�"�"�E�
*�b��H�H�X���H�H�J��7�7�9�D��)�)�+�C�
;��t��A��$�$�Q��������(F�G��(�(��r�x�x�����/M�N�%��!�!�'�2�8�8�S����M��!�!�'�2�8�8�S����M�+�
*���
;�
�'�'�(9�:�:�
;��+�
*�s�AE0�C$E�!E-�-E0�0
E>c	�6�SHPn[[US5nUcMS[R4H
nU"SU5 M URSU-5 MR g![a6nURSR
U5[U55 SnA M�SnAff=f)zV
Test functions that call path_error2(), providing two filenames in their exceptions.
)�renamer�rCN�noodly2�doesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r9rorrrr��formatr�ru)r%r>�function�dstrs     r�test_path_error2�PosixTester.test_path_error2�s���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�Z�[RnUS-nUR[RU5 [R"U5 SnUR	[
5 [R"U[R[R-5nSSS5 Ub[R"U5 UR[RRU55 UR	[
[RU5 UR[RRU55 [US5R5 UR	[
[RU5 g!,(df   N�=f!Ub[R"U5 ff=f)N�r)rrrrr;r/rorr�r�r�rmr��existsr-r�r%ru�fn_with_NULr�s    r�test_path_with_null_character�)PosixTester.test_path_with_null_character�s��
�
�
���4�i�����	�(�(�"�-������
��	��"�"�:�.��W�W�[�"�+�+��
�
�*B�C��/��~���������������+�,����*�b�h�h��<����������+�,��R���������*�b�g�g�{�;�/�.���~�������s$�F�$7E=�F�=
F�F�F*c��[R"[R5nUS-nUR	[R
U5 [R
"U5 SnUR
[5 [R"U[R[R-5nSSS5 Ub[R"U5 UR[RRU55 UR
[[RU5 UR[RRU55 [US5R5 UR
[[R U5 g!,(df   N�=f!Ub[R"U5 ff=f)Nr�r)ror�rrrrr;r/rr�r�r�rmr�rr-rr s    r�test_path_with_null_byte�$PosixTester.test_path_with_null_byte�s"��
�[�[��)�)�
*���5�j�����	�(�(�"�-������
��	��"�"�:�.��W�W�[�"�+�+��
�
�*B�C��/��~���������������+�,����*�b�h�h��<����������+�,��R���������*�b�g�g�{�;�/�.���~�������s$�#F"�87F�/F"�
F�F"�"F>�
pidfd_openzpidfd_open unavailablec�`�UR[5n[R"S5 SSS5 WRR
[
R:XaURS5 [UR[5(aURSUR<35 URURR
[
R5 [R"[R"[R"5S55 g!,(df   N�=f)NrVz"system does not support pidfd_openzpidfd_open syscall blocked: r)r;rror'r�rrr�rr�rFr�r�r3)r%r�s  r�test_pidfd_open�PosixTester.test_pidfd_open�s���
�
�
�w�
'�2��M�M�"��(�
�<�<������-��M�M�>�?��b�l�l�O�4�4��M�M�8����8H�I�J�������+�+�U�\�\�:�
������r�y�y�{�A�.�/�(�
'�s�D�
D-r�)��__name__�
__module__�__qualname__�__firstlineno__r&r@rs�
skipUnlessr
rrKrQrYr^rcrgrprwr~r�r�r�r9ro�supports_fdr�
requires_forkr�r�r�r�r�r�r��requires_32br�r�rrrrrr#r&r-r1�supports_follow_symlinksr8r>rArErH�skipIf�is_wasirMrYrarg�requires_linux_version�requires_subprocessrorurzr�rr�r�r�r�r�r�r�r�r�skip_unless_working_chmodr�r�r�r�r�r�r�r�r�r�r�r�rr�cpython_onlyrrr%r)r0r3r7r<r?rFrI�skip_unless_symlinkrOrSrWrZrfrirmrxr�r�r�r�r��signalr��requires_sched_h�requires_sched_affinityr�r��requires_schedr�r�r�r�r�rr>r
rrr"r%r)�__static_attributes__r�rMrrr8s|��0�@� ������4�7�9�,�9�,�������4�7�9�,�9�,�������4�7�9�7�9�7�������4�7�9�G�9�G�������4�7�9�7�9�7�������4�7�9�H�9�H�������5�5�7�
�����j�1�3N�O�I�P�7�I�.�����	�2�5�7�2�7�2������
�3�6�8��8��������4�7�9��9�������
�3�5R�S�,�T�,������X�t�4����F�Hy�z�����
��{�
�������1�3N�O�����.��P�.�
����=%��=%�~������0�2L�M�	�N�	�������0�2L�M�	�N�	�������1�3N�O��P��������1�3N�O�
������4�6R�S��T�P��(������1�3N�O��	��P�	�������1�3N�O��P�������	�2�4P�Q��R�������	�2�4P�Q�
�����
�6�8P�Q��R�R�������	�2�4P�Q����R�������(9�:�,�.��.��(�����(9�:�,�.��.��������8�*�,��,��������8�*�,��,��������R�^�^�3�5X�Y��Z��(������R�%@�%@�@�Br�s�=�t�=�������1�3N�O��P��*������1�3N�O����P��������0�2L�M��N��*������0�2L�M��	��N�	�������.�1�3�
�_�_�W�_�_�&@�A��B�3�������	�2�5�7�
N�7�
N������	�2�5�7�G�7�G� ������/�2�4�
�_�_�W�_�_�&A�B��C�4�������[�1�3G�H��#�#�A�q�"�-�� � �"�1�#�.�I�1�
�����
�3�4�6��6�������
�3�4�6�
�6�
�������0�3�5�
�5�
�������/�2�4�
������B�$?�$?�?�J�L�1�L�4�1�A�"������1�3H�I�F�J�F�������0�M�W�T�9�5M�5�7�N�7�N�,�����	�2�4P�Q�%A�R�%A�NG!�R�����W�-�/D�E�
�_�_�W�*�*�,@�A�O�B�F�O��(�(�
������1�3K�L�
�_�_�W�*�*�,@�A�
�B�M�)�
��(�(�
������1�3K�L�C�M�)�C�������0�2L�M�B�N�B�B�9�
J�
)�
������"�.�.�8�D�F��F��������1�3N�O�A�P�A�������0�2L�M��N��
�����
�3�6�8�+�8�+�������/�1J�K��L��
�����W�-�/F�G��#�#�A�q�"�-��.�H��4
���
�����W�-�/F�G��#�#�A�q�"�-�K�.�H��K�������0�2L�M�
2�N�
2�%�,�(�(�8�)�8���(�(�.�)�.��(�(�6�)�6�
������1�3K�L�O�M�O�������1�3K�L�E�M�E�

-�
;��"�"�	O�#�	O��"�"�	O�#�	O�������1�3K�L��"�"�;�#�M�;�������1�3K�L��"�"�;�#�M�;�4�0�����	�2�4M�N�I�O�I������
�3�5O�P�?�Q�?�
�����
�3�5O�P�>�Q�>�@1�
5�������1�3N�O�!(�P�!(�F������7�9Z�[�
�����j�1�3N�O�
�����X�.�0H�I�>�J�P�\�>������Y�/�1J�K�
�����W�-�/F�G�� � �"�E�#�H�L�E�4������3�5i�j�
�����_�5�7T�U��V�k�� �*�*�7�5�-�+H�+J�L��&�1�1�'�%�AT�2U�2U�W�������
�����(@�A�<�>�J�>��J��&I��&I�P�5��5�$���������(?�@�-�P�&�Q�&��
*��
*��J��J�2�_�_�W�_�_�&B�C�
������G�+�->�?��@�D�������[�1�C�E�;�E�;�2H�$<�$<�$�����\�2�4L�M�0�N�0rMrc��\rSrSrSr\S5r\S5r\R"\
R\
R;S5S5r
\R"\
R\
R;S5S5r\R"\"\
S	5=(a \
R"\
R;S
5\R$"\R(S5S55r\R"\
R,\
R;S
5S5r\R"\
R0\
R;S5S5r\R$"\R4S5\R"\"\
S5=(a \
R6\
R;S5S55r\R"\
R:\
R;S5S5r\R"\"\
S5=(a) \
R>\
R;=(a	 \"\S5S5S5r \R"\
RB\
R;S5S5r"\R"\"\
S5=(a \
RF\
R;S5S5r$\R"\
RJ\
R;S 5S!5r&\R"\
RN\
R;S"5S#5r(\R"\
RR\
R;S$5S%5r*\R"\"\
S&5=(a \
RV\
R;S'5S(5r,S)r-g*)+�TestPosixDirFdi
rc#��# �[=RS-
sl[RSUR3n[RSURS3n[R
"U5 UR
[RU5 [RRX!5n[R"U5nXAU4v� SSS5 g!,(df   g=f7f)Nr8�_�base)rA�countrrrr-rr.ror�r��open_dir_fd)r%r>�base_dir�fullnamer�s     r�prepare�TestPosixDirFd.prepare
s��������!���"�"�#�1�T�Z�Z�L�1���&�&�'�q�����D�9��
���H��������X�.��7�7�<�<��/��
�
"�
"�8�
,����*�*�-�
,�
,�s�CC'�C�
	C'�
C$� C'c#��# �UR5upn[R"U5 UR[R
U5 XU4v� SSS5 g!,(df   g=f7fr{)rIrr�rrr�r%r�r>rHs    r�prepare_file�TestPosixDirFd.prepare_filesI���
�\�\�^�7��h��'�'��1��O�O�E�L�L�(�3���*�*��^�^�s�A-�AA�	A-�
A*�&A-z)test needs dir_fd support for os.access()c	���UR5upnUR[R"U[R
US95 SSS5 g!,(df   g=f�N�r�)rMr|rr�ror�rLs    r�test_access_dir_fd�!TestPosixDirFd.test_access_dir_fd s>��
�
�
�
 �$<�V�8��O�O�E�L�L��r�w�w�v�F�G�!�
 �
 �s�7A�
Az'test needs dir_fd support in os.chmod()c���UR5upn[R"U[R5 [R"U[R[R
-US9 [R"U5nUR
UR[R-[R[R
-5 SSS5 g!,(df   g=frP)	rMrr(rr�r�rFr��S_IRWXU)r%r�r>rH�ss     r�test_chmod_dir_fd� TestPosixDirFd.test_chmod_dir_fd%s���
�
�
�
 �$<�V�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���UR5upn[R"U[R"5[R
"5US9 SSS5 g!,(df   g=frP)rMrr�ror6r1rLs    r�test_chown_dir_fd� TestPosixDirFd.test_chown_dir_fd.sA���
�
�
 �$<�V�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
��UR5upn[US5nURS5 SSS5 UR[R
U5 [R"U5n[R"X!S9nURXV5 [R"USS9nURXV5 UR[S[RU[R"5S9 UR[S[RU[U5S9 UR[[RUSS9 SHunUR[S5nUR[ 5 [R"SUS9 SSS5 SSS5 URWR"[$5 Mw SSS5 g!,(df   GN�=f!,(df   NU=f!,(df   N^=f!,(df   g=f)	Nr�z	testline
rQzshould be integer or None, notl F�x:^V)FTz!bool is used as a file descriptor�nonexisting)rIrr�rrrrrFrVr<r*r�r;r��assertWarnsRegexr#r�filename�__file__)	r%r�r>rH�outfile�s1�s2r�r�s	         r�test_stat_dir_fd�TestPosixDirFd.test_stat_dir_fd5s���
�\�\�^�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�"���*�*�>�;�=�@B��*�*�7�3��
�
�=��<�4�=�� � ����h�7�"�%�^�$�$��(4�3��=�=��'�^�sR�G>�G
�D.G>�!G-�7G	�
G-�,G>�

G	�G>�
G*
�&G-�-
G;�7G>�>
Hz'test needs dir_fd support in os.utime()c�N�UR5upn[R"5n[R"USUS9 [R"X!S9 UR	[
[RUXAS9 UR	[
[RUSUS9 UR	[
[RUUS4US9 UR	[
[RUSU4US9 UR	[
[RUUS4US9 [R"U[
U5[
U54US9 [R"X$U4US9 [R"U[
U5[
U[
U5-
S-54US9 [R"X![
U5[
U[
U5-
S-54S9 [R[R;a[R"USUS9 SSS5 g![a Nf=f!,(df   g=f)NrQr)r�r+)r�r-F)r5r�)
rMr,rr-r;r<r.ror3r/)r%r�r>rHr0s     r�test_utime_dir_fd� TestPosixDirFd.test_utime_dir_fdPs���
�
�
�
 �$<�V�8��)�)�+�C��K�K��d�6�2��K�K��,����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��C�j��8��K�K����X�s�C�#�c�(�N�c�#9�:�;�F�
L��K�K��#&�s�8�S�#��C��.�C�1G�-H�"I�
K��x�x�2�6�6�6���K�K��e�F�K�1!�
 ��2"�����3!�
 �s*�GH�'H�
H�H�H�H�
H$z5WASI: symlink following on path_link is not supportedrCz&test needs dir_fd support in os.link()c	��UR5upnUR5upEn[R"X%XS9 UR
[RU5 UR[R"U5S[R"U5S5 SSS5 SSS5 g![anURSU-5 SnAN�SnAff=f!,(df   NB=f!,(df   g=f)N��
src_dir_fd�
dst_dir_fdzposix.link(): %sr8)
rMrIrrCr�r�rrrFr)r%r�r>rH�dir_fd2�linkname�fulllinknamers        r�test_link_dir_fd�TestPosixDirFd.test_link_dir_fdos����
�
�
 �$<�V�8�
�\�\�^�@��<�
6��
�
�4�f�Q�
�O�O�E�L�L�,�7����U�Z�Z��1�!�4��
�
�<�(��+�
-��!�
 ��#�
6��
�
�0�1�4�5�5��
6���^��!�
 �sK�C,�C�B0�A C�C,�0
C�:C�C�C�C�
C)	�%C,�,
C:z'test needs dir_fd support in os.mkdir()c���UR5upn[R"X!S9 UR[RU5 [R
"U5 SSS5 g!,(df   g=frP)rIrr-rr.rrLs    r�test_mkdir_dir_fd� TestPosixDirFd.test_mkdir_dir_fd�sF��
�\�\�^�7��h��K�K��,��O�O�E�K�K��2��J�J�x� ��^�^�s�AA(�(
A6r�r�zAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c�v�UR5upn[R[R-[R-n[
R"X$SUS9 UR[
RU5 UR[R"[
R"U5R55 SSS5 g![aSnURUR[R[R [R"45 SnANaSnAff=f!,(df   g=f)NrrQ)rIrr�r�r�rr�rrr|r�r�rr�rrvr�r�)r%r�r>rHr�rs      r�test_mknod_dir_fd� TestPosixDirFd.test_mknod_dir_fd�s����\�\�^�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�6D*�C
�A#D*�

D'�A	D"�D*�"D'�'D*�*
D8z&test needs dir_fd support in os.open()c��UR5upn[US5nURS5 SSS5 UR[R
U5 [R"U[RUS9n[R"US5nURSU5 [R"U5 SSS5 g!,(df   N�=f![R"U5 f=f!,(df   g=f)Nrs	testline
rQ�	)
rIrr�rrrr�r�rFr�)r%r�r>rHrar�r�s       r�test_open_dir_fd�TestPosixDirFd.test_open_dir_fd�s���
�\�\�^�7��h��h��%���
�
�m�,�&��O�O�E�L�L�(�3����D�%�.�.��@�B�
 ��j�j��Q�'��� � ���4����B���^�%�%�����B����^�s:�C5�C	�AC5�)C�)C5�	
C	�C5�C2�2C5�5
D�readlinkz*test needs dir_fd support in os.readlink()c��UR5upn[R"SU5 UR[R
U5 UR
[R"X!S9S5 SSS5 g!,(df   g=f�Nr�rQ)rIror�rrrrFr|rLs    r�test_readlink_dir_fd�#TestPosixDirFd.test_readlink_dir_fd�sW���\�\�^�7��h��J�J�y�(�+��O�O�E�L�L�(�3����U�^�^�D�@�)�L��^�^���AA9�9
Bz(test needs dir_fd support in os.rename()c	�:�UR5upnUR5upEn[R"X%XS9 [R"U5 [R"Xc5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)Nrj)rMrIrrr)r%r�r>rHrm�name2�	fullname2s       r�test_rename_dir_fd�!TestPosixDirFd.test_rename_dir_fd�sk��
�
�
�
 �$<�V�8�
�\�\�^�:��	��L�L��$*�
@��J�J�y�!��L�L��-�	�!�
 �
�^��!�
 �s#�B�AA;�*B�;
B		�B�
Bz)test needs dir_fd support in os.symlink()c��UR5upn[R"SX!S9 UR[RU5 UR[R"U5S5 SSS5 g!,(df   g=fr~)rIrr�rrrFr|rLs    r�test_symlink_dir_fd�"TestPosixDirFd.test_symlink_dir_fd�sU��
�\�\�^�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�x�UR5upn[R"U5 [R"U5 [R
"X!S9 UR
[[RU5 SSS5 g! UR[R
U5 e=f!,(df   g=frP)	rIrr�rrrr;rrrLs    r�test_unlink_dir_fd�!TestPosixDirFd.test_unlink_dir_fd�s~��
�\�\�^�7��h��'�'��1��J�J�x� �
����T�1��!�!�'�5�:�:�x�@��^��
�������h�7����^�s�0B+�9B�#B(�(B+�+
B9r�z(test needs dir_fd support in os.mkfifo()c���UR5upn[R"U[R[R
-US9 UR[RU5 UR[R"[R"U5R55 SSS5 g![anURSU-5 SnAN�SnAff=f!,(df   g=f)NrQr�)
rIrr�rr�r�r�r�rrr|r�r�)r%r�r>rHrs     r�test_mkfifo_dir_fd�!TestPosixDirFd.test_mkfifo_dir_fd�s���
�\�\�^�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"�5B7�A#C"�7
C�C�C"�C�C"�"
C0r�N).r+r,r-r.rEr	rIrMrsr/ror��supports_dir_fdrRr(rWr
r�r4rr�rZrrdr-rgr5rCrpr-rsr�rvrrzr|rrr�r�r�rr�r�r�r?r�rMrrArA
s���
�E��	+��	+��+��+�������b�&8�&8�8�:e�f�H�g�H�������R�%7�%7�7�9b�c�:�d�:������W�-�R�2�8�8�r�?Q�?Q�3Q�B�D�
�_�_�W�*�*�,@�A�G�B�D�G�������B�$6�$6�6�8`�a�8�b�8�4������R�%7�%7�7�9b�c��d��<�_�_����?�������F��=����2�+=�+=� =�0��
-�	�	�
-�������R�%7�%7�7�9b�c�!�d�!������W�-�6� �h�h�"�*<�*<�<�6�$�T�9�5�\�^�
M�	^�
M�������B�$6�$6�6�8`�a�
 �b�
 ������Z�0�X�b�k�k�R�EW�EW�6W�E�G�M�G�M�������b�&8�&8�8�:d�e�.�f�.�������r�'9�'9�9�;f�g�B�h�B�������b�&8�&8�8�:d�e�	�f�	������X�.�R�2�9�9��@R�@R�3R�T~��I�@�IrMrAc��\rSrSrSrSr\R"\"\	S5S5S5r
\R"\"\	S5S5S	5rS
rg)�PosixGroupsTesteri�c�@�[R"5S:wa[R"S5e[	[S5(d[R"S5e[
RS:Xa[R"S5e[R"5Ulg)Nrznot enough privilegesr2zneed posix.getgroupsr�zgetgroups(2) is broken on OSX)	rr6rsrtr
r�rr2�saved_groupsr$s rr&�PosixGroupsTester.setUp�sn���<�<�>�Q���#�#�$;�<�<��u�k�*�*��#�#�$:�;�;��<�<�8�#��#�#�$C�D�D�!�O�O�-��rMc�H�[[S5(a![R"UR5 g[[S5(aW[R
"[R"55Rn[R"XRS5 gg)N�	setgroupsrir)	r
rr�r�rprjr6rqri�r%r>s  r�tearDown�PosixGroupsTester.tearDown�sf���5�+�&�&��O�O�D�-�-�.�
�U�L�
)�
)��<�<�����/�7�7�D����T�#4�#4�Q�#7�8�*rMriztest needs posix.initgroups()c�$�[UR=(d S/5S-n[R"[R
"55Rn[R"X!5 URU[R"55 gr)
�maxr�rprjrr6rqrir�r2)r%r�r>s   rrw�!PosixGroupsTester.test_initgroups�s]��

��!�!�(�a�S�)�A�-���|�|�E�L�L�N�+�3�3��
����!��
�
�a����*�+rMr�ztest needs posix.setgroups()c��S/[[S554H>n[R"U5 UR	U[R
"55 M@ g)Nr�)r�r�rr��assertListEqualr2)r%r�s  r�test_setgroups� PosixGroupsTester.test_setgroups�s@���s�D��r��O�,�F��O�O�F�#�� � �����):�;�-rM)r�N)
r+r,r-r.r&r�rsr/r
rrwr�r?r�rMrr�r��sb��.�9�������5�8�:�,�:�,�������4�7�9�<�9�<rMr�c��\rSrSr\R
SSSS4rSrSrSr	S	r
S
rSrSr
S
rSrSrSrSr\R("\"\S5S5S5rSrSr\R("\"\S5S5S5rSrSr\R<"S\"5SSS//5S5r \!\RD"\RFRIS5S5S 55r%\!\RD"\RFRIS5S5\RD"\#RL"5S!S":H=(a+ \'RP"S!5\'RR\'RT4;S#5S$555r+S%r,S&r-S'r.S(r/S)r0S*r1g)+�_PosixSpawnMixini��-I�-Sr�r�Nc�.�[RSS/UQ7$)Nr�r�)r�r��r%�argss  r�python_args�_PosixSpawnMixin.python_argss������d�2�T�2�2rMc��[RnUR[RU5 SU<S3nUR	SU5nURUSU[R5n[R"USS9 [USS9nURUR5[U55 SSS5 g!,(df   g=f)N�2if 1:
            import os
            with open(zO, "w") as pidfile:
                pidfile.write(str(os.getpid()))
            r�rr��utf-8��encoding)rrrrr��
spawn_funcror�rr�rrFr�r�)r%�pidfile�scriptr�r�r�s      r�test_returns_pid�!_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�
Cc�8�SnURUU/[R5n[R"US5up4UR	X25 URUS5 g![[4a&nUR	URU5 SnAgSnAff=f)N�no_such_executabler)	r�ror��waitpidrFr��FileNotFoundErrorr�r_)r%r�r��pid2�status�excs      r�test_no_such_executable�(_PosixSpawnMixin.test_no_such_executables���1��	+��/�/�"4�#5�"6�"$�*�*�.�C��:�:�c�1�-�L�D����T�'������*��"�?�3�	?����S�\�\�+=�>�>��	?�s�"A#�#B�3B�Bc��[RnUR[RU5 SU<S3nUR	SU5nURUSU0[RESS0E5n[R"USS9 [USS	9nURUR5S5 SSS5 g!,(df   g=f)
Nr�z^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r�rrl�barr�r�r�)
rrrrr�r�ror�rr�rrFr�)r%�envfiler�r�r�r�s      r�test_specify_environment�)_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�!B=�=
Cc��URURSUR[RSS9n[R
"USS9 g�Nr��file_actionsr��r��NOOP_PROGRAMror�rr��r%r�s  r�test_none_file_actions�'_PosixSpawnMixin.test_none_file_actions6sH���o�o����a� �����J�J��	�
��	���S�1�-rMc��URURSUR[R/S9n[R
"USS9 gr�r�r�s  r�test_empty_file_actions�(_PosixSpawnMixin.test_empty_file_actions?sH���o�o����a� �����J�J��	�
��	���S�1�-rMc��UR[R[RSS/[RSS9n[
R"USS9 g)Nr�r�F��resetidsrr��r�r�r�ror�rr�r�s  r�test_resetids_explicit_default�/_PosixSpawnMixin.test_resetids_explicit_defaultHsF���o�o��N�N�
�^�^�T�6�*��J�J��	�
��	���S�1�-rMc��UR[R[RSS/[RSS9n[
R"USS9 g)Nr�r�Tr�rr�r�r�s  r�
test_resetids�_PosixSpawnMixin.test_resetidsQsF���o�o��N�N�
�^�^�T�6�*��J�J��	�
��	���S�1�-rMc���UR[R[RSS/[R[R
"5S9n[R"USS9 g)Nr�r���	setpgrouprr�)r�r�r�ror�r4rr�r�s  r�test_setpgroup�_PosixSpawnMixin.test_setpgroupZsL���o�o��N�N�
�^�^�T�6�*��J�J��j�j�l�	�
��	���S�1�-rMc��URSURp!URX[RSS9n[R
"USS9 g)Nrr�r��r�r�ror�rr��r%r�r�r�s    r�test_setpgroup_allow_none�*_PosixSpawnMixin.test_setpgroup_allow_nonec�B���&�&�q�)�4�+<�+<�d��o�o�d�"�*�*��o�E�����S�1�-rMc���UR[5 UR[R[RSS/[
RSS9 SSS5 g!,(df   g=f)Nr�r��023r�)r;r<r�r�r�ror�r$s r�test_setpgroup_wrong_type�*_PosixSpawnMixin.test_setpgroup_wrong_typehsJ��
�
�
�y�
)��O�O�C�N�N� �^�^�T�6�:��J�J�%�
�
9�*�
)�
)�s�AA�
A-�pthread_sigmaskzneed signal.pthread_sigmask()c��[R"S5nUR[R[RSU/[
R[R/S9n[R"USS9 g)N�I            import signal
            signal.raise_signal(signal.SIGUSR1)r���
setsigmaskrr�)�textwrap�dedentr�r�r�ror�r;�SIGUSR1rr�)r%r�r�s   r�test_setsigmask� _PosixSpawnMixin.test_setsigmasknsd����� 3�4���o�o��N�N�
�^�^�T�4�(��J�J����'�	�
��	���S�1�-rMc	���UR[5 UR[R[RSS/[
RSS9 SSS5 UR[5 UR[R[RSS/[
RS/S9 SSS5 UR[5 UR[R[RSS/[
R[R[RS-/S9 SSS5 g!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr�r��"r��jr8�
r;r<r�r�r�ror�r/r;�NSIGr$s r�test_setsigmask_wrong_type�+_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�+�
*�*�
)��*�
)��+�
*��&�AD;�3AE�A!E�;
E	�
E�
E+c�@�[R"5upUR[RU5 [R"US5 [
R"SUS35nUR[R[RSU/[RSS9n[R"U5 [R"WSS	9 [R "US
5n[#U5n[R$"[R&"55nUR)X�5 g![anURSU<35 SnAN�SnAf[anURSU<35 SnAN�SnAff=f![R"U5 f=f)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�)rorrr��set_inheritabler�r�r�r�r�r�r�r�r�rr�r�r.�getsidr3r�)	r%�rfd�wfdr�r�r��output�	child_sid�
parent_sids	         r�test_setsid�_PosixSpawnMixin.test_setsid�s=���7�7�9���������#�&�	����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�sA�1F�+?D2�2
F�<E�F�
F�#E=�8F�=F�F�Fc��[R"[R[R5n[R"S5nUR[R[RSU/[R[R/S9n[R"[RU5 [R"U[R*S9 g![R"[RU5 f=f)Nr�r���	setsigdefr�)r;r��SIG_IGNr�r�r�r�r�ror�rr�)r%�original_handlerr�r�s    r�test_setsigdef�_PosixSpawnMixin.test_setsigdef�s���"�=�=�������H����� 3�4��	<��/�/��������t�,��
�
�!�>�>�*�	"��C�
�M�M�&�.�.�*:�;����S�F�N�N�?�;��
�M�M�&�.�.�*:�;�s
�AC#�#'D
c	���UR[5 UR[R[RSS/[
RSS9 SSS5 UR[5 UR[R[RSS/[
RS/S9 SSS5 UR[5 UR[R[RSS/[
R[R[RS-/S9 SSS5 g!,(df   N�=f!,(df   N�=f!,(df   g=f)Nr�r�r�rr�r8r�r$s r�test_setsigdef_wrong_type�*_PosixSpawnMixin.test_setsigdef_wrong_type�s���
�
�
�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�c��URSURp!URX[RSS9n[R
"USS9 g)Nr��	schedulerr�r�r�s    r�test_scheduler_allow_none�*_PosixSpawnMixin.test_scheduler_allow_none�r�rMrr8r�c���URSURp2UR[S5 URX#[R
US9 SSS5 g!,(df   g=f)Nrz!scheduler must be a tuple or Noner)r�rVr<r�ror�)r%rr�r�s    r�test_scheduler_wrong_type�*_PosixSpawnMixin.test_scheduler_wrong_type�sV���&�&�q�)�4�+<�+<�d�
�
#�
#��/�
�
�O�O�D��
�
�i�O�H�	
�
�
�s� A�
A(r�zbpo-34685: test can fail on BSDc	�j�[R"S5n[R"U5n[R"SUSUS35nUR[R[RSU/[RS[R"U54S9n[R"USS9 g�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�rr��rorr�r�r�r�r�r�r�r�rr��r%�policy�priorityr�r�s     r�test_setscheduler_only_param�-_PosixSpawnMixin.test_setscheduler_only_param�s����&�&�q�)���,�,�V�4�����$,�,2�8�47�7?�j�A�	 !�"���o�o��N�N�
�^�^�T�4�(��J�J��R�^�^�H�5�6�	�
��	���S�1�-rMr�glibcz)Skip test due to glibc posix_spawn policyc	�j�[R"S5n[R"U5n[R"SUSUS35nUR[R[RSU/[RU[R"U54S9n[R"USS9 grrrs     r�test_setscheduler_with_policy�._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�-rMc�l�[RS[RR[5[R
S4[RS4[RSS4/nURURSUR[RUS9n[R"USS9 g)NrErr8r�r�r�)
ro�POSIX_SPAWN_OPENr��realpathr`r��POSIX_SPAWN_CLOSE�POSIX_SPAWN_DUP2r�r�r�rr�)r%r�r�s   r�test_multiple_file_actions�+_PosixSpawnMixin.test_multiple_file_actionss���
�
 �
 �!�R�W�W�%5�%5�h�%?����a�P�
�
!�
!�1�%�
�
 �
 �!�Q�'�
��
�o�o�d�/�/��2�"�/�/� �j�j�+7��9��	���S�1�-rMc��URnUR[5 URUSU[R
S/S9 SSS5 UR[5 URUSU[R
S/S9 SSS5 UR[5 URUSU[R
S/S9 SSS5 UR[5 URUSU[R
S/S9 SSS5 UR[5 URUSU[R
[R4/S9 SSS5 UR[5 URUSU[R
[RSS4/S9 SSS5 UR[5 URUSU[R
[RS4/S9 SSS5 UR[5 URUSU[R
[RS[S	-[RS4/S9 SSS5 g!,(df   GN6=f!,(df   GN=f!,(df   GN�=f!,(df   GN�=f!,(df   GNg=f!,(df   GN&=f!,(df   N�=f!,(df   g=f)
Nrr�r�r{)i90r8r�rEr)r�r;r<r�ror�r&r/r$r`r�r�s  r�test_bad_file_actions�&_PosixSpawnMixin.test_bad_file_actionsse��� � ��
�
�
�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`�%I6�$%J�&%J�(%J,�*4J>�;6K�5K"� A
K3�6
J�
J�
J)�,
J;�>
K
�
K�"
K0�3
Lc�N�[RnUR[RU5 Sn[R
SU[R[R-[R-[R[R-4/nURSU5nURUSU[RUS9n[R "USS9 [#USS9nUR%UR'5S	5 SSS5 g!,(df   g=f)
N�Oif 1:
            import sys
            sys.stdout.write("hello")
            r8r�rr�r�r�r��hello)rrrrror$r�r��O_TRUNCrr�r�r�r�r�rr�rrFr�)r%rar�r�r�r�r�s       r�test_open_file�_PosixSpawnMixin.test_open_file0s����"�"�����	�(�(�'�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�,!D�
D$c���[RnUR[RU5 SU<S3nUR	SU5nURUSU[R[RS4/S9n[R"USS9 [USS9nURUR5S	[R-5 SSS5 g!,(df   g=f)
Nz�if 1:
            import os
            try:
                os.fstat(0)
            except OSError as e:
                with open(zq, 'w', encoding='utf-8') as closefile:
                    closefile.write('is closed %d' % e.errno)
            r�rr�r�r�r�zis closed %d)rrrrr�r�ror�r&rr�rrFr�rr)r%�	closefiler�r�r�r�s      r�test_close_file� _PosixSpawnMixin.test_close_fileDs����$�$�	����	�(�(�)�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��[RnUR[RU5 Sn[	US5n[
RUR5S4/nURSU5nURUSU[
RUS9n[R"USS9 SSS5 [	USS	9nURUR5S
5 SSS5 g!,(df   NB=f!,(df   g=f)Nr.rr8r�rr�r�r�r�r/)rrrrrror'r�r�r�r�rr�rFr�)r%�dupfiler��	childfiler�r�r�r�s        rrg�_PosixSpawnMixin.test_dup2Ws����"�"�����	�(�(�'�2����'�4�
 �I��$�$�i�&6�&6�&8�!�<��L��#�#�D�&�1�D��/�/�$�q�'�4����/;�"�=�C�� � ��q�1�!��'�G�
,�����Q�V�V�X�w�/�-�
,�!�
 ��-�
,�s�A-C(�>!C9�(
C6�9
Dr�)2r+r,r-r.r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rsr/r
r;r�r�rr
r
rr�subTestsrnrr>r4rrr�libc_verror�SCHED_BATCH�
SCHED_IDLEr!r(r+r1r5rgr?r�rMrr�r��s����N�N�D�$��f�=�L��J�3�1�
+�
.�.�.�.�.�.�.�
9������):�;�:�<�.�<�.�
D�3�>�����):�;�8�:�<�:�<�"P�.�

���k�F�H�a�!�Q��#8�9�I�:�I��
�_�_�S�\�\�,�,�-B�C�6�8�.�8��.�"�
�_�_�S�\�\�,�,�-B�C�6�8�
�_�_�X�&�&�(��+�w�6�'��*�*�1�-�����
�
�2'�'�A�	B�
.�B�8��.�"
.�=�:0�(E�&0rMr��posix_spawnztest needs os.posix_spawnc�(�\rSrSr\"\SS5rSrg)�TestPosixSpawnijr?Nr�)r+r,r-r.r9rr�r?r�rMrrArAjs����
�t�4�JrMrA�posix_spawnpztest needs os.posix_spawnpc�L�\rSrSr\"\SS5r\RS5r	Sr
g)�TestPosixSpawnPiprBNc���[R"5nUR[RU5 Sn[
RRX5n[
R"[RU5 [
RRU[
RS45nUSSSS4n[R"SU<S35nSU4n[!USU06 g![a UnN@f=f)	Nzposix_spawnp_test_program.exe�PATHr�r�r�r�zP
            import os
            from test import support

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

            support.wait_process(pid, exitcode=0)
        )�tempfile�mkdtemprrr�ror�r�r�r�r��pathsepr�rrr�r�r)r%�temp_dir�program�program_fullpathr��
spawn_argsr�r�s        r�test_posix_spawnp�!TestPosixSpawnP.test_posix_spawnpus����#�#�%�����	�(�(�(�3�1���7�7�<�<��:��
�
�
�3�>�>�#3�4�	��:�:�?�?�H�b�j�j��.@�#A�B�D��t�T�4��8�
����� ����d�|���$�*�T�*��%�	��D�	�s�=2C!�!C0�/C0r�)r+r,r-r.r9rr�rr:rNr?r�rMrrDrDps*������5�J��"�"�+�#�+rMrDr�ztest weak linking on macOSc��\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrSrSrg)�TestPosixWeaklinkingi�c�"�SSKnSSKnUR5nUVs1sH'oDRS5(dMX4(dM%UiM) snUl[SUR"5SRS555Ulgs snf)Nr�HAVE_c3�8# �UHn[U5v� M g7fr{r�)r��parts  rr��-TestPosixWeaklinking.setUp.<locals>.<genexpr>�s���T�3S�4�S��Y�Y�3S�r�r�)r�r�get_config_varsr�	availabler��mac_verr�)r%r�r�config_vars�nms     rr&�TestPosixWeaklinking.setUp�sn�����/�/�1��(3�c��"�}�}�W�7M�2�R]�Ra�2��c����T�8�3C�3C�3E�a�3H�3N�3N�s�3S�T�T����ds�B�B�Bc�T�XR;a[R"US35eg)Nz not weak-linked)rXrsrtr�s  r�_verify_available�&TestPosixWeaklinking._verify_available�s*���~�~�%��#�#�t�f�,<�$=�>�>�&rMc�H�URS5 URS:�aAUR[[S5S5 UR[[S5S5 gUR[[S5S5 UR[[S5S5 g)	N�HAVE_PWRITEV)r�r�r�zos.pwritev is not availabler�zos.readv is not availablezos.pwritev is availablezos.readv is available)r^rYr|r
rormr$s rr�!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�LrMc�R�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSS9 SSS5 g!,(df   g=f)N�HAVE_FSTATAT�r�r��dir_fd unavailable�filerrQ)
r^rYr�r�_have_functions�assertNotInrVr�rorr$s rr��TestPosixWeaklinking.test_stat�su�����~�.��<�<�8�#��M�M�.�%�*?�*?�@�
���^�U�-B�-B�C��'�'�(;�=Q�R�����q�)�S�R�R���9B�
B&c���URS5 URS:�a!URS[R5 gURS[R5 g)N�HAVE_PTSNAME_R)r�rmr�)r^rYr�rrhrir$s r�test_ptsname_r�#TestPosixWeaklinking.test_ptsname_r�sI�����/�0��<�<�;�&��M�M�*�E�,A�,A�B����-�u�/D�/D�ErMc��URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"S[RSS9 SSS5 UR
[S5 [R"S[RSS	9 SSS5 UR
[S
5 [R"S[RSS9 SSS5 g!,(df   N�=f!,(df   Nc=f!,(df   g=f)
N�HAVE_FACCESSATrerfrgrrQzfollow_symlinks unavailableFr4zeffective_ids unavailableT)�
effective_ids)r^rYr�rrhrirVr�ror�r�r$s rr�� TestPosixWeaklinking.test_access�s������/�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$�9%D-�<%D>�?%E�-
D;�>
E�
Ec��URS5 URS:�a!URS[R5 gURS[R5 URS[R5 UR
[S5 [R"SSSS9 SSS5 g!,(df   g=f)	N�
HAVE_FCHMODATre�HAVE_LCHMODrfrgi�rrQ)
r^rYr�rrhrirVr�ror(r$s r�
test_chmod�TestPosixWeaklinking.test_chmod�s�������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��M�M�-��)>�)>�?��'�'�(;�=Q�R������q�1�S�R�R�s�B9�9
Cc��URS5 URS:�a!URS[R5 gURS[R5 URS[R5 UR
[S5 [R"SSSSS9 SSS5 g!,(df   g=f)N�
HAVE_FCHOWNATre�HAVE_LCHOWNrfrgrrQ)
r^rYr�rrhrirVr�ror�r$s rr��TestPosixWeaklinking.test_chown�s�������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��M�M�-��)>�)>�?��'�'�(;�=Q�R������A�a�0�S�R�R�s�B:�:
Cc�>�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSSS9 SSS5 UR
[S5 [R"SSSS	9 SSS5 UR
[S5 [R"SSSSS
9 SSS5 [R"5n[RRUS5n[RRUS5n[RRUS5n[US5nURS
5 SSS5 [R "SU5 UR#[$5 [R"XBSS9 SSS5 UR#[$5 [R"XBSS9 SSS5 SSS5 g!,(df   GN�=f!,(df   GNy=f!,(df   GNU=f!,(df   N�=f!,(df   N�=f!,(df   No=f!,(df   g=f)N�HAVE_LINKATrezsrc_dir_fd unavailable�sourcer"r�rkzdst_dir_fd unavailable�rlrjrCr��dataTr4F)r^rYr�rrhrirVr�rorCrrJr�r�rr�r�r;�FileExistsError)r%r��	link_path�target_path�source_pathr�s      r�	test_link�TestPosixWeaklinking.test_link�s������}�-��<�<�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�9H%�.H7�#I	�A-J�I�4J�I,�!J�>I=�J�%
H4�7
I�	
I�
I)	�%J�,
I:	�6J�=
J	�J�
Jc���URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"S5 SSS5 UR
[S5 [R"S5 SSS5 g!,(df   ND=f!,(df   g=f)N�HAVE_FDOPENDIRrezClistdir: path should be string, bytes, os.PathLike or None, not intrzCscandir: path should be string, bytes, os.PathLike or None, not int)r^rYr�rrhrirVr<ror��scandirr$s r�test_listdir_scandir�)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�9C�.C�
C�
C-c�R�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSS9 SSS5 g!,(df   g=f)N�HAVE_MKDIRATrerf�dirrrQ)
r^rYr�rrhrirVr�ror-r$s r�
test_mkdir�TestPosixWeaklinking.test_mkdir#	su�����~�.��<�<�8�#��M�M�.�%�*?�*?�@�
���^�U�-B�-B�C��'�'�(;�=Q�R�����q�)�S�R�R�rkc�R�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSS9 SSS5 g!,(df   g=f)N�
HAVE_MKFIFOAT�rmrrfr�rrQ)
r^rYr�rrhrirVr�ror�r$s rr�� TestPosixWeaklinking.test_mkfifo.	su������/��<�<�7�"��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��'�'�(;�=Q�R��	�	�&��+�S�R�R�rkc�R�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSS9 SSS5 g!,(df   g=f)N�HAVE_MKNODATr�rfr�rrQ)
r^rYr�rrhrirVr�ror�r$s rr��TestPosixWeaklinking.test_mknod9	su�����~�.��<�<�7�"��M�M�.�%�*?�*?�@�
���^�U�-B�-B�C��'�'�(;�=Q�R������*�S�R�R�rkc��URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSSS9 SSS5 UR
[S5 [R"SSSS9 SSS5 UR
[S5 [R"SSSS9 SSS5 UR
[S5 [R"SSSS9 SSS5 g!,(df   N�=f!,(df   N�=f!,(df   Nf=f!,(df   g=f)	N�
HAVE_RENAMEATrez%src_dir_fd and dst_dir_fd unavailable�a�brr�r�)r^rYr�rrhrirVr�rorr�r$s r�test_rename_replace�(TestPosixWeaklinking.test_rename_replaceD	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�9D8�.E	�#E�E+�8
E�	
E�
E(�+
E9c���URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSS9 SSS5 UR
[S5 [R"SSS9 SSS5 g!,(df   NC=f!,(df   g=f)N�
HAVE_UNLINKATrerfr�rrQ)r^rYr�rrhrirVr�rorr.r$s r�test_unlink_rmdir�&TestPosixWeaklinking.test_unlink_rmdirX	s�������/��<�<�8�#��M�M�/�5�+@�+@�A�
���_�e�.C�.C�D��'�'�(;�=Q�R��	�	�&��+�S��'�'�(;�=Q�R������*�S�R�S�R��S�R�s�9C�-C�
C�
C+c�p�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"S[RSS9 SSS5 g!,(df   g=f)N�HAVE_OPENATrerfr�rrQ)r^rYr�rrhrirVr�rorr�r$s r�	test_open�TestPosixWeaklinking.test_openf	s{�����}�-��<�<�8�#��M�M�-��)>�)>�?�
���]�E�,A�,A�B��'�'�(;�=Q�R��������A�6�S�R�R�s�9%B'�'
B5c�R�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSS9 SSS5 g!,(df   g=f)N�HAVE_READLINKATrerfr�rrQ)
r^rYr�rrhrirVr�ror|r$s r�
test_readlink�"TestPosixWeaklinking.test_readlinkq	sx�����0�1��<�<�8�#��M�M�+�U�-B�-B�C�
���.��0E�0E�F��'�'�(;�=Q�R����F�A�.�S�R�R�rkc�T�URS5 URS:�a!URS[R5 gURS[R5 UR
[S5 [R"SSSS9 SSS5 g!,(df   g=f)N�HAVE_SYMLINKATrerfr�r�rrQ)
r^rYr�rrhrirVr�ror�r$s r�test_symlink�!TestPosixWeaklinking.test_symlink|	sz�����/�0��<�<�8�#��M�M�*�E�,A�,A�B�
���-�u�/D�/D�E��'�'�(;�=Q�R��
�
�3��Q�/�S�R�R�s�9B�
B'c���URS5 URS5 URS:�aAURS[R5 URS[R5 gURS[R5 URS[R5 UR
[S5 [R"SSS9 SSS5 g!,(df   g=f)N�
HAVE_FUTIMENS�HAVE_UTIMENSAT)r�rmrfr�rrQ)
r^rYr�rrhrirVr�ror-r$s rr�TestPosixWeaklinking.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)�)
C7)rXrYN)r+r,r-r.r&r^rr�rnr�rwr�r�r�r�r�r�r�r�r�r�r�rr?r�rMrrQrQ�sf��U�?�M�	*�F�?�"
2�
1�$K�N�	*�	,�	+�3�(+�	7�	/�	0�+rMrQc��\rSrSrSr\R"\"\S5S5\R"\"\S5S5\R"\RRS5S5\R"S	S
S
5S5555r
Srg
)�NamespacesTestsi�	z&Tests for os.unshare() and os.setns().�unsharezneeds os.unshare()�setnszneeds os.setns()z/proc/self/ns/utszneed /proc/self/ns/utsrErc� �Sn[SU5 g)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_setns�"NamespacesTests.test_unshare_setns�	s��
"��H	��t�$rMr�N)r+r,r-r.�__doc__rsr/r
ror�rrr6r�r?r�rMrr�r��	s���0�
�����Y�/�1E�F�
�����W�-�/A�B�
��������(;�<�>V�W��#�#�A�q�!�,�%%�-�X�C�G�%%rMr�c�.�[R"5 gr{)r�
reap_childrenr�rMr�tearDownModuler��	s�����rM�__main__)6r�r�r�test.supportrrr�test.support.script_helperrr�rr�r;r,rorr�rrGrsr!r��
contextlibr	r�ImportErrorrMrpr�r��
gettempdirrr�r/�maxsizer�r5r2rr>�TestCaserrAr�r�r
r7rArDrQr�r�r+�mainr�rMr�<module>r�sP����!�"�(�7���
�
��	��
������%����������h�1�1�3�'�.�.�1A�A�C���"�"��K�K�%��J��!6�!6�!I�'�/�/�J�.�����$�$�_�%6�8V�W��N0�(�#�#�N0�d.LI�X�&�&�LI�^!<��)�)�!<�Hj0�j0�Z
���W�R��/�1L�M�����5�X�&�&�(8�5��N�5�
���W�R��0�2N�O�����!+�h�'�'�)9�!+��P�!+�H
���S�\�\�X�-�/K�L�|+�8�,�,�|+�M�|+�~,%�h�'�'�,%�^��z���M�M�O���_M�����
��
�C��s$�I�!I�
I�I�I �I 

Youez - 2016 - github.com/yon3zu
LinuXploit