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: //proc/thread-self/root/usr/local/lib/python3.7/test/__pycache__/test_os.cpython-37.opt-2.pyc
B

��g�,�	@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZyddlZWnek
r�dZYnXyddlZWnek
�r dZYnXyddlZWnek
�rHdZYnXyddlZdd�e� �D�Z!Wnee"fk
�r�gZ!YnXyddl#m$Z$m%Z%Wn ek
�r�ej&Z$Z%YnXddl'm(Z(ddl)m*Z*m+Z+dZ,e-ed	��r�e�.�dkZ,e-ed
��rej/j0�rej/j0�1d�Z2ndZ2ej3�1d��o8e�4�dkZ5d
d�Z6d�dd�Z7Gdd�dej8�Z9Gdd�dej8�Z:Gdd�dej8�Z;ddlm<Z<Gdd�de<j=�Z>Gdd�dej8�Z?e�@e-ed�d�Gdd �d e?��ZAGd!d"�d"e?�ZBe�@e-ed�d�Gd#d$�d$eA��ZCGd%d&�d&ej8�ZDe�@e-ed'�d(�Gd)d*�d*ej8��ZEGd+d,�d,ej8�ZFGd-d.�d.ej8�ZGGd/d0�d0ej8�ZHe�@e-ed1�d2�Gd3d4�d4ej8��ZIe�Jd5�d6k�p�e�Jd7�d6k�p�e�Jd8�d6kZKe�LeKd9�Gd:d;�d;ej8��ZMejNd�d<d=��ZOGd>d?�d?ej8�ZPe�@ej3d@kdA�GdBdC�dCej8��ZQGdDdE�dEej8�ZRGdFdG�dGej8�ZSe�Lej3d@kdH�GdIdJ�dJej8��ZTe�Lej3d@kdH�GdKdL�dLej8��ZUe�@ej3d@kdA�GdMdN�dNej8��ZVe�@ej3d@kdA�GdOdP�dPej8��ZWe�@ej3d@kdA�ejXGdQdR�dRej8���ZYe�@ej3d@kdA�GdSdT�dTej8��ZZe�@ej3d@kdA�GdUdV�dVej8��Z[ejXGdWdX�dXej8��Z\GdYdZ�dZej8�Z]Gd[d\�d\ej8�Z^Gd]d^�d^ej8�Z_Gd_d`�d`ej8�Z`e�ada�e�@e-edb�dc�Gddde�deej8���Zbe�@e-edf��o�e-edg�dh�Gdidj�djej8��ZcGdkdl�dlejdeje�Zfe�@e-edm�dn�Gdodp�dpej8��Zgdqdr�Zhe�@eh�ds�e�idtdudv�Gdwdx�dxej8���Zje�@e-edy�dz�Gd{d|�d|ej8��ZkGd}d~�d~ej8�ZlGdd��d�ej8�ZmGd�d��d�ej8�ZnGd�d��d�ej8�Zoe�@e-ed��d��Gd�d��d�ej8��ZpGd�d��d�ej8�ZqGd�d��d�ej8�ZrGd�d��d�ej8�ZsGd�d��d�ej8�Zte-ed���rpGd�d��d�es�Zuevd�k�r�e�w�dS)��N)�supportcCsg|]
}|j�qS�)Zpw_uid)�.0�urr�(/usr/local/lib/python3.7/test/test_os.py�
<listcomp>.sr)�INT_MAX�PY_SSIZE_T_MAX)�assert_python_ok)�
unix_shell�FakePathF�geteuid�thread_infoZlinuxthreadsZfreebsdcCst�tt|�d|�S)Nzrequires os.%s)�unittest�
skipUnless�hasattr�os)�namerrr�requires_os_funcKsr�contentc	Cs&t|dd��}|�|�WdQRXdS)N�xbr)�open�write)�filenameZcontent�fprrr�create_fileOsrc@s�eZdZdd�ZeZdd�Zdd�Zejdd��Z	d	d
�Z
eje�e
ekd�eje
dd
dd�dd����Zdd�Zdd�Ze�ejdkd�dd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$S)%�	FileTestscCstj�tj�rt�tj�dS)N)r�path�lexistsr�TESTFN�unlink)�selfrrr�setUpVszFileTests.setUpcCs:t�tjtjtjB�}t�|�|�t�tjtj	��dS)N)
rrrr�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK)r!�frrr�test_access[s
zFileTests.test_accessc	Cs�t�tjtjtjB�}t�|�}zNd}xD||dkrjt�|�|d7}|dkrX|�d�|t�|�}}q(WWdt�|�Xt�	||d�|�
ttj|d�dS)Nr��
z%couldn't allocate two consecutive fds��a)
rrrrr#r$�dupr%�skipTest�
closerange�assertRaises�OSErrorr)r!�first�secondZretriesrrr�test_closerange`s


zFileTests.test_closerangecCs<tj}t�|�}|�ttj|d�t�|�}|�||�dS)Nr)	rr�sys�getrefcountr2�	TypeErrorr�rename�assertEqual)r!r�old�newrrr�test_renameus


zFileTests.test_renamec	Cslttjd��V}|�d�|��|��}t�|dd�t�|d�}|�	t
|�t�|�	|d�WdQRXdS)Nzw+bsspamr�)rrrr�flush�filenor�lseek�readr;�type�bytes)r!�fobj�fd�srrr�	test_read}s
zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXr,r+F)�sizeZmemuseZdry_runc	CsT|�tjtj�ttjd�ttjd��}t�|��|�}WdQRX|�	|d�dS)Nstest�rb)
�
addCleanuprr rrrrrCrAr;)r!rJr�datarrr�test_large_read�s
zFileTests.test_large_readc	Cs�t�tjtjtjB�}|�ttj|d�t�|d�t�|t	d��t�|t
d��t�|�ttjd�� }|�|�
���dddg�WdQRXdS)	N�beanssbacon
seggs
sspam
rKsbaconseggssspam)rrrrr#�O_WRONLYr2r9r�	bytearray�
memoryviewr%r;rC�
splitlines)r!rGrFrrr�
test_write�s
zFileTests.test_writecGs"tj|tjdd�}|�|d�dS)NT)�
creationflags�shellr)�
subprocessZcallZCREATE_NEW_CONSOLEr;)r!�argsZretcoderrr�write_windows_console�szFileTests.write_windows_console�win32z$test specific to the Windows consolecCs*d}|�tjd|�|�tjdd|�dS)Nzprint('x' * 100000)z-cz-u)rYr7�
executable)r!�coderrr�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs,t�tjtj�}tj|f|��}|��dS)N)rrrr�O_RDONLY�fdopenr%)r!rXrGr)rrr�
fdopen_helper�szFileTests.fdopen_helpercCsBt�tjtjtjB�}t�|�|��|�d�|�dd�dS)N�r�d)rrrrr#r$r%r`)r!rGrrr�test_fdopen�s


zFileTests.test_fdopenc	Cs�tjd}|�tjtj�|�tj|�ttjd�t|d�t�tj|�|�ttj	tj�t
|d��}|�|��d�WdQRXdS)Nz.2�1�2ra�1)
rrrLr rr�replacer2�FileNotFoundError�statrr;rC)r!�TESTFN2r)rrr�test_replace�s

zFileTests.test_replacecCs"tjttjddd�}t�|�dS)Ni�)r�flags�mode�dir_fd)rr�__file__r^r%)r!r)rrr�test_open_keywords�szFileTests.test_open_keywordsc	Cs@t�td�}y|dtjddd�Wnttfk
r:YnXdS)N�symlink�targetF)�src�dst�target_is_directoryrn)rZ
get_attributerr�NotImplementedErrorr3)r!rqrrr�test_symlink_keywords�szFileTests.test_symlink_keywordsN)�__name__�
__module__�__qualname__r"�tearDownr*r6r�cpython_onlyr>rIrrrr	Z
bigmemtestrNrTrYr7�platformr]r`rcrkrprwrrrrrUs&

 

rc@s�eZdZdd�Ze�eed�d�dd��Zdd�Z	d	d
�Z
dd�Ze�eed
�d�dd��Ze�eed
�d�dd��Z
e�ejdkd�dd��Ze�ejdkd�e�eed�d�dd���Zdd�Ze�ejdkd�dd ��Ze�ejdkd�d!d"��Zd#S)$�StatAttributeTestscCs(tj|_|�tj|j�t|jd�dS)NsABC)rr�fnamerLr r)r!rrrr"�szStatAttributeTests.setUpriztest needs os.stat()c
	Cs�t�|�}|�|tjd�|�|jd�t|�}xptt�D]d}|dd�dkr<|��}|�d�rldd�}ndd�}|�|t||��|tt|��|�	||�q<WxDd�
�D]8}tt||�d�}t||d	�d
}|j||dd�q�Wy|d
|�
d�Wntk
�rYnXyd|_|�
d�Wntk
�rBYnXyd|_|�
d�Wnttfk
�rrYnXyd|_|�
d�Wntk
�r�YnXyt�d�}	|�
d�Wntk
�r�YnXyt�d�}	Wntk
�r�YnXdS)N�ZST_ZTIMEcSst|�S)N)�int)�xrrr�trunc��z7StatAttributeTests.check_stat_attributes.<locals>.trunccSs|S)Nr)r�rrrr��r�zst_atime st_mtime st_ctimei��Z_nsi'r-)�delta��zNo exception raisedr+)r,)rr+r-r�r?�����	r,���
�)rrir;�ST_SIZE�st_size�dir�lower�endswith�getattr�assertIn�splitr��assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevr9�parrot�stat_result)
r!r�result�membersr�attrr�ZfloatyZnanosecondy�result2rrr�check_stat_attributes�s\



z(StatAttributeTests.check_stat_attributescCs|�|j�dS)N)r�r)r!rrr�test_stat_attributes*sz'StatAttributeTests.test_stat_attributescCsHy|j�t���}Wn$tk
r8|�d|j�YnX|�|�dS)Nz#cannot encode %a for the filesystem)r�encoder7�getfilesystemencoding�UnicodeEncodeErrorr0r�)r!rrrr�test_stat_attributes_bytes-s
z-StatAttributeTests.test_stat_attributes_bytescCsjt�|j�}xXttjd�D]F}t�||�}|�d|�|dkrL|�d|�t�|�}|�	||�qWdS)Nr+sstat_resultr?scos
stat_result
)
rrir�range�pickle�HIGHEST_PROTOCOL�dumpsr��loadsr;)r!r��proto�p�	unpickledrrr�test_stat_result_pickle4s
z*StatAttributeTests.test_stat_result_pickle�statvfsztest needs os.statvfs()cCs t�|j�}|�|j|d�d}x.t|�D]"\}}|�t|d|�||�q,W|�t|j	t
��|�t|�d�yd|_|�d�Wnt
k
r�YnXyd|_|�d�Wnt
k
r�YnXyt�d�}|�d�Wntk
r�YnXyt�d�}Wntk
�rYnXdS)	Nr�)
ZbsizeZfrsizeZblocksZbfreeZbavail�filesZffreeZfavail�flagZnamemaxZf_r,r+zNo exception raised)r,)rr+r-r�r?r�r�r�r�r�r,r�r�r�r�)rr�rr;�f_bfree�	enumerater�r&�
isinstance�f_fsidr��lenr�r�r��statvfs_resultr9)r!r�r��value�memberr�rrr�test_statvfs_attributes>s4
z*StatAttributeTests.test_statvfs_attributeszneed os.statvfs()cCsjt�|j�}xXttjd�D]F}t�||�}|�d|�|dkrL|�d|�t�|�}|�	||�qWdS)Nr+sstatvfs_resultr?scos
statvfs_result
)
rr�rr�r�r�r�r�r�r;)r!r�r�r�r�rrr�test_statvfs_result_picklejs
z-StatAttributeTests.test_statvfs_result_picklerZzWin32 specific testsc
Cs\yt�d�WnHtk
r,|�d�Yn,tk
rV}z|�d�Wdd}~XYnXdS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rrirhr0r3r�)r!�errr�test_1686475wszStatAttributeTests.test_1686475�pipezrequires os.pipe()c	Csht��\}}zt�|�Wdt�|�t�|�X|�t��}t�|�WdQRX|�|jjtj	�dS)N)
rr�rir%r2r3r;�	exception�errno�EBADF)r!ra�wZctxrrr�
test_15261�s
zStatAttributeTests.test_15261cCsF|�t|d��|�t|jt��|�d|jko:dkn�dS)N�st_file_attributesrl��)r&rr�r�r�)r!r�rrr�check_file_attributes�sz(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificcCszt�|j�}|�|�|�|jtj@d�tjd}t�	|�|�
tj|�t�|�}|�|�|�|jtj@tj�dS)Nrr�)rrirr�r;r��FILE_ATTRIBUTE_DIRECTORYrr�mkdirrL�rmdir)r!r��dirnamerrr�test_file_attributes�s






z'StatAttributeTests.test_file_attributescCsdtj�tjd|j�}|�tj|�t|d�d}t	j
d|ddg|d�t�|�}|�|j
d�dS)	NZTEMPsABCr�z
icacls.exez/denyz*S-1-5-32-545:(S))rUr)rr�join�environrrLrr rrW�
check_callri�assertNotEqualr�)r!rZDETACHED_PROCESSr�rrr�test_access_denied�s


z%StatAttributeTests.test_access_deniedN)rxryrzr"rrrrr�r�r�r�r�r�r7r}r�r�r�r�r�rrrrr~�sB
,

r~c@s�eZdZdd�Zdd�Zd)dd�Zdd	�Zed
d��Zdd
�Z	dd�Z
e�e
je
jkd�dd��Ze�e
je
jkd�dd��Ze�e
je
jkd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zejd'd(��ZdS)*�
UtimeTestscCsDtj|_tj�|jd�|_|�tj|j�t�	|j�t
|j�dS)N�f1)rrr�rrr�rrL�rmtreer�r)r!rrrr"�s
zUtimeTests.setUpcCs4t�|�}|j|dkp2|j|dkp2|j|dkS)Nr�r�r�)rri�st_atime�st_mtime�st_ctime)r!r�strrr�support_subsecond�s
zUtimeTests.support_subsecondNcCs�|s
|j}|�|�}|r"d}d}nd}d}||||f�t�|�}|rt|j|j|ddd�|j|j|ddd�n$|�|j|d�|�|j|d�|�|j|�|�|j	|�dS)Ni8Z�;l�
o]lrTlP�9g��&�.>g���ư>)r�)
rr�rrir�r�r�r;�st_atime_ns�st_mtime_ns)r!�set_timerr��atime_ns�mtime_nsr�rrr�_test_utime�s"

zUtimeTests._test_utimecCsdd�}|�|�dS)NcSstj||d�dS)N)�ns)r�utime)rr�rrrr��sz'UtimeTests.test_utime.<locals>.set_time)r�)r!r�rrr�
test_utime�szUtimeTests.test_utimecCs|ddS)Ng��&�.>g��&�.>r)r�rrr�	ns_to_sec�szUtimeTests.ns_to_seccs�fdd�}��|�dS)Ncs0|\}}��|�}��|�}t�|||f�dS)N)r�rr�)rr�r�r��atime�mtime)r!rrr��s

z2UtimeTests.test_utime_by_indexed.<locals>.set_time)r�)r!r�r)r!r�test_utime_by_indexed�sz UtimeTests.test_utime_by_indexedcs�fdd�}��|�dS)Ncs2|\}}��|�}��|�}tj|||fd�dS)N)�times)r�rr�)rr�r�r�r�r�)r!rrr�s

z0UtimeTests.test_utime_by_times.<locals>.set_time)r�)r!r�r)r!r�test_utime_by_timesszUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd�}|�|�dS)NcSstj||dd�dS)NF)r��follow_symlinks)rr�)rr�rrrr�sz9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_time)r�)r!r�rrr�test_utime_nofollow_symlinkssz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd�}|�|�dS)Nc	Ss.t|dd��}tj|��|d�WdQRXdS)N�wbr)r�)rrr�rA)rr�rrrrr�sz*UtimeTests.test_utime_fd.<locals>.set_time)r�)r!r�rrr�
test_utime_fdszUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd�}|�|�dS)Nc	SsDtj�|�\}}t�|tj�}ztj|||d�Wdt�|�XdS)N)rnr�)rrr�rr^r�r%)rr�r�r�dirfdrrrr�'s
z.UtimeTests.test_utime_dir_fd.<locals>.set_time)r�)r!r�rrr�test_utime_dir_fd$szUtimeTests.test_utime_dir_fdcCsdd�}|j||jd�dS)NcSstj||d�dS)N)r�)rr�)rr�rrrr�2sz1UtimeTests.test_utime_directory.<locals>.set_time)r)r�r�)r!r�rrr�test_utime_directory1szUtimeTests.test_utime_directorycCsbt��}||j�|�|j�s$d}nd}t�|j�}d|j||j|f}|j|j|||d�dS)Ng�?g�������?zst_time=%r, current=%r, dt=%r)r��msg)�timerr�rrir�r�)r!r�Zcurrentr�r�r�rrr�_test_utime_current7s

zUtimeTests._test_utime_currentcs�fdd�}��|�dS)Ncst��j�dS)N)rr�r)r)r!rrr�Nsz/UtimeTests.test_utime_current.<locals>.set_time)r�)r!r�r)r!r�test_utime_currentMszUtimeTests.test_utime_currentcs�fdd�}��|�dS)Ncst��jd�dS)N)rr�r)r)r!rrr�Tsz3UtimeTests.test_utime_current_old.<locals>.set_time)r�)r!r�r)r!r�test_utime_current_oldSsz!UtimeTests.test_utime_current_oldcCsltjdkrhtj�tj�|��dd}ddl}|jj}|�	dd�}|�
|ddddd|t|��}|rh|jSdS)NrZr�\�rb)
r7r}rr�
splitdrive�abspath�ctypes�windll�kernel32Zcreate_unicode_bufferZGetVolumeInformationWr�r�)r!r�rootr�r��buf�okrrr�get_file_systemYs

zUtimeTests.get_file_systemcCsJ|�|j�dkr|�d�d}t�|j||f�|�t�|j�j|�dS)NZNTFSz
requires NTFSlrT)	rr�r0rr�rr;rir�)r!Zlargerrr�test_large_timefs

zUtimeTests.test_large_timec
Cs�|�t��tj|jddd�WdQRX|�t��t�|jddg�WdQRX|�t��t�|jd�WdQRX|�t��t�|jd�WdQRX|�t��tj|jddgd�WdQRX|�t��tj|jdd�WdQRX|�t��tj|jdd�WdQRXtjtjk�rD|�t��tj|jddd�WdQRXtjtjk�r�t	|jdd	��,}|�t��t�|�
�d�WdQRXWdQRXtjtjk�r�|�t��tj|jdd	d
�WdQRXdS)N)r�r�)r�r�)r�)r�r�r�F)r�r�r)rn)r2�
ValueErrorrr�rr9�supports_follow_symlinksrv�supports_fdrrA�supports_dir_fd)r!rrrr�test_utime_invalid_argumentsps0$z'UtimeTests.test_utime_invalid_argumentsc	Cs�dd�}|�t��tj|j|d�dfd�WdQRX|�t��tj|j|d�dfd�WdQRX|�t��tj|j|d�dfd�WdQRXdS)NcsG�fdd�d�}|�S)NcseZdZ�fdd�ZdS)z?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadIntcs�S)Nr)rX)�divmod_ret_valrr�
__divmod__�szJUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__N)rxryrzr	r)rrr�BadInt�sr
r)rr
r)rr�get_bad_int�sz/UtimeTests.test_issue31577.<locals>.get_bad_int�*r+)r�r)r+r-r�)r2r9rr�r)r!rrrr�test_issue31577�s""zUtimeTests.test_issue31577)N)rxryrzr"r�r�r��staticmethodr�r�r�rrrr�rr�rr�rr�r�r�r�r�rrrrr|r
rrrrr��s*
			

r�)�
mapping_testsc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Ze�	e
o>ej�
e
�d
�dd��Ze�	e
o^ej�
e
�d
�d
d��Zdd�Zdd�Zdd�Zdd�Ze�	ejd�dd��Ze�dd�dd��Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�ZdS)(�EnvironTestsNcCsFttj�|_tjrttj�|_x"|����D]\}}|tj|<q,WdS)N)	�dictrr��_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items)r!�keyr�rrrr"�s
zEnvironTests.setUpcCs:tj��tj�|j�tjr6tj��tj�|j�dS)N)rr��clear�updaterrrr)r!rrrr{�s


zEnvironTests.tearDowncCsdddd�S)NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3r)r!rrrr�szEnvironTests._referencecCstj��tjS)N)rr�r)r!rrr�_empty_mapping�s
zEnvironTests._empty_mappingzrequires a shellc	CsNtj��tjjdd�t�dt��}|����}|�|d�WdQRXdS)NZWorld)ZHELLOz%s -c 'echo $HELLO')	rr�rr�popenrrC�stripr;)r!rr�rrr�test_update2�s

zEnvironTests.test_update2c	Csdt�dt��L}t|�}|�t|�d�|�t|�d�|�t|�d�|�tt|�WdQRXdS)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rrr�iterr;�nextr2�
StopIteration)r!r�itrrr�test_os_popen_iter�s
zEnvironTests.test_os_popen_itercCs<x6tj��D](\}}|�t|�t�|�t|�t�qWdS)N)rr�rr;rD�str)r!r�valrrr�test_keyvalue_types�sz EnvironTests.test_keyvalue_typescCs2x,|����D]\}}|�tj�|�|�qWdS)N)rrr;rr��get)r!rr�rrr�
test_items�szEnvironTests.test_itemsc
Cs4tj}|�t|�d�d�dd�|��D����dS)Nzenviron({{{}}})z, css|]\}}d�||�VqdS)z
{!r}: {!r}N)�format)rrr�rrr�	<genexpr>�sz-EnvironTests.test___repr__.<locals>.<genexpr>)rr�r;�reprr)r�r)r!�envrrr�
test___repr__�szEnvironTests.test___repr__c	CsFtj�tj�}ddddg}dtj�|�i}tj}z2t|�t_|�|t���|�|tjdd��Wd|t_X|�|t�i��|�dt�ddi��|�|t�|��tj	�rBy&t
jdd	��d
dd�}WdQRXWntk
r�YnX|�
ttj|�|�t�d
di�dg�|�t�d
di�dg�|�t�ddi�dg�dS)Nz/montyz/pythonr�z/flying/circus�PATH)r,)r�T)�recordrfre)r.sPATHsPATHsabc�abc)r�defpathr��pathsepr�r�r�assertSequenceEqual�
get_exec_pathr�warnings�catch_warnings�BytesWarningr2r)r!Zdefpath_listZ	test_pathZtest_envZ
saved_environZ	mixed_envrrr�test_get_exec_path�s2
zEnvironTests.test_get_exec_pathz#os.environb required for this test.cCs�d}y|�t��d�}Wn,tk
rDdt��f}|�|�YnX|tjd<|�tjd|�|�tjd|�d}|tjd<|�tjd|�|�	t��d�}|�tjd|�dS)	Nueuro€�surrogateescapez'U+20AC character is not encodable to %sZunicodesunicode��sbytesrE)
r�r7r�r�r0rr�r;r�decode)r!r�Zvalue_bytesr�Z	value_strrrr�
test_environb	s 



zEnvironTests.test_environbr,r�cCs@tjdkr&dd}|�ttjj|�nd}|�ttjj|�dS)NrZr�iP�zkey=)r7r}r2rrr��__delitem__r3)r!rrrr�test_unset_error!s

zEnvironTests.test_unset_errorc	Cs�d}|�|tj�|�t��}tj|WdQRX|�|jjd|�|�|jj	�|�t��}tj|=WdQRX|�|jjd|�|�|jj	�dS)NZ
missingkeyr)
�assertNotInrr�r2�KeyError�assertIsr�rXr&�__suppress_context__)r!�missing�cmrrr�
test_key_type,szEnvironTests.test_key_typecCsLt|�}d}t|�dtj|<zt|�|�tj|d�Wdtj|=XdS)NZ__new_key__Ztest_environ_iteration)rr rr�r;)r!Z
collection�iteratorZnew_keyrrr�_test_environ_iteration:s
z$EnvironTests._test_environ_iterationcCs|�tj�dS)N)rGrr�)r!rrr�(test_iter_error_when_changing_os_environIsz5EnvironTests.test_iter_error_when_changing_os_environcCs|�tj���dS)N)rGrr�r)r!rrr�.test_iter_error_when_changing_os_environ_itemsLsz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|�tj���dS)N)rGrr��values)r!rrr�/test_iter_error_when_changing_os_environ_valuesOsz<EnvironTests.test_iter_error_when_changing_os_environ_values)rxryrzZ	type2testr"r{rrrrrrr�existsrr#r&r(r-r8rr<rZrequires_mac_verr>rErGrHrIrKrrrrr�s*)rc@sNeZdZdd�Zdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�	WalkTestscKs$d|kr|�d�|d<tj|f|�S)Nr��followlinks)�popr�walk)r!�top�kwargsrrrrPXszWalkTests.walkc
Cs.tjj}|�tjtj�|tjd�|_||jd�|_||jd�|_	||jd�}||d�}||jd�}||jd�}||d�}||d�}||d	�|_
|tjd
�}|tjd
d�}	||d�}
||d
�}||d�}t�|j	�t�|�t�|�t�|�x@||||	|fD].}
t|
d��}|�
d|
d�WdQRX�qWt���r�t�tj�|�|j
�t�d|
d�t�|dd�|d�t�|dd�|d�|dd	gdd
ddgf|_n|dgdgf|_t�|d�yt�|�Wn(tk
�r�|�tj|tj�Yn4Xt�|tj�t�|�t�|�|jddd�=dS)NZTEST1�SUB1�SUB11�SUB2ZSUB21�tmp1�tmp2Ztmp3�linkZTEST2�tmp4Zbroken_linkZbroken_link2Zbroken_link3r�zI'm z" and proud of it.  Blame test_os.
ZbrokenTZtmp5rr+)rrr�rLrr�r�	walk_path�	sub1_path�
sub11_path�	link_path�makedirsrr�can_symlinkrqr��	sub2_tree�chmod�listdir�PermissionErrorri�S_IRWXUr r�)r!r�Z	sub2_pathZ
sub21_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZ	tmp5_pathZt2_pathZ	tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathrr)rrrr"]sT








"


zWalkTests.setUpcCs�t|�|j��}|�t|�d�|ddddk}|dd��|dd|d��|dd|d��|�|d|jddgd	gf�|�|d||jd
gdgf�|�|d||jggf�|�|dd||j�dS)Nr?rr+rSr�r-���rUrVrTrW)	�listrPrZr;r��sortr[r\r`)r!�all�flippedrrr�test_walk_topdown�s zWalkTests.test_walk_topdownNcCs�|dkr|j}g}x:|�|�D],\}}}|�|||f�d|kr|�d�qW|�t|�d�|�|d|jdgdgf�|dd��|dd��|�|d|j�dS)NrSr-rrUrVr+re)rZrP�append�remover;r�rgr`)r!rZrhr��dirsr�rrr�test_walk_prune�szWalkTests.test_walk_prunecCs|�t|j��dS)N)rnrrZ)r!rrr�test_file_like_path�szWalkTests.test_file_like_pathcCs�t|j|jdd��}|�t|�d|�|ddddk}|dd��|dd|d	��|dd|d��|�|d|jdd
gdgf�|�|||jggf�|�||d|jdgd
gf�|�|dd||j�dS)NF)�topdownr?r�r+rrSr-rerUrVrTrW)	rfrPrZr;r�rgr\r[r`)r!rhrirrr�test_walk_bottom_up�s

zWalkTests.test_walk_bottom_upcCsjt��s|�d�|j|jdd�}xB|D]0\}}}||jkr(|�|g�|�|dg�Pq(W|�d�dS)Nzneed symlink supportT)r�rYz+Didn't follow symlink with followlinks=True)rr_r0rPrZr]r;r�)r!�walk_itr�rmr�rrr�test_walk_symlink�s

zWalkTests.test_walk_symlinkc
Cs�g}|j|j|jd�}t|�\}}}|�|g�d}tj�||�}tj�||d�}t�||�z`dd�|D�}	|�	|�|�
||	�|�
||	�x*|D]"}
|
|kr�|�tj�||
�|	�q�WWdt�||�XdS)N)�onerrorrSz.newcSsg|]\}}}|�qSrr)rra�dr)rrrr�sz/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)rPrZrkr r;rrr�r:r&r?r�)r!�errorsrrr�rmr��dir1Zpath1Zpath1new�roots�dir2rrr�test_walk_bad_dir�s"

zWalkTests.test_walk_bad_dir)N)rxryrzrPr"rjrnrorqrsrzrrrrrMSsE
rM�fwalkzTest needs os.fwalk()c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�
FwalkTestscks0x*|j|f|�D]\}}}}|||fVqWdS)N)r{)r!rQrRr�rmr�Zroot_fdrrrrPszFwalkTests.walkcOstj||�S)N)rr{)r!rXrRrrrr{
szFwalkTests.fwalkc
Cs�|��}|��}x�tjddd�D]�\}}|j||d�|j||d�i}x.tjf|�D]\}}}t|�t|�f||<qVWxD|jf|�D]4\}}}}	|�||�|�	||t|�t|�f�q�Wq WdS)N)TFr-)�repeat)rprN)rpr�)
�copy�	itertools�productrrrP�setr{r�r;)
r!�walk_kwargs�fwalk_kwargsrpr��expectedr�rmr��rootfdrrr�_compare_to_walk
szFwalkTests._compare_to_walkcCsdtji}|�||�dS)NrQ)rrr�)r!rRrrr�test_compare_to_walks
zFwalkTests.test_compare_to_walkc	CsJz8t�dtj�}dtji}|��}||d<|�||�Wdt�|�XdS)N�.rQrn)rrr^rrr~r�r%)r!rGr�r�rrr�test_dir_fd#s
zFwalkTests.test_dir_fdcCs�x~tjddd�D]l\}}tj|df}xV|j|d|i�D]B\}}}}t�|�t�|�|�t	t�
|��t	|�t	|�B�q6WqWdS)N)TFr-)r}r�)rr�rrr{r�fstatrir;r�rb)r!rpr�rXr�rmr�r�rrr�test_yields_correct_dir_fd-s

z%FwalkTests.test_yields_correct_dir_fdcCsdt�d�}t�|�x&td�D]}x|�tj�D]}q0WqWt�d�}|�tj|�|�||�dS)Nr+�)	rr/r%r�r{rrrLr;)r!Zminfd�ir�Znewfdrrr�test_fd_leak9s


zFwalkTests.test_fd_leakN)
rxryrzrPr{r�r�r�r�r�rrrrr|s
r|c@seZdZdd�ZdS)�BytesWalkTestsc	ks�d|kr|�d�|d<x�tjt�|�f|�D]p\}}}t�|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q,WdS)Nr�rN)rOrrP�fsencode�fsdecoderf�map)	r!rQrR�broot�bdirs�bfilesr�rmr�rrrrPHs 
zBytesWalkTests.walkN)rxryrzrPrrrrr�Fsr�c@seZdZddd�ZdS)�BytesFwalkTestsr�cos�x�tjt�|�f|�|�D]t\}}}}t�|�}tttj|��}	tttj|��}
||	|
|fVtttj|	��|dd�<tttj|
��|dd�<qWdS)N)rr{r�r�rfr�)r!rQrXrRr�r�r��topfdr�rmr�rrrr{Vs&
zBytesFwalkTests.fwalkN)r�)rxryrzr{rrrrr�Ssr�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�MakedirTestscCst�tj�dS)N)rr�rr)r!rrrr"aszMakedirTests.setUpc
Cs�tj}tj�|ddd�}t�|�tj�|dddd�}t�|�|�ttjtj�tj�|dddddtj�}t�|�tj�|dtjddddd�}t�|�dS)Nrwry�dir3�dir4�dir5�dir6)	rrrrr�r^r2r3�curdir)r!�baserrrr�test_makedirds


zMakedirTests.test_makedirc	Cs�t�d���tj}tj�|d�}tj�|d�}t�|d�|�tj�|��|�tj�	|��tj
dkr�|�t�|�j
d@d�|�t�|�j
d@d�WdQRXdS)Nr-rwryim�nti�i�)rZ
temp_umaskrrrr�r^r&rL�isdirrr;rir�)r!r��parentrrrr�	test_modess
zMakedirTests.test_modecCs�tj�tjd�}d}t�d�}t�||�|�ttj||�|jttj||dd�tj|ddd�tj||dd�t�|�tjtj�	d	�dd�dS)
Nrwi��F)�exist_oki�T)rmr��/)
rrr�rr�umaskr^r2r3r�)r!rrm�old_maskrrr� test_exist_ok_existing_directorys

z-MakedirTests.test_exist_ok_existing_directoryc	Cs�tj�tjd�}tj}d}t�d�}z�t�t�	tj�j
�}yt�tj||B�Wntk
rnt
�d��YnXt�	tj�j
|@|kr�t
�d��t�|||B�tj||dd�t�|t�t�	|�j
�|@�tj|||Bdd�Wdt�|�XdS)Nrwi�r�zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.T)r�)rrr�rrri�S_ISGIDr��S_IMODE�lstatr�rarcr�SkipTestr^)r!rr�rmr�Zexisting_testfn_moderrr�test_exist_ok_s_isgid_directory�s$

 z,MakedirTests.test_exist_ok_s_isgid_directorycCsxtj}tj�tjd�}t|d�}|�d�|��|�t	tj
|�|jt	tj
|dd�|jt	tj
|dd�t�|�dS)Nrwr�r0F)r�T)rrrrr�rrr%r2r3r^rl)r!r�rr)rrr�#test_exist_ok_existing_regular_file�s

z0MakedirTests.test_exist_ok_existing_regular_filec	CsPtj�tjdddddd�}x&tj�|�s@|tjkr@tj�|�}qWt�|�dS)Nrwryr�r�r�r�)rrr�rrrLr��
removedirs)r!rrrrr{�s

zMakedirTests.tearDownN)
rxryrzr"r�r�r�r�r�r{rrrrr�`sr��chownzTest needs chownc@s�eZdZedd��Zdd�Ze�ee	d�d�dd��Z
e�eoHee
�d	kd
�dd��Ze�eojee
�d	kd
�dd��Zedd��ZdS)�ChownFileTestscCst�tj�dS)N)rr�rr)�clsrrr�
setUpClass�szChownFileTests.setUpClasscCs�t�tj�}|j}|j}xNddt�d�t�	dd�fD]0}|�
ttjtj||�|�
ttjtj||�q4W|�
t�tj||��|�
t�tjdd��dS)Ng�y��re���r-)rrirr�st_uid�st_gid�decimalZDecimal�	fractionsZFractionr2r9r��assertIsNone)r!ri�uid�gidr�rrr�*test_chown_uid_gid_arguments_must_be_index�s z9ChownFileTests.test_chown_uid_gid_arguments_must_be_index�	getgroupszneed os.getgroupscCs�t��}t|�dkr|�d�|dd�\}}t�tj�j}t�tj||�t�tj�j	}|�
||�t�tj||�t�tj�j	}|�
||�dS)Nr-ztest needs at least 2 groups)rr�r�r0rirrr�r�r�r;)r!�groupsZgid_1Zgid_2r�r�rrr�test_chown_gid�s
zChownFileTests.test_chown_gidr+z0test needs root privilege and more than one usercCsvtdd�\}}t�tj�j}t�tj||�t�tj�j}|�||�t�tj||�t�tj�j}|�||�dS)Nr-)	�	all_usersrrirrr�r�r�r;)r!�uid_1�uid_2r�r�rrr�test_chown_with_root�sz#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one userc	CsXtdd�\}}t�tj�j}|�t��&t�tj||�t�tj||�WdQRXdS)Nr-)	r�rrirrr�r2rcr�)r!r�r�r�rrr�test_chown_without_permission�s
z,ChownFileTests.test_chown_without_permissioncCst�tj�dS)N)rr�rr)r�rrr�
tearDownClass�szChownFileTests.tearDownClassN)rxryrz�classmethodr�r�rrrrr��
root_in_posixr�r�r�r�r�rrrrr��s
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCst�tj�dS)N)rr^rr)r!rrrr"�szRemoveDirsTests.setUpcCst�tj�dS)N)rr�r)r!rrrr{�szRemoveDirsTests.tearDowncCsxtj�tjd�}t�|�tj�|d�}t�|�t�|�|�tj�|��|�tj�|��|�tj�tj��dS)N�dira�dirb)	rrr�rrr�r��assertFalserL)r!r�r�rrr�test_remove_alls


zRemoveDirsTests.test_remove_allcCs�tj�tjd�}t�|�tj�|d�}t�|�ttj�|d��t�|�|�tj�	|��|�
tj�	|��|�
tj�	tj��dS)Nr�r�zfile.txt)rrr�rrr�rr�r�rLr&)r!r�r�rrr�test_remove_partials


z#RemoveDirsTests.test_remove_partialc	Cs�tj�tjd�}t�|�tj�|d�}t�|�ttj�|d��|�t��t�	|�WdQRX|�
tj�|��|�
tj�|��|�
tj�tj��dS)Nr�r�zfile.txt)rrr�rrr�rr2r3r�r&rL)r!r�r�rrr�test_remove_nothings

z#RemoveDirsTests.test_remove_nothingN)rxryrzr"r{r�r�r�rrrrr��s

r�c@seZdZdd�ZdS)�DevNullTestsc	CsXttjdd��}|�d�|��WdQRXttjd��}|�|��d�WdQRXdS)Nr�rshellorKr�)rr�devnullrr%r;rC)r!r)rrr�test_devnull%s

zDevNullTests.test_devnullN)rxryrzr�rrrrr�$sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCsr|�tt�d��d�|�tt�d��d�|�tt�d��d�|�tt�d��d�|�tt�d��d�dS)Nrr+r,rbi�)r;r�r�urandom)r!rrr�test_urandom_length.s
z URandomTests.test_urandom_lengthcCs0t�d�}|�|t�t�d�}|�||�dS)N�)rr��assertIsInstancerEr�)r!�data1�data2rrr�test_urandom_value5s

zURandomTests.test_urandom_valuecCs<d�dd|ddf�}td|�}|d}|�t|�|�|S)N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()z-cr+)r�r
r;r�)r!�countr\�out�stdoutrrr�get_urandom_subprocess;s
z#URandomTests.get_urandom_subprocesscCs$|�d�}|�d�}|�||�dS)Nr�)r�r�)r!r�r�rrr�test_urandom_subprocessFs

z$URandomTests.test_urandom_subprocessN)rxryrzr�r�r�r�rrrrr�-sr��	getrandomzneed os.getrandom()c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�GetRandomTestsc
CsPyt�d�Wn<tk
rJ}z|jtjkr8t�d��n�Wdd}~XYnXdS)Nr+z%getrandom() syscall fails with ENOSYS)rr�r3r�ZENOSYSrr�)r��excrrrr�NszGetRandomTests.setUpClasscCs*t�d�}|�|t�|�t|�d�dS)Nr�)rr�r�rEr;r�)r!rMrrr�test_getrandom_typeZs
z"GetRandomTests.test_getrandom_typecCst�d�}|�|d�dS)Nrr�)rr�r;)r!�emptyrrr�test_getrandom0_s
zGetRandomTests.test_getrandom0cCs|�ttd��dS)N�GRND_RANDOM)r&rr)r!rrr�test_getrandom_randomcsz$GetRandomTests.test_getrandom_randomcCs,yt�dtj�Wntk
r&YnXdS)Nr+)rr��
GRND_NONBLOCK�BlockingIOError)r!rrr�test_getrandom_nonblockisz&GetRandomTests.test_getrandom_nonblockcCs$t�d�}t�d�}|�||�dS)Nr�)rr�r�)r!r�r�rrr�test_getrandom_valueqs

z#GetRandomTests.test_getrandom_valueN)
rxryrzr�r�r�r�r�r�r�rrrrr�Lsr�ZHAVE_GETENTROPYr+ZHAVE_GETRANDOMZHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorc@s0eZdZe�ed�dd��Zdd�Zdd�ZdS)	�URandomFDTestsz!test requires the resource modulecCsd}td|�dS)Na�if 1:
            import errno
            import os
            import resource

            soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
            resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit))
            try:
                os.urandom(16)
            except OSError as e:
                assert e.errno == errno.EMFILE, e.errno
            else:
                raise AssertionError("OSError not raised")
            z-c)r
)r!r\rrr�test_urandom_failure�sz#URandomFDTests.test_urandom_failurecCsd}td|�\}}}dS)Naif 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                os.closerange(3, 256)
            sys.stdout.buffer.write(os.urandom(4))
            z-Sc)r
)r!r\�rcr��errrrr�test_urandom_fd_closed�sz%URandomFDTests.test_urandom_fd_closedcCs�|�tjtj�ttjd�djtjd�}td|�\}}}|�t|�d�|�	|dd�|dd��td|�\}}}|�t|�d�|�	||�dS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa�if 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                for fd in range(3, 256):
                    try:
                        os.close(fd)
                    except OSError:
                        pass
                    else:
                        # Found the urandom fd (XXX hopefully)
                        break
                os.closerange(3, 256)
            with open({TESTFN!r}, 'rb') as f:
                new_fd = f.fileno()
                # Issue #26935: posix allows new_fd and fd to be equal but
                # some libc implementations have dup2 return an error in this
                # case.
                if new_fd != fd:
                    os.dup2(new_fd, fd)
                sys.stdout.buffer.write(os.urandom(4))
                sys.stdout.buffer.write(os.urandom(4))
            )rz-Scr�rr?)
rLrr rrr)r
r;r�r�)r!r\r�r�r�Zout2Zerr2rrr�test_urandom_fd_reopened�sz'URandomFDTests.test_urandom_fd_reopenedN)	rxryrzrr�resourcer�r�r�rrrrr�~sr�c#slg��fdd�}�fdd�}z6tj}tj}tj}|t_|t_|dk	rJ|t_�VWd|t_|t_|t_XdS)Ncs��d||f�td��dS)N�execvzexecv called)rk�RuntimeError)rrX)�callsrr�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs ��d||f�ttjd��dS)N�execvez
execve called)rkr3r�ZENOTDIR)rrX)r�rr�mock_execve�sz$_execvpe_mockup.<locals>.mock_execve)rr�r�r1)r1r�r�Z
orig_execvZorig_execveZorig_defpathr)r�r�_execvpe_mockup�s	
r�c@steZdZe�ed�dd��Zdd�Zdd�Ze�	e
ed�d	�d
d��Zdd
�Z
dd�Ze�	ejdkd�dd��ZdS)�	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs|�ttjddgd�dS)Nzno such app-)r2r3r�execvpe)r!rrr�test_execvpe_with_bad_program�sz'ExecTests.test_execvpe_with_bad_programcCsN|�ttjdd�|�ttjdg�|�ttjdd�|�ttjddg�dS)N�notepadr)r�r�)r2rrr�)r!rrr�test_execv_with_bad_arglist�sz%ExecTests.test_execv_with_bad_arglistcCsB|�ttjdgd�|�ttjdgi�|�ttjddgi�dS)Nr�r�)r2rrr�)r!rrr�test_execvpe_with_bad_arglist�sz'ExecTests.test_execvpe_with_bad_arglist�_execvpez)No internal os._execvpe function to test.c
	Cs�tjd}|tkr:d}tj�t�|�|�}|}dddg}n6d}dddg}tj�||�}tjdkrlt�|�}n|}d	d
i}t��@}|�t	tj
||�|�t|�d�|�|dd
||ff�WdQRXt|d��F}|jt
tj
|||d�|�t|�d�|�|dd|||ff�WdQRXt��j}|��}	|tk�r>||	d<n||	d<|jt
tj
|||	d�|�t|�d�|�|dd|||	ff�WdQRXdS)NZabsolutepaths
executablesprognameZarg1Zarg2r[Zprognamer�ZspamrOr+rr�)r1)r,r�sPATHr.)r�seprErr�r�rr�r2r�rr;r�r3r3r~)
r!Z	test_typeZprogram_pathZprogramZfullpathZnative_fullpathZ	argumentsr,r�Zenv_pathrrr�_test_internal_execvpesD


"



z ExecTests._test_internal_execvpecCs"|�t�tjdkr|�t�dS)Nr�)rr$rrrE)r!rrr�test_internal_execvpe_str2s

z#ExecTests.test_internal_execvpe_strc	Cs�tjddg}tj��}d|d<|�t��t�|d||�WdQRXtj��}d|d<|�t��t�|d||�WdQRXtj��}d|d	<|�t��t�|d||�WdQRXdS)
Nz-c�pass�cabbagezFRUITVEGETABLErzorangeVEGETABLE=cabbage�FRUIT�lemonzFRUIT=ORANGE)r7r[rr�r~r2rr�)r!rX�newenvrrr�test_execve_invalid_env7s


z!ExecTests.test_execve_invalid_envrZzWin32-specific testc
Cs`yt�ddgi�Wn<tk
rP}z|�|jdkp<|jdk�Wdd}~XYnX|�d�dS)Nr��argrzNo OSError raised)rr�r3r&Zwinerrorr�)r!r�rrr�test_execve_with_empty_pathLs
,z%ExecTests.test_execve_with_empty_pathN)rxryrzr�skipIf�USING_LINUXTHREADSr�r�rrrrrrr
r7r}rrrrrr��s0r�rZzWin32 specific testsc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Win32ErrorTestsc
Csvyt�tj�WnPtk
r(d}YnJtk
r`}zd}|�dtj|f�Wdd}~XYnX|�dtj�dS)NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)rrirrrhr3r�)r!rLr�rrrr"Ys zWin32ErrorTests.setUpcCs|�ttjtjtjd�dS)Nz.bak)r2r3rr:rr)r!rrrr>eszWin32ErrorTests.test_renamecCs|�ttjtj�dS)N)r2r3rrlrr)r!rrr�test_removehszWin32ErrorTests.test_removecCs|�ttjtj�dS)N)r2r3r�chdirrr)r!rrr�
test_chdirkszWin32ErrorTests.test_chdirc	Cs>|�tjtj�ttjd��}|�ttjtj�WdQRXdS)Nr�)	rLrr rrr2r3rr�)r!r)rrr�
test_mkdirnszWin32ErrorTests.test_mkdircCs|�ttjtjd�dS)N)r2r3rr�rr)r!rrrr�tszWin32ErrorTests.test_utimecCs|�ttjtjd�dS)Nr)r2r3rrarr)r!rrr�
test_chmodwszWin32ErrorTests.test_chmodN)
rxryrzr"r>rrrr�rrrrrrWsrc	@s�eZdZddddddddd	g	Zd
d�ZxeD]Zee�e�de<q,Wd
d�Ze�	e
ed�d�dd��Ze�	e
ed�d�dd��Z
e�	e
ed�d�dd��Ze�	e
ed�d�dd��Ze�	e
ed�d �d!d"��Ze�	e
ed#�d$�d%d&��Ze�	e
ed'�d(�d)d*��Ze�	e
ed+�d,�d-d.��Ze�	e
ed/�d0�d1d2��Ze�	e
ed3�d4�d5d6��Ze�	e
ed7�d8�d9d:��Ze�	e
ed;�d<�d=d>��Ze�	e
ed?�d@�dAdB��ZdCdD�Ze�	e
edE�dF�dGdH��ZdIS)J�
TestInvalidFD�fchdirr/r_�	fdatasyncr��fstatvfs�fsync�	tcgetpgrp�ttynamecs�fdd�}|S)Ncstt��r|�tt���dS)N)rr�checkr�)r!)r)rr�helper�s
z(TestInvalidFD.get_single.<locals>.helperr)r)rr)r)r�
get_single�szTestInvalidFD.get_singleZtest_c
Gs\y|t��f|��Wn2tk
rH}z|�|jtj�Wdd}~XYnX|�d|�dS)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr3r;r�r�r�)r!r)rXr�rrrr�s"zTestInvalidFD.check�isattyztest needs os.isatty()cCs|�t�t���d�dS)NF)r;rr rr)r!rrr�test_isatty�szTestInvalidFD.test_isattyr1ztest needs os.closerange()c	Csvt��}x:td�D].}yt�||�Wntk
r<YqXPqW|dkrVt�d��|�t�	|||d�d�dS)Nr,r-z5Unable to acquire a range of invalid file descriptorsr+)
rrr�rr�r3rr�r;r1)r!rGr�rrrr6�szTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|�tjd�dS)N�)rrr")r!rrr�	test_dup2�szTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|�tjd�dS)Nr)rrr%)r!rrr�test_fchmod�szTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|�tjdd�dS)Nre)rrr')r!rrr�test_fchown�szTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs |�tjd�|�tjd�dS)N�PC_NAME_MAX)rr�pathconfr))r!rrr�test_fpathconf�szTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs |�tjd�|�tjd�dS)Nr)rr�truncater-)r!rrr�test_ftruncate�szTestInvalidFD.test_ftruncaterBztest needs os.lseek()cCs|�tjdd�dS)Nr)rrrB)r!rrr�
test_lseek�szTestInvalidFD.test_lseekrCztest needs os.read()cCs|�tjd�dS)Nr+)rrrC)r!rrrrI�szTestInvalidFD.test_read�readvztest needs os.readv()cCstd�}|�tj|g�dS)Nr,)rQrrr1)r!r�rrr�
test_readv�szTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|�tjd�dS)Nr)rrr3)r!rrr�test_tcsetpgrpt�szTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs|�tjd�dS)N� )rrr)r!rrrrT�szTestInvalidFD.test_write�writevztest needs os.writev()cCs|�tjdg�dS)Nsabc)rrr6)r!rrr�test_writev�szTestInvalidFD.test_writevcCs|�tj�|�tjd�dS)NT)rr�get_inheritable�set_inheritable)r!rrr�test_inheritable�szTestInvalidFD.test_inheritable�get_blockingz-needs os.get_blocking() and os.set_blocking()cCs|�tj�|�tjd�dS)NT)rrr;�set_blocking)r!rrr�
test_blocking�szTestInvalidFD.test_blockingN)rxryrzZsinglesrr)�localsrrrrrr!r6r$r&r(r,r/r0rIr2r4rTr7r:r=rrrrr{s,

	rc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs tj|_tj�tjd�|_dS)N�2)rr�file1rrr��file2)r!rrrr"�szLinkTests.setUpcCs0x*|j|jfD]}tj�|�rt�|�qWdS)N)rArBrrrLr )r!�filerrrr{�szLinkTests.tearDownc
Cs�t|�yt�||�Wn0tk
rH}z|�d|�Wdd}~XYnXt|d��8}t|d��"}|�tj�|�	�|�	���WdQRXWdQRXdS)Nz
os.link(): %sra)
rrrXrcr0rr&r�sameopenfilerA)r!rArBr�r��f2rrr�
_test_link�s zLinkTests._test_linkcCs|�|j|j�dS)N)rFrArB)r!rrr�	test_link�szLinkTests.test_linkcCs(|�t|jt���t|jt����dS)N)rFrErAr7r�rB)r!rrr�test_link_bytes�szLinkTests.test_link_bytescCs\yt�d�Wntk
r,t�d��YnX|jd7_|jd|_|�|j|j�dS)N�ñz#Unable to encode for this platform.r@)rr��UnicodeErrorrr�rArBrF)r!rrr�test_unicode_name�szLinkTests.test_unicode_nameN)	rxryrzr"r{rFrGrHrKrrrrr?�s
r?zPosix specific testsc@s�eZdZdZdZe�eed�d�dd��Z	e�eed�d�dd	��Z
e�eed
�d�dd
��Ze�eed�d�dd��Ze�eed�d�dd��Z
e�eed�d�dd��Ze�eed�d�dd��Ze�eed�d�dd��ZdS)�PosixUidGidTestsl�setuidztest needs os.setuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dS)Nrz
not an int)r�getuidr2r3rMr9�
OverflowError�UID_OVERFLOW)r!rrr�test_setuid
szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dS)Nrz
not an int)	rrN�HAVE_WHEEL_GROUPr2r3rRr9rO�GID_OVERFLOW)r!rrr�test_setgidszPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dS)Nrz
not an int)	rrNr2r3rVr9�setegidrOrP)r!rrr�test_seteuidszPosixUidGidTests.test_seteuidrWztest needs os.setegid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dS)Nrz
not an int)	rrNrSr2r3rWr9rOrT)r!rrr�test_setegidszPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCsnt��dkr|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dS)Nrz
not an int)rrNr2r3rZr9rOrP)r!rrr�
test_setreuid&szPosixUidGidTests.test_setreuidcCst�tjddg�dS)Nz-cz,import os,sys;os.setreuid(-1,-1);sys.exit(0))rWr�r7r[)r!rrr�test_setreuid_neg1/sz#PosixUidGidTests.test_setreuid_neg1�setregidztest needs os.setregid()cCsrt��dkr"ts"|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dS)Nrz
not an int)	rrNrSr2r3r]r9rOrT)r!rrr�
test_setregid7szPosixUidGidTests.test_setregidcCst�tjddg�dS)Nz-cz,import os,sys;os.setregid(-1,-1);sys.exit(0))rWr�r7r[)r!rrr�test_setregid_neg1@sz#PosixUidGidTests.test_setregid_neg1N)rxryrzrPrTrrrrrQrUrXrYr[r\r^r_rrrrrLs		rLc@sNeZdZdd�Zdd�Zdd�Zdd�Ze�e	e
d	�d
�dd��Zd
d�ZdS)�Pep383Testscstjrtj|_ntjr tj|_ntj|_t�|j�|_g��fdd�}|tj�tjr`|tj�tjrp|tj��s~|�	d�t
�|_t�|j�yPxJ�D]B}t�
tj�|j|��t�|�}||jkr�td��|j�|�q�WWnt�|j��YnXdS)Ncs2yt�|�}Wntk
r"dSX��|�dS)N)rr�r�rk)�fn)�bytesfnrr�add_filenameTs
z'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLEr�ZTESTFN_NONASCIIrrr�ZbdirZTESTFN_UNICODEr0r��	unicodefnr�Zcreate_empty_filerr�r�r�add�shutilr�)r!rcrar)rbrr"Js6








zPep383Tests.setUpcCst�|j�dS)N)rgr�r�)r!rrrr{oszPep383Tests.tearDownc	Csl|j}tt�|j��}|�||�t��}z0t�tj�|�tt���tt�tj���Wdt�|�XdS)N)	rer�rrbr�r;�getcwdrr)r!r��foundZcurrent_directoryrrr�test_listdirrs$zPep383Tests.test_listdircCs2x,|jD]"}ttj�|j|�d�}|��qWdS)NrK)rerrrr�r�r%)r!rar)rrr�	test_open~szPep383Tests.test_openr�zneed os.statvfs()cCs.x(|jD]}tj�|j|�}t�|�qWdS)N)rerrr�r�r�)r!ra�fullnamerrr�test_statvfs�szPep383Tests.test_statvfscCs*x$|jD]}t�tj�|j|��qWdS)N)rerrirr�r�)r!rarrr�	test_stat�szPep383Tests.test_statN)
rxryrzr"r{rjrkrrrrrmrnrrrrr`Hs%r`c@sFeZdZdd�Zdd�Zdd�Zdd�Ze�d	�d
d��Z	dd
�Z
dS)�Win32KillTestscCsxddl}ddlm}ddl}|jjj}|j|_|j|�	|j
�|j|�	|j�|�	|j�|�	|j�f|_d}t
jtjdd�|�gt
jt
jt
jd�}|�|jj�|�|jj�|�|jj�d\}}	x�||	k�rJ|��dk�rJ|�t|��}
||�|j���|
|�|
�ddd�}|�|dd�|
j�r6|� ||
j�!��Pt"�#d	�|d
7}q�W|�$d�t%�&|j'|�|� |�(�|�dS)Nr)�wintypes�runningz-cz<import sys;sys.stdout.write('{}');sys.stdout.flush();input())r��stderr�stdin)rrbzPeekNamedPipe failedg�������?r+z1Did not receive communication from the subprocess))r�rp�msvcrtr�r��
PeekNamedPipe�BOOL�restype�HANDLE�POINTERZc_char�DWORD�argtypesrW�Popenr7r[r)�PIPErLr�r%rrrs�pollZcreate_string_bufferr�Z
get_osfhandlerAZsizeofr�r�r;r;r��sleepr�r�kill�pid�wait)r!Zsigr�rprtrur��procr��maxr�Zrsltrrr�_kill�sF







zWin32KillTests._killcCs|�tj�dS)N)r��signal�SIGTERM)r!rrr�test_kill_sigterm�sz Win32KillTests.test_kill_sigtermcCs|�d�dS)Nrb)r�)r!rrr�
test_kill_int�szWin32KillTests.test_kill_intcCs�dt��}t�dd|�}d|d<tjtjtj�	tj�
t�d�|gtjd�}d\}}xR||kr�|�
�dkr�|ddkrxPt�d�|d7}qVWt�|jtj�|�d	�t�|j|�t�d
�|�
�s�t�|jtj�|�d�|��dS)Nz
test_os_%srer+rzwin_console_handler.py)rU)rrbg�������?z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {})�uuidZuuid1�mmaprWr|r7r[rrr�r�roZCREATE_NEW_PROCESS_GROUPr~r�rr�r�r��SIGINTr�r))r!ZeventrZtagname�mr�r�r�rrr�_kill_with_event�s(



zWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertycCsdddlm}ddl}|�|j��}|jjj}|�|j�|jf|_|j|_	||d�|�
tjd�dS)Nr)rp�CTRL_C_EVENT)
r�rpryZc_intr�r��SetConsoleCtrlHandlerrvr{rwr�r�r�)r!rpr�ZNULLr�rrr�test_CTRL_C_EVENT�s



z Win32KillTests.test_CTRL_C_EVENTcCs|�tjd�dS)N�CTRL_BREAK_EVENT)r�r�r�)r!rrr�test_CTRL_BREAK_EVENTsz$Win32KillTests.test_CTRL_BREAK_EVENTN)rxryrzr�r�r�r�r�skipr�r�rrrrro�s6roc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�Win32ListdirTestsc
Cs�g|_x~td�D]r}d|}tj�tj|�}d|}tj�tj|�}t�|�t|d��}|�	d|�WdQRX|j�
||g�qW|j��dS)Nr-zSUB%dzFILE%dr�z'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rrr�rrr^rr�extendrg)r!r�Zdir_nameZdir_path�	file_nameZ	file_pathr)rrrr"s
zWin32ListdirTests.setUpcCst�tj�dS)N)rgr�rr)r!rrrr{szWin32ListdirTests.tearDowncCsH|�tt�tj��|j�|�tt�t�tj���dd�|jD��dS)NcSsg|]}t�|��qSr)rr�)rrrrrr"szCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>)r;�sortedrrbrrr�r�)r!rrr�test_listdir_no_extended_pathsz/Win32ListdirTests.test_listdir_no_extended_pathcCshdtj�tj�}|�tt�|��|j�dt�	tj�tj��}|�tt�|��dd�|jD��dS)Nz\\?\s\\?\cSsg|]}t�|��qSr)rr�)rrrrrr1sz@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>)
rrr�rrr;r�rbr�r�)r!rrrr�test_listdir_extended_path$sz,Win32ListdirTests.test_listdir_extended_pathN)rxryrzr"r{r�r�rrrrr�s
r�c@s�eZdZdZej�e�ZdZ	ej�
e�ZdZdd�Z
dd�Zdd	�Zd
d�Zdd
�Zdd�Ze�d�dd��Ze�d�dd��Zdd�Zdd�Ze�ej�d�o�ej�d�d�dd��Zdd�Zd S)!�Win32SymlinkTestsZfilelinktestZdirlinktestzmissing linkcCsdS)Nr)r!rrrr"=szWin32SymlinkTests.setUpcCsRtj�|j�rt�|j�tj�|j�r4t�|j�tj�|j�rNt�|j�dS)N)	rrrL�filelinkrl�dirlinkr�r�missing_link)r!rrrr{DszWin32SymlinkTests.tearDowncCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dS)N)
rrq�dirlink_targetr�r&rrLr��islink�
check_stat)r!rrr�test_directory_linkLs
z%Win32SymlinkTests.test_directory_linkcCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dS)N)
rrq�filelink_targetr�r&rrL�isfiler�r�)r!rrr�test_file_linkSs
z Win32SymlinkTests.test_file_linkcCs6|j}tj�|�rt�|�d}d}t�|||�dS)Nz"c:\\target does not exist.29r3c740T)r�rrrrlrq)r!ZlinknamerrZ
target_is_dirrrr�_create_missing_dir_linkZs
z*Win32SymlinkTests._create_missing_dir_linkcCs|��t�|j�dS)N)r�rrlr�)r!rrr�,test_remove_directory_link_to_missing_targetdsz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetz)currently fails; consider for improvementcCs |��|�tj�|j��dS)N)r�r&rrr�r�)r!rrr�.test_isdir_on_directory_link_to_missing_targetksz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs|��t�|j�dS)N)r�rr�r�)r!rrr�.test_rmdir_on_directory_link_to_missing_targetqsz@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCsn|�t�|�t�|��|�t�|�t�|��t�|�}|�t�|�t�|��|�t�|�t�|��dS)N)r;rrir�r�r�)r!rXrrZ
bytes_linkrrrr�ws

zWin32SymlinkTests.check_statc	Cs@tj�tj�}tj�|d�}tj�|d�}|�tj|�t�|�t�|�t�|�tj�tj�|d��}t	|�t�
�}z�t�|�tj�|d�}t�tj�
|�d�|�dt�t�
���|�t�|�t�d��t�|�|�t�|�t�tj�
|���t�|�|�t�|�t�tj�
|���Wdt�|�XdS)N�level2�level3rArX)rrr�rrr�rLr�r�rrhrrq�relpathr�rbr;ri)r!Zlevel1r�r�rAZorig_dirrXrrr�
test_12084s.





zWin32SymlinkTests.test_12084zC:\Users\All UserszC:\ProgramDatazTest directories not foundcCs"t�d�}|�tj�|d��dS)NzC:\Users\All UserszC:\ProgramData)r�readlinkr&r�samefile)r!rrrrr�
test_29248�s
zWin32SymlinkTests.test_29248c	Cs�d}tjj|gd�}d||f||f|dd�|dd�fg}x�|D]�\}}yt�||�Wntk
rrYn&Xyt�|�Wntk
r�YnXyt�t�|�t�|��Wntk
r�YqFXyt�|�WqFtk
r�YqFXqFWdS)NZXXXXXXXXXXXXXXXXXXXXXXXXXXXr,r��)rrr�rqrhrlr3r�)r!ZsegmentrZ
test_casesrs�destrrr�test_buffer_overflow�s,
z&Win32SymlinkTests.test_buffer_overflowN)rxryrzr�rrr�ror�r�r�r�r�r"r{r�r�r�r�rr�r�r�r�r�rrrLr�r�rrrrr�4s&
#

r�c@sDeZdZdZej�ej�e��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCsdS)Nr)r!rrrr"�szWin32JunctionTests.setUpcCstj�|j�rt�|j�dS)N)rrrL�junctionr�)r!rrrr{�szWin32JunctionTests.tearDowncCsPt�|j|j�|�tj�|j��|�tj�|j��|�	tj�
|j��dS)N)�_winapi�CreateJunction�junction_targetr�r&rrrLr�r�r�)r!rrr�test_create_junction�sz'Win32JunctionTests.test_create_junctioncCsHt�|j|j�|�tj�|j��t�|j�|�	tj�|j��dS)N)
r�r�r�r�r&rrrLr r�)r!rrr�test_unlink_removes_junction�sz/Win32JunctionTests.test_unlink_removes_junctionN)rxryrzr�rrr�r�ror�r"r{r�r�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�Win32NtTestscCsddlm}|�d�|_dS)Nr)rr�)�testr�
import_moduler�)r!rrrrr"�szWin32NtTests.setUpcCsdS)Nr)r!rrrr{�szWin32NtTests.tearDowncCsByddl}ddl}Wntk
r2t�d��YnX|jddd�}|jj|j_	|jj
|j_	|jj|jjf|j_
|��}|j��}|�||�|��}|�d|�|j}ddd	tg}xXtd
�D]L}xF|D]>}	y|j�|	�}
WnYnXyt�|	�}
Wq�Yq�Xq�Wq�W|�||�|��}|�d|�|j|}|�d|�dS)Nrz'ctypes module is required for this testzKernel32.dllT)Zuse_last_errorr+z\\?\C:z\\?\NULz	\\?\CONINr,)r�Zctypes.wintypes�ImportErrorrr�ZWinDLLrprxZGetCurrentProcessrwrvZGetProcessHandleCountZLPDWORDr{rzZbyrefr;r�ror�r�Z_getfinalpathnamerri)r!r�ZkernelZhprocZhandle_countrZbefore_count�	filenamesr�rZtmpZhandle_deltarrr�test_getfinalpathname_handles�s@


z*Win32NtTests.test_getfinalpathname_handlesN)rxryrzr"r{r�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCst�d�dS)Nz
base/some_dir)rr^)r!rrrr".	szNonLocalSymlinkTests.setUpcCst�d�dS)Nr�)rgr�)r!rrrr{7	szNonLocalSymlinkTests.tearDowncCstj�dd�}t�d|�dS)Nr�Z	some_linkZsome_dir)rrr�rq)r!rsrrr�test_directory_link_nonlocal:	sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)rxryrzr"r{r�rrrrr�+	s	r�c@seZdZdd�Zdd�ZdS)�FSEncodingTestscCs(|�t�d�d�|�t�d�d�dS)Nsabc�uabcŁ)r;rr�r�)r!rrr�test_nopL	szFSEncodingTests.test_nopc	CsJxDdD]<}yt�|�}Wntk
r.wYnX|�t�|�|�qWdS)N)u	unicodeŁulatiné�ascii)rr�r�r;r�)r!rarbrrr�
test_identityP	s
zFSEncodingTests.test_identityN)rxryrzr�r�rrrrr�K	sr�c@sNeZdZdd�Ze�e�d�o<ej	�
d�p<eed�o<eed�d�dd	��Z
d
S)�DeviceEncodingTestscCs|�t�d��dS)Ni@�)r�r�device_encoding)r!rrr�test_bad_fd]	szDeviceEncodingTests.test_bad_fdr�win�nl_langinfo�CODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)cCs(t�d�}|�|�|�t�|��dS)Nr)rr�ZassertIsNotNoner&�codecs�lookup)r!�encodingrrr�test_device_encodinga	s

z(DeviceEncodingTests.test_device_encodingN)rxryrzr�rrrr r7r}�
startswithr�localer�rrrrr�[	sr�c@sXeZdZe�eed�d�dd��Zdd�Zdd�Z	d	d
�Z
e�ejdkd�d
d��Z
dS)�PidTests�getppidztest needs os.getppidcCs<tjtjddgtjd�}|��\}}|�t|�t�	��dS)Nz-czimport os; print(os.getppid()))r�)
rWr|r7r[r}Zcommunicater;r�r�getpid)r!r�r��_rrr�test_getppidk	s


zPidTests.test_getppidcCs�tjdkr(dtj�d�dd|�d�g}ntjd|g}t�tjtj|�}t�|d�\}}tjdkrr|�||d>�n$|�t�	|�|�|�t�
|�|�|�||�dS)NrZ�"z-crr�)r7r}r[r�spawnv�P_NOWAIT�waitpidr;r&�	WIFEXITED�WEXITSTATUS)r!r\�exitcoderXr�Zpid2�statusrrr�
check_waitpidt	s

zPidTests.check_waitpidcCs|jddd�dS)Nrr)r\r�)r�)r!rrr�test_waitpid�	szPidTests.test_waitpidcCs"d}d|�d�}|j||d�dS)N�zimport sys; sys.exit(�))r�)r�)r!r�r\rrr�test_waitpid_exitcode�	szPidTests.test_waitpid_exitcoderZzwin32-specific testcCs"d}d|�d�}|j||d�dS)Nl:z$import _winapi; _winapi.ExitProcess(r�)r�)r�)r!ZSTATUS_CONTROL_C_EXITr\rrr�test_waitpid_windows�	szPidTests.test_waitpid_windowsN)rxryrzrrrrr�r�r�r�r7r}r�rrrrr�j	s
	r�c@s$eZdZddd�dd�Zed�dd��Zed�d	d
��Zed�dd
��Zed�dd��Zed�dd��Z	ed�dd��Z
ed�dd��Zed�dd��Zed�dd��Z
ed�dd ��Zed�d!d"��Zed�d#d$��Zed�d%d&��Zed�d'd(��Zd)d*�Zed�d+d,��Zed�d-d.��Zd/S)0�
SpawnTestsF)�with_env�	use_bytesc	Cs�d|_tj}|�tj|�|s*d|j}n8ttj�|_t	t
���|_|j|j|j<d|j|jf}t
|d��}|�|�WdQRXtj|g}|r�dd�|D�}dd�|j��D�|_|S)	N�zimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)r�cSsg|]}t�|��qSr)rr�)r�arrrr�	sz*SpawnTests.create_args.<locals>.<listcomp>cSs"i|]\}}t�|�t�|��qSr)rr�)r�k�vrrr�
<dictcomp>�	sz*SpawnTests.create_args.<locals>.<dictcomp>)r�rrrLr rrr�r,r$r�Zuuid4rrrr7r[r)r!r�r�rr\rrXrrr�create_args�	s$
zSpawnTests.create_args�spawnlcCs2|��}tjtj|df|��}|�||j�dS)Nr)r�rr��P_WAITr;r�)r!rXr�rrr�test_spawnl�	szSpawnTests.test_spawnl�spawnlecCs<|jdd�}tjtj|df||jf��}|�||j�dS)NT)r�r)r�rr�r�r,r;r�)r!rXr�rrr�test_spawnle�	szSpawnTests.test_spawnle�spawnlpcCs2|��}tjtj|df|��}|�||j�dS)Nr)r�rr�r�r;r�)r!rXr�rrr�test_spawnlp�	szSpawnTests.test_spawnlp�spawnlpecCs<|jdd�}tjtj|df||jf��}|�||j�dS)NT)r�r)r�rr�r�r,r;r�)r!rXr�rrr�
test_spawnlpe�	szSpawnTests.test_spawnlper�cCs.|��}t�tj|d|�}|�||j�dS)Nr)r�rr�r�r;r�)r!rXr�rrr�test_spawnv�	szSpawnTests.test_spawnv�spawnvecCs6|jdd�}t�tj|d||j�}|�||j�dS)NT)r�r)r�rr�r�r,r;r�)r!rXr�rrr�test_spawnve�	szSpawnTests.test_spawnve�spawnvpcCs.|��}t�tj|d|�}|�||j�dS)Nr)r�rr�r�r;r�)r!rXr�rrr�test_spawnvp�	szSpawnTests.test_spawnvp�spawnvpecCs6|jdd�}t�tj|d||j�}|�||j�dS)NT)r�r)r�rr�r�r,r;r�)r!rXr�rrr�
test_spawnvpe�	szSpawnTests.test_spawnvpecCs�|��}t�tj|d|�}t�|d�}|�|d|�|d}ttd�rp|�t�|��|�t�	|�|j
�n|�||j
d>�dS)Nrr+r�r�)r�rr�r�r�r;rr&r�r�r�)r!rXr�r�r�rrr�test_nowait�	s
zSpawnTests.test_nowaitcCs8|jddd�}t�tj|d||j�}|�||j�dS)NT)r�r�r)r�rr�r�r,r;r�)r!rXr�rrr�test_spawnve_bytes�	szSpawnTests.test_spawnve_bytescCs>|��}|�ttjtj|d�|�ttjtj|dd�dS)Nrr�)r�r2rrr�r�)r!rXrrr�test_spawnl_noargs�	szSpawnTests.test_spawnl_noargscCsB|��}|�ttjtj|di�|�ttjtj|ddi�dS)Nrr�)r�r2rrr�r�)r!rXrrr�test_spawnle_noargs�	szSpawnTests.test_spawnle_noargscCsv|��}|�ttjtj|dd�|�ttjtj|dg�|�ttjtj|dd�|�ttjtj|ddg�dS)Nrr)r�r�)r�r2rrr�r�)r!rXrrr�test_spawnv_noargs
s
zSpawnTests.test_spawnv_noargscCs~|��}|�ttjtj|ddi�|�ttjtj|dgi�|�ttjtj|ddi�|�ttjtj|ddgi�dS)Nrr)r�r�)r�r2rrr�r�)r!rXrrr�test_spawnve_noargs

s
zSpawnTests.test_spawnve_noargsc	Csdtjddg}tj��}d|d<y|tj|d||�}Wntk
rJYnX|�|d�tj��}d|d<y|tj|d||�}Wntk
r�YnX|�|d�tj��}d	|d
<y|tj|d||�}Wntk
r�YnX|�|d�tj	}|�
tj|�t|d��}|�
d�WdQRXtj|g}tj��}d
|d<|tj|d||�}|�|d�dS)Nz-crrzFRUITVEGETABLEr�zorangeVEGETABLE=cabbagerrzFRUIT=ORANGEr�zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r7r[rr�r~r�rr;rrrLr rr)r!ZspawnrXr	r�rrrrr�_test_invalid_env
s>




zSpawnTests._test_invalid_envcCs|�tj�dS)N)rrr�)r!rrr�test_spawnve_invalid_env@
sz#SpawnTests.test_spawnve_invalid_envcCs|�tj�dS)N)rrr�)r!rrr�test_spawnvpe_invalid_envD
sz$SpawnTests.test_spawnvpe_invalid_envN)rxryrzr�rr�r�r�r�r�r�r�r�rrrrrrrrr	rrrrr��	s$
.r�z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc@seZdZdd�ZdS)�
LoginTestscCst��}|�t|�d�dS)Nr)rr
r�r�)r!Z	user_namerrr�
test_getloginN
szLoginTests.test_getloginN)rxryrzrrrrrrK
sr�getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdd�ZdS)�ProgramPriorityTestscCs�t�tjt���}t�tjt��|d�zFt�tjt���}|dkr^|dkr^t�d|��n|�||d�Wdyt�tjt��|�Wn0tk
r�}z|j	t	j
kr��Wdd}~XYnXXdS)Nr+�z?unable to reliably test setpriority at current nice level of %s)rr
�PRIO_PROCESSr�rrr�r;r3r�ZEACCES)r!r�Znew_prior�rrr�test_set_get_priorityX
s
z*ProgramPriorityTests.test_set_get_priorityN)rxryrzrrrrrrS
src@sveZdZGdd�dej�Zdd�Zedd��Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZeZdd�Zdd�ZdS)�SendfileTestServerc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)zSendfileTestServer.HandlercCs.tj�||�g|_d|_d|_|�d�dS)NTFs220 ready
)�asynchat�
async_chat�__init__�	in_buffer�
accumulate�closed�push)r!�connrrrro
s
z#SendfileTestServer.Handler.__init__cCs |�d�}|jr|j�|�dS)Ni)�recvrrrk)r!rMrrr�handle_readv
s
z&SendfileTestServer.Handler.handle_readcCsd�|j�S)Nr�)r�r)r!rrr�get_data{
sz#SendfileTestServer.Handler.get_datacCs|��d|_dS)NT)r%r)r!rrr�handle_close~
sz'SendfileTestServer.Handler.handle_closecCs�dS)Nr)r!rrr�handle_error�
sz'SendfileTestServer.Handler.handle_errorN)rxryrzrrrrr rrrr�Handlerm
s
r!cCsptj�|�tj�|�|�tjtj�|�	|�|�
d�|j��dd�\|_|_
d|_d|_t��|_dS)Nr�r-F)�	threading�Threadr�asyncore�
dispatcherZ
create_socket�socketZAF_INETZSOCK_STREAMZbindZlistenZgetsockname�host�port�handler_instance�_activeZLock�_active_lock)r!Zaddressrrrr�
s

zSendfileTestServer.__init__cCs|jS)N)r*)r!rrrrq�
szSendfileTestServer.runningcCs$t��|_tj�|�|j��dS)N)r"ZEvent�_SendfileTestServer__flagr#�startr�)r!rrrr-�
s
zSendfileTestServer.startcCsd|_|��dS)NF)r*r�)r!rrr�stop�
szSendfileTestServer.stopcCs*xt|jdd�st�d�qW|��dS)NrFg����MbP?)r�r)r�rr.)r!rrrr��
szSendfileTestServer.waitcCsPd|_|j��x2|jrBtjrB|j��tjddd�|j��qWt�	�dS)NTg����MbP?r+)Ztimeoutr�)
r*r,r�r$Z
socket_mapr+�acquireZloop�releaseZ	close_all)r!rrr�run�
s

zSendfileTestServer.runcCs|��\}}|�|�|_dS)N)Zacceptr!r))r!rZaddrrrr�
handle_accept�
sz SendfileTestServer.handle_acceptcCs|��dS)N)r%)r!rrr�handle_connect�
sz!SendfileTestServer.handle_connectcCsdS)Nrr)r!rrr�writable�
szSendfileTestServer.writablecCs�dS)Nr)r!rrrr �
szSendfileTestServer.handle_errorN)rxryrzrrr!r�propertyrqr-r.r�r1r2r3rr4r rrrrrk
s
	r�sendfileztest needs os.sendfile()c@s
eZdZddZej�d�o8ej�d�o8ej�d�Ze�	ed�Z
e�	ejdkd�Ze
d	d
��Ze
dd��Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze
dd��Ze
dd ��Ze
ed!d"���Ze
ed#d$���Ze
e�	eed%�d&�d'd(���Zd)S)*�TestSendfiles�12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcdeiZlinuxZsolarisZsunosz%requires headers and trailers supportlz(test is only meaningful on 32-bit buildscCst��|_ttj|j�dS)N)rZthreading_setuprrr�DATA)r�rrrr��
s
zTestSendfile.setUpClasscCstj|j�t�tj�dS)N)rZthreading_cleanuprr r)r�rrrr��
szTestSendfile.tearDownClasscCs~ttjdf�|_|j��t��|_|j�|jj|jj	f�|j�
d�|j�d�|j��|_
ttjd�|_|j��|_dS)Nrr+irK)rrZHOST�serverr-r&�clientZconnectr'r(Z
settimeoutrrA�socknorrrC)r!rrrr"�
s

zTestSendfile.setUpcCs0|j��|j��|jjr&|j��d|_dS)N)rCr%r:r9rqr.)r!rrrr{�
s



zTestSendfile.tearDownc
Osbx\ytj||�Stk
rX}z,|jtjkr0�n|jtjtjfkrFwn�Wdd}~XYqXqWdS)N)rr6r3r�Z
ECONNRESET�EAGAIN�EBUSY)r!rXrRr�rrr�sendfile_wrapper�
szTestSendfile.sendfile_wrappercCs�d}d}d}xZ|t|j�krf|�|j|j||�}|dkr:P||7}||7}|�||k�|�||�qW|�|t|j��|j�t	j
�|j��|j�
�|jj��}|�t|�t|j��|�||j�dS)Nri)r�r8r>r;rAr&r;r:�shutdownr&�	SHUT_RDWRr%r9r�r)r)r!�
total_sent�offset�nbytes�sentrMrrr�test_send_whole_file�
s$

z!TestSendfile.test_send_whole_filecCs�d}t|j�d}t|j�|}d}xH||krl|�|j|j||�}|dkrLP||7}||7}|�||k�q&W|j�tj	�|j�
�|j��|jj
��}|jt|j�dd�}|�|t|��|�t|�t|��|�||�dS)Nrr-i)r�r8r>r;rAr&r:r?r&r@r%r9r�r)rr;)r!rArBZ	must_sendrCrDrMr�rrr�test_send_at_certain_offsets&


z(TestSendfile.test_send_at_certain_offsetc
Cs�t|j�d}yt�|j|j|d�}Wn0tk
rV}z|jtjkrF�Wdd}~XYnX|�	|d�|j
�tj
�|j
��|j��|jj��}|�	|d�dS)Nirr�)r�r8rr6r;rAr3r��EINVALr;r:r?r&r@r%r9r�r)r)r!rBrDr�rMrrr�test_offset_overflow(s

z!TestSendfile.test_offset_overflowc	Cs@|�t��}t�|j|jdd�WdQRX|�|jjtj	�dS)Nrei)
r2r3rr6r;rAr;r�r�rG)r!rDrrr�test_invalid_offset9sz TestSendfile.test_invalid_offsetc	CsFtjf|jddd�d|ji��|jrBtj|j|jdddddd�dS)Nri)r�rBr��inr)rBr��headers�trailersrl)rr6r;rA�SUPPORT_HEADERS_TRAILERS)r!rrr�
test_keywords>s
zTestSendfile.test_keywordscCs�d}d|jdd�}tj|j|jddddgd�}|�|d�||7}d}x\|t|�kr�tt|�|d�}|�|j|j||�}|dkr�P|�||�||7}||7}qLW|�	|t|��|j
��|j�
�|jj��}|�	t|�t|��dS)	Nrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyreisxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy)rKi)r8rr6r;rAZassertLessEqualr��minr>r;r:r%r9r�r)r�hash)r!rAZ
expected_datarDrBrCrMrrr�test_headersHs*

zTestSendfile.test_headersc	Cs�tjd}d}|�tj|�t||�t|d��P}tj|j|�	�ddddgd�|j
��|j�
�|jj��}|�|d	�WdQRXdS)
Nr@sabcdefrKrr�s123456s789)rLsabcde123456789)rrrLr rrrr6r;rAr:r%r9r�r)rr;)r!rjZ	file_datar)rMrrr�
test_trailersas



zTestSendfile.test_trailersc	CsXd|jj_|�t��(}tj|j|jddddgdd�WdQRX|�	|j
jtj�dS)NFr�xii�)rK)
r9r)rr2r3rr6r;rAr;r�r�rG)r!rDrrr�test_headers_overflow_32bitsqs

z)TestSendfile.test_headers_overflow_32bitsc	CsXd|jj_|�t��(}tj|j|jddddgdd�WdQRX|�	|j
jtj�dS)NFrrSii�)rL)
r9r)rr2r3rr6r;rAr;r�r�rG)r!rDrrr�test_trailers_overflow_32bitszs

z*TestSendfile.test_trailers_overflow_32bits�SF_NODISKIOztest needs os.SF_NODISKIOc
CsZytj|j|jddtjd�Wn6tk
rT}z|jtjtjfkrD�Wdd}~XYnXdS)Nri)rl)	rr6r;rArVr3r�r=r<)r!r�rrr�
test_flags�szTestSendfile.test_flagsN)rxryrzr8r7r}r�rMrrZrequires_headers_trailers�maxsizeZrequires_32br�r�r�r"r{r>rErFrHrIrNrQrRrTrUrrrWrrrrr7�
s6
r7c	Cslttd�sdSzJttjdd��2}yt�|��dd�Wntk
rJdSXWdQRXWdt�tj�XdS)N�setxattrFrrs	user.testr�T)	rrrrrrYrAr3r )rrrr�supports_extended_attributes�s
rZz(no non-broken extended attribute supportr-r��'c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ExtendedAttributeTestsc
	Ks�tj}|�tj|�t|�|�t��}|||d�f|�WdQRX|�|jj	t	j
�||�}	|�|	t�|||d�df|�t
|	�}
|
�d�|�t
||��|
�|�||df|�d�|||d�dtjf|�|�||df|�d�|�t��}|||d�dtjf|�WdQRX|�|jj	t	j�|�t��}|||d�dtjf|�WdQRX|�|jj	t	j
�|||d�dtjf|�|
�d�|�t
||��|
�|||d�f|�|�t��}|||d�f|�WdQRX|�|jj	t	j
�|
�d�|�t
||��|
�|�|||d�f|�d�|||d�df|�|�|||d�f|�d�|||d�f|�td	d
�td�D��}x|D]}|||df|��q~W|�t
||��t
|	�t
|�B�dS)
Nz	user.testr�s	user.testshellosbyez
user.test2sfoosaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacss|]}d�|�VqdS)zuser.test{}N)r))rr�rrrr*�sz;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>rbrS)rrrLr rr2r3r;r�r�ZENODATAr�rfr�rfr�
XATTR_REPLACE�XATTR_CREATEZEEXISTrlr�r�)
r!rH�getxattrrY�removexattr�	listxattrrRrarDZ
init_xattrZxattrZmany�thingrrr�_check_xattrs_str�sL
""


z(ExtendedAttributeTests._check_xattrs_strcOsB|jtf|�|�t�tj�|jtjf|�|�t�tj�dS)N)rcr$rr rrr�)r!rXrRrrr�
_check_xattrs�sz$ExtendedAttributeTests._check_xattrscCs|�tjtjtjtj�dS)N)rdrr_rYr`ra)r!rrr�test_simple�sz"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdd�dS)NF)r�)rdrr_rYr`ra)r!rrr�
test_lpath�sz!ExtendedAttributeTests.test_lpathcCs4dd�}dd�}dd�}dd�}|�||||�dS)	Nc	Ws*t|d��}tj|��f|��SQRXdS)NrK)rrr_rA)rrXrrrrr_�sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc	Ws0t|dd��}tj|��f|��WdQRXdS)Nr�r)rrrYrA)rrXrrrrrY�sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc	Ws0t|dd��}tj|��f|��WdQRXdS)Nr�r)rrr`rA)rrXrrrrr`�sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc	Ws*t|d��}tj|��f|��SQRXdS)NrK)rrrarA)rrXrrrrra�sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)rd)r!r_rYr`rarrr�test_fds�s
zExtendedAttributeTests.test_fdsN)rxryrzrcrdrerfrgrrrrr\�s
0r\�get_terminal_sizezrequires os.get_terminal_sizec@seZdZdd�Zdd�ZdS)�
TermsizeTestsc
Csxyt��}WnJtk
rV}z,tjdks:|jtjtjfkrD|�d��Wdd}~XYnX|�	|j
d�|�	|jd�dS)NrZzfailed to query terminal sizer)rrhr3r7r}r�rG�ENOTTYr0ZassertGreaterEqual�columns�lines)r!rJr�rrr�test_does_not_crash�s
z!TermsizeTests.test_does_not_crashc
Cs�yt�ddg�����}Wn&ttjtfk
r@|�d�YnXt|d�t|d�f}yt	�
tj�
��}WnJtk
r�}z,tjdks�|jtjtjfkr�|�d��Wdd}~XYnX|�||�dS)NZsttyrJzstty invocation failedr+rrZzfailed to query terminal size)rWZcheck_outputr;r�rhZCalledProcessErrorrcr0r�rrhr7�	__stdin__rAr3r}r�rGrjr;)r!rJr��actualr�rrr�test_stty_matchs
zTermsizeTests.test_stty_matchN)rxryrzrmrprrrrri�sric@seZdZdd�Zdd�ZdS)�OSErrorTestscCs�Gdd�dt�}g|_g|_tjdk	r.tj}ntj}|j�|�|j�||��tjdk	rbtj}nt�	tj�}|j�|�|j�t
|��|j�t|��|j|j|_dS)Nc@seZdZdS)zOSErrorTests.setUp.<locals>.StrN)rxryrzrrrr�Str#srr)
r$�bytes_filenames�unicode_filenamesrrdrrkZTESTFN_UNDECODABLErr�rQrRr�)r!rrZdecodedZencodedrrrr""s

zOSErrorTests.setUpcCsX|jtjf|jtjdf|jtjf|jtjtjf|jtjf|jtjf|jtj	fg}t
jdkr�|�|j
tjdf|j
tjdf|jtjdf|jtjdf|jtjff�n,|�|jtjf|jtjdf|jtjdff�ttd�r�|�|jtjddf�ttd��r|�|jtjddf�ttd��r.|�|jtjdf�ttd	��rN|�|jtjdf�ttd
��rn|�|jtjdf�ttd��r�|�|jtjf�ttd��r�t
jdk�r�|�|j
tjdf�|�|jtjdf�n|�|jtjdf�ttd
��r(|�|jtjf|jtjdf|jtjddf|jtjdff�ttd��rH|�|jtjdf�ttd��r�t
jdk�rt|�|jtj f�n|�|jtj f�x�|D]�^}}}x�|D]�}yJt!|t"t#f��r�||f|��n&|�$t%d��||f|��WdQRXWnLt&k
�r"}z|�'|j(|t"|��Wdd}~XYn&t)k
�r6YnX|�*d�+|���q�W�q�WdS)Ni�rZsdstrtr�r�lchownr.�chflags�lchflags�chrootrXraz	user.testsuser�lchmodr�z	should bezNo exception thrown by {}),r�rrrar�rr^r�rir r7r}r�rsr:rgrtrbrrkr�rur.rvrwrxrXrar_rYr`ryr�r�r$rEZassertWarnsRegex�DeprecationWarningr3rAr�UnicodeDecodeErrorr�r))r!Zfuncsr��funcZ	func_argsrr�rrr�test_oserror_filename8sv








$z"OSErrorTests.test_oserror_filenameN)rxryrzr"r}rrrrrq!srqc@seZdZdd�ZdS)�
CPUCountTestscCs8t��}|dk	r*|�|t�|�|d�n
|�d�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countr�r��
assertGreaterr0)r!Zcpusrrr�test_cpu_count�s
zCPUCountTests.test_cpu_countN)rxryrzr�rrrrr~�sr~c@s�eZdZdd�Ze�edkd�dd��Ze�edkd�dd��Zd	d
�Z	e�
eed�d�d
d��Z
dd�Zdd�Ze�
ejdkd�dd��Ze�
eed�d�dd��Ze�
eed�d�dd��ZdS)�FDInheritanceTestscCsPt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�dS)NFT)	rrror^rLr%r;r8r9)r!rGrrr�test_get_set_inheritable�s
z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlcCsnt�ttj�}|�tj|�|�t�|�d�t�|tj	�}|tj
M}t�|tj|�|�t�|�d�dS)NFT)rrror^rLr%r;r8�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)r!rGrlrrr�test_get_inheritable_cloexec�sz/FDInheritanceTests.test_get_inheritable_cloexeccCsft�ttj�}|�tj|�|�t�|tj�tj	@tj	�t�
|d�|�t�|tj�tj	@d�dS)NTr)rrror^rLr%r;r�r�r�r9)r!rGrrr�test_set_inheritable_cloexec�sz/FDInheritanceTests.test_set_inheritable_cloexeccCs2t�ttj�}|�tj|�|�t�|�d�dS)NF)rrror^rLr%r;r8)r!rGrrrrk�szFDInheritanceTests.test_openr�zneed os.pipe()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dS)NF)rr�rLr%r;r8)r!ZrfdZwfdrrr�	test_pipe�s
zFDInheritanceTests.test_pipecCsJt�ttj�}|�tj|�t�|�}|�tj|�|�t�|�d�dS)NF)	rrror^rLr%r/r;r8)r!�fd1�fd2rrr�test_dup�s

zFDInheritanceTests.test_dupcCs(t�d�}|�tj|�|�|d�dS)Nr+r)rr/rLr%r�)r!rGrrr�test_dup_standard_stream�s
z+FDInheritanceTests.test_dup_standard_streamrZzwin32-specific testcCsHt�dtj�}|�tj|�t�|�}|�tj|�|�t�|��dS)NZNUL)rrr^rLr%r/r�r8)r!r�r�rrr�test_dup_nul�s

zFDInheritanceTests.test_dup_nulr"zneed os.dup2()cCs�t�ttj�}|�tj|�t�ttj�}|�tj|�|�t�||�|�|�t�	|��t�ttj�}|�tj|�|�tj||dd�|�|�
t�	|��dS)NF)Zinheritable)rrror^rLr%r;r"r&r8r�)r!rGr�Zfd3rrrr$�szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dS)NF)rr�rLr%r;r8)r!Z	master_fdZslave_fdrrr�test_openpty�s
zFDInheritanceTests.test_openpty)rxryrzr�rr
r�r�r�rkrrrr�r�r�r7r}r�r$r�rrrrr��s
	r�c@sHeZdZddddejfdfddddd	eed
d�fgZdd�Zd
d�ZdS)�PathTConverterTests)riTrN)r�FrNr'FN)rvF)rN)rwF)rNr)rr%cCs�tj}tjdkrd}}ntj�d�}t|�}t�t|�tjtjB�}|�	tj
tj�|�	tj|�t|�}t|�}�x$|jD�]\}}}	}
|j
|d���ytt|�}Wntk
r�w~YnXxX||||fD]H}|dkr�q�|j
||d��&||f|	��}
|
dk	�r|
|
�WdQRXq�W|�td��||f|	��WdQRX|�rh||f|	��}
|
dk	�r�|
|
�n&|�td��||f|	��WdQRXWdQRXq~WdS)Nr�r�)r)rrzto return str or byteszos.PathLike)rrrrr�rrrPr#rLr r%�	functionsZsubTestr�r��assertRaisesRegexr9)r!Zstr_filenameZbytes_fspath�bytes_filenamerGZ
int_fspathZ
str_fspathrZallow_fdZ
extra_argsZ
cleanup_fnrarr�rrr�test_path_t_converter�sF






z)PathTConverterTests.test_path_t_converterc	Cs�d}|�t|d��t�td��WdQRX|�t|d��t�td��WdQRX|�t|d��t�tt���WdQRXdS)Nz-__fspath__\(\) to return str or bytes, not %sr�r-�floatg���Q�@�object)r�r9rrirr�)r!r�rrr�&test_path_t_converter_and_custom_class!
sz:PathTConverterTests.test_path_t_converter_and_custom_class)	rxryrzr�F_OKr�r�r�r�rrrrr��s,r�r;z-needs os.get_blocking() and os.set_blocking()c@seZdZdd�ZdS)�
BlockingTestscCsnt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�t�|d�|�t�|�d�dS)NTF)	rrror^rLr%r;r;r<)r!rGrrrr=.
szBlockingTests.test_blockingN)rxryrzr=rrrrr�+
sr�c@seZdZdd�ZdS)�ExportsTestscCs |�dtj�|�dtj�dS)NrrP)r�r�__all__)r!rrr�test_os_all<
szExportsTests.test_os_allN)rxryrzr�rrrrr�;
sr�c@s�eZdZejZdd�Zd8dd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zd9dd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�ejejkd$�d%d&��Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Z d1d2�Z!d3d4�Z"d5d6�Z#d7S):�TestScandircCs>tj�tj�|_t�|j�|_|�tj|j�t�	|j�dS)N)
rr�realpathrrr��
bytes_pathrLr�r�)r!rrrr"D
szTestScandir.setUp�file.txtcCs2t|t�r|jn|j}tj�||�}t|d�|S)Nspython)r�rEr�rrr�r)r!rrrrrrrJ
s
zTestScandir.create_filecCs2tdd�t�|j�D��}|�t|���|�|S)Ncss|]}|j|fVqdS)N)r)r�entryrrrr*Q
sz*TestScandir.get_entries.<locals>.<genexpr>)rr�scandirrr;r��keys)r!�names�entriesrrr�get_entriesP
szTestScandir.get_entriescCs^|rNxTt|�D]:}|�d�sq|dkr(q|�t||�t||�|||f�qWn|�||�dS)NZst_)�st_dev�st_ino�st_nlink)r�r�r;r�)r!Zstat1Zstat2Zskip_fieldsr�rrr�assert_stat_equalV
s
zTestScandir.assert_stat_equalcCs2|�|tj�|�|j|�|�|jtj�|j|��|�|��tj|jdd�j	�t�|j�}|�|�
�t�|j��|�|�
�t�|j��|�|��tj�|j��tj|jdd�}|�|j
dd�t�|j��|�|j
dd�t�|j��|�|��|tjdk�o|�|�|jdd�|tjdk�dS)NF)r�r�)r�r�DirEntryr;rrr��inoderir��is_dir�S_ISDIRr��is_file�S_ISREG�
is_symlinkr�r�)r!r�rr�r�r�Z
entry_statZentry_lstatrrr�check_entryc
s.




zTestScandir.check_entryc	
Cs�ttd�}t��}tj�|jd�}t�|�|�d�}|r�yt�|tj�|jd��Wn0t	k
r�}z|�
d|�Wdd}~XYnX|r�tj|tj�|jd�dd�t�|tj�|jd	��ddg}|r�|�d�|r�|�
d
�|�|�}|d}|�|dddd�|d}|�|dddd�|�rB|d}|�|dddd�|�r||d}|�|dddd�|d	}|�|d	ddd�dS)NrXr�zfile.txtz
link_file.txtz
os.link(): %s�symlink_dirT)ruzsymlink_file.txt)r�zsymlink_file.txtF)rrrr_rr�r�rrXrcr0rqrkr�r�r�)	r!rXrqr�rr�r�r�r�rrr�test_attributes
s@


 


zTestScandir.test_attributescCsNt|t�r|jn|j}tt�|��}|�t|�d�|d}|�|j	|�|S)Nr+r)
r�rEr�rrfrr�r;r�r)r!rrr�r�rrr�	get_entry�
szTestScandir.get_entrycCs|j|d�}|�tj�|��S)N)r)rr�rr�basename)r!rrrrr�create_file_entry�
szTestScandir.create_file_entryc	Csf|��}t��}zDt�|j�tdd�t��D��}|�t|�	��tj�
|�g�Wdt�|�XdS)Ncss|]}|j|fVqdS)N)r)rr�rrrr*�
sz5TestScandir.test_current_directory.<locals>.<genexpr>)rrrhrrrr�r;r�r�r�)r!rZold_dirr�rrr�test_current_directory�
sz"TestScandir.test_current_directorycCs|��}|�t|�d�dS)Nz<DirEntry 'file.txt'>)r�r;r+)r!r�rrr�	test_repr�
szTestScandir.test_reprcCs*|��}|�t�|�tj�|jd��dS)Nzfile.txt)r�r;r�fspathrr�)r!r�rrr�test_fspath_protocol�
sz TestScandir.test_fspath_protocolcCsNt�d�}|j|d�}t�|�}|�|t�|�|tj�t�|j�|��dS)Nz
bytesfile.txt)r)	rr�r�r�r�rEr;rr�)r!r�Zbytes_entryr�rrr�test_fspath_protocol_bytes�
s

z&TestScandir.test_fspath_protocol_bytescCs�tj�|jd�}t�|�|�d�}t�|�tjdkrF|�|���|�	|�
��|�	|���tjdkr�|�t
|j�|��|jdd�n0|�|��d�|�t
|j�|jt
|jdd�dS)Nr�r�F)r�r)rrr�r�r�r�rr&r�r�r�r�r2rhr�rir�)r!rr�rrr�test_removed_dir�
s




zTestScandir.test_removed_dircCs�|��}t�|j�|�|���tjdkr:|�|���|�|�	��tjdkrv|�
t|j�|�
�|j
dd�n0|�|��d�|�
t|j
�|j
t|j
dd�dS)Nr�F)r�r)r�rr rr�r�rr&r�r�r2rhr�rir�)r!r�rrr�test_removed_file�
s

zTestScandir.test_removed_filecCs�t��s|�d�S|�d�}t�|tj�|jd��|�ddg�}|d}t�	|�|�
|��d�|�|�
��|�|���|�|j
dd��|�|jdd��|�|���|�t|j�|jdd�dS)Nzcannot create symbolic linkzfile.txtzsymlink.txtrF)r�)rr_r0rrrqrr�r�r r�r�r�r�r�r&r�r2rhri)r!rr�r�rrr�test_broken_symlink�
s 


zTestScandir.test_broken_symlinkc	Csp|�d�t�|j�}tt�|��}|�t|�d|�|d}|�|jd�|�|jt�tj�	|jd���dS)Nzfile.txtr+rsfile.txt)
rrr�rrfr�r;r�rr�)r!�
path_bytesr�r�rrr�
test_bytess
zTestScandir.test_bytesc
Cs�|�d�x�ttfD]�}|t�|j��}|�t��tt�	|��}WdQRX|�
t|�d|�|d}|�
|jd�|�
|jt�tj�
|jd���|�t|j�t�|�t|j�t�qWdS)Nzfile.txtr+rsfile.txt)rrQrRrr�r�assertWarnsrzrfr�r;r�rr�rArDrE)r!r�r�r�r�rrr�test_bytes_likes
zTestScandir.test_bytes_likez.fd support for listdir required for this test.c	CsX|�tjtj�|�d�dg}t��rJt�dtj�	|jd��|�
d�t�|jtj�}z�t�|��}t
|�}WdQRXdd�|D�}|�t|�|�|�|t�|��x�|D]�}|�|j|j�|�t�|�|j�|�|��|jdk�tjtjkr�tj|j|d�}|�|��|�tj|j|dd�}|�|jdd�|�q�WWdt�|�XdS)	Nzfile.txtrXcSsg|]
}|j�qSr)r)rr�rrrr;sz'TestScandir.test_fd.<locals>.<listcomp>)rnF)rnr�)r�)r�rr�rrrr_rqrr�rkrr^rfr;r�rbrr�r�rirr%)r!Zexpected_namesrGr"r�r�r�r�rrr�test_fd-s.


zTestScandir.test_fdcCs|�ttjd�dS)Nr�)r2rhrr�)r!rrr�test_empty_pathJszTestScandir.test_empty_pathcCsN|�d�t�|j�}t|�}|�t|�d|�t|�}|�t|�d|�dS)Nzfile.txtr+r)rrr�rrfr;r�)r!rFr�Zentries2rrr�test_consume_iterator_twiceMs
z'TestScandir.test_consume_iterator_twicecCs(x"diggD]}|�ttj|�qWdS)NgX9��v��?)r2r9rr�)r!�objrrr�test_bad_path_typeXszTestScandir.test_bad_path_typec	CsR|�d�|�d�t�|j�}t|�|��|��|���~WdQRXdS)Nzfile.txtz	file2.txt)rrr�rr r%�check_no_resource_warning)r!rFrrr�
test_close\s


zTestScandir.test_closec	CsN|�d�|�d�t�|j��}t|�WdQRX|���~WdQRXdS)Nzfile.txtz	file2.txt)rrr�rr r�)r!rFrrr�test_context_managergs


z TestScandir.test_context_managerc	Cs@|�d�|�d�t�|j��}t|�|��WdQRXdS)Nzfile.txtz	file2.txt)rrr�rr r%)r!rFrrr�test_context_manager_closeos


z&TestScandir.test_context_manager_closec
Csl|�d�|�d�|�t��.t�|j��}t|�ddWdQRXWdQRX|���~WdQRXdS)Nzfile.txtz	file2.txtr+r)rr2�ZeroDivisionErrorrr�rr r�)r!rFrrr�test_context_manager_exceptionvs


z*TestScandir.test_context_manager_exceptionc	Csv|�d�|�d�t�|j�}t|�|�t��~t��WdQRXt�|j�}t	|�|�
��~WdQRXdS)Nzfile.txtz	file2.txt)rrr�rr r��ResourceWarningrZ
gc_collectrfr�)r!rFrrr�test_resource_warning�s


z!TestScandir.test_resource_warningN)r�)r�)$rxryrzrr�r"rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrbrr�r�r�r�r�r�r�r�r�rrrrr�A
s8

)	

r�c@sVeZdZeej�Zdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dS)�
TestPEP519cCs$xdD]}|�||�|��qWdS)N)shellosgoodbyessome/path/and/file)r;r�)r!�brrr�test_return_bytes�s
zTestPEP519.test_return_bytescCs$xdD]}|�||�|��qWdS)N)ZhelloZgoodbyezsome/path/and/file)r;r�)r!rHrrr�test_return_string�s
zTestPEP519.test_return_stringcCsPxJdD]B}t|�}|�||�|��|�dt�|��|�dt�|��qWdS)N)zpath/like/objectspath/like/objectspath/like/objectzpath/like/object)rr;r�rr�r�)r!r�Zpathlikerrr�test_fsencode_fsdecode�s

z!TestPEP519.test_fsencode_fsdecodecCsB|�d|�td���|�tttj��|�ttd�tj��dS)Nz#feelthegilr�)r;r�rr&�
issubclassr�PathLiker�)r!rrr�
test_pathlike�szTestPEP519.test_pathlikecCs8tddi�}x&ttt|�fD]}|�t|j|�qWdS)NZblahr)rDr�rr2r9r�)r!Zvapor�orrr�test_garbage_in_exception_out�sz(TestPEP519.test_garbage_in_exception_outcCs|�t|j�dS)N)r2r9r�)r!rrr�test_argument_required�sz!TestPEP519.test_argument_requiredcCsR|�t|jtd��tddi�}d|_|�t|j|��|�t|jtt���dS)NrZfoorr+)r2r9r�rrD�
__fspath__r�)r!�crrr�test_bad_pathlike�s
zTestPEP519.test_bad_pathlikecCs8Gdd�dtj�}|�tt|��|�tttj��dS)Nc@seZdZdS)z0TestPEP519.test_pathlike_subclasshook.<locals>.AN)rxryrzrrrr�A�sr�)rr�r�r�rr&)r!r�rrr�test_pathlike_subclasshook�sz%TestPEP519.test_pathlike_subclasshookN)rxryrzrrr�r�r�r�r�r�r�r�r�rrrrr��s
r�c@seZdZdd�ZdS)�
TimesTestscCsrt��}|�|tj�x"dD]}t||�}|�|t�qWtjdkrn|�|jd�|�|j	d�|�|j
d�dS)N)�user�system�
children_user�children_system�elapsedr�r)rr�r��times_resultr�r�rr;r�r�r�)r!r�Zfieldr�rrr�
test_times�s


zTimesTests.test_timesN)rxryrzr�rrrrr��sr��_fspathc@seZdZeej�ZdS)�TestPEP519PurePythonN)rxryrzrrr�r�rrrrr��sr��__main__)r)N)xrr$r��
contextlibr�r�r�Zgetpassrr�r�rr�rgr�r&rirWr7Z	sysconfigr"r�rr�r5r�rr�r�r�r��pwdZgetpwallr�r�Z	_testcapirr	rXZtest.support.script_helperr
Ztest.supportrrr�rr
r�versionr�rr}�getgidrSrrZTestCaserr~r�rZBasicTestMappingProtocolrrMrr|r�r�r�r�r�r�r�r�Zget_config_varZOS_URANDOM_DONT_USE_FDr
r��contextmanagerr�r�rrr?rLr`ror�Zskip_unless_symlinkr�r�r�r�r�r�r�r�r�rrr%r#rr7rZZrequires_linux_versionr\rirqr~r�r�r�r�r�r�r�r�rx�mainrrrr�<module>s.




^_50C
_
;)	
-
M!h
#d%
C
G
s
/

8
+7
V
NQ
,`
^B
P7