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_os.cpython-37.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�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Ze	�
eoBej
�e�d�dd
��Ze	�
eobej
�e�d�dd��Zdd�Zdd�Zdd�Zdd�Ze	�
ejd�dd��Ze�dd�dd��Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�ZdS))�EnvironTestsz8check that os.environ object conform to mapping protocolNcCsFttj�|_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)z>Check that the repr() of os.environ looks like environ({...}).zenviron({{{}}})z, css|]\}}d�||�VqdS)z
{!r}: {!r}N)�format)rrr�rrr�	<genexpr>�sz-EnvironTests.test___repr__.<locals>.<genexpr>N)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)rxryrz�__doc__Z	type2testr"r{rrrrrrr�existsrr#r&r(r-r8rr<rZrequires_mac_verr>rErGrHrIrKrrrrr�s,)rc@sReZdZdZdd�Zdd�Zdd�Zdd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�	WalkTestszTests for os.walk().cKs$d|kr|�d�|d<tj|f|�S)Nr��followlinks)�popr�walk)r!�top�kwargsrrrrQXszWalkTests.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+rTr�r-���rVrWrUrX)	�listrQr[r;r��sortr\r]ra)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)NrTr-rrVrWr+rf)r[rQ�append�remover;r�rhra)r!r[rir��dirsr�rrr�test_walk_prune�szWalkTests.test_walk_prunecCs|�t|j��dS)N)rorr[)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+rrTr-rfrVrWrUrX)	rgrQr[r;r�rhr]r\ra)r!rirjrrr�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�rZz+Didn't follow symlink with followlinks=True)rr`r0rQr[r^r;r�)r!�walk_itr�rnr�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)�onerrorrTz.newcSsg|]\}}}|�qSrr)rra�dr)rrrr�sz/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)rQr[rlr r;rrr�r:r&r?r�)r!�errorsrsr�rnr��dir1Zpath1Zpath1new�roots�dir2rrr�test_walk_bad_dir�s"

zWalkTests.test_walk_bad_dir)N)rxryrzrLrQr"rkrorprrrtr{rrrrrNSsE
rN�fwalkzTest needs os.fwalk()c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�
FwalkTestszTests for os.fwalk().cks0x*|j|f|�D]\}}}}|||fVqWdS)N)r|)r!rRrSr�rnr�Zroot_fdrrrrQszFwalkTests.walkcOstj||�S)N)rr|)r!rXrSrrrr|
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)z.
        compare with walk() results.
        )TFr-)�repeat)rqrO)rqr�N)
�copy�	itertools�productrrrQ�setr|r�r;)
r!�walk_kwargs�fwalk_kwargsrqr��expectedr�rnr��rootfdrrr�_compare_to_walk
szFwalkTests._compare_to_walkcCsdtji}|�||�dS)NrR)rrr�)r!rSrrr�test_compare_to_walks
zFwalkTests.test_compare_to_walkc	CsJz8t�dtj�}dtji}|��}||d<|�||�Wdt�|�XdS)N�.rRrn)rrr^rrrr�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�)r�r�rrr|r�fstatrir;r�rc)r!rqr�rXr�rnr�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)rxryrzrLrQr|r�r�r�r�r�rrrrr}s
r}c@seZdZdZdd�ZdS)�BytesWalkTestszTests for os.walk() with bytes.c	ks�d|kr|�d�|d<x�tjt�|�f|�D]p\}}}t�|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q,WdS)Nr�rO)rPrrQ�fsencode�fsdecoderg�map)	r!rRrS�broot�bdirs�bfilesr�rnr�rrrrQHs 
zBytesWalkTests.walkN)rxryrzrLrQrrrrr�Fsr�c@seZdZdZddd�ZdS)�BytesFwalkTestszTests for os.walk() with bytes.r�cos�x�tjt�|�f|�|�D]t\}}}}t�|�}tttj|��}	tttj|��}
||	|
|fVtttj|	��|dd�<tttj|
��|dd�<qWdS)N)rr|r�r�rgr�)r!rRrXrSr�r�r��topfdr�rnr�rrrr|Vs&
zBytesFwalkTests.fwalkN)r�)rxryrzrLr|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)Nrxrz�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-rxrzim�nti�i�)rZ
temp_umaskrrrr�r_r&rM�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)
Nrxi��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)Nrxi�r�zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.T)r�)rrr�rrri�S_ISGIDr��S_IMODE�lstatr�rbrdr�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)Nrxr�r0F)r�T)rrrrr�rrr%r2r3r_rm)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)Nrxrzr�r�r�r�)rrr�rrrMr��
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��rf���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�r2rdr�)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��assertFalserM)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�rMr&)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&rM)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)z�
    Stubs out execv and execve functions when used as context manager.
    Records exec calls. The mock execv and execve functions always raise an
    exception as they would normally never return.
    cs��d||f�td��dS)N�execvzexecv called)rl�RuntimeError)rrX)�callsrr�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs ��d||f�ttjd��dS)N�execvez
execve called)rlr3r�ZENOTDIR)rrX)r�rr�mock_execve�sz$_execvpe_mockup.<locals>.mock_execveN)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�rr2rr�)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�rrrrrrrrr7r}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!rMr�rrrr"Ys zWin32ErrorTests.setUpcCs|�ttjtjtjd�dS)Nz.bak)r2r3rr:rr)r!rrrr>eszWin32ErrorTests.test_renamecCs|�ttjtj�dS)N)r2r3rrmrr)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)r2r3rrbrr)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+)
rr r�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)Nrf)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,)rQrrr2)r!r�rrr�
test_readv�szTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|�tjd�dS)Nr)rrr4)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)rrr7)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-r0r1rIr3r5rTr8r;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)rBrCrrrMr )r!�filerrrr{�szLinkTests.tearDownc
Cs�t|�yt�||�Wn0tk
rH}z|�d|�Wdd}~XYnXt|d��8}t|d��"}|�tj�|�	�|�	���WdQRXWdQRXdS)Nz
os.link(): %sra)
rrrYrdr0rr&r�sameopenfilerA)r!rBrCr�r��f2rrr�
_test_link�s zLinkTests._test_linkcCs|�|j|j�dS)N)rGrBrC)r!rrr�	test_link�szLinkTests.test_linkcCs(|�t|jt���t|jt����dS)N)rGrErBr7r�rC)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.rA)rr��UnicodeErrorrr�rBrCrG)r!rrr�test_unicode_name�szLinkTests.test_unicode_nameN)	rxryrzr"r{rGrHrIrLrrrrr@�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�getuidr2r3rNr9�
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)	rrO�HAVE_WHEEL_GROUPr2r3rSr9rP�GID_OVERFLOW)r!rrr�test_setgidszPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dS)Nrz
not an int)	rrOr2r3rWr9�setegidrPrQ)r!rrr�test_seteuidszPosixUidGidTests.test_seteuidrXztest needs os.setegid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dS)Nrz
not an int)	rrOrTr2r3rXr9rPrU)r!rrr�test_setegidszPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCsnt��dkr|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dS)Nrz
not an int)rrOr2r3r[r9rPrQ)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)	rrOrTr2r3r^r9rPrU)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)rxryrzrQrUrrrrrRrVrYrZr\r]r_r`rrrrrMs		rMc@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�rl)�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!rdrbr)rcrr"Js6








zPep383Tests.setUpcCst�|j�dS)N)rhr�r�)r!rrrr{oszPep383Tests.tearDownc	Csl|j}tt�|j��}|�||�t��}z0t�tj�|�tt���tt�tj���Wdt�|�XdS)N)	rfr�rrcr�r;�getcwdrr)r!r��foundZcurrent_directoryrrr�test_listdirrs$zPep383Tests.test_listdircCs2x,|jD]"}ttj�|j|�d�}|��qWdS)NrK)rfrrrr�r�r%)r!rbr)rrr�	test_open~szPep383Tests.test_openr�zneed os.statvfs()cCs.x(|jD]}tj�|j|�}t�|�qWdS)N)rfrrr�r�r�)r!rb�fullnamerrr�test_statvfs�szPep383Tests.test_statvfscCs*x$|jD]}t�tj�|j|��qWdS)N)rfrrirr�r�)r!rbrrr�	test_stat�szPep383Tests.test_statN)
rxryrzr"r{rkrlrrrrrnrorrrrraHs%rac@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�rq�msvcrtr�r��
PeekNamedPipe�BOOL�restype�HANDLE�POINTERZc_char�DWORD�argtypesrW�Popenr7r[r)�PIPErLr�r%rsrt�pollZcreate_string_bufferr�Z
get_osfhandlerAZsizeofr�r�r;r;r��sleepr�r�kill�pid�wait)r!Zsigr�rqrurvr��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_%srfr+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_GROUPrr�r�r�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)rq�CTRL_C_EVENT)
r�rqrzZc_intr�r��SetConsoleCtrlHandlerrwr|rxr�r�r�)r!rqr�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�rrrrrp�s6rpc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�Win32ListdirTestszTest listdir on Windows.c
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�extendrh)r!r�Zdir_nameZdir_path�	file_nameZ	file_pathr)rrrr"s
zWin32ListdirTests.setUpcCst�tj�dS)N)rhr�rr)r!rrrr{szWin32ListdirTests.tearDowncCsH|�tt�tj��|j�|�tt�t�tj���dd�|jD��dS)z-Test when the path is not an "extended" path.cSsg|]}t�|��qSr)rr�)rrrrrr"szCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>N)r;�sortedrrcrrr�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)z&Test when the path starts with '\\?\'.z\\?\s\\?\cSsg|]}t�|��qSr)rr�)rrrrrr1sz@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>N)
rrr�rrr;r�rcr�r�)r!rrrr�test_listdir_extended_path$sz,Win32ListdirTests.test_listdir_extended_pathN)rxryrzrLr"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 linkcCs^tj�|j�st�tj�|j�s$t�tj�|j�r6t�tj�|j�rHt�tj�|j�rZt�dS)N)	rrrM�dirlink_target�AssertionError�filelink_target�dirlink�filelink�missing_link)r!rrrr"=s
zWin32SymlinkTests.setUpcCsRtj�|j�rt�|j�tj�|j�r4t�|j�tj�|j�rNt�|j�dS)N)	rrrMr�rmr�r�rr�)r!rrrr{DszWin32SymlinkTests.tearDowncCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dS)N)
rrqr�r�r&rrMr��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)
rrqr�r�r&rrM�isfiler�r�)r!rrr�test_file_linkSs
z Win32SymlinkTests.test_file_linkcCsF|j}tj�|�rt�|�d}tj�|�r0t�d}t�|||�dS)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)r�rrrrmrMr�rq)r!ZlinknamerrZ
target_is_dirrrr�_create_missing_dir_linkZs
z*Win32SymlinkTests._create_missing_dir_linkcCs|��t�|j�dS)N)r�rrmr�)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!rYrrZ
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�level3rBrY)rrr�rrr�rLr�r�rrirrq�relpathr�rcr;ri)r!Zlevel1r�r�rBZorig_dirrYrrr�
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�rqrhrmr3r�)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�rrrMr�r�rrrrr�4s&
#

r�c@sDeZdZdZej�ej�e��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCs(tj�|j�st�tj�|j�r$t�dS)N)rrrM�junction_targetr��junction)r!rrrr"�szWin32JunctionTests.setUpcCstj�|j�rt�|j�dS)N)rrrMr�r�)r!rrrr{�szWin32JunctionTests.tearDowncCsPt�|j|j�|�tj�|j��|�tj�|j��|�	tj�
|j��dS)N)�_winapi�CreateJunctionr�r�r&rrrMr�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&rrrMr 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�ZWinDLLrqryZGetCurrentProcessrxrwZGetProcessHandleCountZLPDWORDr|r{Zbyrefr;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)zM
        Create this structure:

        base
         \___ some_dir
        z
base/some_dirN)rr_)r!rrrr".	szNonLocalSymlinkTests.setUpcCst�d�dS)Nr�)rhr�)r!rrrr{7	szNonLocalSymlinkTests.tearDowncCs.tj�dd�}t�d|�tj�|�s*t�dS)a�
        The symlink target should resolve relative to the link, not relative
        to the current directory.

        Then, link base/some_link -> base/some_dir and ensure that some_link
        is resolved as a directory.

        In issue13772, it was discovered that directory detection failed if
        the symlink target was not specified relative to the current
        directory, which was a defect in the implementation.
        r�Z	some_linkZsome_dirN)rrr�rqr�r�)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!rbrcrrr�
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�rrr�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=cabbagerr	zFRUIT=ORANGEr�zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r7r[rr�rr�rr;rrrLr rr)r!ZspawnrXr
r�rrrrr�_test_invalid_env
s>




zSpawnTests._test_invalid_envcCs|�tj�dS)N)r	rr�)r!rrr�test_spawnve_invalid_env@
sz#SpawnTests.test_spawnve_invalid_envcCs|�tj�dS)N)r	rr)r!rrr�test_spawnvpe_invalid_envD
sz$SpawnTests.test_spawnvpe_invalid_envN)rxryrzr�rr�r�r�r�r�r�r�rrrrrrrr	r
rrrrrr��	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)rxryrzrrrrrr
K
sr
�getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdZdd�ZdS)�ProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().cCs�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)rxryrzrLrrrrrrS
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)�recvrrrl)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)rxryrzrrr r!r"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!rrrrr�
szSendfileTestServer.runningcCs.|jr
t�t��|_tj�|�|j��dS)N)rrr�r$ZEvent�_SendfileTestServer__flagr%�startr�)r!rrrr/�
s

zSendfileTestServer.startcCs|js
t�d|_|��dS)NF)rrr�r,r�)r!rrr�stop�
s
zSendfileTestServer.stopcCs*xt|jdd�st�d�qW|��dS)NrFg����MbP?)r�r+r�r�r0)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�propertyrrr/r0r�r3r4r5rr6r"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�socknorrrD)r!rrrr"�
s

zTestSendfile.setUpcCs0|j��|j��|jjr&|j��d|_dS)N)rDr%r<r;rrr0)r!rrrr{�
s



zTestSendfile.tearDownc
Osbx\ytj||�Stk
rX}z,|jtjkr0�n|jtjtjfkrFwn�Wdd}~XYqXqWdS)zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        N)rr8r3r�Z
ECONNRESET�EAGAIN�EBUSY)r!rXrSr�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�r:r@r=rAr&r;r<�shutdownr(�	SHUT_RDWRr%r;r�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�r:r@r=rAr&r<rAr(rBr%r;r�r+r r;)r!rCrDZ	must_sendrErFrMr�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�r:rr8r=rAr3r��EINVALr;r<rAr(rBr%r;r�r+r )r!rDrFr�rMrrr�test_offset_overflow(s

z!TestSendfile.test_offset_overflowc	Cs@|�t��}t�|j|jdd�WdQRX|�|jjtj	�dS)Nrfi)
r2r3rr8r=rAr;r�r�rI)r!rDrrr�test_invalid_offset9sz TestSendfile.test_invalid_offsetc	CsFtjf|jddd�d|ji��|jrBtj|j|jdddddd�dS)Nri)r�rDr��inr)rDr��headers�trailersrl)rr8r=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)	Nrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrfisxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy)rMi)r:rr8r=rAZassertLessEqualr��minr@r;r<r%r;r�r+r �hash)r!rCZ
expected_datarFrDrErMrrr�test_headersHs*

zTestSendfile.test_headersc	Cs�tjd}d}|�tj|�t||�t|d��P}tj|j|�	�ddddgd�|j
��|j�
�|jj��}|�|d	�WdQRXdS)
NrAsabcdefrKrr�s123456s789)rNsabcde123456789)rrrLr rrrr8r=rAr<r%r;r�r+r r;)r!rjZ	file_datar)rMrrr�
test_trailersas



zTestSendfile.test_trailersc	CsXd|jj_|�t��(}tj|j|jddddgdd�WdQRX|�	|j
jtj�dS)NFr�xii�)rM)
r;r+rr2r3rr8r=rAr;r�r�rI)r!rDrrr�test_headers_overflow_32bitsqs

z)TestSendfile.test_headers_overflow_32bitsc	CsXd|jj_|�t��(}tj|j|jddddgdd�WdQRX|�	|j
jtj�dS)NFrrUii�)rN)
r;r+rr2r3rr8r=rAr;r�r�rI)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)	rr8r=rArXr3r�r?r>)r!r�rrr�
test_flags�szTestSendfile.test_flagsN)rxryrzr:r7r}r�rOrrZrequires_headers_trailers�maxsizeZrequires_32br�r�r�r"r{r@rGrHrJrKrPrSrTrVrWrrrYrrrrr9�
s6
r9c	Cslttd�sdSzJttjdd��2}yt�|��dd�Wntk
rJdSXWdQRXWdt�tj�XdS)N�setxattrFrrs	user.testr�T)	rrrrrr[rAr3r )rrrr�supports_extended_attributes�s
r\z(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>rbrU)rrrLr rr2r3r;r�r�ZENODATAr�rgr�rgr�
XATTR_REPLACE�XATTR_CREATEZEEXISTrmr�r�)
r!rH�getxattrr[�removexattr�	listxattrrSrbrDZ
init_xattrZxattrZmany�thingrrr�_check_xattrs_str�sL
""


z(ExtendedAttributeTests._check_xattrs_strcOsB|jtf|�|�t�tj�|jtjf|�|�t�tj�dS)N)rer$rr rrr�)r!rXrSrrr�
_check_xattrs�sz$ExtendedAttributeTests._check_xattrscCs|�tjtjtjtj�dS)N)rfrrar[rbrc)r!rrr�test_simple�sz"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdd�dS)NF)r�)rfrrar[rbrc)r!rrr�
test_lpath�sz!ExtendedAttributeTests.test_lpathcCs4dd�}dd�}dd�}dd�}|�||||�dS)	Nc	Ws*t|d��}tj|��f|��SQRXdS)NrK)rrrarA)rrXrrrrra�sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc	Ws0t|dd��}tj|��f|��WdQRXdS)Nr�r)rrr[rA)rrXrrrrr[�sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc	Ws0t|dd��}tj|��f|��WdQRXdS)Nr�r)rrrbrA)rrXrrrrrb�sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc	Ws*t|d��}tj|��f|��SQRXdS)NrK)rrrcrA)rrXrrrrrc�sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)rf)r!rar[rbrcrrr�test_fds�s
zExtendedAttributeTests.test_fdsN)rxryrzrerfrgrhrirrrrr^�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)z�Check if get_terminal_size() returns a meaningful value.

        There's no easy portable way to actually check the size of the
        terminal, so let's check if it returns something sensible instead.
        rZzfailed to query terminal sizeNr)rrjr3r7r}r�rI�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)	z�Check if stty returns the same results

        stty actually tests stdin, so get_terminal_size is invoked on
        stdin explicitly. If stty succeeded, then get_terminal_size()
        should work too.
        ZsttyrJzstty invocation failedr+rrZzfailed to query terminal sizeN)rWZcheck_outputr;r�rhZCalledProcessErrorrdr0r�rrjr7�	__stdin__rAr3r}r�rIrlr;)r!rJr��actualr�rrr�test_stty_matchs
zTermsizeTests.test_stty_matchN)rxryrzrorrrrrrrk�srkc@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#srt)
r$�bytes_filenames�unicode_filenamesrrerrlZTESTFN_UNDECODABLErr�rQrRr�)r!rtZdecodedZencodedrrrr""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�chrootrYrcz	user.testsuser�lchmodr�z	should bezNo exception thrown by {}),r�rrrbr�rr^r�rir r7r}r�rur:rgrvrcrrlr�rwr/rxryrzrYrcrar[rbr{r�r�r$rEZassertWarnsRegex�DeprecationWarningr3rAr�UnicodeDecodeErrorr�r))r!Zfuncsr��funcZ	func_argsrr�rrr�test_oserror_filename8sv








$z"OSErrorTests.test_oserror_filenameN)rxryrzr"rrrrrrs!srsc@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;r9r:)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;r9�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�r:)r!rGrrr�test_set_inheritable_cloexec�sz/FDInheritanceTests.test_set_inheritable_cloexeccCs2t�ttj�}|�tj|�|�t�|�d�dS)NF)rrror^rLr%r;r9)r!rGrrrrl�szFDInheritanceTests.test_openr�zneed os.pipe()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dS)NF)rr�rLr%r;r9)r!ZrfdZwfdrrr�	test_pipe�s
zFDInheritanceTests.test_pipecCsJt�ttj�}|�tj|�t�|�}|�tj|�|�t�|�d�dS)NF)	rrror^rLr%r/r;r9)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�r9)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&r9r�)r!rGr�Zfd3rrrr%�szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dS)NF)rr�rLr%r;r9)r!Z	master_fdZslave_fdrrr�test_openpty�s
zFDInheritanceTests.test_openpty)rxryrzr�rrr�r�r�rlrrrr�r�r�r7r}r�r%r�rrrrr��s
	r�c@sHeZdZddddejfdfddddd	eed
d�fgZdd�Zd
d�ZdS)�PathTConverterTests)riTrN)r�FrNr'FN)rxF)rN)ryF)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_fnrbrr�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)NrrQ)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)NrYr�zfile.txtz
link_file.txtz
os.link(): %s�symlink_dirT)ruzsymlink_file.txt)r�zsymlink_file.txtF)rrrr`rr�r�rrYrdr0rqrlr�r�r�)	r!rYrqr�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�rrgrr�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>)rrrirrrr�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�rrgr�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�assertWarnsr|rgr�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.txtrYcSsg|]
}|j�qSr)r)rr�rrrr;sz'TestScandir.test_fd.<locals>.<listcomp>)rnF)rnr�)r�)r�rr�rrrr`rqrr�rlrr^rgr;r�rcrr�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�rrgr;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_collectrgr�)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�rrrrcrr�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@seZdZdZeej�ZdS)�TestPEP519PurePythonz>Explicitly test the pure Python implementation of os.fspath().N)rxryrzrLrrr�r�rrrrr��sr��__main__)r)N)xrr&r��
contextlibr�r�r�Zgetpassr�r�r�rr�rhr�r(rirWr7Z	sysconfigr$r�rr�r5r�rr�r�r�r��pwdZgetpwallr�r�Z	_testcapirr	rZZtest.support.script_helperr
Ztest.supportrrr�rr
r�versionr�rr}�getgidrTrrZTestCaserr~r�rZBasicTestMappingProtocolrrNrr}r�r�r�r�r�r�r�r�Zget_config_varZOS_URANDOM_DONT_USE_FDrr��contextmanagerr�r�rrr@rMrarpr�Zskip_unless_symlinkr�r�r�r�r�r�r�r�r�r
rr'r%rr9r\Zrequires_linux_versionr^rkrsr�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