403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.217.65
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.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�1/opt/alt/python36/lib64/python3.6/test/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�eZdZdZdZdd�Zdd�Zdd�Zd	d
�Ze	j
eoBej
je�d�dd
��Ze	j
eobej
je�d�dd��Zdd�Zdd�Zdd�Zdd�Ze	j
ejd�dd��Zejd�ejdd�dd���Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�ZdS)*�EnvironTestsz8check that os.environ object conform to mapping protocolNcCsFttj�|_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)z>Check that the repr() of os.environ looks like environ({...}).zenviron({{{}}})z, css|]\}}dj||�VqdS)z
{!r}: {!r}N)�format)rr#r�rrr�	<genexpr>�sz-EnvironTests.test___repr__.<locals>.<genexpr>N)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'Zmissing�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)rQrr�)r'rrr�(test_iter_error_when_changing_os_environ^sz5EnvironTests.test_iter_error_when_changing_os_environcCs|jtjj��dS)N)rQrr�r")r'rrr�.test_iter_error_when_changing_os_environ_itemsasz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|jtjj��dS)N)rQrr��values)r'rrr�/test_iter_error_when_changing_os_environ_valuesdsz<EnvironTests.test_iter_error_when_changing_os_environ_values) r~rr��__doc__Z	type2testr(r�r!r&rrrrr#�existsr)r.r1r3r8rCrrGrZrequires_freebsd_versionZrequires_mac_verrIrOrQrRrSrUrrrrr�s.)rc@sReZdZdZdd�Zdd�Zdd�Zdd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�	WalkTestszTests for os.walk().cKs$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�rVr[r(rtrxryr{r}r�rrrrrXhsE
rX�fwalkzTest needs os.fwalk()c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�
FwalkTestszTests for os.fwalk().cks0x*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)	z.
        compare with walk() results.
        TFr3)�repeat)rzrY)rzr�N)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�rVr[r�r�r�r�r�rrrrr�s
r�cs4eZdZdZ�fdd�Z�fdd�Zdd�Z�ZS)�BytesWalkTestszTests for os.walk() with bytes.cst�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�rVr(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)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�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_execveN)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@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�Win32ListdirTestszTest listdir on Windows.cCs�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)z-Test when the path is not an "extended" path.cSsg|]}tj|��qSr)rr�)rr#rrrrszCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>N)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)z&Test when the path starts with '\\?\'.z\\?\s\\?\cSsg|]}tj|��qSr)rr�)rr#rrrr&sz@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>N)
rr#r
rr%rAr�rmr�r�)r'r#rrr�test_listdir_extended_pathsz,Win32ListdirTests.test_listdir_extended_pathN)r~rr�rVr(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 linkcCsdtjj|j�st�tjj|j�s$t�tjj|j�s8t�tjj|j�sLt�tjj|j�s`t�dS)N)	rr#rW�dirlink_target�AssertionError�filelink_target�dirlink�filelink�missing_link)r'rrrr(2s
zWin32SymlinkTests.setUpcCsRtjj|j�rtj|j�tjj|j�r4tj|j�tjj|j�rNtj|j�dS)N)	rr#rWr�rvr�r�r$r�)r'rrrr�9szWin32SymlinkTests.tearDowncCs`tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rrwr�r�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)
rrwr�r�r,r#rW�isfiler�r�)r'rrr�test_file_linkHs
z Win32SymlinkTests.test_file_linkcCsH|j}tjj|�rtj|�d}tjj|�s2t�d}tj|||�dS)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)r�rr#r$rvrWr�rw)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junctiontestcCs*tjj|j�st�tjj|j�s&t�dS)N)rr#rW�junction_targetr��junction)r'rrrr(�szWin32JunctionTests.setUpcCstjj|j�rtj|j�dS)N)rr#rWr�r�)r'rrrr��szWin32JunctionTests.tearDowncCsPtj|j|j�|jtjj|j��|jtjj|j��|j	tjj
|j��dS)N)�_winapi�CreateJunctionr�r�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)zM
        Create this structure:

        base
         \___ some_dir
        z
base/some_dirN)rri)r'rrrr(�szNonLocalSymlinkTests.setUpcCstjd�dS)Nr�)rrr�)r'rrrr��szNonLocalSymlinkTests.tearDowncCs.tjjdd�}tjd|�tjj|�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)rr#r�rwr�r�)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�rrrrrrrr
rrrrrrr�:	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@seZdZdZdd�ZdS)�ProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().cCs�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�rVrrrrrr�	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�rr r!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.runningcCs0|jst�tj�|_tjj|�|jj�dS)N)r|r�r%ZEvent�_SendfileTestServer__flagr&�startr�)r'rrrr0<
s
zSendfileTestServer.startcCs|js
t�d|_|j�dS)NF)r|r�r-r�)r'rrr�stopB
s
zSendfileTestServer.stopcCs*xt|jdd�stjd�qW|j�dS)NrFg����MbP?)r�r,rr�r1)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|r0r1r�r4r5r6r r7r#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�serverr0r)�clientZconnectr*r+Z
settimeoutrrG�socknorr%rO)r'rrrr(~
s

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



zTestSendfile.tearDowncOsbx\ytj||�Stk
rX}z.|jtjkr0�n|jtjtjfkrFwn�WYdd}~XqXqWdS)zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        N)rr9r9r�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>rDrArGr,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>rDrArGr,r@rEr)rFr+r?r�r,r!rA)r'rGrHZ	must_sendrIrJrSr�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>rr9rArGr9r��EINVALrAr@rEr)rFr+r?r�r,r!)r'rHrJr�rSrrr�test_offset_overflow�
s

z!TestSendfile.test_offset_overflowcCs@|jt��}tj|j|jdd�WdQRX|j|jjtj	�dS)Nr1ir�)
r8r9rr9rArGrAr�r�rM)r'rNrrr�test_invalid_offset�
sz TestSendfile.test_invalid_offsetc	CsFtjf|jddd�d|ji��|jrBtj|j|jddffdd�dS)Nri)r�rHr��in)rHr��headers�trailersrr)rr9rArG�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)rQr�ii)r>rr9rArGZassertLessEqualr�minrDrAr@r+r?r�r,r!�hash)r'rGZ
expected_datarJrHrIrSrrr�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)rRsabcde123456789)rr%rRr&r!rrr9rArGr@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��)rQii�)
r?r,rr8r9rr9rArGrAr�r�rM)r'rNrrr�test_headers_overflow_32bitss

z)TestSendfile.test_headers_overflow_32bitscCsXd|jj_|jt��(}tj|j|jddddgd	d�WdQRX|j	|j
jtj�dS)
NFrr�r3r�rZ)rRii�)
r?r,rr8r9rr9rArGrAr�r�rM)r'rNrrr�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)	rr9rArGr]r9r�rCrB)r'r�rrr�
test_flags*szTestSendfile.test_flagsNl)r~rr�r>r=r�r�rSrrZrequires_headers_trailers�maxsizeZrequires_32br�r�r�r(r�rDrKrLrNrOrTrXrYr[r\rrr^rrrrr:g
s6
r:cCslttd�sdSzJttjdd��2}ytj|j�dd�Wntk
rJdSXWdQRXWdtjtj�XdS)N�setxattrFrrs	user.testr�T)	rrrrr%r`rGr9r&)r rrr�supports_extended_attributes6s
raz(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]rlrNZ
init_xattrZxattrZmany�thingrrr�_check_xattrs_strLsL
""


z(ExtendedAttributeTests._check_xattrs_strcOsB|jtf|�|�tjtj�|jtjf|�|�tjtj�dS)N)rjr/rr&r%rr�)r'r^r]rrr�
_check_xattrs|sz$ExtendedAttributeTests._check_xattrscCs|jtjtjtjtj�dS)N)rkrrfr`rgrh)r'rrr�test_simple�sz"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdd�dS)NF)r�)rkrrfr`rgrh)r'rrr�
test_lpath�sz!ExtendedAttributeTests.test_lpathcCs4dd�}dd�}dd�}dd�}|j||||�dS)	Nc
Ws*t|d��}tj|j�f|��SQRXdS)NrQ)rrrfrG)r#r^r rrrrf�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)rrrgrG)r#r^r rrrrg�sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc
Ws*t|d��}tj|j�f|��SQRXdS)NrQ)rrrhrG)r#r^r rrrrh�sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)rk)r'rfr`rgrhrrr�test_fds�s
zExtendedAttributeTests.test_fdsN)r~rr�rjrkrlrmrnrrrrrcFs
0rc�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)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.
        r`zfailed to query terminal sizeNr)rror9r=r�r�rM�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)	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.
        ZsttyrPzstty invocation failedr1rr`zfailed to query terminal sizeN)r]Zcheck_outputrFr�rnZCalledProcessErrorr6r�rror=�	__stdin__rGr9r�r�rMrqrA)r'rPr�Zactualr�rrr�test_stty_match�s
zTermsizeTests.test_stty_matchN)r~rr�rtrvrrrrrp�srpc@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�chrootrcrhz	user.testsuser�lchmodr�z	should bezNo exception thrown by {}),r{rrrlr�rrdr�ror&r=r�r�ryr@rmrzrmrrur�r|r:r}r~rrcrhrfr`rgr�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'rPr�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'rPrrr�
test_close�
s


zTestScandir.test_closecCsN|jd�|jd�tj|j��}t|�WdQRX|j��~WdQRXdS)Nzfile.txtz	file2.txt)r!rr�r#r+r�)r'rPrrr�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'rPrrr�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'rPrrr�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'rPrrr�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@seZdZdZeej�ZdS)�TestPEP519PurePythonz>Explicitly test the pure Python implementation of os.fspath().N)r~rr�rVrrr�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�rrr(r&rr:raZrequires_linux_versionrcrprwr�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