HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_posix.cpython-37.opt-2.pyc
B

��g���@s�ddlmZddlmZe�d�ZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZe	j�e
��ejd�Ze�ejdkd�Zdd	�Ze�e�d
�ZGdd�dej�ZGd
d�dej�Zdd�Zedkr�e�dS)�)�support)�assert_python_ok�posixNz-dummy-symlinklz(test is only meaningful on 32-bit buildsc
CsTttd�sdSyt�d�Wn2tk
rN}z|jtjkr>dSWdd}~XYnXdS)N�sched_getschedulerFrT)�hasattrrr�OSError�errnoZENOSYS)�e�r
�+/usr/local/lib/python3.7/test/test_posix.py�_supports_scheds
rzrequires POSIX scheduler APIc@s�
eZdZdd�Zdd�Zdd�Ze�ee	d�d�d	d
��Z
e�ee	d�d�d
d��Ze�ee	d�d�dd��Ze�ee	d�d�dd��Z
e�ee	d�d�dd��Ze�ee	d�d�dd��Ze�ee	d�d�dd��Ze�ee	d�d �d!d"��Ze�ee	d#�d$�d%d&��Ze�ee	d'�d(�d)d*��Ze�ee	d+�d,�d-d.��Ze�eed/d0�ejkd1�e�eed2�d3�e�eed4�d5�d6d7����Ze�ee	d8�d9�e�eed2�d3�d:d;���Ze�eed2�d3�d<d=��Ze�ee	d>�d?�d@dA��Ze�ee	dB�dC�dDdE��Ze�ee	dF�dG�dHdI��Ze�ee	dF�dG�e�ee	dJ�dK�dLdM���Ze�ee	dF�dG�edNdO���Z e�ee	dP�dQ�dRdS��Z!e�ee	dT�dU�dVdW��Z"e�ee	dT�dU�e�ee	dX�dY�dZd[���Z#e�ee	dT�dU�ed\d]���Z$e�ee	d^�d_�d`da��Z%e�ee	d^�d_�dbdc��Z&e�ee	dd�de�dfdg��Z'e�ee	dd�de�dhdi��Z(e�ej)ejkdj�dkdl��Z*e�ej)ej+kdm�dndo��Z,e�ee	dp�dq�drds��Z-e�ee	dp�dq�edtdu���Z.e�ee	dv�dw�dxdy��Z/e�ee	dv�dw�edzd{���Z0e�ee	d|�d}�d~d��Z1e�ee	d��d��d�d���Z2e�ee	d��d��d�d���Z3e�eed��d��e4�5d�d�d��d�d����Z6e�ee	d��d��d�d���Z7e�ee	d��d��d�d���Z8e�ee	d��d��d�d���Z9e�ee	d��d��d�d���Z:e�ee	d��d��d�d���Z;e�ee	d���oee<d��d��d�d���Z=e�ee	d��d��e�ee	d��d��d�d����Z>d�d��Z?e�ee	d��d��d�d���Z@e�ee	d��d��d�d���ZAe�ee	d��d��d�d���ZBe�ee	d��d��d�d���ZCd�d��ZDd�d��ZEd�dÄZFd�dńZGe�e	jHejkdơd�dȄ�ZIe�ee	dɃdʡd�d̄�ZJe�ee	d̓dΡd�dЄ�ZKe�ee	dуdҡd�dԄ�ZLe�ee	dՃd֡d�d؄�ZMe�eedكdڡe4�5d�d�dۡd�d݄��ZNe4jOe�eedكdڡe4�5d�d�dۡd�d߄���ZPe�ee	d�d�d�d��ZQd�d�ZRe�ee	d�d�d�d��ZSe�ee	d�d�d�d��ZTe�ee	d�d�d�d��ZUd�d�ZVe�eed�d�d�d���ZWe�ee	d��d��d�d���ZXe�ee	d��d��e�eeYd��d��e�eed��d���d�d����ZZe�ee�d��d��d�d��Z[e�ej\ej]k�d��d�d��Z^e�ej_ej]k�d	��d
�d��Z`e�ejaej]k�d��d
�d��Zbe�ej<ej]k�d��d�d��Zce�ej)ej]k�d��d�d��Zde�ejeej]k�d��d�d��Zfe�ejgej]k�d��d�d��Zhe�ejiej]k�o�ee<d���d��d�d��Zje�ejkej]k�d��d�d ��Zle�ejmej]k�d!��d"�d#��Zne�ejoej]k�d$��d%�d&��Zpe�ejqej]k�d'��d(�d)��Zre�ejsej]k�d*��d+�d,��Zte�ejuej]k�d-��d.�d/��Zve�ee	�d0��d1�Zwe�ee	�d2��d3�Zxew�d4�d5��Zyewe�ee	�d6��d7��d8�d9���Zze{�d:�d;��Z|e�ee	�d<��d=��d>�d?��Z}ex�d@�dA��Z~ex�dB�dC��Z�dD�dE�Z�e�ee�dF��dG��dH�dI��Z��dJ�dK�Z��dL�dM�Z��dN�dO�Z�d0S(P�PosixTestercCsDttjd�}|��tjg|_t��|_|j��t�	ddt
�dS)Nzw+�ignorez.* potential security risk .*)�openr�TESTFN�close�teardown_filesZcheck_warnings�_warnings_manager�	__enter__�warnings�filterwarnings�RuntimeWarning)�self�fpr
r
r�setUp(s


zPosixTester.setUpcCs.x|jD]}t�|�qW|j�ddd�dS)N)rr�unlinkr�__exit__)rZ
teardown_filer
r
r�tearDown2szPosixTester.tearDowncCs\ddddddddd	d
ddd
ddg}x4|D],}tt|d�}|dk	r(|�|�t|d�q(WdS)N�ctermid�getcwd�getcwdb�uname�times�
getloadavg�getegid�geteuid�getgid�	getgroups�getpid�getpgrp�getppid�getuid�sync�)�getattrr�assertRaises�	TypeError)rZNO_ARG_FUNCTIONS�nameZ
posix_funcr
r
r�testNoArgFunctions7s
zPosixTester.testNoArgFunctions�	getresuidztest needs posix.getresuid()cCs6t��}|�t|�d�x|D]}|�|d�qWdS)N�r)rr3�assertEqual�len�assertGreaterEqual)rZuser_ids�valr
r
r�test_getresuidFs
zPosixTester.test_getresuid�	getresgidztest needs posix.getresgid()cCs6t��}|�t|�d�x|D]}|�|d�qWdS)Nr4r)rr:r5r6r7)rZ	group_idsr8r
r
r�test_getresgidNs
zPosixTester.test_getresgid�	setresuidztest needs posix.setresuid()cCs0t��}|�tj|��|�t�ddd��dS)N���)rr3�assertIsNoner<)r�current_user_idsr
r
r�test_setresuidVszPosixTester.test_setresuidcCs:t��}d|kr6|ddddf}|jttjf|��dS)Nrr-r=)rr3r/rr<)rr?Znew_user_idsr
r
r�test_setresuid_exception^sz$PosixTester.test_setresuid_exception�	setresgidztest needs posix.setresgid()cCs0t��}|�tj|��|�t�ddd��dS)Nr=)rr:r>rB)r�current_group_idsr
r
r�test_setresgidgszPosixTester.test_setresgidcCs:t��}d|kr6|ddddf}|jttjf|��dS)Nrr-r=)rr:r/rrB)rrCZ
new_group_idsr
r
r�test_setresgid_exceptionosz$PosixTester.test_setresgid_exception�
initgroupsztest needs os.initgroups()c
Cs�|�ttj�|�ttjd�|�ttjdd�|�ttjddt��t��dkr�yt�t���j	}Wnt
k
r�t�d��YnXyt�|d�Wn2t
k
r�}z|�|jtj�Wdd}~XYnX|�d�dS)Nr4Zfoorzneed a pwd entry�
z+Expected OSError to be raised by initgroups)r/r0rrF�object�osr+�pwd�getpwuid�pw_name�KeyError�unittest�SkipTestrr5r�EPERM�fail)rr1r	r
r
r�test_initgroupsxs"zPosixTester.test_initgroups�statvfsztest needs posix.statvfs()cCs|�t�tj��dS)N)�
assertTruerrSrI�curdir)rr
r
r�test_statvfs�szPosixTester.test_statvfs�fstatvfsztest needs posix.fstatvfs()cCsFttj�}z,|�t�|����|�t�|����Wd|��XdS)N)	rrrrTrrW�filenorSr)rrr
r
r�
test_fstatvfs�s

zPosixTester.test_fstatvfs�	ftruncateztest needs posix.ftruncate()cCsBttjd�}z&|�d�|��t�|��d�Wd|��XdS)Nzw+�testr)	rrr�write�flushrrZrXr)rrr
r
r�test_ftruncate�s
zPosixTester.test_ftruncate�truncateztest needs posix.truncate()c	Cs<ttjd��}|�d�|��WdQRXt�tjd�dS)N�wr[r)rrrr\r]rr_)rrr
r
r�
test_truncate�s
zPosixTester.test_truncate�execveNz/test needs execve() to support the fd parameter�forkztest needs os.fork()�waitpidztest needs os.waitpid()c	Cs�t�tjtj�}z^t��}|dkrTt�tj�tj�d�t	�
|tjddgtj�n|�t�
|d�|df�Wdt�|�XdS)Nrz-c�pass)rIr�sys�
executable�O_RDONLYrc�chdir�path�splitrrb�environr5rdr)rr�pidr
r
r�test_fexecve�szPosixTester.test_fexecve�waitidztest needs posix.waitid()cCsht��}|dkrDt�tj�tj�d�t�tjtjddgtj	�n t�
tj|tj�}|�
||j�dS)Nrz-cre)rIrcrirjrkrfrgrrbrlro�P_PID�WEXITEDr5�si_pid)rrm�resr
r
r�test_waitid�szPosixTester.test_waitidc	Csv|jtdd��t�dd��WdQRX|jtdd��tjdd�WdQRX|jtdd��tjdd	�WdQRX|jtdd��tjd
d�WdQRX|jtdd��tjdd�WdQRX|jtdd��tjdd	�WdQRX|jtdd��tjdd�WdQRX|jtd
d��tjddd�d�WdQRX|jtd
d��tjdd�dd�WdQRXd}td|�dS)NzPositional args not allowed)�msgcSsdS)Nr
r
r
r
r�<lambda>��z3PosixTester.test_register_at_fork.<locals>.<lambda>zArgs must be callable�)�beforeZthree)�after_in_childsFive)�after_in_parentzArgs must not be NonezInvalid arg was allowedcSsdS)Nr4r
r
r
r
rrv�rw)ryr{cSsdS)Nr
r
r
r
rrv�rw�)ryrza�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'!')
            z-c)r/r0rI�register_at_forkr)r�coder
r
r�test_register_at_fork�s(%z!PosixTester.test_register_at_fork�lockfztest needs posix.lockf()c	Csht�tjtjtjB�}z@t�|d�t�|dtj�t	�
|t	jd�t	�
|t	jd�Wdt�
|�XdS)Nstestr�)rIrrr�O_WRONLY�O_CREATr\�lseek�SEEK_SETrr��F_LOCK�F_ULOCKr)r�fdr
r
r�
test_lockfszPosixTester.test_lockf�preadztest needs posix.pread()c	Csrt�tjtjtjB�}zJt�|d�t�|dtj�|�	dt
�|dd��|�	dt
�|d��Wdt�
|�XdS)Nstestrsesrxr-ste)rIrrr�O_RDWRr�r\r�r�r5rr��readr)rr�r
r
r�
test_preadszPosixTester.test_pread�preadvztest needs posix.preadv()c	Csrt�tjtjtjB�}zJt�|d�dd�dD�}|�t�	||d�d�|�ddd	gt
|��Wdt�|�XdS)
Nstest1tt2t3t5t6t6t8cSsg|]}t|��qSr
)�	bytearray)�.0�ir
r
r�
<listcomp>(sz+PosixTester.test_preadv.<locals>.<listcomp>)�r4rxr4�
st1tt2st3ts5t)rIrrrr�r�r\r5rr��listr)rr��bufr
r
r�test_preadv#szPosixTester.test_preadv�	RWF_HIPRIztest needs posix.RWF_HIPRIc
Cs�t�tjtjtjB�}z�yNt�|d�dd�dD�}|�t�	||dtj
�d�|�ddd	gt|��Wn^tk
r�|�
d
�YnBtk
r�}z$|jtjtjhkr�t�d��n�Wdd}~XYnXWdt�|�XdS)Nstest1tt2t3t5t6t6t8cSsg|]}t|��qSr
)r�)r�r�r
r
rr�4sz1PosixTester.test_preadv_flags.<locals>.<listcomp>)r�r4rxr4r�st1tt2st3ts5tzpreadv2 not availablez0RWF_HIPRI is not supported by the current system)rIrrrr�r�r\r5rr�r�r��NotImplementedError�skipTestrr�EINVALZENOTSUPrNrOr)rr�r��instr
r
r�test_preadv_flags.szPosixTester.test_preadv_flagsc	Cs�t�tjtjtjB�}z`td�gd}|�t��}t�	||d�WdQRX|�
|jjtj
�|�
t|d�dd�Wdt�|�XdS)Nii�r�)rIrrrr�r�r�r/rr�r5�	exceptionrr��bytesr)rr�r��cmr
r
r�test_preadv_overflow_32bitsDsz'PosixTester.test_preadv_overflow_32bits�pwriteztest needs posix.pwrite()c	Csjt�tjtjtjB�}zBt�|d�t�|dtj�t	�
|dd�|�dt	�|d��Wdt�
|�XdS)Nstestrsxxr-stxxtr�)rIrrrr�r�r\r�r�rr�r5r�r)rr�r
r
r�test_pwriteQszPosixTester.test_pwrite�pwritevztest needs posix.pwritev()c	Cs�t�tjtjtjB�}zdt�|d�t�|dtj�t�	|dddgd�}|�
|d�t�|dtj�|�
dt�|d	��Wdt�
|�XdS)
Nsxxrstest1stt2st3rxr�sxxtest1tt2t3�d)rIrrrr�r�r\r�r�r�r5rr�r)rr��nr
r
r�test_pwritev\szPosixTester.test_pwritevzos.RWF_SYNCztest needs os.RWF_SYNCc	Cs�t�tjtjtjB�}zht�|d�t�|dtj�t�	|dddgdtj
�}|�|d�t�|dtj�|�dt�
|d	��Wdt�|�XdS)
Nsxxrstest1stt2st3rxr�s
xxtest1tt2r�)rIrrrr�r�r\r�r�r��RWF_SYNCr5rr�r)rr�r�r
r
r�test_pwritev_flagsjszPosixTester.test_pwritev_flagsc	Cslt�tjtjtjB�}zD|�t��}t�|ddgdd�WdQRX|�	|j
jtj�Wdt�
|�XdS)N�xii�r)rIrrrr�r�r/rr�r5r�rr�r)rr�r�r
r
r�test_pwritev_overflow_32bitsys"z(PosixTester.test_pwritev_overflow_32bits�posix_fallocatez"test needs posix.posix_fallocate()c
Cs�t�tjtjtjB�}z`yt�|dd�WnHtk
rr}z*|j	t	j
kr`tj�
d�r`t�d��n�Wdd}~XYnXWdt�|�XdS)Nrr�)Zsunos�freebsd�netbsdZopenbsdZgnukfreebsdz test may fail on ZFS filesystems)rIrrrr�r�rr�rrr�rf�platform�
startswithrNrOr)rr�r�r
r
r�test_posix_fallocate�sz PosixTester.test_posix_fallocatec
CsHyt�ddd�Wn0tk
rB}z|jtjkr2�Wdd}~XYnXdS)Ni���rr�)rr�rr�EBADF)rr�r
r
r�test_posix_fallocate_errno�s
z&PosixTester.test_posix_fallocate_errno�
posix_fadvisez test needs posix.posix_fadvise()c	Cs8t�tjtj�}zt�|ddtj�Wdt�|�XdS)Nr)	rIrrrrhrr��POSIX_FADV_WILLNEEDr)rr�r
r
r�test_posix_fadvise�szPosixTester.test_posix_fadvisec
CsLyt�dddtj�Wn0tk
rF}z|jtjkr6�Wdd}~XYnXdS)Ni���r)rr�r�rrr�)rr�r
r
r�test_posix_fadvise_errno�s
z$PosixTester.test_posix_fadvise_errnoz!test needs fd support in os.utimec	CsHt��}t�tjtj�}�zt�|�t�|d�|�t	tj|d�|�t	tj||df�|�t	tj|d|f�t�|t
|�t
|�f�t�|||f�|jttj|||f||fd�|jttj||dfdd�|jttj|d|dfd�t�|t
|�t
|t
|�d�f�tj|t
|�t
|t
|�d�fd�Wdt�|�XdS)N)NN)�nsrge��A)
�timerIrrrrhr�utimer/r0�int�
ValueErrorr)r�nowr�r
r
r�test_utime_with_fd�s 
$*zPosixTester.test_utime_with_fdz.test needs follow_symlinks support in os.utimecCs�t��}tjtjddd�|jttjtjddd�|jttjtj|dfdd�|jttjtjd|fdd�tjtjt|�t|�fdd�tjtj||fdd�tjtjdd�dS)NF)�follow_symlinks)NN)r�rr�rrr/r0r�)rr�r
r
r�test_utime_nofollow_symlinks�sz(PosixTester.test_utime_nofollow_symlinks�writevztest needs posix.writev()c	Cs�t�tjtjtjB�}zrt�|d�}|�|d�t�|dtj	�|�dt
�|d��yt
�|g�}Wntk
rxYnX|�|d�Wdt�
|�XdS)N)stest1stt2st3r�rs
test1tt2t3)rIrrrr�r�r�r5r�r�rr�rr)rr�r��sizer
r
r�test_writev�szPosixTester.test_writevc	Csjt�tjtjtjB�}zB|�t��}t�|ddgd�WdQRX|�	|j
jtj�Wdt�
|�XdS)Nr�ii�)rIrrrr�r�r/rr�r5r�rr�r)rr�r�r
r
r�test_writev_overflow_32bits�s z'PosixTester.test_writev_overflow_32bits�readvztest needs posix.readv()c	Cs�t�tjtjtjB�}z�t�|d�t�|dtj�dd�dD�}|�	t
�||�d�|�	ddd	gd
d�|D��yt
�|g�}Wntk
r�YnX|�	|d�Wdt�
|�XdS)Ns
test1tt2t3rcSsg|]}t|��qSr
)r�)r�r�r
r
rr��sz*PosixTester.test_readv.<locals>.<listcomp>)r�r4rxr�stest1stt2st3cSsg|]}t|��qSr
)r�)r�r�r
r
rr��s)rIrrrr�r�r\r�r�r5rr�rr)rr�r�r�r
r
r�
test_readv�szPosixTester.test_readvc	Cs�t�tjtjtjB�}z^td�gd}|�t��}t�	||�WdQRX|�
|jjtj
�|�
t|d�dd�Wdt�|�XdS)Nii�rr�)rIrrrr�r�r�r/rr�r5r�rr�r�r)rr�r�r�r
r
r�test_readv_overflow_32bits
sz&PosixTester.test_readv_overflow_32bits�dupztest needs posix.dup()cCsBttj�}z(t�|���}|�|t�t�	|�Wd|�	�XdS)N)
rrrrr�rX�assertIsInstancer�rIr)rrr�r
r
r�test_dups
zPosixTester.test_dup�confstrztest needs posix.confstr()cCs.|�ttjd�|�tt�d��dkd�dS)NZ
CS_garbage�CS_PATHrT)r/r�rr�r5r6)rr
r
r�test_confstr"szPosixTester.test_confstr�dup2ztest needs posix.dup2()cCsDttj�}ttj�}zt�|��|���Wd|��|��XdS)N)rrrrr�rXr)r�fp1�fp2r
r
r�	test_dup2(s

zPosixTester.test_dup2�	O_CLOEXECzneeds os.O_CLOEXECrx��cCs8t�tjtjtjB�}|�tj|�|�t�	|��dS)N)
rIrrrrhr��
addCleanupr�assertFalse�get_inheritable)rr�r
r
r�test_oscloexec3szPosixTester.test_oscloexec�O_EXLOCKztest needs posix.O_EXLOCKcCs�t�tjtjtjBtjB�}|�ttjtjtjtjBtj	B�t�
|�ttd�r�t�tjtjtj
BtjB�}|�ttjtjtjtjBtj	B�t�
|�dS)N�O_SHLOCK)rIrrrr�r�r�r/r�
O_NONBLOCKrrrr�)rr�r
r
r�
test_osexlock:s

zPosixTester.test_osexlockr�ztest needs posix.O_SHLOCKcCs�t�tjtjtjBtjB�}t�tjtjtjBtjB�}t�|�t�|�tt	d�r�t�tjtjtjBtjB�}|�
ttjtjtjtj
BtjB�t�|�dS)Nr�)rIrrrr�r�r�rrrr/rrhr�r�)rZfd1Zfd2r�r
r
r�
test_osshlockJs


zPosixTester.test_osshlock�fstatztest needs posix.fstat()cCs`ttj�}zF|�t�|����|�t�|����|�t	dtjt
|����Wd|��XdS)Nz4should be string, bytes, os.PathLike or integer, not)rrrrTrr�rX�stat�assertRaisesRegexr0�floatr)rrr
r
r�
test_fstat[s
zPosixTester.test_fstatr�ztest needs posix.stat()c	Cs�|�t�tj��|�t�t�tj���|�tdtjt	t�tj���|�
tdtjd�|�
tdtjttj��|�
tdtjtt�tj���dS)Nz4should be string, bytes, os.PathLike or integer, not)
rTrr�rrrI�fsencodeZassertWarnsRegex�DeprecationWarningr�r�r0r�)rr
r
r�	test_statis
zPosixTester.test_stat�mkfifozdon't have mkfifo()c
Csvt�tj�yt�tjtjtjB�Wn0tk
rV}z|�	d|�Wdd}~XYnX|�
t�t�tj�j��dS)Nzposix.mkfifo(): %s)
rrrrr�r��S_IRUSR�S_IWUSR�PermissionErrorr�rT�S_ISFIFO�st_mode)rr	r
r
r�test_mkfifo|s zPosixTester.test_mkfifo�mknod�S_IFIFOzdon't have mknod()/S_IFIFOc
Cs�t�tj�tjtjBtjB}yt�tj|d�Wn<t	k
rn}z|�
|jtjtj
tjf�Wdd}~XYnX|�t�t�tj�j��t�tj�ytjtj|ddd�Wn<t	k
r�}z|�
|jtjtj
tjf�Wdd}~XYnXdS)Nr)rj�modeZdevice�dir_fd)rrrr�r�r�r�rr�r�assertInrrPr��EACCESrTr�r�)rr�r	r
r
r�
test_mknod�s,zPosixTester.test_mknod�makedevztest needs posix.makedev()cCs�t�tj�}|j}|�|t�|�|d�t�|�}|�|t�|�|d�|�	t�|�|�|�
ttjt|��|�
ttj�|�
t
tftjd�t�|�}|�|t�|�|d�|�	t�|�|�|�
ttjt|��|�
ttj�|�
t
tftjd�tj�d��r |dk�r |�d�|�	t�||�|�|�
ttjt|�|�|�
ttj|t|��|�
ttj|�|�
ttj�dS)Nrr=r�lzEbpo-31044: on FreeBSD CURRENT, minor() truncates 64-bit dev to 32-bit)rr�rr�st_devr�r�r7�majorr5r/r0r�r��
OverflowError�minorrfr�r�r�r�)r�stZdevr�r�r
r
r�test_makedev�s2


zPosixTester.test_makedevc		s����fdd�}t��}t��}|�||�|||�|�d|�|||�|�|d�|||�|dkr�d}|�||�|||�|�dd�|||�|�||�|||�nzt��dkr�t�d��nb��t|�dd�|||���t|�dd�|||�dt�	�k�r,��t|�dd�|||�xRt
tfD]F}��t|�||�|�|||���t|�|||��|||��q6WdS)Ncs0�dk	r,���}��|j|���|j|�dS)N)r5�st_uid�st_gid)�uid�gidr�)�first_paramr�	stat_funcr
r�
check_stat�sz6PosixTester._test_all_chown_common.<locals>.check_statr=rl)zHP-UXZSunOSz1Skipping because of non-standard chown() behavior)
rIr+r&r��systemrNrOr/rr'�strr�r0)	rZ
chown_funcrrrr�r�Z	big_value�tr
)rrrr�_test_all_chown_common�s>








z"PosixTester._test_all_chown_common�chownztest needs os.chown()cCsLt�tj�|�ttjtjdd�t�tj�|�	tjtjt
tdd��dS)Nr=r�)rIrrrr/rrr�create_empty_filerr.)rr
r
r�
test_chown�s
zPosixTester.test_chown�fchownztest needs os.fchown()cCsLt�tj�ttjd�}z$|��}|�tj|t	tdd��Wd|�
�XdS)Nr`r�)rIrrrrrXrrr
r.r)rZ	test_filer�r
r
r�test_fchowns
zPosixTester.test_fchown�lchownztest needs os.lchown()cCs8t�tj�t�ttj�|�tjtjt	tdd��dS)N�lstat)
rIrrr�symlink�_DUMMY_SYMLINKrrrr.)rr
r
r�test_lchownszPosixTester.test_lchownriztest needs posix.chdir()cCs"t�tj�|�ttjtj�dS)N)rrirIrUr/rrr)rr
r
r�
test_chdirszPosixTester.test_chdircCs|�tjt�tj��dS)N)r�rrr�listdirrIrU)rr
r
r�test_listdir szPosixTester.test_listdircCs|�tjt���dS)N)r�rrrr)rr
r
r�test_listdir_default#sz PosixTester.test_listdir_defaultcCs|�t�tj�t�d��dS)N�.)r�rIr�rrrr)rr
r
r�test_listdir_bytes(szPosixTester.test_listdir_bytesc
CslxfttfD]Z}|�t��t�|d��}WdQRX|�t�t	j
�|�x|D]}|�t|�t
�qLWq
WdS)Nr)r��
memoryviewZassertWarnsr�rrr�rIr�rrZassertIs�typer�)r�cls�namesr1r
r
r�test_listdir_bytes_like-s
z#PosixTester.test_listdir_bytes_likez)test needs fd support for posix.listdir()cCsdt�t��tj�}|�tj|�|�tt�d��tt�|���|�tt�d��tt�|���dS)N�.)	rrrrhr�rr5�sortedr)r�fr
r
r�test_listdir_fd5szPosixTester.test_listdir_fd�accessztest needs posix.access()cCs|�t�tjtj��dS)N)rTrr rrrI�R_OK)rr
r
r�test_accessDszPosixTester.test_access�umaskztest needs posix.umask()cCs$t�d�}|�|t�t�|�dS)Nr)rr#r�r�)rZold_maskr
r
r�
test_umaskHs
zPosixTester.test_umask�strerrorztest needs posix.strerror()cCs|�t�d��dS)Nr)rTrr%)rr
r
r�
test_strerrorNszPosixTester.test_strerror�pipeztest needs posix.pipe()cCs$t��\}}t�|�t�|�dS)N)rr'rIr)r�reader�writerr
r
r�	test_pipeSs
zPosixTester.test_pipe�pipe2ztest needs os.pipe2()�cCs�|�ttjd�|�ttjdd�t�d�\}}t�|�t�|�t�tjtjB�\}}|�tj|�|�tj|�|�t�	|��|�t�	|��|�t�
|��|�t�
|��|�ttj|d�yt�
|dtj�Wntk
r�YnXdS)NZDEADBEEFrr-r�)r/r0rIr+rr�r�r�r�r��get_blockingrr�r\rZ
PIPE_MAX_SIZE)r�rr`r
r
r�
test_pipe2Ys"

zPosixTester.test_pipe2cCs8ddl}|�ttj|jd�|�ttj|jd�dS)Nrr-)�	_testcapir/r�rIr+ZINT_MAXZUINT_MAX)rr0r
r
r�test_pipe2_c_limitsuszPosixTester.test_pipe2_c_limitsr�ztest needs posix.utime()cCs�t��}t�tjd�|�ttjtjd�|�ttjtj|df�|�ttjtjd|f�t�tjt|�t|�f�t�tj||f�dS)N)NN)r�rr�rrr/r0r�)rr�r
r
r�
test_utime~szPosixTester.test_utimec
Ks�t�|�}|�t|d��|jtjB}y|||f|�Wn>tk
rv}z |jtjkrX�d}|�	|�Wdd}~XYnXzft�|�}|�
|jtjB|j�yt|d�}	Wn2tk
r�}
z|�
|
jtj�Wdd}
~
XYnXWdt
�||j�XdS)N�st_flagsz2chflag UF_IMMUTABLE not supported by underlying fszw+)rIr�rTrr3�UF_IMMUTABLErr�
EOPNOTSUPPr�r5rrPr�chflags)rZchflags_funcZtarget_file�kwargsr��flags�errruZnew_str�r	r
r
r�_test_chflags_regular_file�s$

&z&PosixTester._test_chflags_regular_filer6ztest needs os.chflags()cCs|�tjtj�dS)N)r:rr6rr)rr
r
r�test_chflags�szPosixTester.test_chflags�lchflagsztest needs os.lchflags()cCs(|�tjtj�|jtjtjdd�dS)NF)r�)r:rr<rrr6)rr
r
r�test_lchflags_regular_file�sz&PosixTester.test_lchflags_regular_filec
Cs
t�tj�}|�t|d��t�tjt�|j�	t�t�
t�}dd�}x�tj|fD]�}|j
tjB}y|t|�Wn>tk
r�}z |jtjkr��d}|�|�Wdd}~XYnXz@t�tj�}t�
t�}	|�|j
|j
�|�|j
tjB|	j
�Wd|t|j
�XqTWdS)Nr3cSstj||dd�S)NF)r�)rr6)rjr8r
r
r�chflags_nofollow�sz;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollowz2chflag UF_IMMUTABLE not supported by underlying fs)rIr�rrrTrrrr�appendr
rr<r3r4rrr5r�r5)
rZ	testfn_stZdummy_symlink_str>�fnr8r9ruZ
new_testfn_stZnew_dummy_symlink_str
r
r�test_lchflags_symlink�s,

z!PosixTester.test_lchflags_symlinkcCsPtjdkrt}nt}x6tj��D](\}}|�t|�|�|�t|�|�q WdS)N�nt)	rIr1rr�rrl�itemsr5r)rZ	item_type�k�vr
r
r�test_environ�s
zPosixTester.test_environ�putenvzrequires os.putenv()c	Cs�|�t��t�dd�WdQRX|�t��t�dd�WdQRX|�t��t�dd�WdQRX|�t��t�dd�WdQRX|�t��t�d	d
�WdQRX|�t��t�dd�WdQRXdS)
NzFRUITVEGETABLEZcabbagesFRUITVEGETABLEscabbageZFRUITzorangeVEGETABLE=cabbagesFRUITsorangeVEGETABLE=cabbagezFRUIT=ORANGEZlemonsFRUIT=ORANGEslemon)r/r�rIrG)rr
r
r�test_putenv�szPosixTester.test_putenvrztest needs posix.getcwd()c	sbd}t��}tj�tj�d}z(yt�|�t�|�Wn
dSWdt�|�t�|�XdS)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwdrc	svyt�|�Wnt�d��YnXt�|�z*t��|dkrX�||t|�d�Wdt�d�t�|�XdS)Nz?mkdir cannot create directory sufficiently deep for getcwd testir-z..)rI�mkdirrNrOrirr6�rmdir)�dirnameZcurrent_path_length)�_create_and_do_getcwdr
rrL�s

zEPosixTester.test_getcwd_long_pathnames.<locals>._create_and_do_getcwd)	rIrrj�abspathrrrIri�rmtree)rrKrU�	base_pathr
)rLr�test_getcwd_long_pathnames�s

z&PosixTester.test_getcwd_long_pathnames�getgrouplistztest needs posix.getgrouplist()rKztest needs pwd.getpwuid()r+ztest needs os.getuid()cCs<t�t���d}t�t���d}|�|t�||��dS)Nrr4)rJrKrIr+r�rrQ)r�user�groupr
r
r�test_getgrouplistszPosixTester.test_getgrouplistr$ztest needs os.getegid()c	Cs�t�d��}|����}|��}WdQRXytdd�|��D��}Wntk
r^t�}YnX|dk	sl|svt�	d��t
jdkr�ddl}|�
d�p�d}td	d�|�d
�dd�D��dkr�t�	d
��|�t���}|�|p�|t��hk�dS)Nzid -G 2>/dev/nullcss|]}t|�VqdS)N)r�)r��gr
r
r�	<genexpr>sz-PosixTester.test_getgroups.<locals>.<genexpr>zneed working 'id -G'�darwinrZMACOSX_DEPLOYMENT_TARGETz10.0css|]}t|�VqdS)N)r�)r�r�r
r
rrV srrx)r�r�z$getgroups(2) is broken prior to 10.6)rI�popenr��stripr�setrkr�rNrOrfr��	sysconfigZget_config_var�tuple�symmetric_differencerr'rTr$)rZidg�groups�retZ
idg_groupsr[ZdtZsymdiffr
r
r�test_getgroupss 

$
zPosixTester.test_getgroupsz)test needs dir_fd support for os.access()c	CsBt�t��tj�}z|�tjtjtj	|d��Wdt�
|�XdS)N)r�)rrrrhrTr rrrIr!r)rrr
r
r�test_access_dir_fd,szPosixTester.test_access_dir_fdz'test needs dir_fd support in os.chmod()c	Cs|t�tjtj�t�t��tj	�}zHtjtjtjtj
B|d�t�tj�}|�|dtj@tjtj
B�Wdt�
|�XdS)N)r�r)rI�chmodrrr�r�rrrrhr�r5�S_IRWXUr)rr�sr
r
r�test_chmod_dir_fd4s"zPosixTester.test_chmod_dir_fdz'test needs dir_fd support in os.chown()c	Cs\t�tj�t�tj�t�t��tj�}z tjtjt	�
�t	��|d�Wdt�|�XdS)N)r�)
rrrrrrrrhrrIr+r&r)rrr
r
r�test_chown_dir_fdAs zPosixTester.test_chown_dir_fdz&test needs dir_fd support in os.stat()c	Cs�t�tj�ttjd��}|�d�WdQRXt�t��tj�}z�t�tj�}tjtj|d�}|�	||�tjtjdd�}|�	||�|j
tdtjtjt��d�|j
tdtjtjt|�d�|j
ttjtjdd�Wdt�|�XdS)Nr`z	testline
)r�zshould be integer or None, notl F�x:^V)rrrrr\rrrhr�r5r�r0r�r/r�r)r�outfiler�s1�s2r
r
r�test_stat_dir_fdLs"zPosixTester.test_stat_dir_fdz'test needs dir_fd support in os.utime()c	Cs�t�t��tj�}�zvt��}tjtjd|d�tjtj|d�|jt	tjtj||d�|jt	tjtjd|d�|jt	tjtj|df|d�|jt	tjtjd|f|d�|jt	tjtj|df|d�tjtjt
|�t
|�f|d�tjtj||f|d�tjtjt
|�t
|t
|�d�f|d�tjtj|t
|�t
|t
|�d�fd�tjtjk�r�ytjtjd|d�Wnt
k
�r�YnXWdt�|�XdS)N)r�)NN�xge��A)r�r"F)r�r�)rrrrhr�r�rrr/r0r�rI�supports_follow_symlinksr�r)rrr�r
r
r�test_utime_dir_fdbs,"
 
zPosixTester.test_utime_dir_fdz&test needs dir_fd support in os.link()c
Cs�t�t��tj�}z|ytjtjtjd||d�Wn0tk
rb}z|�d|�Wdd}~XYn*X|�	t�
tj�dt�
tjd�d�Wdt�|�t�tjd�XdS)N�link)�
src_dir_fd�
dst_dir_fdzposix.link(): %sr-)
rrrrhrnrrr�r�r5r�rr)rrr	r
r
r�test_link_dir_fd�s 
zPosixTester.test_link_dir_fdz'test needs dir_fd support in os.mkdir()c
Cs\t�t��tj�}z(tjtjd|d�t�tjd�Wdt�|�t�	tjd�XdS)N�dir)r�)
rrrrhrIrrr�rrN)rrr
r
r�test_mkdir_dir_fd�s
zPosixTester.test_mkdir_dir_fdzAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c
Cs�t�tj�tjtjBtjB}t�t�	�tj
�}ztytjtj|d|d�Wn<tk
r�}z|�
|jtjtjtjf�Wdd}~XYnX|�t�t�tj�j��Wdt�|�XdS)Nr)r�)rrrr�r�r�r�rrrrhr�rr�rrPr�r�rTr�r�r)rr�rr	r
r
r�test_mknod_dir_fd�s,zPosixTester.test_mknod_dir_fdz&test needs dir_fd support in os.open()c	Cs�t�tj�ttjd��}|�d�WdQRXt�t��tj�}tjtjtj|d�}z$t�|d�j	dd�}|�
d|�Wdt�|�t�|�XdS)Nr`z	testline
)r��	zutf-8)�encoding)rrrrr\rrrhr��decoder5r)rrg�a�brsr
r
r�test_open_dir_fd�s
zPosixTester.test_open_dir_fdz*test needs dir_fd support in os.readlink()c
Cstt�tjtjd�t�t��tj�}z,|�t�	tjd�tj	tjd|d��Wdt�
tjd�t�|�XdS)Nrn)r�)rIrrrrrrrhr5�readlinkrr)rrr
r
r�test_readlink_dir_fd�sz PosixTester.test_readlink_dir_fdz(test needs dir_fd support in os.rename()c	Cs�t�tj�t�tjd�t�t��tj�}zRytjtjdtj||d�Wn"t�tjdtj��YnXt�	tj�Wdt�
|�XdS)NZren)rorp)rrrrrrrrh�renamer�r)rrr
r
r�test_rename_dir_fd�szPosixTester.test_rename_dir_fdz)test needs dir_fd support in os.symlink()c
Csjt�t��tj�}z6tjtjtjd|d�|�t�tjd�tj�Wdt�	|�t�
tjd�XdS)Nrn)r�)rrrrhrrrr5r{rr)rrr
r
r�test_symlink_dir_fd�s
zPosixTester.test_symlink_dir_fdz(test needs dir_fd support in os.unlink()c	Cs�t�t��tj�}t�tjd�t�tjd�zRytjtjd|d�Wnt�tjd��YnX|�	t
tjtjd�Wdt�|�XdS)N�del)r�rn)rrrrhrrrr�rr/rr)rrr
r
r�test_unlink_dir_fd�szPosixTester.test_unlink_dir_fdz(test needs dir_fd support in os.mkfifo()c
Cs�t�tj�t�t��tj�}znytjtjtj	tj
B|d�Wn0tk
rn}z|�d|�Wdd}~XYnX|�
t�t�tj�j��Wdt�|�XdS)N)r�zposix.mkfifo(): %s)rrrrrrrhr�r�r�r�r�r�rTr�r�r)rrr	r
r
r�test_mkfifo_dir_fd�s zPosixTester.test_mkfifo_dir_fd�sched_yieldzdon't have scheduling support�sched_setaffinityz!don't have sched affinity supportcCst��dS)N)rr�)rr
r
r�test_sched_yieldszPosixTester.test_sched_yield�sched_get_priority_maxz!requires sched_get_priority_max()cCsltj}t�|�}t�|�}|�|t�|�|t�|�||�tjdkrh|�	t
tjd�|�	t
tjd�dS)NrWi��)r�SCHED_RR�sched_get_priority_minr�r�r�r7rfr�r/r)rZpol�lo�hir
r
r�test_sched_prioritys


zPosixTester.test_sched_priorityc
Cs�dd�tj��D�}t�d�}|�||�yt�t���}Wn0tk
rl}z|jtj	kr\�Wdd}~XYnX|�||�|�
ttjd�|�
ttjd�t�d�}|�|j
t�tj�d��s&yt�d||�t�d|�Wn4tk
�r}z|jtj	k�r�Wdd}~XYnX|�
ttjd|�|�
ttjd||�|�
ttjd|d�|�
ttjdd�t�d�}|�
ttjd|�d}t�|�}|�
ttjd|�tj|d�}|�
ttjd|�dS)	NcSsg|]\}}|�d�r|�qS)ZSCHED_)r�)r�r1Zschedr
r
rr�szDPosixTester.test_get_and_set_scheduler_and_param.<locals>.<listcomp>rr=)r�r��+l���)�sched_priority)r�__dict__rCrr�rIr*rrrPr/�sched_getparamr�r�r�rfr�r��sched_setscheduler�sched_setparamr0�sched_paramr�)rZpossible_schedulersZmine�parentr	ZparamZlarger
r
r�$test_get_and_set_scheduler_and_params>



z0PosixTester.test_get_and_set_scheduler_and_param�sched_rr_get_intervalzno functionc
Csryt�d�}Wn:tk
rH}z|jtjkr.�|�d�Wdd}~XYnX|�|t�|�|d�|�	|d�dS)Nrz only works on SCHED_RR processesgg�?)
rr�rrr�r�r�r�r7�
assertLess)r�intervalr	r
r
r�test_sched_rr_get_interval>sz&PosixTester.test_sched_rr_get_intervalcCslt�d�}|�|t�|�t|�d�|�ttjd�x0|D](}|�|t�|�|d�|�	|d�q<WdS)Nrr-r=l)
r�sched_getaffinityr�rZr7r6r/rr�r�)r�maskZcpur
r
r�test_sched_getaffinityMs

z"PosixTester.test_sched_getaffinitycCs�t�d�}t|�dkr|��t�d|�|�t�d�|�|�ttjdg�|�ttjddg�|�ttjdt	t
d��|�ttjddd>g�|�ttjd|�dS)Nrr-i����Z0X�r=)rr�r6�popr�r5r/rr��mapr�r�)rr�r
r
r�test_sched_setaffinityXs
z"PosixTester.test_sched_setaffinitycCstjtjtjtjdS)N)r�	RTLD_LAZY�RTLD_NOW�RTLD_GLOBAL�
RTLD_LOCAL)rr
r
r�test_rtld_constantsfszPosixTester.test_rtld_constants�	SEEK_HOLEz(test needs an OS that reports file holesc
Cs�ttjd���}|�d�|��|��}|��}yrx@t|�D]4}|�|t	�
||t	j��|�|t	�
||t	j
��q<W|�tt	j
||t	j�|�tt	j
||t	j
�Wntk
r�t�d��YnXWdQRXdS)Nzr+bshellozOSError raised!)rrrr\r]�tellrX�ranger5rIr��	SEEK_DATAZassertLessEqualr�r/rrNrO)rrr�Zfnor�r
r
r�
test_fs_holesms	
zPosixTester.test_fs_holescCs�x�dD]�}tt|d�}|dkr qxjdtjfD]N}y|d|�Wq,tk
rx}z|�d�|�t|��PWdd}~XYq,Xq,W|�d|�qWdS)N)r}�replacernZnoodly2Zdoesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r.rIrrrr��formatrrQ)rr1Zfunction�dstr	r
r
r�test_path_error2�s
zPosixTester.test_path_error2c	Cs�tj}|d}|�tj|�t�|�d}z.|�t��t�|tjtj	B�}WdQRXWd|dk	rlt�
|�X|�tj�
|��|�ttj|�|�tj�
|��t|d��
�|�ttj|�dS)N��wb)rrr�rr/r�rIrr�r�rr�rj�existsrIr�)rr@�fn_with_NULr�r
r
r�test_path_with_null_character�s
"z)PosixTester.test_path_with_null_characterc	Cs�t�tj�}|d}|�tj|�t�|�d}z.|�t��t�|tj	tj
B�}WdQRXWd|dk	rrt�|�X|�tj
�|��|�ttj|�|�tj
�|��t|d���|�ttj|�dS)Nr�r�)rIr�rrr�rr/r�rr�r�rr�rjr�rIr�)rr@r�r�r
r
r�test_path_with_null_byte�s
"z$PosixTester.test_path_with_null_byte)��__name__�
__module__�__qualname__rrr2rN�
skipUnlessrrr9r;r@rArDrErRrVrYr^rar.rI�supports_fdrnrtrr�r�r�r��requires_32br�r�r�r�r�r�r�r�r�r�r�rlr�r�r�r�r�r�r�r�rZrequires_linux_versionr�r�r�r�r�r�r�r�r�rr	rrrrrrrrrr"r$r&r*r/Zcpython_onlyr1r2r:r;r=rArFrHrPrJrTr`r �supports_dir_fdrarbrerrfrjrmrnrqrIrsr�rtrrzr{r|r}r~rrrr�r�r�Zrequires_sched_hZrequires_sched_affinityr�r��requires_schedr�r�r�r�r�r�r�r�r�r
r
r
rr
&s$
	
=




	";

!	$""""
"""""
""""
"")"r
c@sPeZdZdd�Zdd�Ze�eed�d�dd��Z	e�eed	�d
�dd��Z
d
S)�PosixGroupsTestercCsLt��dkrt�d��ttd�s*t�d��tjdkr>t�d��t��|_dS)Nrznot enough privilegesr'zneed posix.getgroupsrWzgetgroups(2) is broken on OSX)	rr+rNrOrrfr�r'�saved_groups)rr
r
rr�s




zPosixGroupsTester.setUpcCsHttd�rt�|j�n,ttd�rDt�t���j}t�||jd�dS)N�	setgroupsrFr)	rrr�r�rJrKr+rLrF)rr1r
r
rr�s


zPosixGroupsTester.tearDownrFztest needs posix.initgroups()cCsDt|jpdg�d}t�t���j}t�||�|�|t�	��dS)Nrr-)
�maxr�rJrKrr+rLrFr�r')rrUr1r
r
rrR�sz!PosixGroupsTester.test_initgroupsr�ztest needs posix.setgroups()cCs:x4dgttd��gD]}t�|�|�|t���qWdS)Nr�)r�r�rr�ZassertListEqualr')rr^r
r
r�test_setgroups�s
z PosixGroupsTester.test_setgroupsN)r�r�r�rrrNr�rrrRr�r
r
r
rr��s		r�cCs zt�tt�Wdt��XdS)N)rZrun_unittestr
r�Z
reap_childrenr
r
r
r�	test_main�sr��__main__)r[rZtest.support.script_helperr�
import_modulerrrfr�rIr�rJr�ZtempfilerNrrj�joinZ
gettempdirrrr��maxsizer�rr�ZTestCaser
r�r�r�r
r
r
r�<module>sD

##