403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.216.240
Web Server : Apache
System : Linux web0264.sh.tyo1 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
User : c9415830 ( 11735)
PHP Version : 8.4.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python36/lib64/python3.6/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python36/lib64/python3.6/test/__pycache__/test_os.cpython-36.opt-2.pyc
3

w2_�>@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZyddlZWnek
r�dZYnXyddlZWnek
�r dZYnXyddlZWnek
�rHdZYnXyddlZWnek
�rpdZYnXyFddl Z dd�e j!�D�Z"e#ed��r�ej$�Z%e%e"k�r�e"j&e%�Wnek
�r�gZ"YnXyddl'Z'dd�e'j(�D�Z)Wnee*fk
�rgZ)YnXyddl+m,Z,m-Z-Wn ek
�rFej.Z,Z-YnXddl/m0Z0dd	l1m2Z2m3Z3d
Z4e#ed��r�ej5�dkZ4e#ed��r�ej6j7�r�ej6j7j8d
�Z9nd
Z9ej:j8d��o�ej$�dkZ;ej<d�dd��Z=dd�Z>d�dd�Z?Gdd�dej@�ZAGdd�dej@�ZBGdd�dej@�ZCddlmDZDGdd�deDjE�ZFGdd �d ej@�ZGejHe#ed!�d"�Gd#d$�d$eG��ZIGd%d&�d&eG�ZJGd'd(�d(ej@�ZKejHe#ed)�d*�Gd+d,�d,ej@��ZLGd-d.�d.ej@�ZMGd/d0�d0ej@�ZNGd1d2�d2ej@�ZOejHe#ed3�d4�Gd5d6�d6ej@��ZPejQd7�d8k�p:ejQd9�d8k�p:ejQd:�d8kZRejSeRd;�Gd<d=�d=ej@��ZTej<d�d>d?��ZUGd@dA�dAej@�ZVejHej:dBkdC�GdDdE�dEej@��ZWGdFdG�dGej@�ZXGdHdI�dIej@�ZYejSej:dBkdJ�GdKdL�dLej@��ZZejSej:dBkdJ�GdMdN�dNej@��Z[ejHej:dBkdC�GdOdP�dPej@��Z\ejHej:dBkdC�GdQdR�dRej@��Z]ejHej:dBkdC�ej^GdSdT�dTej@���Z_ejHej:dBkdC�GdUdV�dVej@��Z`ej^GdWdX�dXej@��ZaGdYdZ�dZej@�ZbGd[d\�d\ej@�ZcGd]d^�d^ej@�ZdGd_d`�d`ej@�Zeejfda�ejHe#edb�dc�Gddde�deej@���ZgejHe#edf��oHe#edg�dh�Gdidj�djej@��Zhedk	�r�Gdkdl�dlejiejj�ZkejHedk	dm�ejHe#edn�do�Gdpdq�dqej@���Zldrds�ZmejHem�dt�ejndudvdw�Gdxdy�dyej@���ZoejHe#edz�d{�Gd|d}�d}ej@��ZpGd~d�dej@�ZqGd�d��d�ej@�ZrGd�d��d�ej@�ZsGd�d��d�ej@�ZtejHe#ed��d��Gd�d��d�ej@��ZuGd�d��d�ej@�ZvGd�d��d�ej@�ZwGd�d��d�ej@�Zxe#ed���r�Gd�d��d�ex�Zyezd�k�r�ej{�dS)��N)�supportcCs g|]}tj�|jkr|j�qS�)�getpassZgetuserZgr_memZgr_gid)�.0�grr�,/opt/alt/python36/lib64/python3.6/test_os.py�
<listcomp>1sr�getgidcCsg|]
}|j�qSr)Zpw_uid)r�urrrr:s)�INT_MAX�PY_SSIZE_T_MAX)�assert_python_ok)�
unix_shell�FakePathF�geteuid�thread_infoZlinuxthreadsZfreebsdc	cs(tj|tf|d��dVWdQRXdS)N)�quiet)rZcheck_warnings�DeprecationWarning)Z	msg_regexrrrr�ignore_deprecation_warningsWsrcCstjtt|�d|�S)Nzrequires os.%s)�unittest�
skipUnless�hasattr�os)�namerrr�requires_os_func]sr�contentc	Cs&t|dd��}|j|�WdQRXdS)N�xbr)�open�write)�filenameZcontent�fprrr�create_fileasr!c@s�eZdZdd�ZeZdd�Zdd�Zejdd��Z	d	d
�Z
ejeje
ekd�eje
dd
dd�dd����Zdd�Zdd�Zejejdkd�dd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$S)%�	FileTestscCstjjtj�rtjtj�dS)N)r�path�lexistsr�TESTFN�unlink)�selfrrr�setUphszFileTests.setUpcCs:tjtjtjtjB�}tj|�|jtjtjtj	��dS)N)
rrrr%�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK)r'�frrr�test_accessms
zFileTests.test_accessc
Cs�tjtjtjtjB�}tj|�}zNd}xD||dkrjtj|�|d7}|dkrX|jd�|tj|�}}q(WWdtj|�Xtj	||d�|j
ttj|d�dS)Nr��
z%couldn't allocate two consecutive fds��a)
rrrr%r)r*�dupr+�skipTest�
closerange�assertRaises�OSErrorr)r'�first�secondZretriesrrr�test_closerangers


zFileTests.test_closerangecCs<tj}tj|�}|jttj|d�tj|�}|j||�dS)Nr)	rr%�sys�getrefcountr8�	TypeErrorr�rename�assertEqual)r'r#�old�newrrr�test_rename�s


zFileTests.test_renamecCslttjd��V}|jd�|j�|j�}tj|dd�tj|d�}|j	t
|�t�|j	|d�WdQRXdS)Nzw+bsspamr�)rrr%r�flush�filenor�lseek�readrA�type�bytes)r'�fobj�fd�srrr�	test_read�s
zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXr2r1F)�sizeZmemuseZdry_runc
CsT|jtjtj�ttjd�ttjd��}tj|j�|�}WdQRX|j	|d�dS)Nstest�rb)
�
addCleanuprr&r%r!rrrIrGrA)r'rPr �datarrr�test_large_read�s
zFileTests.test_large_readcCs�tjtjtjtjB�}|jttj|d�tj|d�tj|t	d��tj|t
d��tj|�ttjd�� }|j|j
�j�dddg�WdQRXdS)	N�beanssbacon
seggs
sspam
rQsbaconseggssspam)rrrr%r)�O_WRONLYr8r?r�	bytearray�
memoryviewr+rArI�
splitlines)r'rMrLrrr�
test_write�s
zFileTests.test_writecGs"tj|tjdd�}|j|d�dS)NT)�
creationflags�shellr)�
subprocessZcallZCREATE_NEW_CONSOLErA)r'�argsZretcoderrr�write_windows_console�szFileTests.write_windows_console�win32z$test specific to the Windows consolecCs*d}|jtjd|�|jtjdd|�dS)Nzprint('x' * 100000)z-cz-u)r_r=�
executable)r'�coderrr�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs,tjtjtj�}tj|f|��}|j�dS)N)rrrr%�O_RDONLY�fdopenr+)r'r^rMr/rrr�
fdopen_helper�szFileTests.fdopen_helpercCsBtjtjtjtjB�}tj|�|j�|jd�|jdd�dS)N�r�d)rrrr%r)r*r+rf)r'rMrrr�test_fdopen�s


zFileTests.test_fdopenc
Cs�tjd}|jtjtj�|jtj|�ttjd�t|d�tjtj|�|jttj	tj�t
|d��}|j|j�d�WdQRXdS)Nz.2�1�2rg�1)
rr%rRr&r!r�replacer8�FileNotFoundError�statrrArI)r'�TESTFN2r/rrr�test_replace�s

zFileTests.test_replacecCs"tjttjddd�}tj|�dS)Ni�)r#�flags�mode�dir_fd)rr�__file__rdr+)r'r/rrr�test_open_keywords�szFileTests.test_open_keywordscCs@tjtd�}y|dtjddd�Wnttfk
r:YnXdS)N�symlink�targetF)�src�dst�target_is_directoryrt)rZ
get_attributerr%�NotImplementedErrorr9)r'rwrrr�test_symlink_keywords�szFileTests.test_symlink_keywordsN)�__name__�
__module__�__qualname__r(�tearDownr0r<rZcpython_onlyrDrOrrrrZ
bigmemtestrTrZr_r=�platformrcrfrirqrvr}rrrrr"gs&

 

r"c@s�eZdZdd�Zejeed�d�dd��Zdd�Z	d	d
�Z
dd�Zejeed
�d�dd��Zejeed
�d�dd��Z
ejejdkd�dd��Zejejdkd�ejeed�d�dd���Zdd�Zejejdkd�dd ��Zejejdkd�d!d"��Zd#S)$�StatAttributeTestscCs(tj|_|jtj|j�t|jd�dS)NsABC)rr%�fnamerRr&r!)r'rrrr(�szStatAttributeTests.setUproztest needs os.stat()c
>Cs�tj|�}|j|tjd�|j|jd�t|�}xptt�D]d}|dd�dkr<|j�}|jd�rldd�}ndd�}|j|t||��|tt|��|j	||�q<WxDdj
�D]8}tt||�d�}t||d	�d
}|j||dd�q�Wy|d
|j
d�Wntk
�rYnXyd|_|j
d�Wntk
�rBYnXyd|_|j
d�Wnttfk
�rrYnXyd|_|j
d�Wntk
�r�YnXytjd�}	|j
d�Wntk
�r�YnXytjd�}	Wntk
�r�YnXdS)N�ZST_ZTIMEcSst|�S)N)�int)�xrrr�truncsz7StatAttributeTests.check_stat_attributes.<locals>.trunccSs|S)Nr)r�rrrr�
szst_atime st_mtime st_ctimei��Z_nsi'r3)�delta��zNo exception raisedr1r2rrE�����	���
�)r2)rr1r3r�rEr�r�r�r�r�r2r�r�r�r�)rrorA�ST_SIZE�st_size�dir�lower�endswith�getattr�assertIn�splitr��assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevr?�parrot�stat_result)
r'r��result�membersr�attrr�ZfloatyZnanosecondy�result2rrr�check_stat_attributes�s\



z(StatAttributeTests.check_stat_attributescCs|j|j�dS)N)r�r�)r'rrr�test_stat_attributes<sz'StatAttributeTests.test_stat_attributescCsHy|jjtj��}Wn$tk
r8|jd|j�YnX|j|�dS)Nz#cannot encode %a for the filesystem)r��encoder=�getfilesystemencoding�UnicodeEncodeErrorr6r�)r'r�rrr�test_stat_attributes_bytes?s
z-StatAttributeTests.test_stat_attributes_bytescCsjtj|j�}xXttjd�D]F}tj||�}|jd|�|dkrL|jd|�tj|�}|j	||�qWdS)Nr1sstat_resultrEscos
stat_result
)
rror��range�pickle�HIGHEST_PROTOCOL�dumpsr��loadsrA)r'r��proto�p�	unpickledrrr�test_stat_result_pickleFs
z*StatAttributeTests.test_stat_result_pickle�statvfsztest needs os.statvfs()c<Cs>ytj|j�}Wn8tk
rH}z|jtjkr8|jd�WYdd}~XnX|j|j|d�d}x.t	|�D]"\}}|jt
|d
|�||�qjWyd|_|jd�Wntk
r�YnXyd|_
|jd�Wntk
r�YnXytjd�}|jd�Wntk
�rYnXytjd�}Wntk
�r8YnXdS) Nzos.statvfs() failed with ENOSYSr��bsize�frsize�blocks�bfree�bavail�files�ffree�favail�flag�namemaxZf_r1zNo exception raisedr2rr3rEr�r�r�r�r�r�r�r�r�)
r�r�r�r�r�r�r�r�r�r�)r2)rr1r3r�rEr�r�r�r�r�r2r�r�r�r�)rr�r�r9�errno�ENOSYSr6rA�f_bfree�	enumerater�r�r�r��statvfs_resultr?)r'r��er��value�memberr�rrr�test_statvfs_attributesPs:
z*StatAttributeTests.test_statvfs_attributeszneed os.statvfs()cCs�ytj|j�}Wn8tk
rH}z|jtjkr8|jd�WYdd}~XnXxXttj	d�D]F}tj
||�}|jd|�|dkr�|jd|�tj|�}|j
||�qZWdS)Nzos.statvfs() failed with ENOSYSr1sstatvfs_resultrEscos
statvfs_result
)rr�r�r9r�r�r6r�r�r�r�r�r�rA)r'r�r�r�r�r�rrr�test_statvfs_result_pickle|s
z-StatAttributeTests.test_statvfs_result_pickler`zWin32 specific testscCs\ytjd�WnHtk
r,|jd�Yn,tk
rV}z|jd�WYdd}~XnXdS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rrornr6r9r�)r'r�rrr�test_1686475�szStatAttributeTests.test_1686475�pipezrequires os.pipe()cCshtj�\}}ztj|�Wdtj|�tj|�X|jt��}tj|�WdQRX|j|jjtj	�dS)N)
rr�ror+r8r9rA�	exceptionr��EBADF)r'rg�wZctxrrr�
test_15261�s
zStatAttributeTests.test_15261cCsF|jt|d��|jt|jt��|jd|jko:dkn�dS)N�st_file_attributesrl��)r,r�
isinstancer�r�)r'r�rrr�check_file_attributes�sz(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificcCsztj|j�}|j|�|j|jtj@d�tjd}tj	|�|j
tj|�tj|�}|j|�|j|jtj@tj�dS)Nrr�)rror�r�rAr��FILE_ATTRIBUTE_DIRECTORYrr%�mkdirrR�rmdir)r'r��dirnamerrr�test_file_attributes�s






z'StatAttributeTests.test_file_attributescCsdtjjtjd|j�}|jtj|�t|d�d}t	j
d|ddg|d�tj|�}|j|j
d�dS)	NZTEMPsABCr�z
icacls.exez/denyz*S-1-5-32-545:(S))r[r)rr#�join�environr�rRrr&r!r]�
check_callro�assertNotEqualr�)r'r�ZDETACHED_PROCESSr�rrr�test_access_denied�s


z%StatAttributeTests.test_access_deniedN)r~rr�r(rrrrr�r�r�r�r�r�r=r�r�r�r�r�r�rrrrr��sB
,

r�c@s�eZdZdd�Zdd�Zd'dd�Zdd	�Zed
d��Zdd
�Z	dd�Z
eje
je
jkd�dd��Zeje
je
jkd�dd��Zeje
je
jkd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�ZdS)(�
UtimeTestsc
Cs�tj|_tjj|jd�|_|jtj|j�tj	|j�t
|j�dd�}td��&tjd�}|j||�tjd�WdQRXdS)N�f1c	Ss"td��tj|�WdQRXdS)N�stat_float_times)rrr�)�staterrr�restore_float_times�s
z-UtimeTests.setUp.<locals>.restore_float_timesr�r1T���)
rr%r�rr#r�r�rR�rmtreer�r!rr�)r'r�Zold_float_timesrrrr(�s


zUtimeTests.setUpcCs4tj|�}|j|dkp2|j|dkp2|j|dkS)Nr�r�r�)rro�st_atime�st_mtime�st_ctime)r'r�strrr�support_subsecond�s
zUtimeTests.support_subsecondNcCs�|s
|j}|j|�}|r"d}d}nd}d
}||||f�tj|�}|rt|j|j|ddd	�|j|j|ddd	�n$|j|j|d�|j|j|d�|j|j|�|j|j	|�dS)Ni8Z�;l�
o]r�r2r�r�g��&�.>g���ư>)r�iʚ;lrTiʚ;lP�9)
r�r�rror�r�r�rA�st_atime_ns�st_mtime_ns)r'�set_timerr��atime_ns�mtime_nsr�rrr�_test_utime�s"

zUtimeTests._test_utimecCsdd�}|j|�dS)NcSstj||d�dS)N)�ns)r�utime)rr�rrrr�sz'UtimeTests.test_utime.<locals>.set_time)r�)r'r�rrr�
test_utimeszUtimeTests.test_utimecCs|ddS)Ng��&�.>g��&�.>r)r�rrr�	ns_to_secszUtimeTests.ns_to_seccs�fdd�}�j|�dS)Ncs0|\}}�j|�}�j|�}tj|||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_indexedsz UtimeTests.test_utime_by_indexedcs�fdd�}�j|�dS)Ncs2|\}}�j|�}�j|�}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_times)szUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd�}|j|�dS)NcSstj||dd�dS)NF)r��follow_symlinks)rr�)rr�rrrr�6sz9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_time)r�)r'r�rrr�test_utime_nofollow_symlinks2sz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd�}|j|�dS)NcSs.t|dd��}tj|j�|d�WdQRXdS)N�wbr)r�)rrr�rG)rr�r rrrr�?sz*UtimeTests.test_utime_fd.<locals>.set_time)r�)r'r�rrr�
test_utime_fd<szUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd�}|j|�dS)NcSsDtjj|�\}}tj|tj�}ztj|||d�Wdtj|�XdS)N)rtr�)rr#r�rrdr�r+)rr�r�r�dirfdrrrr�Is
z.UtimeTests.test_utime_dir_fd.<locals>.set_time)r�)r'r�rrr�test_utime_dir_fdFszUtimeTests.test_utime_dir_fdcCsdd�}|j||jd�dS)NcSstj||d�dS)N)r�)rr�)rr�rrrr�Tsz1UtimeTests.test_utime_directory.<locals>.set_time)r)r�r�)r'r�rrr�test_utime_directorySszUtimeTests.test_utime_directorycCsrtj�}||j�|j|j�s$d}ntjdkr4d}nd}tj|j�}d|j||j|f}|j|j|||d�dS)Ng�?�ntg�������?g{�G�z�?zst_time=%r, current=%r, dt=%r)r��msg)�timer�r�rrror�r�)r'r�Zcurrentr�r�rrrr�_test_utime_currentYs


zUtimeTests._test_utime_currentcs�fdd�}�j|�dS)Ncstj�j�dS)N)rr�r�)r)r'rrr�qsz/UtimeTests.test_utime_current.<locals>.set_time)r)r'r�r)r'r�test_utime_currentpszUtimeTests.test_utime_currentcs�fdd�}�j|�dS)Ncstj�jd�dS)N)rr�r�)r)r'rrr�wsz3UtimeTests.test_utime_current_old.<locals>.set_time)r)r'r�r)r'r�test_utime_current_oldvsz!UtimeTests.test_utime_current_oldc
Csltjdkrhtjjtjj|��dd}ddl}|jj}|j	dd�}|j
|ddddd|t|��}|rh|jSdS)Nr`r�\�rh)
r=r�rr#�
splitdrive�abspath�ctypes�windll�kernel32Zcreate_unicode_bufferZGetVolumeInformationW�lenr�)r'r#�rootrr
�buf�okrrr�get_file_system|s

zUtimeTests.get_file_systemcCsJ|j|j�dkr|jd�d}tj|j||f�|jtj|j�j|�dS)NZNTFSz
requires NTFSlrT)	rr�r6rr�r�rAror�)r'Zlargerrr�test_large_time�s

zUtimeTests.test_large_timecRCs�|jt��tj|jdd	d�WdQRX|jt��tj|jddg�WdQRX|jt��tj|jd
�WdQRX|jt��tj|jd�WdQRX|jt��tj|jddgd�WdQRX|jt��tj|jdd�WdQRX|jt��tj|jd
d�WdQRXtjtjk�rD|jt��tj|jddd�WdQRXtjtjk�r�t	|jdd��,}|jt��tj|j
�d�WdQRXWdQRXtjtjk�r�|jt��tj|jddd�WdQRXdS)Nr�)r�F)r�r�r)rt)r�r�)r�r�)r�)r�r�r�)r�)r�r�r�)r�r�)r�r�)r�r�)r8�
ValueErrorrr�r�r?�supports_follow_symlinksr|�supports_fdrrG�supports_dir_fd)r'r rrr�test_utime_invalid_arguments�s0$z'UtimeTests.test_utime_invalid_arguments)N)r~rr�r(r�r�r��staticmethodr�r�r�rrrr�rr�rr�rr�rrrrrrrrrrrr��s(
			

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


zEnvironTests.tearDowncCsdddd�S)NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3r)r'rrrr!�szEnvironTests._referencecCstjj�tjS)N)rr�r$)r'rrr�_empty_mapping�s
zEnvironTests._empty_mappingzrequires a shellc
CsNtjj�tjjdd�tjdt��}|j�j�}|j|d�WdQRXdS)NZWorld)ZHELLOz%s -c 'echo $HELLO')	rr�r$r%�popenrrI�striprA)r'r'r�rrr�test_update2�s

zEnvironTests.test_update2cCsdtjdt��L}t|�}|jt|�d�|jt|�d�|jt|�d�|jtt|�WdQRXdS)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rr'r�iterrA�nextr8�
StopIteration)r'r'�itrrr�test_os_popen_iter�s
zEnvironTests.test_os_popen_itercCs<x6tjj�D](\}}|jt|�t�|jt|�t�qWdS)N)rr�r"rArJ�str)r'r#�valrrr�test_keyvalue_types�sz EnvironTests.test_keyvalue_typescCs2x,|j�j�D]\}}|jtjj|�|�qWdS)N)r!r"rArr��get)r'r#r�rrr�
test_items�szEnvironTests.test_itemscCs4tj}|jt|�djdjdd�|j�D����dS)Nzenviron({{{}}})z, css|]\}}dj||�VqdS)z
{!r}: {!r}N)�format)rr#r�rrr�	<genexpr>�sz-EnvironTests.test___repr__.<locals>.<genexpr>)rr�rA�reprr4r�r")r'�envrrr�
test___repr__�szEnvironTests.test___repr__cCsFtjjtj�}ddddg}dtjj|�i}tj}z2t|�t_|j|tj��|j|tjdd��Wd|t_X|j|tji��|jdtjddi��|j|tj|��tj	�rBy&t
jdd��d	d
d�}WdQRXWntk
r�YnX|j
ttj|�|jtjdd
i�dg�|jtjddi�dg�|jtjdd
i�dg�dS)Nz/montyz/pythonrz/flying/circus�PATH)r7T)�recordrlrk)r9sPATHsPATHsabc�abc)r)r�defpathr��pathsepr�r�r�assertSequenceEqual�
get_exec_pathr�warnings�catch_warnings�BytesWarningr8r)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|jtj�d�}Wn,tk
rDdtj�f}|j|�YnX|tjd<|jtjd|�|jtjd|�d}|tjd<|jtjd|�|j	tj�d�}|jtjd|�dS)	Nueuro€�surrogateescapez'U+20AC character is not encodable to %sZunicodesunicode��sbytesrK)
r�r=r�r�r6rr�rAr�decode)r'r�Zvalue_bytesrZ	value_strrrr�
test_environbs 



zEnvironTests.test_environbr�r2r�cCs@tjdkr&dd}|jttjj|�nd}|jttjj|�dS)Nr`r�iP�zkey=)r=r�r8rrr��__delitem__r9)r'r#rrr�test_unset_error5s

zEnvironTests.test_unset_errorcCs�d}|j|tj�|jt��}tj|WdQRX|j|jjd|�|j|jj	�|jt��}tj|=WdQRX|j|jjd|�|j|jj	�dS)NZ
missingkeyr)
�assertNotInrr�r8�KeyError�assertIsr�r^r,�__suppress_context__)r'�missing�cmrrr�
test_key_typeAszEnvironTests.test_key_typecCsLt|�}d}t|�dtj|<zt|�|jtj|d�Wdtj|=XdS)NZ__new_key__Ztest_environ_iteration)r*r+rr�rA)r'Z
collection�iteratorZnew_keyrrr�_test_environ_iterationOs
z$EnvironTests._test_environ_iterationcCs|jtj�dS)N)rRrr�)r'rrr�(test_iter_error_when_changing_os_environ^sz5EnvironTests.test_iter_error_when_changing_os_environcCs|jtjj��dS)N)rRrr�r")r'rrr�.test_iter_error_when_changing_os_environ_itemsasz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|jtjj��dS)N)rRrr��values)r'rrr�/test_iter_error_when_changing_os_environ_valuesdsz<EnvironTests.test_iter_error_when_changing_os_environ_values)r~rr�Z	type2testr(r�r!r&rrrrr#�existsr)r.r1r3r8rCrrGrZrequires_freebsd_versionZrequires_mac_verrIrPrRrSrTrVrrrrr�s,)rc@sNeZdZdd�Zdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dS)�	WalkTestscKs$d|kr|jd�|d<tj|f|�S)Nr��followlinks)�popr�walk)r'�top�kwargsrrrr[mszWalkTests.walkcCs,tjj}|jtjtj�|tjd�|_||jd�|_||jd�|_	||jd�}||d�}||jd�}||jd�}||d�}||d�}||d	�|_
|tjd
�}|tjd
d�}	||d�}
||d
�}||d�}tj|j	�tj|�tj|�tj|�x@||||	|fD].}
t|
d��}|j
d|
d�WdQRX�qWtj��r�tjtjj|�|j
�tjd|
d�tj|dd�|d�tj|dd�|d�|dd	gdd
ddgf|_n|gdgf|_tj|d�ytj|�Wn(tk
�r�|jtj|tj�Yn4Xtj|tj�tj|�tj|�|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.
ZbrokenTZtmp5rr1)rr#r�rRrr�r%�	walk_path�	sub1_path�
sub11_path�	link_path�makedirsrr�can_symlinkrwr
�	sub2_tree�chmod�listdir�PermissionErrorro�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_pathr#r/rrrr(rsT








"


zWalkTests.setUpcCs�t|j|j��}|jt|�d�|ddddk}|ddj�|dd|dj�|dd|dj�|j|d|jddgdgf�|j|d||jd	gd
gf�|j|d||jggf�|j|dd||j�dS)NrErr1r^r�r3r`rar_rbr�)	�listr[rerAr�sortrfrgrk)r'�all�flippedrrr�test_walk_topdown�s zWalkTests.test_walk_topdownNcCs�|dkr|j}g}x:|j|�D],\}}}|j|||f�d|kr|jd�qW|jt|�d�|j|d|jdgdgf�|ddj�|ddj�|j|d|j�dS)Nr^r3rr`rar1r�)rer[�append�removerArrqrk)r'rerrr�dirsr�rrr�test_walk_prune�szWalkTests.test_walk_prunecCs|jt|j��dS)N)rxrre)r'rrr�test_file_like_path�szWalkTests.test_file_like_pathcCs�t|j|jdd��}|jt|�d|�|ddddk}|ddj�|dd|d
j�|dd|dj�|j|d|jdd	gd
gf�|j|||jggf�|j||d|jdgdgf�|j|dd||j�dS)NF)�topdownrEr�r1rr^r3r`rar_rbr�)	rpr[rerArrqrgrfrk)r'rrrsrrr�test_walk_bottom_up�s

zWalkTests.test_walk_bottom_upcCsjtj�s|jd�|j|jdd�}xB|D]0\}}}||jkr(|j|g�|j|dg�Pq(W|jd�dS)Nzneed symlink supportT)r�rdz+Didn't follow symlink with followlinks=True)rrjr6r[rerhrAr�)r'�walk_itrrwr�rrr�test_walk_symlink�s

zWalkTests.test_walk_symlinkcCs�g}|j|j|jd�}t|�\}}}|j|g�d}tjj||�}tjj||d�}tj||�z`dd�|D�}	|j	|�|j
||	�|j
||	�x*|D]"}
|
|kr�|jtjj||
�|	�q�WWdtj||�XdS)N)�onerrorr^z.newcSsg|]\}}}|�qSrr)rrg�dr/rrrrsz/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)r[rerur+rArr#r�r@r,rJr�)r'�errorsr|rrwr��dir1Zpath1Zpath1new�roots�dir2rrr�test_walk_bad_dirs"

zWalkTests.test_walk_bad_dir)N)r~rr�r[r(rtrxryr{r}r�rrrrrXhsE
rX�fwalkzTest needs os.fwalk()c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�
FwalkTestscks0x*tj|f|�D]\}}}}|||fVqWdS)N)rr�)r'r\r]rrwr�Zroot_fdrrrr[szFwalkTests.walkc
Cs�|j�}|j�}x�tjddd�D]�\}}|j||d�|j||d�i}x.tjf|�D]\}}}t|�t|�f||<qVWxDtjf|�D]4\}}}}	|j||�|j	||t|�t|�f�q�Wq WdS)NTFr3)�repeat)rzrY)rzr�)TF)
�copy�	itertools�productr%rr[�setr�r�rA)
r'�walk_kwargs�fwalk_kwargsrzr��expectedrrwr��rootfdrrr�_compare_to_walkszFwalkTests._compare_to_walkcCsdtji}|j||�dS)Nr\)rr%r�)r'r]rrr�test_compare_to_walk1s
zFwalkTests.test_compare_to_walkcCsJz8tjdtj�}dtji}|j�}||d<|j||�Wdtj|�XdS)N�.r\rt)rrrdrr%r�r�r+)r'rMr�r�rrr�test_dir_fd5s
zFwalkTests.test_dir_fdcCs�x~tjddd�D]l\}}tj|df}xVtj|d|i�D]B\}}}}tj|�tj|�|jt	tj
|��t	|�t	|�B�q6WqWdS)NTFr3)r�r�)TF)r�r�rr%rr��fstatrorAr�rm)r'rzr�r^rrwr�r�rrr�test_yields_correct_dir_fd?s

z%FwalkTests.test_yields_correct_dir_fdcCsdtjd�}tj|�x&td�D]}xtjtj�D]}q0WqWtjd�}|jtj|�|j||�dS)Nr1�)	rr5r+r�r�rr%rRrA)r'Zminfd�ir�Znewfdrrr�test_fd_leakKs


zFwalkTests.test_fd_leakN)	r~rr�r[r�r�r�r�r�rrrrr�s
r�cs0eZdZ�fdd�Z�fdd�Zdd�Z�ZS)�BytesWalkTestscst�j�tj�|_dS)N)�superr(�
contextlib�	ExitStack�stack)r')�	__class__rrr(Zs
zBytesWalkTests.setUpcs|jj�t�j�dS)N)r�r+r�r�)r')r�rrr�^s
zBytesWalkTests.tearDownc	ks�d|kr|jd�|d<x�tjtj|�f|�D]p\}}}tj|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q,WdS)Nr�rY)rZrr[�fsencode�fsdecoderp�map)	r'r\r]ZbrootZbdirsZbfilesrrwr�rrrr[bs 
zBytesWalkTests.walk)r~rr�r(r�r[�
__classcell__rr)r�rr�Xsr�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�MakedirTestscCstjtj�dS)N)rr�rr%)r'rrrr(oszMakedirTests.setUpc	Cs�tj}tjj|ddd�}tj|�tjj|dddd�}tj|�|jttjtj�tjj|dddddtj�}tj|�tjj|dtjddddd�}tj|�dS)Nr�r��dir3�dir4�dir5�dir6)	rr%rr#r�rir8r9�curdir)r'�baser#rrr�test_makedirrs


zMakedirTests.test_makedircCs�tjjtjd�}d}tjd�}tj||�|jttj||�|jttj||dd�tj|ddd�tj||dd�tj|�tjtjj	d	�dd�dS)
Nr�i��F)�exist_oki�T)rsr��/)
rr#r�rr%�umaskrir8r9r
)r'r#rs�old_maskrrr� test_exist_ok_existing_directory�s

z-MakedirTests.test_exist_ok_existing_directorycCs�tjjtjd�}tj}d}tjd�}z�tjtj	tj�j
�}ytjtj||B�Wntk
rnt
jd��YnXtj	tj�j
|@|kr�t
jd��tj|||B�tj||dd�tj|tjtj	|�j
�|@�tj|||Bdd�Wdtj|�XdS)Nr�i�r�zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.T)r�)rr#r�rr%ro�S_ISGIDr��S_IMODE�lstatr�rlrnr�SkipTestri)r'r#r�rsr�Zexisting_testfn_moderrr�test_exist_ok_s_isgid_directory�s$

 z,MakedirTests.test_exist_ok_s_isgid_directorycCsxtj}tjjtjd�}t|d�}|jd�|j�|jt	tj
|�|jt	tj
|dd�|jt	tj
|dd�tj|�dS)Nr�r�r;F)r�T)rr%rr#r�rrr+r8r9rirv)r'r�r#r/rrr�#test_exist_ok_existing_regular_file�s

z0MakedirTests.test_exist_ok_existing_regular_filecCsRtjjtjdddddd�}x(tjj|�rB|tjkrBtjj|�}qWtj|�dS)Nr�r�r�r�r�r�)rr#r�rr%rWr��
removedirs)r'r#rrrr��s

zMakedirTests.tearDownN)	r~rr�r(r�r�r�r�r�rrrrr�nsr��chownzTest needs chownc@s�eZdZedd��Zdd�Zejee	�dkd�dd��Z
ejeoJee�dkd	�d
d��Z
ejeolee�dkd�d
d��Zedd��ZdS)�ChownFileTestscCstjtj�dS)N)rr�rr%)�clsrrr�
setUpClass�szChownFileTests.setUpClasscCs�tjtj�}|j}|j}xNddtjd�tj	dd�fD]0}|j
ttjtj||�|j
ttjtj||�q4W|j
tjtj||��|j
tjtjd	d
��dS)Ng�?y�?r1r3g�y��r����r�r�)rrorr%�st_uid�st_gid�decimalZDecimal�	fractionsZFractionr8r?r��assertIsNone)r'ro�uid�gidr�rrr�*test_chown_uid_gid_arguments_must_be_index�s z9ChownFileTests.test_chown_uid_gid_arguments_must_be_indexr1ztest needs more than one groupcCsvtdd�\}}tjtj�j}tjtj||�tjtj�j}|j||�tjtj||�tjtj�j}|j||�dS)Nr3)	�groupsrrorr%r�r�r�rA)r'Zgid_1Zgid_2r�r�rrr�
test_chown�szChownFileTests.test_chownz0test needs root privilege and more than one usercCsvtdd�\}}tjtj�j}tjtj||�tjtj�j}|j||�tjtj||�tjtj�j}|j||�dS)Nr3)	�	all_usersrrorr%r�r�r�rA)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 usercCsXtdd�\}}tjtj�j}|jt��&tjtj||�tjtj||�WdQRXdS)Nr3)	r�rrorr%r�r8rnr�)r'r�r�r�rrr�test_chown_without_permission�s
z,ChownFileTests.test_chown_without_permissioncCstjtj�dS)N)rr�rr%)r�rrr�
tearDownClass�szChownFileTests.tearDownClassN)r~rr��classmethodr�r�rrrr�r��
root_in_posixr�r�r�r�rrrrr��s
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCstjtj�dS)N)rrirr%)r'rrrr(�szRemoveDirsTests.setUpcCstjtj�dS)N)rr�r%)r'rrrr��szRemoveDirsTests.tearDowncCsxtjjtjd�}tj|�tjj|d�}tj|�tj|�|jtjj|��|jtjj|��|jtjjtj��dS)N�dira�dirb)	rr#r�rr%r�r��assertFalserW)r'r�r�rrr�test_remove_all�s


zRemoveDirsTests.test_remove_allcCs�tjjtjd�}tj|�tjj|d�}tj|�ttjj|d��tj|�|jtjj	|��|j
tjj	|��|j
tjj	tj��dS)Nr�r�zfile.txt)rr#r�rr%r�r!r�r�rWr,)r'r�r�rrr�test_remove_partials


z#RemoveDirsTests.test_remove_partialc
Cs�tjjtjd�}tj|�tjj|d�}tj|�ttjj|d��|jt��tj	|�WdQRX|j
tjj|��|j
tjj|��|j
tjjtj��dS)Nr�r�zfile.txt)rr#r�rr%r�r!r8r9r�r,rW)r'r�r�rrr�test_remove_nothings

z#RemoveDirsTests.test_remove_nothingN)r~rr�r(r�r�r�r�rrrrr��s

r�c@seZdZdd�ZdS)�DevNullTestscCsXttjdd��}|jd�|j�WdQRXttjd��}|j|j�d�WdQRXdS)Nr�rshellorQ�)rr�devnullrr+rArI)r'r/rrr�test_devnull!s

zDevNullTests.test_devnullN)r~rr�r�rrrrr� sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCsr|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�dS)Nrr1r2rhi�)rArr�urandom)r'rrr�test_urandom_length*s
z URandomTests.test_urandom_lengthcCs0tjd�}|j|t�tjd�}|j||�dS)N�)rr��assertIsInstancerKr�)r'�data1�data2rrr�test_urandom_value1s

zURandomTests.test_urandom_valuecCs<djdd|ddf�}td|�}|d}|jt|�d�|S)	N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()z-cr1r�)r�r
rAr)r'�countrb�out�stdoutrrr�get_urandom_subprocess7s
z#URandomTests.get_urandom_subprocesscCs$|jd�}|jd�}|j||�dS)Nr�)r�r�)r'r�r�rrr�test_urandom_subprocessBs

z$URandomTests.test_urandom_subprocessN)r~rr�r�r�r�r�rrrrr�)sr��	getrandomzneed os.getrandom()c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�GetRandomTestscCsPytjd�Wn<tk
rJ}z |jtjkr8tjd��n�WYdd}~XnXdS)Nr1z%getrandom() syscall fails with ENOSYS)rr�r9r�r�rr�)r��excrrrr�JszGetRandomTests.setUpClasscCs*tjd�}|j|t�|jt|�d�dS)Nr�)rr�r�rKrAr)r'rSrrr�test_getrandom_typeVs
z"GetRandomTests.test_getrandom_typecCstjd�}|j|d�dS)Nrr�)rr�rA)r'�emptyrrr�test_getrandom0[s
zGetRandomTests.test_getrandom0cCs|jttd��dS)N�GRND_RANDOM)r,rr)r'rrr�test_getrandom_random_sz$GetRandomTests.test_getrandom_randomcCs,ytjdtj�Wntk
r&YnXdS)Nr1)rr��
GRND_NONBLOCK�BlockingIOError)r'rrr�test_getrandom_nonblockesz&GetRandomTests.test_getrandom_nonblockcCs$tjd�}tjd�}|j||�dS)Nr�)rr�r�)r'r�r�rrr�test_getrandom_valuems

z#GetRandomTests.test_getrandom_valueN)
r~rr�r�r�r�r�r�r�r�rrrrr�Hsr��HAVE_GETENTROPYr1�HAVE_GETRANDOM�HAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorc@s0eZdZejed�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'rbrrr�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'rb�rcr��errrrr�test_urandom_fd_closed�sz%URandomFDTests.test_urandom_fd_closedcCs�|jtjtj�ttjdd�djtjd�}td|�\}}}|jt|�d�|j	|dd�|dd��td|�\}}}|jt|�d�|j	||�dS)	N�xr�a�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))
            )r%z-Scr�rrE)
rRrr&r%r!r4r
rArr�)r'rbr�r�r�Zout2Zerr2rrr�test_urandom_fd_reopened�sz'URandomFDTests.test_urandom_fd_reopenedN)	r~rr�rr�resourcer�r�r�rrrrr�zsr�c#slg��fdd�}�fdd�}z6tj}tj}tj}|t_|t_|dk	rJ|t_�VWd|t_|t_|t_XdS)Ncs�jd||f�td��dS)N�execvzexecv called)ru�RuntimeError)rr^)�callsrr�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs �jd||f�ttjd��dS)N�execvez
execve called)rur9r��ENOTDIR)rr^)rrr�mock_execve�sz$_execvpe_mockup.<locals>.mock_execve)rr�rr<)r<rrZ
orig_execvZorig_execveZorig_defpathr)rr�_execvpe_mockup�s	
rc@steZdZejed�dd��Zdd�Zdd�Zej	e
ed�d	�d
d��Zdd
�Z
dd�Zej	ejdkd�dd��ZdS)�	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs|jttjddgd�dS)Nzno such app-)r8r9r�execvpe)r'rrr�test_execvpe_with_bad_program�sz'ExecTests.test_execvpe_with_bad_programcCsN|jttjdf�|jttjdg�|jttjdd�|jttjddg�dS)N�notepadr)r)r8rrr�)r'rrr�test_execv_with_bad_arglist�sz%ExecTests.test_execv_with_bad_arglistcCsB|jttjdgd�|jttjdgi�|jttjddgi�dS)Nr
r)r8rrr)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}tjjtj|�|�}|}dddg}n6d}dddg}tjj||�}tjdkrltj|�}n|}d	d
i}t��@}|jt	tj
||�|jt|�d�|j|dd
||ff�WdQRXt|d��F}|jt
tj
|||d�|jt|�d�|j|dd|||ff�WdQRXt��j}|j�}	|tk�r>||	d<n||	d<|jt
tj
|||	d�|jt|�d�|j|dd|||	ff�WdQRXdS)NZabsolutepaths
executablesprognameZarg1Zarg2raZprognamerZspamrUr1rr�)r<)r7rsPATHr9)r�seprKr#r�r�rrr8rr
rArr9r>r�)
r'Z	test_typeZprogram_pathZprogramZfullpathZnative_fullpathZ	argumentsr7rZenv_pathrrr�_test_internal_execvpe�sD


"



z ExecTests._test_internal_execvpecCs"|jt�tjdkr|jt�dS)Nr)rr/rrrK)r'rrr�test_internal_execvpe_str.s

z#ExecTests.test_internal_execvpe_strcCs�tjddg}tjj�}d|d<|jt��tj|d||�WdQRXtjj�}d|d<|jt��tj|d||�WdQRXtjj�}d|d	<|jt��tj|d||�WdQRXdS)
Nz-c�pass�cabbagezFRUITVEGETABLErzorangeVEGETABLE=cabbage�FRUIT�lemonzFRUIT=ORANGE)r=rarr�r�r8rr)r'r^�newenvrrr�test_execve_invalid_env3s


z!ExecTests.test_execve_invalid_envr`zWin32-specific testcCs`ytjddgi�Wn<tk
rP}z |j|jdkp<|jdk�WYdd}~XnX|jd�dS)Nr�argrzNo OSError raised)rrr9r,Zwinerrorr�)r'r�rrr�test_execve_with_empty_pathHs
,z%ExecTests.test_execve_with_empty_pathN)r~rr�r�skipIf�USING_LINUXTHREADSr	rrrrrrrrr=r�rrrrrr�s0rr`zWin32 specific testsc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Win32ErrorTestscCsvytjtj�WnPtk
r(d}YnJtk
r`}zd}|jdtj|f�WYdd}~XnX|jdtj�dS)NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)rrorr%rnr9r�)r'rWr�rrrr(Us zWin32ErrorTests.setUpcCs|jttjtjtjd�dS)Nz.bak)r8r9rr@rr%)r'rrrrDaszWin32ErrorTests.test_renamecCs|jttjtj�dS)N)r8r9rrvrr%)r'rrr�test_removedszWin32ErrorTests.test_removecCs|jttjtj�dS)N)r8r9r�chdirrr%)r'rrr�
test_chdirgszWin32ErrorTests.test_chdircCs>|jtjtj�ttjd��}|jttjtj�WdQRXdS)Nr�)	rRrr&r%rr8r9rr�)r'r/rrr�
test_mkdirjszWin32ErrorTests.test_mkdircCs|jttjtjd�dS)N)r8r9rr�rr%)r'rrrr�pszWin32ErrorTests.test_utimecCs|jttjtjd�dS)Nr)r8r9rrlrr%)r'rrr�
test_chmodsszWin32ErrorTests.test_chmodN)
r~rr�r(rDrrrr�r rrrrrSsrc	@s�eZdZddddddddd	g	Zd
d�ZxeD]Zee�e�de<q,Wd
d�Zej	e
ed�d�dd��Zej	e
ed�d�dd��Z
ej	e
ed�d�dd��Zej	e
ed�d�dd��Zej	e
ed�d �d!d"��Zej	e
ed#�d$�d%d&��Zej	e
ed'�d(�d)d*��Zej	e
ed+�d,�d-d.��Zej	e
ed/�d0�d1d2��Zej	e
ed3�d4�d5d6��Zej	e
ed7�d8�d9d:��Zej	e
ed;�d<�d=d>��Zej	e
ed?�d@�dAdB��ZdCdD�Zej	e
edE�dF�dGdH��ZdIS)J�
TestInvalidFD�fchdirr5re�	fdatasyncr��fstatvfs�fsync�	tcgetpgrp�ttynamecs�fdd�}|S)Ncstt��r|jtt���dS)N)rr�checkr�)r')r/rr�helper}s
z(TestInvalidFD.get_single.<locals>.helperr)r/r)r)r/r�
get_single|szTestInvalidFD.get_singleZtest_cGs\y|tj�f|��Wn2tk
rH}z|j|jtj�WYdd}~XnX|jd|�dS)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr9rAr�r�r�)r'r/r^r�rrrr(�s"zTestInvalidFD.check�isattyztest needs os.isatty()cCs|jtjtj��d�dS)NF)rArr,rr+)r'rrr�test_isatty�szTestInvalidFD.test_isattyr7ztest needs os.closerange()cCsvtj�}x:td�D].}ytj||�Wntk
r<YqXPqW|dkrVtjd��|jtj	|||d�d�dS)Nr2r3z5Unable to acquire a range of invalid file descriptorsr1)
rr+r�rr�r9rr�rAr7)r'rMr�rrrr<�szTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|jtjd�dS)N�)r(rr.)r'rrr�	test_dup2�szTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|jtjd�dS)Nr)r(rr1)r'rrr�test_fchmod�szTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|jtjdd�dS)Nr1r�r�)r(rr3)r'rrr�test_fchown�szTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs |jtjd�|jtjd�dS)N�PC_NAME_MAX)r(r�pathconfr5)r'rrr�test_fpathconf�szTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs |jtjd�|jtjd�dS)Nr)r(r�truncater9)r'rrr�test_ftruncate�szTestInvalidFD.test_ftruncaterHztest needs os.lseek()cCs|jtjdd�dS)Nr)r(rrH)r'rrr�
test_lseek�szTestInvalidFD.test_lseekrIztest needs os.read()cCs|jtjd�dS)Nr1)r(rrI)r'rrrrO�szTestInvalidFD.test_read�readvztest needs os.readv()cCstd�}|jtj|g�dS)Nr2)rWr(rr=)r'rrrr�
test_readv�szTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|jtjd�dS)Nr)r(rr?)r'rrr�test_tcsetpgrpt�szTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs|jtjd�dS)N� )r(rr)r'rrrrZ�szTestInvalidFD.test_write�writevztest needs os.writev()cCs|jtjdg�dS)Nsabc)r(rrB)r'rrr�test_writev�szTestInvalidFD.test_writevcCs|jtj�|jtjd�dS)NT)r(r�get_inheritable�set_inheritable)r'rrr�test_inheritable�szTestInvalidFD.test_inheritable�get_blockingz-needs os.get_blocking() and os.set_blocking()cCs|jtj�|jtjd�dS)NT)r(rrG�set_blocking)r'rrr�
test_blocking�szTestInvalidFD.test_blockingN)r~rr�Zsinglesr*r/�localsr(rrrrr-r<r0r2r4r8r;r<rOr>r@rZrCrFrIrrrrr!ws,

	r!c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs tj|_tjjtjd�|_dS)N�2)rr%�file1rr#r��file2)r'rrrr(�szLinkTests.setUpcCs0x*|j|jfD]}tjj|�rtj|�qWdS)N)rMrNrr#rWr&)r'�filerrrr��szLinkTests.tearDowncCs`t|�tj||�t|d��8}t|d��"}|jtjj|j�|j���WdQRXWdQRXdS)Nrg)r!rrcrr,r#�sameopenfilerG)r'rMrNr��f2rrr�
_test_link�szLinkTests._test_linkcCs|j|j|j�dS)N)rRrMrN)r'rrr�	test_link�szLinkTests.test_linkcCs(|jt|jtj��t|jtj���dS)N)rRrKrMr=r�rN)r'rrr�test_link_bytes�szLinkTests.test_link_bytescCs\ytjd�Wntk
r,tjd��YnX|jd7_|jd|_|j|j|j�dS)N�ñz#Unable to encode for this platform.rL)rr��UnicodeErrorrr�rMrNrR)r'rrr�test_unicode_name�szLinkTests.test_unicode_nameN)	r~rr�r(r�rRrSrTrWrrrrrK�srKzPosix specific testsc@s�eZdZejeed�d�dd��Zejeed�d�dd��Zejeed	�d
�dd��Z	ejeed
�d�dd��Z
ejeed�d�dd��Zejeed�d�dd��Zejeed�d�dd��Z
ejeed�d�dd��ZdS)�PosixUidGidTests�setuidztest needs os.setuid()cCs@tj�dkr|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr1� l)r�getuidr8r9rYr?�
OverflowError)r'rrr�test_setuid�szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCsFtj�dkr"tr"|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr1rZl)rr[�HAVE_WHEEL_GROUPr8r9r^r?r\)r'rrr�test_setgidszPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCs@tj�dkr|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr1rZl)rr[r8r9rar?r\)r'rrr�test_seteuid
szPosixUidGidTests.test_seteuid�setegidztest needs os.setegid()cCsFtj�dkr"tr"|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr1rZl)rr[r_r8r9rcr?r\)r'rrr�test_setegidszPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCsjtj�dkr|jttjdd�|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intr1rZll)rr[r8r9rer?r\)r'rrr�
test_setreuidszPosixUidGidTests.test_setreuidcCstjtjddg�dS)Nz-cz,import os,sys;os.setreuid(-1,-1);sys.exit(0))r]r�r=ra)r'rrr�test_setreuid_neg1$sz#PosixUidGidTests.test_setreuid_neg1�setregidztest needs os.setregid()cCsptj�dkr$tr$|jttjdd�|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intr1rZll)rr[r_r8r9rhr?r\)r'rrr�
test_setregid,szPosixUidGidTests.test_setregidcCstjtjddg�dS)Nz-cz,import os,sys;os.setregid(-1,-1);sys.exit(0))r]r�r=ra)r'rrr�test_setregid_neg15sz#PosixUidGidTests.test_setregid_neg1N)r~rr�rrrrr]r`rbrdrfrgrirjrrrrrX�s		rXc@sNeZdZdd�Zdd�Zdd�Zdd�Zeje	e
d	�d
�dd��Zd
d�ZdS)�Pep383Testscstjrtj|_ntjr tj|_ntj|_tj|j�|_g��fdd�}|tj�tjr`|tj�tjrp|tj��s~|j	d�t
�|_tj|j�yPxJ�D]B}tj
tjj|j|��tj|�}||jkr�td��|jj|�q�WWntj|j��YnXdS)Ncs2ytj|�}Wntk
r"dSX�j|�dS)N)rr�r�ru)�fn)�bytesfnrr�add_filenameIs
z'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLEr�ZTESTFN_NONASCIIr%rr�ZbdirZTESTFN_UNICODEr6r��	unicodefnr�Zcreate_empty_filer#r�r�r�add�shutilr�)r'rnrlr)rmrr(?s6








zPep383Tests.setUpcCstj|j�dS)N)rrr�r�)r'rrrr�dszPep383Tests.tearDowncCsl|j}ttj|j��}|j||�tj�}z0tjtj�|jttj��ttjtj���Wdtj|�XdS)N)	rpr�rrmr�rA�getcwdrr)r'r��foundZcurrent_directoryrrr�test_listdirgs$zPep383Tests.test_listdircCs2x,|jD]"}ttjj|j|�d�}|j�qWdS)NrQ)rprrr#r�r�r+)r'rlr/rrr�	test_opensszPep383Tests.test_openr�zneed os.statvfs()cCs.x(|jD]}tjj|j|�}tj|�qWdS)N)rprr#r�r�r�)r'rl�fullnamerrr�test_statvfsxszPep383Tests.test_statvfscCs*x$|jD]}tjtjj|j|��qWdS)N)rprror#r�r�)r'rlrrr�	test_stat�szPep383Tests.test_statN)
r~rr�r(r�rurvrrrrrxryrrrrrk=s%rkc@sFeZdZdd�Zdd�Zdd�Zdd�Zejd	�d
d��Z	dd
�Z
dS)�Win32KillTestscCsvddl}ddlm}ddl}|jjj}|j|_|j|j	|j
�|j|j	|j�|j	|j�|j	|j�f|_d}t
jtjddj|�gt
jt
jt
jd�}|j|jj�|j|jj�|j|jj�d\}}	x�||	ko�|j�dk�rH|jt|��}
||j|jj��|
|j|
�ddd�}|j|dd�|
j�r4|j ||
jj!��Pt"j#d	�|d
7}q�W|j$d�t%j&|j'|�|j |j(�|�dS)
Nr)�wintypes�runningz-cz<import sys;sys.stdout.write('{}');sys.stdout.flush();input())r��stderr�stdinrhzPeekNamedPipe failedg�������?r1z1Did not receive communication from the subprocess)rrh))rr{�msvcrtrr
�
PeekNamedPipe�BOOL�restypeZHANDLE�POINTERZc_charZDWORD�argtypesr]�Popenr=rar4�PIPErRr�r+r}r~�pollZcreate_string_bufferrZ
get_osfhandlerGZsizeofr�r�rArFr�sleepr�r�kill�pid�wait)r'Zsigrr{rr�r�procr��maxrZrsltrrr�_kill�sF







zWin32KillTests._killcCs|jtj�dS)N)r��signal�SIGTERM)r'rrr�test_kill_sigterm�sz Win32KillTests.test_kill_sigtermcCs|jd�dS)Nrh)r�)r'rrr�
test_kill_int�szWin32KillTests.test_kill_intcCs�dtj�}tjdd|�}d|d<tjtjtjj	tjj
t�d�|gtjd�}d\}}xR||kr�|j
�dkr�|ddkrxPtjd�|d7}qVWtj|jtj�|jd�tj|j|�tjd	�|j
�s�tj|jtj�|jd
j|��dS)
Nz
test_os_%sr1rzwin_console_handler.py)r[rhg�������?z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {}r�)rrh)�uuidZuuid1�mmapr]r�r=rarr#r�r�ruZCREATE_NEW_PROCESS_GROUPr�rr�r�r�r��SIGINTr�r4)r'ZeventrZtagname�mr�r�r�rrr�_kill_with_event�s(



zWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertycCsdddlm}ddl}|j|j��}|jjj}|j|j�|jf|_|j|_	||d�|j
tjd�dS)Nr)r{�CTRL_C_EVENT)
rr{r�Zc_intrr
�SetConsoleCtrlHandlerr�r�r�r�r�r�)r'r{rZNULLr�rrr�test_CTRL_C_EVENT�s



z Win32KillTests.test_CTRL_C_EVENTcCs|jtjd�dS)N�CTRL_BREAK_EVENT)r�r�r�)r'rrr�test_CTRL_BREAK_EVENT�sz$Win32KillTests.test_CTRL_BREAK_EVENTN)r~rr�r�r�r�r�r�skipr�r�rrrrrz�s6rzc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�Win32ListdirTestscCs�g|_x~td�D]r}d|}tjjtj|�}d|}tjjtj|�}tj|�t|d��}|j	d|�WdQRX|jj
||g�qW|jj�dS)Nr3zSUB%dzFILE%dr�z'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rr#r�rr%rirr�extendrq)r'r�Zdir_nameZdir_path�	file_nameZ	file_pathr/rrrr(�s
zWin32ListdirTests.setUpcCstjtj�dS)N)rrr�rr%)r'rrrr�
szWin32ListdirTests.tearDowncCsH|jttjtj��|j�|jttjtjtj���dd�|jD��dS)NcSsg|]}tj|��qSr)rr�)rr#rrrrszCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>)rA�sortedrrmrr%r�r�)r'rrr�test_listdir_no_extended_path
sz/Win32ListdirTests.test_listdir_no_extended_pathcCshdtjjtj�}|jttj|��|j�dtj	tjjtj��}|jttj|��dd�|jD��dS)Nz\\?\s\\?\cSsg|]}tj|��qSr)rr�)rr#rrrr&sz@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>)
rr#r
rr%rAr�rmr�r�)r'r#rrr�test_listdir_extended_pathsz,Win32ListdirTests.test_listdir_extended_pathN)r~rr�r(r�r�r�rrrrr��s
r�c@s�eZdZdZejje�ZdZ	ejj
e�ZdZdd�Z
dd�Zdd	�Zd
d�Zdd
�Zdd�Zejd�dd��Zejd�dd��Zdd�Zdd�Zejejjd�o�ejjd�d�dd��Zdd�Zd S)!�Win32SymlinkTestsZfilelinktestZdirlinktestzmissing linkcCsdS)Nr)r'rrrr(2szWin32SymlinkTests.setUpcCsRtjj|j�rtj|j�tjj|j�r4tj|j�tjj|j�rNtj|j�dS)N)	rr#rW�filelinkrv�dirlinkr�r$�missing_link)r'rrrr�9szWin32SymlinkTests.tearDowncCs`tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rrw�dirlink_targetr�r,r#rW�isdir�islink�
check_stat)r'rrr�test_directory_linkAs
z%Win32SymlinkTests.test_directory_linkcCs`tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rrw�filelink_targetr�r,r#rW�isfiler�r�)r'rrr�test_file_linkHs
z Win32SymlinkTests.test_file_linkcCs6|j}tjj|�rtj|�d}d}tj|||�dS)Nz"c:\\target does not exist.29r3c740T)r�rr#r$rvrw)r'ZlinknamerxZ
target_is_dirrrr�_create_missing_dir_linkOs
z*Win32SymlinkTests._create_missing_dir_linkcCs|j�tj|j�dS)N)r�rrvr�)r'rrr�,test_remove_directory_link_to_missing_targetYsz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetz)currently fails; consider for improvementcCs |j�|jtjj|j��dS)N)r�r,rr#r�r�)r'rrr�.test_isdir_on_directory_link_to_missing_target`sz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs|j�tj|j�dS)N)r�rr�r�)r'rrr�.test_rmdir_on_directory_link_to_missing_targetfsz@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCsn|jtj|�tj|��|jtj|�tj|��tj|�}|jtj|�tj|��|jtj|�tj|��dS)N)rArror�r�r�)r'rcrxZ
bytes_linkrrrr�ls

zWin32SymlinkTests.check_statcCs@tjjtj�}tjj|d�}tjj|d�}|jtj|�tj|�tj|�tj|�tjjtjj|d��}t	|�tj
�}z�tj|�tjj|d�}tjtjj
|�d�|jdtjtj
���|jtj|�tjd��tj|�|jtj|�tjtjj
|���tj|�|jtj|�tjtjj
|���Wdtj|�XdS)N�level2�level3rMrc)rr#r
rr%r�rRr�r�r!rsrrw�relpathr�rmrAro)r'Zlevel1r�r�rMZorig_dirrcrrr�
test_12084ts.





zWin32SymlinkTests.test_12084zC:\Users\All UserszC:\ProgramDatazTest directories not foundcCs"tjd�}|jtjj|d��dS)NzC:\Users\All UserszC:\ProgramData)r�readlinkr,r#�samefile)r'rxrrr�
test_29248�s
zWin32SymlinkTests.test_29248c$Cs�dd}tjj|gd�}d||f||f|dd�|dd�fg}x�|D]�\}}ytj||�Wntk
rvYn&Xytj|�Wntk
r�YnXytjtj|�tj|��Wntk
r�YqJXytj|�WqJtk
r�YqJXqJWdS)N�X�r2r�)rr#r�rwrnrvr9r�)r'Zsegmentr#Z
test_casesry�destrrr�test_buffer_overflow�s,
z&Win32SymlinkTests.test_buffer_overflowN)r~rr�r�rr#r
rur�r�r�r�r�r(r�r�r�r�r�rr�r�r�r�r�rr$rWr�r�rrrrr�)s&
#

r�c@sDeZdZdZejjejje��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCsdS)Nr)r'rrrr(�szWin32JunctionTests.setUpcCstjj|j�rtj|j�dS)N)rr#rW�junctionr�)r'rrrr��szWin32JunctionTests.tearDowncCsPtj|j|j�|jtjj|j��|jtjj|j��|j	tjj
|j��dS)N)�_winapi�CreateJunction�junction_targetr�r,rr#rWr�r�r�)r'rrr�test_create_junction�sz'Win32JunctionTests.test_create_junctioncCsHtj|j|j�|jtjj|j��tj|j�|j	tjj|j��dS)N)
r�r�r�r�r,rr#rWr&r�)r'rrr�test_unlink_removes_junction�sz/Win32JunctionTests.test_unlink_removes_junctionN)r~rr�r�rr#r�r
rur�r(r�r�r�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCstjd�dS)Nz
base/some_dir)rri)r'rrrr(�szNonLocalSymlinkTests.setUpcCstjd�dS)Nr�)rrr�)r'rrrr��szNonLocalSymlinkTests.tearDowncCstjjdd�}tjd|�dS)Nr�Z	some_linkZsome_dir)rr#r�rw)r'ryrrr�test_directory_link_nonlocal�sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)r~rr�r(r�r�rrrrr��s	r�c@seZdZdd�Zdd�ZdS)�FSEncodingTestscCs(|jtjd�d�|jtjd�d�dS)Nsabc�uabcŁ)rArr�r�)r'rrr�test_nop
	szFSEncodingTests.test_nopcCsJxDdD]<}ytj|�}Wntk
r.wYnX|jtj|�|�qWdS)N�	unicodeŁ�latiné�ascii)r�r�r�)rr�r�rAr�)r'rlrmrrr�
test_identity	s
zFSEncodingTests.test_identityN)r~rr�r�r�rrrrr�		sr�c@sNeZdZdd�Zejejd�o<ej	j
d�p<eed�o<eed�d�dd	��Z
d
S)�DeviceEncodingTestscCs|jtjd��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(tjd�}|j|�|jtj|��dS)Nr)rr�ZassertIsNotNoner,�codecs�lookup)r'�encodingrrr�test_device_encoding	s

z(DeviceEncodingTests.test_device_encodingN)r~rr�r�rrrr,r=r��
startswithr�localer�rrrrr�	sr�c@s.eZdZejeed�d�dd��Zdd�ZdS)�PidTests�getppidztest needs os.getppidcCs<tjtjddgtjd�}|j�\}}|jt|�tj	��dS)Nz-czimport os; print(os.getppid()))r�)
r]r�r=rar�ZcommunicaterAr�r�getpid)r'r�r��_rrr�test_getppid)	s


zPidTests.test_getppidcCsDtjddg}tjtjt|d�|�}tj|d�}|j||df�dS)Nz-crr)r=rar�spawnv�P_NOWAITr�waitpidrA)r'r^r��statusrrr�test_waitpid2	szPidTests.test_waitpidN)	r~rr�rrrrr�r�rrrrr�(	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}|jtj|�|s*d|j}n8ttj�|_t	t
j��|_|j|j|j<d|j|jf}t
|d��}|j|�WdQRXtj|g}|r�dd�|D�}dd�|jj�D�|_|S)	N�zimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)r�cSsg|]}tj|��qSr)rr�)r�arrrrQ	sz*SpawnTests.create_args.<locals>.<listcomp>cSs"i|]\}}tj|�tj|��qSr)rr�)r�k�vrrr�
<dictcomp>R	sz*SpawnTests.create_args.<locals>.<dictcomp>)�exitcoderr%rRr&rrr�r7r/r�Zuuid4r#rrr=rar")r'r�r�rrbr r^rrr�create_args;	s$
zSpawnTests.create_args�spawnlcCs2|j�}tjtj|df|��}|j||j�dS)Nr)r�rr��P_WAITrAr�)r'r^r�rrr�test_spawnlW	szSpawnTests.test_spawnl�spawnlecCs<|jdd�}tjtj|df||jf��}|j||j�dS)NT)r�r)r�rr�r�r7rAr�)r'r^r�rrr�test_spawnle]	szSpawnTests.test_spawnle�spawnlpcCs2|j�}tjtj|df|��}|j||j�dS)Nr)r�rr�r�rAr�)r'r^r�rrr�test_spawnlpc	szSpawnTests.test_spawnlp�spawnlpecCs<|jdd�}tjtj|df||jf��}|j||j�dS)NT)r�r)r�rr�r�r7rAr�)r'r^r�rrr�
test_spawnlpei	szSpawnTests.test_spawnlper�cCs.|j�}tjtj|d|�}|j||j�dS)Nr)r�rr�r�rAr�)r'r^r�rrr�test_spawnvo	szSpawnTests.test_spawnv�spawnvecCs6|jdd�}tjtj|d||j�}|j||j�dS)NT)r�r)r�rr�r�r7rAr�)r'r^r�rrr�test_spawnveu	szSpawnTests.test_spawnve�spawnvpcCs.|j�}tjtj|d|�}|j||j�dS)Nr)r�rr�r�rAr�)r'r^r�rrr�test_spawnvp{	szSpawnTests.test_spawnvp�spawnvpecCs6|jdd�}tjtj|d||j�}|j||j�dS)NT)r�r)r�rr�r�r7rAr�)r'r^r�rrr�
test_spawnvpe�	szSpawnTests.test_spawnvpecCs�|j�}tjtj|d|�}tj|d�}|j|d|�|d}ttd�rp|jtj|��|jtj	|�|j
�n|j||j
d>�dS)Nrr1�	WIFEXITEDr�)r�rr�r�r�rArr,r�WEXITSTATUSr�)r'r^r�r�r�rrr�test_nowait�	s
zSpawnTests.test_nowaitcCs8|jddd�}tjtj|d||j�}|j||j�dS)NT)r�r�r)r�rr�r�r7rAr�)r'r^r�rrr�test_spawnve_bytes�	szSpawnTests.test_spawnve_bytescCs>|j�}|jttjtj|d�|jttjtj|dd�dS)Nrr)r�r8rrr�r�)r'r^rrr�test_spawnl_noargs�	szSpawnTests.test_spawnl_noargscCsB|j�}|jttjtj|di�|jttjtj|ddi�dS)Nrr)r�r8rrr�r�)r'r^rrr�test_spawnle_noargs�	szSpawnTests.test_spawnle_noargscCsv|j�}|jttjtj|df�|jttjtj|dg�|jttjtj|dd�|jttjtj|ddg�dS)Nrr)r)r�r8rrr�r�)r'r^rrr�test_spawnv_noargs�	s
zSpawnTests.test_spawnv_noargscCs~|j�}|jttjtj|dfi�|jttjtj|dgi�|jttjtj|ddi�|jttjtj|ddgi�dS)Nrr)r)r�r8rrr�r�)r'r^rrr�test_spawnve_noargs�	s
zSpawnTests.test_spawnve_noargsc$Csdtjddg}tjj�}d|d<y|tj|d||�}Wntk
rJYnX|j|d�tjj�}d|d<y|tj|d||�}Wntk
r�YnX|j|d�tjj�}d	|d
<y|tj|d||�}Wntk
r�YnX|j|d�tj	}|j
tj|�t|d��}|j
d�WdQRXtj|g}tjj�}d
|d<|tj|d||�}|j|d�dS)Nz-crrzFRUITVEGETABLEr�zorangeVEGETABLE=cabbagerrzFRUIT=ORANGEr�zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r=rarr�r�r�rrArr%rRr&rr)r'Zspawnr^rr�rr rrr�_test_invalid_env�	s>




zSpawnTests._test_invalid_envcCs|jtj�dS)N)r	rr�)r'rrr�test_spawnve_invalid_env�	sz#SpawnTests.test_spawnve_invalid_envcCs|jtj�dS)N)r	rr�)r'rrr�test_spawnvpe_invalid_env�	sz$SpawnTests.test_spawnvpe_invalid_envN)r~rr�r�rr�r�r�r�r�r�r�r�rrrrrrr	r
rrrrrr�:	s$
.r�z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc@seZdZdd�ZdS)�
LoginTestscCstj�}|jt|�d�dS)Nr)rrr�r)r'Z	user_namerrr�
test_getlogin�	szLoginTests.test_getloginN)r~rr�rrrrrr
�	sr
�getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdd�ZdS)�ProgramPriorityTestscCs�tjtjtj��}tjtjtj�|d�zFtjtjtj��}|dkr^|dkr^tjd|��n|j||d�Wdytjtjtj�|�Wn0tk
r�}z|j	t	j
kr��WYdd}~XnXXdS)Nr1�z?unable to reliably test setpriority at current nice level of %s)rr�PRIO_PROCESSr�rrr�rAr9r�ZEACCES)r'r�Znew_prior�rrr�test_set_get_priority�	s
z*ProgramPriorityTests.test_set_get_priorityN)r~rr�rrrrrr�	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.tjj||�g|_d|_d|_|jd�dS)NTFs220 ready
)�asynchat�
async_chat�__init__�	in_buffer�
accumulate�closed�push)r'�connrrrr
s
z#SendfileTestServer.Handler.__init__cCs |jd�}|jr|jj|�dS)Ni)�recvrrru)r'rSrrr�handle_read
s
z&SendfileTestServer.Handler.handle_readcCsdj|j�S)Nr�)r�r)r'rrr�get_data!
sz#SendfileTestServer.Handler.get_datacCs|j�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)r~rr�rrr r!r"rrrr�Handler
s
r#cCsptjj|�tjj|�|jtjtj�|j	|�|j
d�|jj�dd�\|_|_
d|_d|_tj�|_dS)Nr�r3F)�	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'rrrr|8
szSendfileTestServer.runningcCs$tj�|_tjj|�|jj�dS)N)r$ZEvent�_SendfileTestServer__flagr%�startr�)r'rrrr/<
s
zSendfileTestServer.startcCsd|_|j�dS)NF)r,r�)r'rrr�stopB
szSendfileTestServer.stopcCs*xt|jdd�stjd�qW|j�dS)NrFg����MbP?)r�r+rr�r0)r'rrrr�G
szSendfileTestServer.waitcCsPd|_|jj�x2|jrBtjrB|jj�tjddd�|jj�qWtj	�dS)NTg����MbP?r1)Ztimeoutr�)
r,r.r�r&Z
socket_mapr-�acquireZloop�releaseZ	close_all)r'rrr�runO
s

zSendfileTestServer.runcCs|j�\}}|j|�|_dS)N)Zacceptr#r+)r'rZaddrrrr�
handle_acceptX
sz SendfileTestServer.handle_acceptcCs|j�dS)N)r+)r'rrr�handle_connect\
sz!SendfileTestServer.handle_connectcCsdS)Nrr)r'rrr�writable`
szSendfileTestServer.writablecCs�dS)Nr)r'rrrr"c
szSendfileTestServer.handle_errorN)r~rr�rrr#r�propertyr|r/r0r�r3r4r5rr6r"rrrrr
s
	rztest needs threading module�sendfileztest needs os.sendfile()c@seZdZdddZejjd�o<ejjd�o<ejjd�Zej	ed�Z
ej	ejd,kd
�Ze
dd��Ze
d
d��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze
dd ��Ze
d!d"��Ze
ed#d$���Ze
ed%d&���Ze
ej	eed'�d(�d)d*���Zd+S)-�TestSendfiles
12345abcder�i�linux�solaris�sunosz%requires headers and trailers supportr3rZz(test is only meaningful on 32-bit buildscCstj�|_ttj|j�dS)N)rZthreading_setupr#r!r%�DATA)r�rrrr�t
s
zTestSendfile.setUpClasscCstj|j�tjtj�dS)N)rZthreading_cleanupr#r&r%)r�rrrr�y
szTestSendfile.tearDownClasscCs~ttjdf�|_|jj�tj�|_|jj|jj|jj	f�|jj
d�|jjd�|jj�|_
ttjd�|_|jj�|_dS)Nrr1irQ)rrZHOST�serverr/r(�clientZconnectr)r*Z
settimeoutrrG�socknorr%rO)r'rrrr(~
s

zTestSendfile.setUpcCs0|jj�|jj�|jjr&|jj�d|_dS)N)rOr+r?r>r|r0)r'rrrr��
s



zTestSendfile.tearDowncOsbx\ytj||�Stk
rX}z.|jtjkr0�n|jtjtjfkrFwn�WYdd}~XqXqWdS)N)rr8r9r�Z
ECONNRESET�EAGAIN�EBUSY)r'r^r]r�rrr�sendfile_wrapper�
szTestSendfile.sendfile_wrappercCs�d}d}d}xZ|t|j�krf|j|j|j||�}|dkr:P||7}||7}|j||k�|j||�qW|j|t|j��|jjt	j
�|jj�|jj
�|jjj�}|jt|�t|j��|j||j�dS)Nri)rr=rCr@rGr,rAr?�shutdownr(�	SHUT_RDWRr+r>r�r+r )r'�
total_sent�offset�nbytes�sentrSrrr�test_send_whole_file�
s$

z!TestSendfile.test_send_whole_filecCs�d}t|j�d}t|j�|}d}xH||krl|j|j|j||�}|dkrLP||7}||7}|j||k�q&W|jjtj	�|jj
�|jj�|jj
j�}|jt|j�dd�}|j|t|��|jt|�t|��|j||�dS)Nrr3i)rr=rCr@rGr,r?rDr(rEr+r>r�r+r rA)r'rFrGZ	must_sendrHrIrSr�rrr�test_send_at_certain_offset�
s&


z(TestSendfile.test_send_at_certain_offsetcCs�t|j�d}ytj|j|j|d�}Wn0tk
rV}z|jtjkrF�WYdd}~XnX|j	|d�|j
jtj
�|j
j�|jj�|jjj�}|j	|d�dS)Nirr�)rr=rr8r@rGr9r��EINVALrAr?rDr(rEr+r>r�r+r )r'rGrIr�rSrrr�test_offset_overflow�
s

z!TestSendfile.test_offset_overflowcCs@|jt��}tj|j|jdd�WdQRX|j|jjtj	�dS)Nr1ir�)
r8r9rr8r@rGrAr�r�rL)r'rOrrr�test_invalid_offset�
sz TestSendfile.test_invalid_offsetc	CsFtjf|jddd�d|ji��|jrBtj|j|jddffdd�dS)Nri)r�rGr��in)rGr��headers�trailersrr)rr8r@rG�SUPPORT_HEADERS_TRAILERS)r'rrr�
test_keywords�
s
zTestSendfile.test_keywordscCsd}dddd|jdd	�}tj|j|jddddddgd�}|j|d�||7}d}x\|t|�kr�tt|�|d�}|j|j|j||�}|dkr�P|j||�||7}||7}q`W|j	|t|��|j
j�|jj
�|jjj�}|j	t|�t|��dS)Nrr�i�yr�r1i)rPr�ii)r=rr8r@rGZassertLessEqualr�minrCrAr?r+r>r�r+r �hash)r'rFZ
expected_datarIrGrHrSrrr�test_headers�
s*

zTestSendfile.test_headerscCs�tjd}d}|jtj|�t||�t|d��P}tj|j|j	�ddddgd�|j
j�|jj
�|jjj�}|j|d	�WdQRXdS)
NrLsabcdefrQrr�s123456s789)rQsabcde123456789)rr%rRr&r!rrr8r@rGr?r+r>r�r+r rA)r'rpZ	file_datar/rSrrr�
test_trailerss



zTestSendfile.test_trailerscCsXd|jj_|jt��(}tj|j|jddddgd	d�WdQRX|j	|j
jtj�dS)
NFrr�r3r��)rPii�)
r>r+rr8r9rr8r@rGrAr�r�rL)r'rOrrr�test_headers_overflow_32bitss

z)TestSendfile.test_headers_overflow_32bitscCsXd|jj_|jt��(}tj|j|jddddgd	d�WdQRX|j	|j
jtj�dS)
NFrr�r3r�rY)rQii�)
r>r+rr8r9rr8r@rGrAr�r�rL)r'rOrrr�test_trailers_overflow_32bits!s

z*TestSendfile.test_trailers_overflow_32bits�SF_NODISKIOztest needs os.SF_NODISKIOcCsZytj|j|jddtjd�Wn6tk
rT}z|jtjtjfkrD�WYdd}~XnXdS)Nri)rr)	rr8r@rGr\r9r�rBrA)r'r�rrr�
test_flags*szTestSendfile.test_flagsNl)r~rr�r=r=r�r�rRrrZrequires_headers_trailers�maxsizeZrequires_32br�r�r�r(r�rCrJrKrMrNrSrWrXrZr[rrr]rrrrr9g
s6
r9cCslttd�sdSzJttjdd��2}ytj|j�dd�Wntk
rJdSXWdQRXWdtjtj�XdS)N�setxattrFrrs	user.testr�T)	rrrrr%r_rGr9r&)r rrr�supports_extended_attributes6s
r`z(no non-broken extended attribute supportr3r��'c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ExtendedAttributeTestsc
!Ks�tj}|jtj|�t|�|jt��}|||d�f|�WdQRX|j|jj	t	j
�||�}	|j|	t�|||d�df|�t
|	�}
|
jd�|jt
||��|
�|j||df|�d�|||d�dtjf|�|j||df|�d�|jt��}|||d�dtjf|�WdQRX|j|jj	t	j�|jt��}|||d�dtjf|�WdQRX|j|jj	t	j
�|||d�dtjf|�|
jd�|jt
||��|
�|||d�f|�|jt��}|||d�f|�WdQRX|j|jj	t	j
�|
jd�|jt
||��|
�|j|||d�f|�d�|||d�dd	f|�|j|||d�f|�dd	�|||d�f|�td
d�td�D��}x|D]}|||d
f|��q�W|jt
||��t
|	�t
|�B�dS)Nz	user.testr�s	user.testshellosbyez
user.test2sfoor4icss|]}dj|�VqdS)zuser.test{}N)r4)rr�rrrr5wsz;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>rhr�)rr%rRr&r!r8r9rAr�r�ZENODATAr�rpr�rqr�
XATTR_REPLACE�XATTR_CREATEZEEXISTrvr�r�)
r'rN�getxattrr_�removexattr�	listxattrr]rlrOZ
init_xattrZxattrZmany�thingrrr�_check_xattrs_strLsL
""


z(ExtendedAttributeTests._check_xattrs_strcOsB|jtf|�|�tjtj�|jtjf|�|�tjtj�dS)N)rir/rr&r%rr�)r'r^r]rrr�
_check_xattrs|sz$ExtendedAttributeTests._check_xattrscCs|jtjtjtjtj�dS)N)rjrrer_rfrg)r'rrr�test_simple�sz"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdd�dS)NF)r�)rjrrer_rfrg)r'rrr�
test_lpath�sz!ExtendedAttributeTests.test_lpathcCs4dd�}dd�}dd�}dd�}|j||||�dS)	Nc
Ws*t|d��}tj|j�f|��SQRXdS)NrQ)rrrerG)r#r^r rrrre�sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc
Ws0t|dd��}tj|j�f|��WdQRXdS)Nr�r)rrr_rG)r#r^r rrrr_�sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc
Ws0t|dd��}tj|j�f|��WdQRXdS)Nr�r)rrrfrG)r#r^r rrrrf�sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc
Ws*t|d��}tj|j�f|��SQRXdS)NrQ)rrrgrG)r#r^r rrrrg�sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)rj)r'rer_rfrgrrr�test_fds�s
zExtendedAttributeTests.test_fdsN)r~rr�rirjrkrlrmrrrrrbFs
0rb�get_terminal_sizezrequires os.get_terminal_sizec@seZdZdd�Zdd�ZdS)�
TermsizeTestscCsxytj�}WnJtk
rV}z.tjdks:|jtjtjfkrD|jd��WYdd}~XnX|j	|j
d�|j	|jd�dS)Nr`zfailed to query terminal sizer)rrnr9r=r�r�rL�ENOTTYr6ZassertGreaterEqual�columns�lines)r'rPr�rrr�test_does_not_crash�s
z!TermsizeTests.test_does_not_crashcCs�ytjddg�j�j�}Wn$ttjfk
r>|jd�YnXt|d�t|d�f}ytj	t
jj��}WnJt
k
r�}z.t
jdks�|jtjtjfkr�|jd��WYdd}~XnX|j||�dS)NZsttyrPzstty invocation failedr1rr`zfailed to query terminal size)r]Zcheck_outputrFr�rnZCalledProcessErrorr6r�rrnr=�	__stdin__rGr9r�r�rLrprA)r'rPr��actualr�rrr�test_stty_match�s
zTermsizeTests.test_stty_matchN)r~rr�rsrvrrrrro�sroc@seZdZdd�Zdd�ZdS)�OSErrorTestscCs�Gdd�dt�}g|_g|_tjdk	r.tj}ntj}|jj|�|jj||��tjdk	rbtj}ntj	tj�}|jj|�|jjt
|��|jjt|��|j|j|_dS)Nc@seZdZdS)zOSErrorTests.setUp.<locals>.StrN)r~rr�rrrr�Str�srx)
r/�bytes_filenames�unicode_filenamesrror%ruZTESTFN_UNDECODABLErr�rWrX�	filenames)r'rxZdecodedZencodedrrrr(�s

zOSErrorTests.setUpcCsX|jtjf|jtjdf|jtjf|jtjtjf|jtjf|jtjf|jtj	fg}t
jdkr�|j|j
tjdf|j
tjdf|jtjdf|jtjdf|jtjff�n,|j|jtjf|jtjdf|jtjdff�ttd�r�|j|jtjddf�ttd��r|j|jtjddf�ttd��r.|j|jtjdf�ttd	��rN|j|jtjdf�ttd
��rn|j|jtjdf�ttd��r�|j|jtjf�ttd��r�t
jdk�r�|j|j
tjdf�|j|jtjdf�n|j|jtjdf�ttd
��r(|j|jtjf|jtjdf|jtjddf|jtjdff�ttd��rH|j|jtjdf�ttd��r�t
jdk�rt|j|jtj f�n|j|jtj f�x�|D]�^}}}x�|D]�}yJt!|t"t#f��r�||f|��n&|j$t%d��||f|��WdQRXWnLt&k
�r"}z|j'|j(|t"|��WYdd}~Xn&t)k
�r6YnX|j*dj+|���q�W�q�WdS)Ni�r`sdstrzr�r�lchownr:�chflags�lchflags�chrootrcrgz	user.testsuser�lchmodr�z	should bezNo exception thrown by {}),r{rrrlr�rrdr�ror&r=r�r�ryr@rmrzrmrrur�r|r:r}r~rrcrgrer_rfr�r�r�r/rKZassertWarnsRegexrr9rLr�UnicodeDecodeErrorr�r4)r'Zfuncsr{�funcZ	func_argsrr�rrr�test_oserror_filename�sv








$z"OSErrorTests.test_oserror_filenameN)r~rr�r(r�rrrrrw�srwc@seZdZdd�ZdS)�
CPUCountTestscCs8tj�}|dk	r*|j|t�|j|d�n
|jd�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countr�r��
assertGreaterr6)r'Zcpusrrr�test_cpu_count(s
zCPUCountTests.test_cpu_countN)r~rr�r�rrrrr�'sr�c@s�eZdZdd�Zejedkd�dd��Zejedkd�dd��Zd	d
�Z	ej
eed�d�d
d��Z
dd�Zej
eed�d�dd��Zej
eed�d�dd��ZdS)�FDInheritanceTestscCsPtjttj�}|jtj|�|jtj|�d�tj|d�|jtj|�d�dS)NFT)	rrrurdrRr+rArDrE)r'rMrrr�test_get_set_inheritable2s
z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlcCsntjttj�}|jtj|�|jtj|�d�tj|tj	�}|tj
M}tj|tj|�|jtj|�d�dS)NFT)rrrurdrRr+rArD�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)r'rMrrrrr�test_get_inheritable_cloexec:sz/FDInheritanceTests.test_get_inheritable_cloexeccCsftjttj�}|jtj|�|jtj|tj�tj	@tj	�tj
|d�|jtj|tj�tj	@d�dS)NTr)rrrurdrRr+rAr�r�r�rE)r'rMrrr�test_set_inheritable_cloexecGsz/FDInheritanceTests.test_set_inheritable_cloexeccCs2tjttj�}|jtj|�|jtj|�d�dS)NF)rrrurdrRr+rArD)r'rMrrrrvRszFDInheritanceTests.test_openr�zneed os.pipe()cCsPtj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr�rRr+rArD)r'ZrfdZwfdrrr�	test_pipeWs
zFDInheritanceTests.test_pipecCsJtjttj�}|jtj|�tj|�}|jtj|�|jtj|�d�dS)NF)	rrrurdrRr+r5rArD)r'Zfd1�fd2rrr�test_dup_s

zFDInheritanceTests.test_dupr.zneed os.dup2()cCs�tjttj�}|jtj|�tjttj�}z"tj||�|jtj|�d�Wdtj|�Xtjttj�}z&tj||dd�|jtj|�d�Wdtj|�XdS)NTF)Zinheritable)	rrrurdrRr+r.rArD)r'rMr�Zfd3rrrr0gszFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsPtj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr�rRr+rArD)r'Z	master_fdZslave_fdrrr�test_openpty|s
zFDInheritanceTests.test_openpty)r~rr�r�rrr�r�r�rvrrrr�r�r0r�rrrrr�1s
r�c@sPeZdZddfdfddfdfddejfdfddd
ddeedd�fgZdd
�ZdS)�PathTConverterTestsroTNr�Fr-r}rr~rr+c!Cs�tj}tjdkrd}}ntjjd�}t|�}tjt|�tjtjB�}|j	tj
tj�|j	tj|�t|�}t|�}�x$|jD�]\}}}	}
|j
|d���ytt|�}Wntk
r�w~YnXxX||||fD]H}|dkr�q�|j
||d��&||f|	��}
|
dk	�r|
|
�WdQRXq�W|jtd��||f|	��WdQRX|�rh||f|	��}
|
dk	�r�|
|
�n&|jtd��||f|	��WdQRXWdQRXq~WdS)Nrr�)r)rr#zshould be string, byteszos.PathLike)rr%rrr�rrrVr)rRr&r+�	functionsZsubTestr�r�ZassertRaisesRegexr?)r'Zstr_filenameZbytes_fspath�bytes_filenamerMZ
int_fspathZ
str_fspathrZallow_fdZ
extra_argsZ
cleanup_fnrlr#r�rrr�test_path_t_converter�sF






z)PathTConverterTests.test_path_t_converter�r)r}Fr�N�r)r~Fr�N)r)r~rr�r�F_OKr�r�r�rrrrr��s

r�rGz-needs os.get_blocking() and os.set_blocking()c@seZdZdd�ZdS)�
BlockingTestscCsntjttj�}|jtj|�|jtj|�d�tj|d�|jtj|�d�tj|d�|jtj|�d�dS)NTF)	rrrurdrRr+rArGrH)r'rMrrrrI�szBlockingTests.test_blockingN)r~rr�rIrrrrr��sr�c@seZdZdd�ZdS)�ExportsTestscCs |jdtj�|jdtj�dS)Nrr[)r�r�__all__)r'rrr�test_os_all�szExportsTests.test_os_allN)r~rr�r�rrrrr��sr�c@s�eZdZejZdd�Zd5dd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zd6dd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4S)7�TestScandircCs>tjjtj�|_tj|j�|_|jtj|j�tj	|j�dS)N)
rr#�realpathrr%r��
bytes_pathrRr�r�)r'rrrr(�szTestScandir.setUp�file.txtcCs2t|t�r|jn|j}tjj||�}t|d�|S)Nspython)r�rKr�r#rr�r!)r'rr#rrrrr!�s
zTestScandir.create_filecCs2tdd�tj|j�D��}|jt|j��|�|S)Ncss|]}|j|fVqdS)N)r)r�entryrrrr5�sz*TestScandir.get_entries.<locals>.<genexpr>)rr�scandirr#rAr��keys)r'�names�entriesrrr�get_entries�szTestScandir.get_entriescCs^|rNxTt|�D]:}|jd�sq|dkr(q|jt||�t||�|||f�qWn|j||�dS)NZst_�st_dev�st_ino�st_nlink)r�r�r�)r�r�rAr�)r'Zstat1Zstat2Zskip_fieldsr�rrr�assert_stat_equal�s
zTestScandir.assert_stat_equalcCs2|j|tj�|j|j|�|j|jtjj|j|��|j|j�tj|jdd�j	�tj|j�}|j|j
�tj|j��|j|j
�tj|j��|j|j�tjj|j��tj|jdd�}|j|j
dd�tj|j��|j|j
dd�tj|j��|j|j�|tjdk�o|�|j|jdd�|tjdk�dS)NF)r�r)r�r�DirEntryrArr#r��inoderor��is_dir�S_ISDIRr��is_file�S_ISREG�
is_symlinkr�r�)r'r�rr�r�r�Z
entry_statZentry_lstatrrr�check_entry�s.




zTestScandir.check_entrycCsJttd�}tj�}tjj|jd�}tj|�|jd�}|rRtj|tjj|jd��|r�tj	|tjj|jd�dd�tj	|tjj|jd��ddg}|r�|j
d�|r�|jd
�|j|�}|d}|j
|ddd	d	�|d}|j
|dd	dd	�|�r|d}|j
|dd	dd	�|�rF|d}|j
|ddd	d�|d}|j
|dd	dd�dS)Nrcr�zfile.txtz
link_file.txt�symlink_dirT)r{�symlink_file.txtF)r�r�)rrrrjr#r�r�r!rcrwrur�r�r�)r'rcrwr�rr�r�r�rrr�test_attributes
s:





zTestScandir.test_attributescCsNt|t�r|jn|j}ttj|��}|jt|�d�|d}|j|j	|�|S)Nr1r)
r�rKr�r#rprr�rArr)r'rr#r�r�rrr�	get_entry8
szTestScandir.get_entrycCs|j|d�}|jtjj|��S)N)r)r!r�rr#�basename)r'rrrrr�create_file_entryA
szTestScandir.create_file_entrycCsf|j�}tj�}zDtj|j�tdd�tj�D��}|jt|j	��tjj
|�g�Wdtj|�XdS)Ncss|]}|j|fVqdS)N)r)rr�rrrr5M
sz5TestScandir.test_current_directory.<locals>.<genexpr>)r!rrsrr#rr�rAr�r�r�)r'rZold_dirr�rrr�test_current_directoryE
sz"TestScandir.test_current_directorycCs|j�}|jt|�d�dS)Nz<DirEntry 'file.txt'>)r�rAr6)r'r�rrr�	test_reprS
szTestScandir.test_reprcCs*|j�}|jtj|�tjj|jd��dS)Nzfile.txt)r�rAr�fspathr#r�)r'r�rrr�test_fspath_protocolW
sz TestScandir.test_fspath_protocolcCsNtjd�}|j|d�}tj|�}|j|t�|j|tjjtj|j�|��dS)Nz
bytesfile.txt)r)	rr�r�r�r�rKrAr#r�)r'r�Zbytes_entryr�rrr�test_fspath_protocol_bytes[
s

z&TestScandir.test_fspath_protocol_bytescCs�tjj|jd�}tj|�|jd�}tj|�tjdkrF|j|j��|j	|j
��|j	|j��tjdkr�|jt
|j�|j�|jdd�n0|j|j�d�|jt
|j�|jt
|jdd�dS)Nr�rF)r�r)rr#r�r�r�r�rr,r�r�r�r�r8rnr�ror�)r'r#r�rrr�test_removed_dirc
s




zTestScandir.test_removed_dircCs�|j�}tj|j�|j|j��tjdkr:|j|j��|j|j	��tjdkrv|j
t|j�|j
�|j
dd�n0|j|j�d�|j
t|j
�|j
t|j
dd�dS)NrF)r�r)r�rr&r#r�r�rr,r�r�r8rnr�ror�)r'r�rrr�test_removed_filey
s

zTestScandir.test_removed_filecCs�tj�s|jd�S|jd�}tj|tjj|jd��|jddg�}|d}tj	|�|j
|j�d�|j|j
��|j|j��|j|j
dd��|j|jdd��|j|j��|jt|j�|jdd�dS)Nzcannot create symbolic linkzfile.txtzsymlink.txtrF)r�)rrjr6r!rrwr#r�r�r&r�r�r�r�r�r,r�r8rnro)r'rr�r�rrr�test_broken_symlink�
s 


zTestScandir.test_broken_symlinkcCsp|jd�tj|j�}ttj|��}|jt|�d|�|d}|j|jd�|j|jtjtjj	|jd���dS)Nzfile.txtr1rsfile.txt)
r!rr�r#rpr�rArrr�)r'�
path_bytesr�r�rrr�
test_bytes�
s
zTestScandir.test_bytescCs�|jd�x�ttfD]�}|tj|j��}|jt��ttj	|��}WdQRX|j
t|�d|�|d}|j
|jd�|j
|jtjtjj
|jd���|jt|j�t�|jt|j�t�qWdS)Nzfile.txtr1rsfile.txt)r!rWrXrr�r#�assertWarnsrrpr�rArrr�rLrJrK)r'r�r�r�r�rrr�test_bytes_like�
s
zTestScandir.test_bytes_likecCs|jttjd�dS)Nr)r8rnrr�)r'rrr�test_empty_path�
szTestScandir.test_empty_pathcCsN|jd�tj|j�}t|�}|jt|�d|�t|�}|jt|�d|�dS)Nzfile.txtr1r)r!rr�r#rprAr)r'rQr�Zentries2rrr�test_consume_iterator_twice�
s
z'TestScandir.test_consume_iterator_twicecCs*x$ddiggD]}|jttj|�qWdS)Ni�gX9��v��?)r8r?rr�)r'�objrrr�test_bad_path_type�
szTestScandir.test_bad_path_typec	CsR|jd�|jd�tj|j�}t|�|j�|j�|j��~WdQRXdS)Nzfile.txtz	file2.txt)r!rr�r#r+r+�check_no_resource_warning)r'rQrrr�
test_close�
s


zTestScandir.test_closecCsN|jd�|jd�tj|j��}t|�WdQRX|j��~WdQRXdS)Nzfile.txtz	file2.txt)r!rr�r#r+r�)r'rQrrr�test_context_manager�
s


z TestScandir.test_context_managerc	Cs@|jd�|jd�tj|j��}t|�|j�WdQRXdS)Nzfile.txtz	file2.txt)r!rr�r#r+r+)r'rQrrr�test_context_manager_close�
s


z&TestScandir.test_context_manager_closecCsl|jd�|jd�|jt��.tj|j��}t|�ddWdQRXWdQRX|j��~WdQRXdS)Nzfile.txtz	file2.txtr1r)r!r8�ZeroDivisionErrorrr�r#r+r�)r'rQrrr�test_context_manager_exception�
s


z*TestScandir.test_context_manager_exceptioncCsv|jd�|jd�tj|j�}t|�|jt��~tj�WdQRXtj|j�}t	|�|j
��~WdQRXdS)Nzfile.txtz	file2.txt)r!rr�r#r+r��ResourceWarningrZ
gc_collectrpr�)r'rQrrr�test_resource_warning�
s


z!TestScandir.test_resource_warningN)r�)r�)r~rr�rr�r(r!r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s4

&	

r�c@sNeZdZeej�Zdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�ZdS)�
TestPEP519cCs$xdD]}|j||j|��qWdS)N�hello�goodbye�some/path/and/file)r�r�r�)rAr�)r'�brrr�test_return_bytess
zTestPEP519.test_return_bytescCs$xdD]}|j||j|��qWdS)N�hello�goodbye�some/path/and/file)r�r�r�)rAr�)r'rNrrr�test_return_strings
zTestPEP519.test_return_stringcCsPxJdD]B}t|�}|j||j|��|jdtj|��|jdtj|��qWdS)N�path/like/object�path/like/object)r�r�)rrAr�rr�r�)r'r�Zpathlikerrr�test_fsencode_fsdecodes

z!TestPEP519.test_fsencode_fsdecodecCsB|jd|jtd���|jtttj��|jttd�tj��dS)Nz#feelthegilr�)rAr�rr,�
issubclassr�PathLiker�)r'rrr�
test_pathlikeszTestPEP519.test_pathlikecCs8tdfi�}x&ttt|�fD]}|jt|j|�qWdS)NZblah)rJr�rr8r?r�)r'Zvapor�orrr�test_garbage_in_exception_outsz(TestPEP519.test_garbage_in_exception_outcCs|jt|j�dS)N)r8r?r�)r'rrr�test_argument_required"sz!TestPEP519.test_argument_requiredcCsR|jt|jtd��tdfi�}d|_|jt|j|��|jt|jtt���dS)N�*Zfoor1)r8r?r�rrJ�
__fspath__r�)r'�crrr�test_bad_pathlike%s
zTestPEP519.test_bad_pathlikeN)
r~rr�rrr�r�r�r�r�r�r�r�rrrrr�s
r��_fspathc@seZdZeej�ZdS)�TestPEP519PurePythonN)r~rr�rrr�r�rrrrr�3sr��__main__)F)r)N)|rr&r�r�r�r�r�rr�r�r�rr��rerrr�r(ror]r=�	sysconfigrrr�r@Ztestrr$�ImportErrorr�r�r�ZgrpZgetgrallr�rr	Zprocess_gidru�pwdZgetpwallr�r�Z	_testcapirrr^Ztest.support.script_helperr
Ztest.supportrrr�rr�versionr�rr�r_�contextmanagerrrr!ZTestCaser"r�r�rZBasicTestMappingProtocolrrXrr�r�r�r�r�r�r�r��get_config_varZOS_URANDOM_DONT_USE_FDrr�rrrr!rKrXrkrzr�Zskip_unless_symlinkr�r�r�r�r�r�r�r�r
rr'r%rr9r`Zrequires_linux_versionrbrorwr�r�r�r�r�r�r�r�r~�mainrrrr�<module>sF







c[70@S
5)	
-
M!h
#d"
?
G
s
/ 

7

VNQ
+`
T9
00


Youez - 2016 - github.com/yon3zu
LinuXploit