Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_os.cpython-35.opt-1.pyc



��Yf��>@s-
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZyddlZWnek
rrdZYnXyddlZWnek
r�dZYnXyddlZWnek
r�dZYnXyddl Z Wnek
r�dZ YnXy]ddl!Z!dd�e!j"�D�Z#e$ed�rPej%�Z&e&e#krPe#j'e&�Wnek
rkgZ#YnXy)ddl(Z(dd�e(j)�D�Z*Wnek
r�gZ*YnXyddl+m,Z,m-Z-Wnek
r�ej.Z,Z-YnXddl/m0Z0d	Z1e$ed
�r#ej2�dkZ1e$ed�rVej3j4rVej3j4j5d�Z6nd	Z6ej
j5d
�o}ej%�dkZ7ddd�Z8Gdd�dej9�Z:Gdd�dej9�Z;Gdd�dej9�Z<ddlm=Z=Gdd�de=j>�Z?Gdd�dej9�Z@ejAe$ed�d�Gdd�de@��ZBGd d!�d!e@�ZCGd"d#�d#ej9�ZDejAe$ed$�d%�Gd&d'�d'ej9��ZEGd(d)�d)ej9�ZFGd*d+�d+ej9�ZGGd,d-�d-ej9�ZHejId.�d/kp7ejId0�d/kp7ejId1�d/kZJejKeJd2�Gd3d4�d4ej9��ZLejMdd5d6��ZNGd7d8�d8ej9�ZOejAej
d9kd:�Gd;d<�d<ej9��ZPGd=d>�d>ej9�ZQGd?d@�d@ej9�ZRejKej
d9kdA�GdBdC�dCej9��ZSejKej
d9kdA�GdDdE�dEej9��ZTejAej
d9kd:�GdFdG�dGej9��ZUejAej
d9kd:�GdHdI�dIej9��ZVejAej
d9kd:�ejWGdJdK�dKej9���ZXejAej
d9kd:�GdLdM�dMej9��ZYejWGdNdO�dOej9��ZZGdPdQ�dQej9�Z[GdRdS�dSej9�Z\GdTdU�dUej9�Z]GdVdW�dWej9�Z^ej_dX�ejAe$edY�dZ�Gd[d\�d\ej9���Z`ejAe$ed]�o'e$ed^�d_�Gd`da�daej9��Zaedk	rtGdbdc�dcejbejc�ZdejAedk	dd�ejAe$ede�df�Gdgdh�dhej9���Zedidj�ZfejAef�dk�Gdldm�dmej9��ZgejAej
d9kd:�Gdndo�doej9��ZhejAe$edp�dq�Gdrds�dsej9��ZiGdtdu�duej9�ZjGdvdw�dwej9�ZkGdxdy�dyej9�ZlejAe$edz�d{�Gd|d}�d}ej9��ZmGd~d�dej9�ZnGd�d��d�ej9�Zoepd�kr)
ejq�dS)��N)�supportcCs.g|]$}tj�|jkr|j�qS�)�getpassZgetuserZgr_memZgr_gid)�.0�grr�1/opt/alt/python35/lib64/python3.5/test/test_os.py�
<listcomp>2s	r�getgidcCsg|]}|j�qSr)Zpw_uid)r�urrrr;s	)�INT_MAX�PY_SSIZE_T_MAX)�assert_python_okF�geteuid�thread_infoZlinuxthreadsZfreebsdscontentc	Cs-t|dd��}|j|�WdQRXdS)NZxbr)�open�write)�filenameZcontent�fprrr�create_fileUsrc	@s%eZdZdd�ZeZdd�Zdd�Zejdd��Z	d	d
�Z
ejeje
ekd�ejde
d
dddd�dd����Zdd�Zdd�Zejejdkd�dd��Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&S)'�	FileTestscCs)tjjtj�r%tjtj�dS)N)�os�path�lexistsr�TESTFN�unlink)�selfrrr�setUp\szFileTests.setUpcCsOtjtjtjtjB�}tj|�|jtjtjtj	��dS)N)
rrrr�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK)r�frrr�test_accessas
zFileTests.test_accessc
Cs�tjtjtjtjB�}tj|�}zgd}xZ||dkr�tj|�|d7}|dkrz|jd�|tj|�}}q:WWdtj|�Xtj	||d�|j
ttj|d�dS)Nr��
z%couldn't allocate two consecutive fds��a)
rrrrrr�dupr�skipTest�
closerange�assertRaises�OSErrorr)r�first�secondZretriesrrr�test_closerangefs


zFileTests.test_closerangecCsTtj}tj|�}|jttj|d�tj|�}|j||�dS)Nr)	rr�sys�getrefcountr,�	TypeErrorr�rename�assertEqual)rr�old�newrrr�test_rename{s
	zFileTests.test_renamecCs�ttjd��u}|jd�|j�|j�}tj|dd�tj|d�}|j	t
|�t�|j	|d�WdQRXdS)Nzw+bsspamr�)rrrr�flush�filenor�lseek�readr5�type�bytes)r�fobj�fd�srrr�	test_read�s

zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAX�sizer&Zmemuser%Zdry_runFcCs�ttjd��}|jd�WdQRX|jtjtj�ttjd��}tj|j�|�}WdQRX|j	|d�dS)N�wbstest�rb)
rrrr�
addCleanuprrr=r;r5)rrDr�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
rFsbaconseggssspam)rrrrr�O_WRONLYr,r3r�	bytearray�
memoryviewrr5r=�
splitlines)rrAr@rrr�
test_write�s
zFileTests.test_writecGs2tj|dtjdd�}|j|d�dS)N�
creationflags�shellTr)�
subprocessZcallZCREATE_NEW_CONSOLEr5)r�argsZretcoderrr�write_windows_console�s		zFileTests.write_windows_console�win32z$test specific to the Windows consolecCs9d}|jtjd|�|jtjdd|�dS)Nzprint('x' * 100000)z-cz-u)rTr1�
executable)r�coderrr�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs8tjtjtj�}tj||�}|j�dS)N)rrrr�O_RDONLY�fdopenr)rrSrAr#rrr�
fdopen_helper�szFileTests.fdopen_helpercCsWtjtjtjtjB�}tj|�|j�|jd�|jdd�dS)N�r�d)rrrrrrrr[)rrArrr�test_fdopen�s



zFileTests.test_fdopencCs�tjd}ttjd��}|jd�WdQRXt|d��}|jd�WdQRX|jtj|�tjtj|�|jt	tj
tj�t|d��}|j|j�d�WdQRXdS)Nz.2�w�1�2r\)
rrrrrGrr�replacer,�FileNotFoundError�statr5r=)r�TESTFN2r#rrr�test_replace�s
zFileTests.test_replacec	Cs8tjdtdtjdddd�}tj|�dS)Nr�flags�modei��dir_fd)rr�__file__rYr)rr#rrr�test_open_keywords�s	zFileTests.test_open_keywordscCsWtjtd�}y&|dddtjdddd�Wnttfk
rRYnXdS)N�symlink�src�target�dst�target_is_directoryFri)rZ
get_attributerr�NotImplementedErrorr-)rrlrrr�test_symlink_keywords�szFileTests.test_symlink_keywordsN)�__name__�
__module__�__qualname__r�tearDownr$r0rZcpython_onlyr8rC�unittest�
skipUnlessrrZ
bigmemtestrIrOrTr1�platformrXr[r^rfrkrrrrrrr[s&
4
rc@sxeZdZdd�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)$�StatAttributeTestscCs6tj|_|jtj|j�t|jd�dS)NsABC)rr�fnamerGrr)rrrrr�szStatAttributeTests.setUprdztest needs os.stat()c
>Csctj|�}|j|tjd�|j|jd�t|�}x�tt�D]�}|dd�dkrR|j�}|jd�r�dd�}ndd�}|j|t||��|tt|��|j	||�qRWxZdj
�D]L}tt||�d�}t||d	�d
}|j||dd�q�Wy|d
|j
d�Wntk
rnYnXyd|_|j
d�Wntk
r�YnXyd|_|j
d�Wnttfk
r�YnXyd|_|j
d�Wntk
rYnXy tjd�}	|j
d�Wntk
r6YnXytjd�}	Wntk
r^YnXdS)N�ZST_ZTIMEcSs
t|�S)N)�int)�xrrr�trunc�sz7StatAttributeTests.check_stat_attributes.<locals>.trunccSs|S)Nr)r~rrrr�szst_atime st_mtime st_ctimei��Z_nsi'�deltar'��zNo exception raisedr%r&rr9�����	���
�)r&)rr%r'r|r9r�r�r�r�r�r&r�r�r�r�)rrdr5�ST_SIZE�st_size�dir�lower�endswith�getattr�assertIn�splitr}�assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevr3�parrot�stat_result)
rr{�result�members�name�attrrZfloatyZnanosecondy�result2rrr�check_stat_attributes�s\
	
		


z(StatAttributeTests.check_stat_attributescCs|j|j�dS)N)r�r{)rrrr�test_stat_attributes0sz'StatAttributeTests.test_stat_attributescCszy|jjtj��}Wn&tk
rD|jd|j�YnXtj��"tjdt	�|j
|�WdQRXdS)Nz#cannot encode %a for the filesystem�ignore)r{�encoder1�getfilesystemencoding�UnicodeEncodeErrorr*�warnings�catch_warnings�simplefilter�DeprecationWarningr�)rr{rrr�test_stat_attributes_bytes3s

z-StatAttributeTests.test_stat_attributes_bytescCs�tj|j�}xxttjd�D]c}tj||�}|jd|�|dkrj|jd|�tj|�}|j	||�q&WdS)Nr%sstat_resultr9scos
stat_result
)
rrdr{�range�pickle�HIGHEST_PROTOCOL�dumpsr��loadsr5)rr��proto�p�	unpickledrrr�test_stat_result_pickle<sz*StatAttributeTests.test_stat_result_pickle�statvfsztest needs os.statvfs()c<Cswytj|j�}WnDtk
r\}z$|jtjkrJ|jd�WYdd}~XnX|j|j|d�d}x;t	|�D]-\}}|jt
|d
|�||�q�Wyd|_|jd�Wntk
r�YnXyd|_
|jd�Wntk
rYnXy tjd�}|jd�Wntk
rJYnXytjd�}Wntk
rrYnXdS) Nzos.statvfs() failed with ENOSYSr|�bsize�frsize�blocks�bfree�bavail�files�ffree�favail�flag�namemaxZf_r%zNo exception raisedr&rr'r9r�r�r�r�r�r�r�r�r�)
r�r�r�r�r�r�r�r�r�r�)r&)rr%r'r|r9r�r�r�r�r�r&r�r�r�r�)rr�r{r-�errno�ENOSYSr*r5�f_bfree�	enumerater�r�r�r��statvfs_resultr3)rr��er��valueZmemberr�rrr�test_statvfs_attributesFs: %	
	


z*StatAttributeTests.test_statvfs_attributeszneed os.statvfs()cCs�ytj|j�}WnDtk
r\}z$|jtjkrJ|jd�WYdd}~XnXxxttj	d�D]c}tj
||�}|jd|�|dkr�|jd|�tj|�}|j
||�qqWdS)Nzos.statvfs() failed with ENOSYSr%sstatvfs_resultr9scos
statvfs_result
)rr�r{r-r�r�r*r�r�r�r�r�r�r5)rr�r�r�r�r�rrr�test_statvfs_result_picklers z-StatAttributeTests.test_statvfs_result_picklerUzWin32 specific testscCshytjd�WnPtk
r2|jd�Yn2tk
rc}z|jd�WYdd}~XnXdS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rrdrcr*r-r�)rr�rrr�test_1686475�s
zStatAttributeTests.test_1686475�pipezrequires os.pipe()cCs�tj�\}}ztj|�Wdtj|�tj|�X|jt��}tj|�WdQRX|j|jjtj	�dS)N)
rr�rdrr,r-r5�	exceptionr��EBADF)rr\r_Zctxrrr�
test_15261�s
zStatAttributeTests.test_15261cCsY|jt|d��|jt|jt��|jd|jkoOdkn�dS)N�st_file_attributesrl��)r �hasattr�
isinstancer�r})rr�rrr�check_file_attributes�sz(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificcCs�tj|j�}|j|�|j|jtj@d�tjd}tj	|�|j
tj|�tj|�}|j|�|j|jtj@tj�dS)Nrr�)rrdr{r�r5r��FILE_ATTRIBUTE_DIRECTORYrr�mkdirrG�rmdir)rr��dirnamerrr�test_file_attributes�s





z'StatAttributeTests.test_file_attributescCs�tjjtjd|j�}|jtj|�t|d�d}t	j
d|ddgd|�tj|�}|j|j
d�dS)	NZTEMPsABCr�z
icacls.exez/denyz*S-1-5-32-545:(S)rPr)rr�join�environr{rGrrrrR�
check_callrd�assertNotEqualr�)rr{ZDETACHED_PROCESSr�rrr�test_access_denied�s
z%StatAttributeTests.test_access_deniedN)rsrtrurrwrxr�rr�r�r�r�r�r�r1ryr�r�r�r�r�rrrrrz�s'B	
','
*
rzc@s?eZdZdd�Zdd�Zddd�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)'�
UtimeTestscCs�tj|_tjj|jd�|_|jtj|j�tj	|j�t
|jd��}|jd�WdQRXdd�}tj
��Atjdt�tjd	�}|j||�tjd�WdQRXdS)
N�f1rEsABCc
Ss5tj��"tjdt�tj|�WdQRXdS)Nr�)r�r�r�r�r�stat_float_times)�staterrr�restore_float_times�s
z-UtimeTests.setUp.<locals>.restore_float_timesr�r%T���)rrr�rrr�r{rG�rmtreer�rrr�r�r�r�r�)rrr�Zold_float_timesrrrr�s
zUtimeTests.setUpcCsFtj|�}|j|dkpE|j|dkpE|j|dkS)Nr�r�r�)rrd�st_atime�st_mtime�st_ctime)rr�strrr�support_subsecond�szUtimeTests.support_subsecondNcCs�|s|j}|j|�}|r3d}d}nd}d
}||||f�tj|�}|r�|j|j|ddd	�|j|j|ddd	�n.|j|j|d�|j|j|d�|j|j|�|j|j	|�dS)Ni8Z�;l�
o]r�r&r�r�g��&�.>r�g���ư>iʚ;lrTiʚ;lP�9)
r{r�rrdr�r�r�r5�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�)rr�rrr�
test_utimeszUtimeTests.test_utimecCs|ddS)Ng��&�.>g��&�.>r)r�rrr�	ns_to_secszUtimeTests.ns_to_seccs#�fdd�}�j|�dS)NcsD|\}}�j|�}�j|�}tj|||f�dS)N)r�rr�)rr�r�r��atime�mtime)rrrr�sz2UtimeTests.test_utime_by_indexed.<locals>.set_time)r�)rr�r)rr�test_utime_by_indexedsz UtimeTests.test_utime_by_indexedcs#�fdd�}�j|�dS)NcsG|\}}�j|�}�j|�}tj|d||f�dS)N�times)r�rr�)rr�r�r�r�r�)rrrr�%sz0UtimeTests.test_utime_by_times.<locals>.set_time)r�)rr�r)rr�test_utime_by_times$szUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd�}|j|�dS)NcSstj|d|dd�dS)Nr��follow_symlinksF)rr�)rr�rrrr�1sz9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_time)r�)rr�rrr�test_utime_nofollow_symlinks-sz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd�}|j|�dS)NcSs6t|d�� }tj|j�d|�WdQRXdS)NrEr�)rrr�r;)rr�rrrrr�:sz*UtimeTests.test_utime_fd.<locals>.set_time)r�)rr�rrr�
test_utime_fd7szUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd�}|j|�dS)NcSs_tjj|�\}}tj|tj�}ztj|d|d|�Wdtj|�XdS)Nrir�)rrr�rrYr�r)rr�r�r��dirfdrrrr�Ds
z.UtimeTests.test_utime_dir_fd.<locals>.set_time)r�)rr�rrr�test_utime_dir_fdAszUtimeTests.test_utime_dir_fdcCs&dd�}|j|d|j�dS)NcSstj|d|�dS)Nr�)rr�)rr�rrrr�Osz1UtimeTests.test_utime_directory.<locals>.set_timer)r�r�)rr�rrr�test_utime_directoryNszUtimeTests.test_utime_directorycCs�tj�}||j�|j|j�s4d}nd}tj|j�}d|j||j|f}|j|j|d|d|�dS)Ng�?g{�G�z�?zst_time=%r, current=%r, dt=%rr��msg)�timer{r�rrdr�r�)rr�Zcurrentr�r�r�rrr�_test_utime_currentTs
	zUtimeTests._test_utime_currentcs#�fdd�}�j|�dS)Ncstj�j�dS)N)rr�r{)r)rrrr�gsz/UtimeTests.test_utime_current.<locals>.set_time)r�)rr�r)rr�test_utime_currentfszUtimeTests.test_utime_currentcs#�fdd�}�j|�dS)Ncstj�jd�dS)N)rr�r{)r)rrrr�msz3UtimeTests.test_utime_current_old.<locals>.set_time)r�)rr�r)rr�test_utime_current_oldlsz!UtimeTests.test_utime_current_oldc
Cs�tjdkr�tjjtjj|��dd}ddl}|jj}|j	dd�}|j
|ddddd|t|��}|r�|jSdS)NrUr�\�r])
r1ryrr�
splitdrive�abspath�ctypes�windll�kernel32Zcreate_unicode_bufferZGetVolumeInformationW�lenr�)rr�rootrr�buf�okrrr�get_file_systemrs&	zUtimeTests.get_file_systemcCsg|j|j�dkr%|jd�d}tj|j||f�|jtj|j�j|�dS)NZNTFSz
requires NTFSlrT)	rr�r*rr�r{r5rdr�)rZlargerrr�test_large_times

zUtimeTests.test_large_timec
Cs4|jt��tj|jddd�WdQRXdS)Nr�r�)r�r�)r�r�)r,�
ValueErrorrr�r{)rrrr�test_utime_invalid_arguments�sz'UtimeTests.test_utime_invalid_arguments)rsrtrurr�r�r��staticmethodr�r�r�rwrxrr��supports_follow_symlinksr��supports_fdr��supports_dir_fdr�r�r�r�rrr
rrrrrr��s(			

r�)�
mapping_testsc@sZeZdZdZdZdd�Zdd�Zdd�Zd	d
�Ze	j
ejj
d�d�d
d��Ze	j
ejj
d�d�dd��Zdd�Zdd�Zdd�Zdd�Ze	j
ejd�dd��Zejd�ejdd�dd ���Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�ZdS)+�EnvironTestsz8check that os.environ object conform to mapping protocolNcCsattj�|_tjr-ttj�|_x-|j�j�D]\}}|tj|<q@WdS)N)	�dictrr��_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items)r�keyr�rrrr�s
	zEnvironTests.setUpcCsMtjj�tjj|j�tjrItjj�tjj|j�dS)N)rr��clear�updaterrrr)rrrrrv�s

	
zEnvironTests.tearDowncCsddddddiS)NZKEY1ZVALUE1ZKEY2ZVALUE2ZKEY3ZVALUE3r)rrrrr�szEnvironTests._referencecCstjj�tjS)N)rr�r)rrrr�_empty_mapping�s
zEnvironTests._empty_mappingz/bin/shzrequires /bin/shc
Cs_tjj�tjjdd�tjd��)}|j�j�}|j|d�WdQRXdS)NZHELLOZWorldz/bin/sh -c 'echo $HELLO')rr�rr�popenr=�stripr5)rr!r�rrr�test_update2�s

zEnvironTests.test_update2cCs~tjd��h}t|�}|jt|�d�|jt|�d�|jt|�d�|jtt|�WdQRXdS)Nz%/bin/sh -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rr!�iterr5�nextr,�
StopIteration)rr!�itrrr�test_os_popen_iter�szEnvironTests.test_os_popen_itercCsPxItjj�D]8\}}|jt|�t�|jt|�t�qWdS)N)rr�rr5r>�str)rr�valrrr�test_keyvalue_types�sz EnvironTests.test_keyvalue_typescCsCx<|j�j�D](\}}|jtjj|�|�qWdS)N)rrr5rr��get)rrr�rrr�
test_items�szEnvironTests.test_itemscCsHtj}|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)rrr�rrr�	<genexpr>�sz-EnvironTests.test___repr__.<locals>.<genexpr>N)rr�r5�reprr.r�r)r�envrrr�
test___repr__�s		zEnvironTests.test___repr__cCs�tjjtj�}ddddg}dtjj|�i}tj}zEt|�t_|j|tj��|j|tjdd��Wd|t_X|j|tji��|jdtjddi��|j|tj|��tj	r�y0t
jdd��dd	d
di}WdQRXWntk
r8YnX|j
ttj|�|jtjd
di�d
g�|jtjd
d
i�d
g�|jtjddi�d
g�dS)Nz/montyz/pythonrz/flying/circus�PATHr1�recordTr`sPATH�2sabc�abc)r)r�defpathr��pathsepr�r�r�assertSequenceEqual�
get_exec_pathrr�r��BytesWarningr,r)rZ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�}Wn2tk
rVdtj�f}|j|�YnX|tjd<|jtjd|�|jtjd|�d}|tjd<|jtjd|�|j	tj�d�}|jtjd|�dS)	Nueuro€�surrogateescapez'U+20AC character is not encodable to %sZunicodesunicodes�sbytesr?)
r�r1r�r�r*rr�r5r�decode)rr�Zvalue_bytesr�Z	value_strrrr�
test_environb�s 



zEnvironTests.test_environbr�r&r�cCsXtjdkr5dd}|jttjj|�nd}|jttjj|�dS)NrUr~iP�zkey=)r1ryr,rrr��__delitem__r-)rrrrr�test_unset_errors

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�r,�KeyError�assertIsr�rSr �__suppress_context__)rZmissing�cmrrr�
test_key_typeszEnvironTests.test_key_typecCs`t|�}d}t|�dtj|<z%t|�|jtj|d�Wdtj|=XdS)NZ__new_key__Ztest_environ_iteration)r$r%rr�r5)rZ
collection�iteratorZnew_keyrrr�_test_environ_iteration,s


z$EnvironTests._test_environ_iterationcCs|jtj�dS)N)rIrr�)rrrr�(test_iter_error_when_changing_os_environ;sz5EnvironTests.test_iter_error_when_changing_os_environcCs|jtjj��dS)N)rIrr�r)rrrr�.test_iter_error_when_changing_os_environ_items>sz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|jtjj��dS)N)rIrr��values)rrrr�/test_iter_error_when_changing_os_environ_valuesAsz<EnvironTests.test_iter_error_when_changing_os_environ_values)rsrtru�__doc__Z	type2testrrvrr rwrxrr�existsr#r(r+r-r2r<rr?rZrequires_freebsd_versionZrequires_mac_verrArGrIrJrKrMrrrrr�s***)!rc@sveZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�	WalkTestszTests for os.walk().cKs/d|kr|jd�|d<tj||�S)Nr��followlinks)�popr�walk)r�top�kwargsrrrrSJszWalkTests.walkcCs�tjj}|tjd�|_||jd�|_||jd�|_||jd�}||d�|_||jd�}||jd�}||d�}||jd�}||d	�|_	|tjd
�}|tjd
d�}||d�}	||d
�}
||d�}tj
|j�tj
|�tj
|j�tj
|�xK|||||fD]4}t|d��}
|
jd|d�WdQRXqjWtj
�r?tjtjj|�|j	�tjd|	d�tj|dd�|
d�tj|dd�|d�|dd	gdd
ddgf|_n|gdgf|_tj|jd�ytj|j�Wntk
r�YnQXtj|jtj�tj|�tj|j�d|_|jddd�=dS)NZTEST1�SUB1�SUB11�SUB2ZSUB21�tmp1�tmp2Ztmp3�linkZTEST2�tmp4Zbroken_linkZbroken_link2Zbroken_link3r~zI'm z" and proud of it.  Blame test_os.
ZbrokenTZtmp5rr%)rrr�rr�	walk_path�	sub1_path�
sub11_path�
sub21_path�	link_path�makedirsrr�can_symlinkrlr�	sub2_tree�chmod�listdir�PermissionErrorrd�S_IRWXUrr�)rr�Z	sub2_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZ	tmp5_pathZt2_pathZ	tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathrr#rrrrOsT

 	

	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)Nr9rr%rVr|r'rXrYrWrZr�)	�listrSr]r5r�sortr^r_rd)r�all�flippedrrr�test_walk_topdown�s)*$zWalkTests.test_walk_topdowncCs�g}xR|j|j�D]>\}}}|j|||f�d|kr|jd�qW|jt|�d�|j|d|jdgdgf�|ddj�|ddj�|j|d|j�dS)NrVr'rrXrYr%r�)rSr]�append�remover5rrjrd)rrkr	�dirsr�rrr�test_walk_prune�s"
zWalkTests.test_walk_prunecCs(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)N�topdownFr9r|r%rrVr'rXrYrWrZr�)	rirSr]r5rrjr_r^rd)rrkrlrrr�test_walk_bottom_up�s

zWalkTests.test_walk_bottom_upcCs�tj�s|jd�|j|jdd�}xW|D]B\}}}||jkr8|j|g�|j|dg�Pq8W|jd�dS)Nzneed symlink supportr�Tr\z+Didn't follow symlink with followlinks=True)rrcr*rSr]rar5r�)r�walk_itr	rpr�rrr�test_walk_symlink�s
zWalkTests.test_walk_symlinkcCs�|jrtj|jtj�x�tjtjdd�D]�\}}}x*|D]"}tjtj	j
||��qNWxR|D]J}tj	j
||�}tj	j|�s�tj|�q{tj|�q{Wq8Wtjtj�dS)NrrF)
r`rrerdrhrSrrrorr��islinkr�)rr	rpr�r�r�rrrrv�s	(
 
zWalkTests.tearDowncCs"g}|j|jd|j�}t|�\}}}|j|g�d}tjj||�}tjj||d�}tj||�z�dd�|D�}	|j	|�|j
||	�|j
||	�x9|D]1}
|
|kr�|jtjj||
�|	�q�WWdtj||�XdS)N�onerrorrVz.newcSsg|]\}}}|�qSrr)rr\�dr#rrrr�s	z/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)rSr]rnr%r5rrr�r4r rBr�)r�errorsrtr	rpr��dir1Zpath1Zpath1new�roots�dir2rrr�test_walk_bad_dir�s"

'zWalkTests.test_walk_bad_dirN)rsrtrurNrSrrmrqrsrurvr}rrrrrPEsErP�fwalkzTest needs os.fwalk()c@sjeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�
FwalkTestszTests for os.fwalk().cks;x4tj||�D] \}}}}|||fVqWdS)N)rr~)rrTrUr	rpr�Zroot_fdrrrrSs%zFwalkTests.walkc
Cs|j�}|j�}x�tjd	dd�D]�\}}|jd|d|�|jd|d|�i}x<tj|�D]+\}}}t|�t|�f||<q|WxYtj|�D]H\}}}}	|j||�|j	||t|�t|�f�q�Wq.WdS)
z.
        compare with walk() results.
        TF�repeatr'rrrQr�N)TF)
�copy�	itertools�productrrrS�setr~r�r5)
r�walk_kwargs�fwalk_kwargsrrr��expectedr	rpr��rootfdrrr�_compare_to_walk
s" "zFwalkTests._compare_to_walkcCs#dtji}|j||�dS)NrT)rrr�)rrUrrr�test_compare_to_walkszFwalkTests.test_compare_to_walkcCsczNtjdtj�}dtji}|j�}||d<|j||�Wdtj|�XdS)N�.rTri)rrrYrrr�r�r)rrAr�r�rrr�test_dir_fd s
zFwalkTests.test_dir_fdcCs�x�tjddd�D]�\}}tj|df}xrtj|d|�D][\}}}}tj|�tj|�|jt	tj
|��t	|�t	|�B�qJWqWdS)NTFr�r'r�)TF)r�r�rrrr~�fstatrdr5r�rf)rrrr�rSr	rpr�r�rrr�test_yields_correct_dir_fd*s"(

z%FwalkTests.test_yields_correct_dir_fdcCs�tjd�}tj|�x1td�D]#}xtjtj�D]}qBWq)Wtjd�}|jtj|�|j||�dS)Nr%�)	rr)rr�r~rrrGr5)rZminfd�ir~Znewfdrrr�test_fd_leak6s
zFwalkTests.test_fd_leakcCs�|jrtj|jtj�x�tjtjdd�D]�\}}}}x!|D]}tj|d|�qQWxd|D]\}tj|d|dd�}tj	|j
�r�tj|d|�qutj|d|�quWq8Wtjtj�dS)NrrFrir�)r`rrerdrhr~rrr�S_ISDIRr�r�)rr	rpr�r�r�r�rrrrvCs	+

zFwalkTests.tearDownN)rsrtrurNrSr�r�r�r�r�rvrrrrrs

rcsFeZdZdZ�fdd�Z�fdd�Zdd�Z�S)�BytesWalkTestszTests for os.walk() with bytes.csUt�j�tj�|_tjdkrQ|jjtj	��tj
dt�dS)N�ntr�)�superr�
contextlib�	ExitStack�stackrr��
enter_contextr�r�r�r�)r)�	__class__rrrTs

zBytesWalkTests.setUpcs|jj�t�j�dS)N)r�rr�rv)r)r�rrrv[s
zBytesWalkTests.tearDownc	ks�d|kr|jd�|d<x�tjtj|�|�D]�\}}}tj|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q;WdS)Nr�rQ)rRrrS�fsencode�fsdecoderi�map)	rrTrUZbrootZbdirsZbfilesr	rpr�rrrrS_s+"zBytesWalkTests.walk)rsrtrurNrrvrSrr)r�rr�Rsr�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�MakedirTestscCstjtj�dS)N)rr�rr)rrrrrlszMakedirTests.setUpc	Cs�tj}tjj|ddd�}tj|�tjj|dddd�}tj|�|jttjtj�tjj|dddddtj�}tj|�tjj|dtjddddd�}tj|�dS)Nrzr|�dir3�dir4�dir5�dir6)	rrrrr�rbr,r-�curdir)r�baserrrr�test_makediros	

'
zMakedirTests.test_makedircCs�tjjtjd�}d}tjd�}tj||�|jttj||�|jttj||dd�tj|ddd�tj|d|dd�tj|�tjtjj	d	�dd�dS)
Nrzi���exist_okFi�Trh�/)
rrr�rr�umaskrbr,r-r)rrrh�old_maskrrr� test_exist_ok_existing_directory~s
z-MakedirTests.test_exist_ok_existing_directorycCsHtjjtjd�}tj}d}tjd�}z�tjtj	tj�j
�}ytjtj||B�Wn!tk
r�t
jd��YnXtj	tj�j
|@|kr�t
jd��tj|||B�tj||dd�tj|tjtj	|�j
�|@�tj|||Bdd�Wdtj|�XdS)Nrzi�r�zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.r�T)rrr�rrrd�S_ISGIDr��S_IMODE�lstatr�rergrw�SkipTestrb)rrr�rhr�Zexisting_testfn_moderrr�test_exist_ok_s_isgid_directory�s$	
*z,MakedirTests.test_exist_ok_s_isgid_directorycCs�tj}tjjtjd�}t|d�}|jd�|j�|jt	tj
|�|jt	tj
|dd�|jt	tj
|dd�tj|�dS)Nrzr_r6r�FT)rrrrr�rrrr,r-rbro)rr�rr#rrr�#test_exist_ok_existing_regular_file�s	

z0MakedirTests.test_exist_ok_existing_regular_filecCsstjjtjdddddd�}x8tjj|�ra|tjkratjj|�}q*Wtj|�dS)Nrzr|r�r�r�r�)rrr�rrrOr��
removedirs)rrrrrrv�s
%zMakedirTests.tearDownN)	rsrtrurr�r�r�r�rvrrrrr�ksr��chownzTest needs chownc@s�eZdZedd��Zdd�Zejee	�dkd�dd��Z
ejeooee�dkd	�d
d��Z
ejeo�ee�dkd�d
d��Zedd��ZdS)�ChownFileTestscCstjtj�dS)N)rr�rr)�clsrrr�
setUpClass�szChownFileTests.setUpClasscCs�tjtj�}|j}|j}xmddtjd�tj	dd�fD]D}|j
ttjtj||�|j
ttjtj||�qLW|j
tjtj||��|j
tjtjd	d
��dS)Ng�?y�?r%r'g�y��r����r�r�)rrdrr�st_uid�st_gid�decimalZDecimal�	fractionsZFractionr,r3r��assertIsNone)rrd�uid�gidr�rrr�*test_chown_uid_gid_arguments_must_be_index�s		.#z9ChownFileTests.test_chown_uid_gid_arguments_must_be_indexr%ztest needs more than one groupcCs�tdd�\}}tjtj�j}tjtj||�tjtj�j}|j||�tjtj||�tjtj�j}|j||�dS)Nr')	�groupsrrdrrr�r�r�r5)rZgid_1Zgid_2r�r�rrr�
test_chown�szChownFileTests.test_chownz0test needs root privilege and more than one usercCs�tdd�\}}tjtj�j}tjtj||�tjtj�j}|j||�tjtj||�tjtj�j}|j||�dS)Nr')	�	all_usersrrdrrr�r�r�r5)r�uid_1�uid_2r�r�rrr�test_chown_with_root�sz#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one usercCsrtdd�\}}tjtj�j}|jt��1tjtj||�tjtj||�WdQRXdS)Nr')	r�rrdrrr�r,rgr�)rr�r�r�rrr�test_chown_without_permission�s
z,ChownFileTests.test_chown_without_permissioncCstjtj�dS)N)rr�rr)r�rrr�
tearDownClass�szChownFileTests.tearDownClassN)rsrtru�classmethodr�r�rwrxrr�r��
root_in_posixr�r�r�r�rrrrr��s
*r�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCstjtj�dS)N)rrbrr)rrrrr�szRemoveDirsTests.setUpcCstjtj�dS)N)rr�r)rrrrrv�szRemoveDirsTests.tearDowncCs�tjjtjd�}tj|�tjj|d�}tj|�tj|�|jtjj|��|jtjj|��|jtjjtj��dS)N�dira�dirb)	rrr�rrr�r��assertFalserO)rr�r�rrr�test_remove_all�s


zRemoveDirsTests.test_remove_allc
Cs�tjjtjd�}tj|�tjj|d�}tj|�ttjj|d�d��}|jd�WdQRXtj|�|j	tjj
|��|jtjj
|��|jtjj
tj��dS)Nr�r�zfile.txtr_�text)rrr�rrr�rrr�r�rOr )rr�r�r#rrr�test_remove_partials

!
z#RemoveDirsTests.test_remove_partialcCs�tjjtjd�}tj|�tjj|d�}tj|�ttjj|d�d��}|jd�WdQRX|jt	��tj
|�WdQRX|jtjj|��|jtjj|��|jtjjtj��dS)Nr�r�zfile.txtr_r�)
rrr�rrr�rrr,r-r�r rO)rr�r�r#rrr�test_remove_nothings

!z#RemoveDirsTests.test_remove_nothingN)rsrtrurrvr�r�r�rrrrr��s

r�c@seZdZdd�ZdS)�DevNullTestscCsittjd��}|jd�|j�WdQRXttjd��}|j|j�d�WdQRXdS)NrEshellorF�)rr�devnullrrr5r=)rr#rrr�test_devnull s

zDevNullTests.test_devnullN)rsrtrur�rrrrr�sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCs�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�dS)Nrr%r&r]i�)r5rr�urandom)rrrr�test_urandom_length)s
z URandomTests.test_urandom_lengthcCs2tjd�}tjd�}|j||�dS)N�)rr�r�)r�data1�data2rrr�test_urandom_value0szURandomTests.test_urandom_valuecCsRdjdd|ddf�}td|�}|d}|jt|�d�|S)	N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()z-cr%r�)r�r
r5r)r�countrW�out�stdoutrrr�get_urandom_subprocess5s
z#URandomTests.get_urandom_subprocesscCs2|jd�}|jd�}|j||�dS)Nr�)r�r�)rr�r�rrr�test_urandom_subprocess@sz$URandomTests.test_urandom_subprocessN)rsrtrur�r�r�r�rrrrr�(sr��HAVE_GETENTROPYr%�HAVE_GETRANDOM�HAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorc@sFeZdZejed�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
)rrWrrr�test_urandom_failurePsz#URandomFDTests.test_urandom_failurecCs"d}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
)rrW�rcr��errrrr�test_urandom_fd_closedgsz%URandomFDTests.test_urandom_fd_closedcCs�ttjd��}|jdd�WdQRX|jtjtj�djdtj�}td|�\}}}|j	t
|�d�|j|dd	�|d	d��td|�\}}}|j	t
|�d�|j||�dS)
NrE�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:
                os.dup2(f.fileno(), fd)
                sys.stdout.buffer.write(os.urandom(4))
                sys.stdout.buffer.write(os.urandom(4))
            rz-Scr�rr9)rrrrrGrrr.r
r5rr�)rr#rWr�r�r�Zout2Zerr2rrr�test_urandom_fd_reopenedus$z'URandomFDTests.test_urandom_fd_reopenedN)	rsrtrurwrx�resourcer�r�r�rrrrr�Msr�c#s�g��fdd�}�fdd�}zKtj}tj}tj}|t_|t_|dk	ro|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)rn�RuntimeError)r�rS)�callsrr�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs,�jd||f�ttjd��dS)N�execvez
execve called)rnr-r��ENOTDIR)r�rS)r�rr�mock_execve�sz$_execvpe_mockup.<locals>.mock_execveN)rr�r�r7)r7r�r�Z
orig_execvZorig_execveZorig_defpathr)r�r�_execvpe_mockup�s										r�c@syeZdZejed�dd��Zdd�Zeje	e
d�d�dd	��Zd
d�Zdd
�Z
dS)�	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs#|jttjddgd�dS)Nzno such app-)r,r-r�execvpe)rrrr�test_execvpe_with_bad_program�sz'ExecTests.test_execvpe_with_bad_programcCs |jttjdgd�dS)NZnotepad)r,rrr�)rrrr�test_execvpe_with_bad_arglist�sz'ExecTests.test_execvpe_with_bad_arglist�_execvpez)No internal os._execvpe function to test.c
Cs#tjd}|tkrUd}tjjtj|�|�}|}dddg}nQd}dddg}tjj||�}tjdkr�tj|�}n|}d	d
i}t��V}|jt	tj
||�|jt|�d�|j|dd
||ff�WdQRXtd|��_}|jt
tj
||d|�|jt|�d�|j|dd|||ff�WdQRXt���}|j�}	|tkr�||	d<n
||	d<|jt
tj
||d|	�|jt|�d�|j|dd|||	ff�WdQRXdS)NZabsolutepaths
executablesprognameZarg1Zarg2rVZprognamer�ZspamrJr%rr�r7r1r�sPATHr3)r�sepr?rr�r�r�r�r,r�r�r5rr-r9r�)
rZ	test_typeZprogram_pathZprogramZfullpathZnative_fullpathZ	argumentsr1r�Zenv_pathrrr�_test_internal_execvpe�sD
	'	


	
z ExecTests._test_internal_execvpecCs-|jt�tjdkr)|jt�dS)Nr�)r�r)rr�r?)rrrr�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)r1rVrr�r�r,rr�)rrS�newenvrrr�test_execve_invalid_env�s


z!ExecTests.test_execve_invalid_envN)rsrtrurw�skipIf�USING_LINUXTHREADSr�r�rxr�rr�r�rrrrrr��s	0r�rUzWin32 specific testsc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�Win32ErrorTestscCs'|jttjtjtjd�dS)Nz.bak)r,r-rr4rr)rrrrr8szWin32ErrorTests.test_renamecCs|jttjtj�dS)N)r,r-rrorr)rrrr�test_removeszWin32ErrorTests.test_removecCs|jttjtj�dS)N)r,r-r�chdirrr)rrrr�
test_chdirszWin32ErrorTests.test_chdircCsQttjd�}z|jttjtj�Wd|j�tjtj�XdS)Nr_)	rrrr,r-rr�rr)rr#rrr�
test_mkdirs

zWin32ErrorTests.test_mkdircCs |jttjtjd�dS)N)r,r-rr�rr)rrrrr�!szWin32ErrorTests.test_utimecCs |jttjtjd�dS)Nr)r,r-rrerr)rrrr�
test_chmod$szWin32ErrorTests.test_chmodN)	rsrtrur8rr	r
r�rrrrrrsrc	@s�eZdZddddddddd	g	Zd
d�Zx%eD]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�fchdirr)rZ�	fdatasyncr��fstatvfs�fsync�	tcgetpgrp�ttynamecs�fdd�}|S)Ncs)tt��r%|jtt���dS)N)r�r�checkr�)r)r#rr�helper-sz(TestInvalidFD.get_single.<locals>.helperr)r#rr)r#r�
get_single,szTestInvalidFD.get_singleZtest_cGsjy|tj�|�Wn;tk
rT}z|j|jtj�WYdd}~XnX|jd|�dS)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr-r5r�r�r�)rr#rSr�rrrr4s)	zTestInvalidFD.check�isattyztest needs os.isatty()cCs#|jtjtj��d�dS)NF)r5rrrr)rrrr�test_isatty=szTestInvalidFD.test_isattyr+ztest needs os.closerange()cCs�tj�}x?td�D]1}ytj||�Wntk
rHYqXPqW|dkritjd��|jtj	|||d�d�dS)Nr&r'z5Unable to acquire a range of invalid file descriptorsr%)
rrr�rr�r-rwr�r5r+)rrAr�rrrr0As
	zTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|jtjd�dS)N�)rrr)rrrr�	test_dup2QszTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|jtjd�dS)Nr)rrr)rrrr�test_fchmodUszTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|jtjdd�dS)Nr%r�r�)rrr)rrrr�test_fchownYszTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs*|jtjd�|jtjd�dS)N�PC_NAME_MAX)rr�pathconfr )rrrr�test_fpathconf]szTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs*|jtjd�|jtjd�dS)Nr)rr�truncater$)rrrr�test_ftruncatebszTestInvalidFD.test_ftruncater<ztest needs os.lseek()cCs|jtjdd�dS)Nr)rrr<)rrrr�
test_lseekgszTestInvalidFD.test_lseekr=ztest needs os.read()cCs|jtjd�dS)Nr%)rrr=)rrrrrCkszTestInvalidFD.test_read�readvztest needs os.readv()cCs&td�}|jtj|g�dS)Nr&)rLrrr()rr
rrr�
test_readvoszTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|jtjd�dS)Nr)rrr*)rrrr�test_tcsetpgrpttszTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs|jtjd�dS)N� )rrr)rrrrrOxszTestInvalidFD.test_write�writevztest needs os.writev()cCs|jtjdg�dS)Nsabc)rrr-)rrrr�test_writev|szTestInvalidFD.test_writevcCs'|jtj�|jtjd�dS)NT)rr�get_inheritable�set_inheritable)rrrr�test_inheritable�szTestInvalidFD.test_inheritable�get_blockingz-needs os.get_blocking() and os.set_blocking()cCs'|jtj�|jtjd�dS)NT)rrr2�set_blocking)rrrr�
test_blocking�szTestInvalidFD.test_blockingN)rsrtruZsinglesrr#�localsrrwrxr�rrr0rrrr#r&r'rCr)r+rOr.r1r4rrrrr's,
	'''''''''''''rc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs,tj|_tjjtjd�|_dS)Nra)rr�file1rrr��file2)rrrrr�szLinkTests.setUpcCs@x9|j|jfD]%}tjj|�rtj|�qWdS)N)r7r8rrrOr)r�filerrrrv�szLinkTests.tearDownc Cs�t|d��}|jd�WdQRXtj��%tjdt�tj||�WdQRXt|d��H}t|d��/}|jtj	j
|j�|j���WdQRXWdQRXdS)Nr_�testr�r\)rrr�r�r�r�rr[r r�sameopenfiler;)rr7r8r��f2rrr�
_test_link�s
$zLinkTests._test_linkcCs|j|j|j�dS)N)r=r7r8)rrrr�	test_link�szLinkTests.test_linkcCs8|jt|jtj��t|jtj���dS)N)r=r?r7r1r�r8)rrrr�test_link_bytes�szLinkTests.test_link_bytescCsnytjd�Wn!tk
r4tjd��YnX|jd7_|jd|_|j|j|j�dS)N�ñz#Unable to encode for this platform.ra)rr��UnicodeErrorrwr�r7r8r=)rrrr�test_unicode_name�s
zLinkTests.test_unicode_nameN)	rsrtrurrvr=r>r?rBrrrrr6�s
r6zPosix specific testsc@sHeZdZejeed�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()cCsXtj�dkr(|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr%� l)r�getuidr,r-rDr3�
OverflowError)rrrr�test_setuid�szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCs_tj�dkr/tr/|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr%rEl)rrF�HAVE_WHEEL_GROUPr,r-rIr3rG)rrrr�test_setgid�szPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCsXtj�dkr(|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr%rEl)rrFr,r-rLr3rG)rrrr�test_seteuid�szPosixUidGidTests.test_seteuid�setegidztest needs os.setegid()cCs_tj�dkr/tr/|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr%rEl)rrFrJr,r-rNr3rG)rrrr�test_setegid�szPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCs�tj�dkr+|jttjdd�|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intr%rEll)rrFr,r-rPr3rG)rrrr�
test_setreuid�szPosixUidGidTests.test_setreuidcCstjtjddg�dS)Nz-cz,import os,sys;os.setreuid(-1,-1);sys.exit(0))rRr�r1rV)rrrr�test_setreuid_neg1�s	z#PosixUidGidTests.test_setreuid_neg1�setregidztest needs os.setregid()cCs�tj�dkr2tr2|jttjdd�|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intr%rEll)rrFrJr,r-rSr3rG)rrrr�
test_setregid�szPosixUidGidTests.test_setregidcCstjtjddg�dS)Nz-cz,import os,sys;os.setregid(-1,-1);sys.exit(0))rRr�r1rV)rrrr�test_setregid_neg1�s	z#PosixUidGidTests.test_setregid_neg1N)rsrtrurwrxr�rrHrKrMrOrQrRrTrUrrrrrC�s'''''	''	rCc@sseZdZdd�Zdd�Zdd�Zdd�Zeje	e
d	�d
�dd��Zd
d�ZdS)�Pep383Testscsatjrtj|_n$tjr0tj|_ntj|_tj|j�|_g��fdd�}|tj�tjr�|tj�tjr�|tj��s�|j	d�t
�|_tj|j�ynxg�D]_}tj
tjj|j|��tj|�}||jkr*td��|jj|�q�WWntj|j��YnXdS)Ncs=ytj|�}Wntk
r+dSYnX�j|�dS)N)rr�r�rn)�fn)�bytesfnrr�add_filename�s

	z'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLEr�ZTESTFN_NONASCIIrrr�ZbdirZTESTFN_UNICODEr*r��	unicodefnr�Zcreate_empty_filerr�r�r�add�shutilr�)rrYrWr)rXrr�s6		
	
	


zPep383Tests.setUpcCstj|j�dS)N)r]r�r�)rrrrrvszPep383Tests.tearDowncCs�|j}ttj|j��}|j||�tj�}zBtjtj�|jttj��ttjtj���Wdtj|�XdS)N)	r[r�rrfr�r5�getcwdrr�)rr��foundZcurrent_directoryrrr�test_listdirs	2zPep383Tests.test_listdircCsCx<|jD]1}ttjj|j|�d�}|j�q
WdS)NrF)r[rrrr�r�r)rrWr#rrr�	test_open&s!zPep383Tests.test_openr�zneed os.statvfs()cCs=x6|jD]+}tjj|j|�}tj|�q
WdS)N)r[rrr�r�r�)rrW�fullnamerrr�test_statvfs+szPep383Tests.test_statvfscCs7x0|jD]%}tjtjj|j|��q
WdS)N)r[rrdrr�r�)rrWrrr�	test_stat4szPep383Tests.test_statN)
rsrtrurrvr`rarwrxr�rrcrdrrrrrV�s%rVc@sgeZdZdd�Zdd�Zdd�Zdd�Zejd	�d
d��Z	dd
�Z
dS)�Win32KillTestscCsddl}ddlm}ddl}|jjj}|j|_|j|j	|j
�|j|j	|j�|j	|j�|j	|j�f|_d}t
jtjddj|�gdt
jdt
jdt
j�}|j|jj�|j|jj�|j|jj�d\}}	x�||	kr�|j�dkr�|jt|��}
||j|jj��|
|j|
�ddd�}|j|dd
�|
jr�|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�stdinr]zPeekNamedPipe failedg�������?r%z1Did not receive communication from the subprocess)rr]))rrf�msvcrtrr�
PeekNamedPipe�BOOL�restypeZHANDLE�POINTERZc_charZDWORD�argtypesrR�Popenr1rVr.�PIPErGr�rrhri�pollZcreate_string_bufferrZ
get_osfhandler;Zsizeofr�r�r5r>r��sleepr�r�kill�pid�wait)rZsigrrfrjrkr��procr��maxr
Zrsltrrr�_kill:sF		!	

zWin32KillTests._killcCs|jtj�dS)N)ry�signal�SIGTERM)rrrr�test_kill_sigtermpsz Win32KillTests.test_kill_sigtermcCs|jd�dS)Nr])ry)rrrr�
test_kill_inttszWin32KillTests.test_kill_intcCsFdtj�}tjdd|�}d|d<tjtjtjj	tjj
t�d�|gdtj�}d\}}xm||kr�|j
�dkr�|ddkr�Ptjd�|d7}q}Wtj|jtj�|jd�tj|j|�tjd	�|j
�sBtj|jtj�|jd
j|��dS)
Nz
test_os_%sr%rzwin_console_handler.pyrPr]g�������?z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {}r�)rr])�uuidZuuid1�mmaprRrpr1rVrrr�r�rjZCREATE_NEW_PROCESS_GROUPrrr�rsrtrurz�SIGINTr�r.)rZeventr�Ztagname�mrwr�rxrrr�_kill_with_eventxs(
!


zWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertycCs�ddlm}ddl}|j|j��}|jjj}|j|j�|jf|_|j|_	||d�|j
tjd�dS)Nr)rf�CTRL_C_EVENT)
rrfrnZc_intrr�SetConsoleCtrlHandlerrlrormr�rzr�)rrfrZNULLr�rrr�test_CTRL_C_EVENT�s
z Win32KillTests.test_CTRL_C_EVENTcCs|jtjd�dS)N�CTRL_BREAK_EVENT)r�rzr�)rrrr�test_CTRL_BREAK_EVENT�sz$Win32KillTests.test_CTRL_BREAK_EVENTN)rsrtruryr|r}r�rw�skipr�r�rrrrre8s6rec@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�Win32ListdirTestszTest listdir on Windows.cCs�g|_x�td�D]�}d|}tjjtj|�}d|}tjjtj|�}tj|�t|d��}|j	d|�WdQRX|jj
||g�qW|jj�dS)Nr'zSUB%dzFILE%dr_z'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rrr�rrrbrr�extendrj)rr�Zdir_nameZdir_path�	file_nameZ	file_pathr#rrrr�s	


zWin32ListdirTests.setUpcCstjtj�dS)N)r]r�rr)rrrrrv�szWin32ListdirTests.tearDowncCsd|jttjtj��|j�|jttjtjtj���dd�|jD��dS)z-Test when the path is not an "extended" path.cSsg|]}tj|��qSr)rr�)rrrrrr�s	zCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>N)r5�sortedrrfrrr�r�)rrrr�test_listdir_no_extended_path�s
z/Win32ListdirTests.test_listdir_no_extended_pathcCs�dtjjtj�}|jttj|��|j�dtj	tjjtj��}|jttj|��dd�|jD��dS)z&Test when the path starts with '\\?\'.z\\?\s\\?\cSsg|]}tj|��qSr)rr�)rrrrrr�s	z@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>N)
rrrrrr5r�rfr�r�)rrrrr�test_listdir_extended_path�s
"z,Win32ListdirTests.test_listdir_extended_pathN)rsrtrurNrrvr�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�Zdd�ZdS)�Win32SymlinkTestsZfilelinktestZdirlinktestzmissing linkcCsdS)Nr)rrrrr�szWin32SymlinkTests.setUpcCsstjj|j�r%tj|j�tjj|j�rJtj|j�tjj|j�rotj|j�dS)N)	rrrO�filelinkro�dirlinkr�r�missing_link)rrrrrv�szWin32SymlinkTests.tearDowncCs�tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rrl�dirlink_targetr�r rrO�isdirrv�
check_stat)rrrr�test_directory_link�s
z%Win32SymlinkTests.test_directory_linkcCs�tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rrl�filelink_targetr�r rrO�isfilervr�)rrrr�test_file_link�s
z Win32SymlinkTests.test_file_linkcCsK|j}tjj|�r(tj|�d}d}tj|||�dS)z2Create a "directory" link to a non-existent targetz"c:\\target does not exist.29r3c740TN)r�rrrrorl)rZlinknamernZ
target_is_dirrrr�_create_missing_dir_links	
z*Win32SymlinkTests._create_missing_dir_linkcCs|j�tj|j�dS)N)r�rror�)rrrr�,test_remove_directory_link_to_missing_target
s
z>Win32SymlinkTests.test_remove_directory_link_to_missing_targetz)currently fails; consider for improvementcCs*|j�|jtjj|j��dS)N)r�r rrr�r�)rrrr�.test_isdir_on_directory_link_to_missing_targets
z@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs|j�tj|j�dS)N)r�rr�r�)rrrr�.test_rmdir_on_directory_link_to_missing_targets
z@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCs�|jtj|�tj|��|jtj|�tj|��tj|�}tj��Ytjdt	�|jtj|�tj|��|jtj|�tj|��WdQRXdS)Nr�)
r5rrdr�r�r�r�r�r�r�)rr[rnZ
bytes_linkrrrr�s""
"zWin32SymlinkTests.check_statc	Cs"tjjtj�}tjj|d�}tjj|d�}z�y�tj|�tj|�tj|�tjjtjj|d��}t|d��}|jd�WdQRXtj	�}z�tj
|�tjj|d�}tjtjj|�d�|j
dtjtj	���|jtj|�tjd��tj
|�|jtj|�tjtjj|���tj
|�|jtj|�tjtjj|���Wdtj
|�XWn2tk
r�}z|j|�WYdd}~XnXWdtj|�tj|�XdS)N�level2�level3r7r_r[)rrrrrr�r�rrr^rrl�relpathr�rfr5rdr-r�ror]r�)	rZlevel1r�r�r7r#Zorig_dirr[r�rrr�
test_12084's8


!
"

 $
zWin32SymlinkTests.test_12084c$Cs8dd}tjj|gd�}d||f||f|dd�|dd�fg}x�|D]�\}}ytj||�Wntk
r�Yn'Xytj|�Wntk
r�YnXy&tjtj|�tj|��Wn#tk
r�Yqctk
r	YqcXytj|�Wqctk
r/YqcXqcWdS)N�X�r&r�)	rrr�rlrcror-r�r)rZsegmentrZ
test_casesrm�destrrr�test_buffer_overflowPs0

	#

&


z&Win32SymlinkTests.test_buffer_overflowN)rsrtrur�rrrrjr�r�r�r�r�rrvr�r�r�r�rwr�r�r�r�r�r�rrrrr��s 

)r�c@sdeZdZdZejjejje��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCsdS)Nr)rrrrr~szWin32JunctionTests.setUpcCs)tjj|j�r%tj|j�dS)N)rrrO�junctionr�)rrrrrv�szWin32JunctionTests.tearDowncCsntj|j|j�|jtjj|j��|jtjj|j��|j	tjj
|j��dS)N)�_winapi�CreateJunction�junction_targetr�r rrrOr�r�rv)rrrr�test_create_junction�sz'Win32JunctionTests.test_create_junctioncCsbtj|j|j�|jtjj|j��tj|j�|j	tjj|j��dS)N)
r�r�r�r�r rrrOrr�)rrrr�test_unlink_removes_junction�sz/Win32JunctionTests.test_unlink_removes_junctionN)rsrtrur�rrr�rrjr�rrvr�r�rrrrr�ysr�c@s4eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCstjd�dS)zM
        Create this structure:

        base
         \___ some_dir
        z
base/some_dirN)rrb)rrrrr�szNonLocalSymlinkTests.setUpcCstjd�dS)Nr�)r]r�)rrrrrv�szNonLocalSymlinkTests.tearDowncCs)tjjdd�}tjd|�dS)a�
        The symlink target should resolve relative to the link, not relative
        to the current directory.

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

        In issue13772, it was discovered that directory detection failed if
        the symlink target was not specified relative to the current
        directory, which was a defect in the implementation.
        r�Z	some_linkZsome_dirN)rrr�rl)rrmrrr�test_directory_link_nonlocal�sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)rsrtrurrvr�rrrrr��s	r�c@s(eZdZdd�Zdd�ZdS)�FSEncodingTestscCs6|jtjd�d�|jtjd�d�dS)Nsabc�uabcŁ)r5rr�r�)rrrr�test_nop�szFSEncodingTests.test_nopcCsYxRdD]J}ytj|�}Wntk
r7wYnX|jtj|�|�qWdS)N�	unicodeŁ�latiné�ascii)r�r�r�)rr�r�r5r�)rrWrXrrr�
test_identity�s

zFSEncodingTests.test_identityN)rsrtrur�r�rrrrr��sr�c@sseZdZdd�Zejejd�oZej	j
d�pZeed�oZeed�d�dd	��Z
d
S)�DeviceEncodingTestscCs|jtjd��dS)Ni@�)r�r�device_encoding)rrrr�test_bad_fd�szDeviceEncodingTests.test_bad_fdr�win�nl_langinfo�CODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)cCs6tjd�}|j|�|jtj|��dS)Nr)rr�ZassertIsNotNoner �codecs�lookup)r�encodingrrr�test_device_encoding�s
z(DeviceEncodingTests.test_device_encodingN)rsrtrur�rwrxrrr1ry�
startswithr��localer�rrrrr��s'r�c@sCeZdZejeed�d�dd��Zdd�ZdS)�PidTests�getppidztest needs os.getppidcCsVtjtjddgdtj�}|j�\}}|jt|�tj	��dS)Nz-czimport os; print(os.getppid())r�)
rRrpr1rVrqZcommunicater5r}r�getpid)rr�r��_rrr�test_getppid�s
	zPidTests.test_getppidcCsZtjddg}tjtj|d|�}tj|d�}|j||df�dS)Nz-cr�r)r1rVr�spawnv�P_NOWAIT�waitpidr5)rrSruZstatusrrr�test_waitpid�szPidTests.test_waitpidN)	rsrtrurwrxr�rr�r�rrrrr��s'	r�c@sjeZdZdd�Zejeed�d�dd��Zejeed�d�d	d
��Z	dS)�
SpawnTestsc$Cs�tjddg}tjj�}d|d<y |tj|d||�}Wntk
r_YnX|j|d�tjj�}d|d<y |tj|d||�}Wntk
r�YnX|j|d�tjj�}d	|d
<y |tj|d||�}Wntk
rYnX|j|d�tj	}|j
tj|�t|d��}|j
d�WdQRXtj|g}tjj�}d
|d<|tj|d||�}|j|d�dS)Nz-cr�r�zFRUITVEGETABLEr�zorangeVEGETABLE=cabbagerrzFRUIT=ORANGEr_zPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r1rVrr�r��P_WAITrr5rrrGrrr)rZspawnrSrZexitcoderrrrr�_test_invalid_env�s>
 

 

 
	
zSpawnTests._test_invalid_env�spawnveztest needs os.spawnvecCs|jtj�dS)N)r�rr�)rrrr�test_spawnve_invalid_env	sz#SpawnTests.test_spawnve_invalid_env�spawnvpeztest needs os.spawnvpecCs|jtj�dS)N)r�rr�)rrrr�test_spawnvpe_invalid_env	sz$SpawnTests.test_spawnvpe_invalid_envN)
rsrtrur�rwrxr�rr�r�rrrrr��s.'r�z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc@seZdZdd�ZdS)�
LoginTestscCs&tj�}|jt|�d�dS)Nr)rr�r�r)rZ	user_namerrr�
test_getlogin%	szLoginTests.test_getloginN)rsrtrur�rrrrr�"	sr��getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@s"eZdZdZdd�ZdS)�ProgramPriorityTestsz0Tests for os.getpriority() and os.setpriority().cCstjtjtj��}tjtjtj�|d�zatjtjtj��}|dkr�|dkr�tjd|��n|j||d�Wdy tjtjtj�|�Wn:tk
r�}z|j	t	j
kr��WYdd}~XnXXdS)Nr%�z?unable to reliably test setpriority at current nice level of %s)rr��PRIO_PROCESSr�r�rwr�r5r-r�ZEACCES)rr�Znew_prior�rrr�test_set_get_priority/	s  z*ProgramPriorityTests.test_set_get_priorityN)rsrtrurNr�rrrrr�*	sr�c@s�eZdZGdd�dej�Zdd�Zedd��Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZeZdd�Zdd�ZdS)�SendfileTestServerc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)zSendfileTestServer.HandlercCs6tjj||�g|_d|_|jd�dS)NFs220 ready
)�asynchat�
async_chat�__init__�	in_buffer�closed�push)r�connrrrr�G	s		z#SendfileTestServer.Handler.__init__cCs#|jd�}|jj|�dS)Ni)�recvr�rn)rrHrrr�handle_readM	sz&SendfileTestServer.Handler.handle_readcCsdj|j�S)Nr�)r�r�)rrrr�get_dataQ	sz#SendfileTestServer.Handler.get_datacCs|j�d|_dS)NT)rr�)rrrr�handle_closeT	s
z'SendfileTestServer.Handler.handle_closecCs�dS)Nr)rrrr�handle_errorX	sz'SendfileTestServer.Handler.handle_errorN)rsrtrur�r�r�r�r�rrrr�HandlerE	s
r�cCs�tjj|�tjj|�|jtjtj�|j	|�|j
d�|jj�dd�\|_|_
d|_d|_tj�|_dS)Nr�r'F)�	threading�Threadr��asyncore�
dispatcherZ
create_socket�socketZAF_INETZSOCK_STREAMZbindZlistenZgetsockname�host�port�handler_instance�_activeZLock�_active_lock)rZaddressrrrr�[	s

%		zSendfileTestServer.__init__cCs|jS)N)r�)rrrrrgh	szSendfileTestServer.runningcCs0tj�|_tjj|�|jj�dS)N)r�ZEvent�_SendfileTestServer__flagr��startrv)rrrrr�l	szSendfileTestServer.startcCsd|_|j�dS)NF)r�r�)rrrr�stopr	s	zSendfileTestServer.stopcCs7x&t|jdd�s(tjd�qW|j�dS)Nr�Fg����MbP?)r�r�r�rsr�)rrrrrvw	szSendfileTestServer.waitcCsmd|_|jj�xF|jr^tjr^|jj�tjdddd�|jj�qWtj	�dS)NTZtimeoutg����MbP?r�r%)
r�r�r�r�Z
socket_mapr��acquireZloop�releaseZ	close_all)rrrr�run	s	

zSendfileTestServer.runcCs(|j�\}}|j|�|_dS)N)Zacceptr�r�)rr�Zaddrrrr�
handle_accept�	sz SendfileTestServer.handle_acceptcCs|j�dS)N)r)rrrr�handle_connect�	sz!SendfileTestServer.handle_connectcCsdS)Nrr)rrrr�writable�	szSendfileTestServer.writablecCs�dS)Nr)rrrrr��	szSendfileTestServer.handle_errorN)rsrtrur�r�r�r��propertyrgr�r�rvr�r�r�r�r�r�rrrrr�C	s
	r�ztest needs threading module�sendfileztest needs os.sendfile()c@sDeZdZdddZejjd�oPejjd�oPejjd�Zej	ed�Z
edd	��Zed
d��Z
dd
�Zdd�Zggdd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze
dd��Ze
dd��Ze
ej	eed �d!�d"d#���Zd$S)%�TestSendfiles
12345abcder�i�linux�solaris�sunosz%requires headers and trailers supportc	Cs?tj�|_ttjd��}|j|j�WdQRXdS)NrE)rZthreading_setuprrrr�DATA)r�r#rrrr��	szTestSendfile.setUpClasscCs$tj|j�tjtj�dS)N)rZthreading_cleanuprrr)r�rrrr��	szTestSendfile.tearDownClasscCs�ttjdf�|_|jj�tj�|_|jj|jj|jj	f�|jj
d�|jjd�|jj�|_
ttjd�|_|jj�|_dS)Nrr%irF)r�rZHOST�serverr�r��clientZconnectr�r�Z
settimeoutr�r;�socknorrr9)rrrrr�	s
"zTestSendfile.setUpcCs@|jj�|jj�|jjr3|jj�d|_dS)N)r9rrrrgr�)rrrrrv�	s



zTestSendfile.tearDowncCs�x�y?|jr+tj||||||�Stj||||�SWqtk
r�}zA|jtjkro�n$|jtjtjfkr�wn�WYdd}~XqXqWdS)zfA higher level wrapper representing how an application is
        supposed to use sendfile().
        N)�SUPPORT_HEADERS_TRAILERSrr�r-r�Z
ECONNRESET�EAGAIN�EBUSY)rZsockr9�offset�nbytes�headers�trailersr�rrr�sendfile_wrapper�	s	zTestSendfile.sendfile_wrappercCsd}d}d}x{|t|j�kr�|j|j|j||�}|dkrUP||7}||7}|j||k�|j||�qW|j|t|j��|jjt	j
�|jj�|jj
�|jjj�}|jt|�t|j��|j||j�dS)Nri)rrrrr;r r5r�shutdownr��	SHUT_RDWRrrrvr�r�)r�
total_sentrr�sentrHrrr�test_send_whole_file�	s$



z!TestSendfile.test_send_whole_filecCs<d}t|j�d}t|j�|}d}xb||kr�|j|j|j||�}|dkrlP||7}||7}|j||k�q5W|jjtj	�|jj
�|jj�|jj
j�}|jt|j�dd�}|j|t|��|jt|�t|��|j||�dS)Nrr'i)rrrrr;r rrr�rrrrvr�r�r5)rrrZ	must_sendrrrHr�rrr�test_send_at_certain_offset�	s&



 z(TestSendfile.test_send_at_certain_offsetcCs�t|j�d}y"tj|j|j|d�}Wn:tk
rq}z|jtjkr_�WYdd}~XnX|j	|d�|j
jtj
�|j
j�|jj�|jjj�}|j	|d�dS)Nirr�)rrrr�rr;r-r��EINVALr5rrr�rrrrvr�r�)rrrr�rHrrr�test_offset_overflow
s"

z!TestSendfile.test_offset_overflowcCsR|jt��#}tj|j|jdd�WdQRX|j|jjtj	�dS)Nr%ir�)
r,r-rr�rr;r5r�r�r)rrFrrr�test_invalid_offset
s#z TestSendfile.test_invalid_offsetc
Csltjd|jddddd|ji�|jrhtj|j|jdddddfdfd	d�dS)
Nr�rrr�i�inr
rrg)rr�rr;r)rrrr�
test_keywords
s
	!zTestSendfile.test_keywordscCsd}tj|j|jdddddg�}||7}d}d}xC|j|j|j||�}|dkruP||7}||7}qJWdd|j}|j|t|��|jj	�|j
j�|j
jj
�}|jt|�t|��dS)Nrir
r�i)rr�rr;rrr5rrrrrvr�r��hash)rrrrrZ
expected_datarHrrr�test_headers"
s&



zTestSendfile.test_headerscCs�tjd}d}t|d��}|j|�WdQRXt|d���}|jtj|�tj|j|j	�dt
|�ddg�|jj�|j
j�|j
jj�}|j|d�WdQRXdS)	NrasabcdefrErFrrs1234s
abcdef1234)rrrrrGrror�rr;rrrrrvr�r�r5)rreZ	file_datar#rHrrr�
test_trailers9
s
$


zTestSendfile.test_trailers�SF_NODISKIOztest needs os.SF_NODISKIOcCssy)tj|j|jdddtj�WnCtk
rn}z#|jtjtjfkr\�WYdd}~XnXdS)Nrirg)	rr�rr;rr-r�r
r	)rr�rrr�
test_flagsH
szTestSendfile.test_flagsN)rsrtrurr1ryr�rrwrxZrequires_headers_trailersr�r�r�rrvrrrrrrrrr�rrrrrrr�	s*		
rcCs�ttd�sdSzVttjd��=}ytj|j�dd�Wntk
r`dSYnXWdQRXWdtjtj�Xt	j
�}tjd|�}|dkp�t
|jd��dkS)	N�setxattrFrEs	user.testr�z
2.6.(\d{1,2})r%�')r�rrrrr r;r-rryr��re�matchr}�group)rZkernel_versionr�rrr�supports_extended_attributesT
s
r%z(no non-broken extended attribute supportc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ExtendedAttributeTestscCstjtj�dS)N)rrr)rrrrrvi
szExtendedAttributeTests.tearDownc
"Ks�tj}t|d�j�|jt��}|||d�|�WdQRX|j|jjtj	�||�}	|j
|	t�|||d�d|�t|	�}
|
j
d�|jt||��|
�|j||d|�d�|||d�dtj|�|j||d|�d�|jt��&}|||d�dtj|�WdQRX|j|jjtj�|jt��&}|||d�dtj|�WdQRX|j|jjtj	�|||d�dtj|�|
j
d�|jt||��|
�|||d�|�|jt��}|||d�|�WdQRX|j|jjtj	�|
jd�|jt||��|
�|j|||d�|�d�|||d�d	d
|�|j|||d�|�d	d
�|||d�|�tdd�td
�D��}x!|D]}|||d|�q7W|jt||��t|	�t|�B�dS)NrEz	user.testr�s	user.testshellosbyez
user.test2sfoor(icss|]}dj|�VqdS)zuser.test{}N)r.)rr�rrrr/�
sz;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>r]r�)rrrrr,r-r5r�r�ZENODATA�assertIsInstancerir�r\r�
XATTR_REPLACE�XATTR_CREATEZEEXISTror�r�)
rrB�getxattrr �removexattr�	listxattrrUrWrFZ
init_xattrZxattrZmany�thingrrr�_check_xattrs_strl
sJ	
&&

"&
z(ExtendedAttributeTests._check_xattrs_strcOsFdd�}|jt||�tjtj�|j|||�dS)NcSs
t|d�S)Nr�)r?)rBrrr�
make_bytes�
sz8ExtendedAttributeTests._check_xattrs.<locals>.make_bytes)r.r)rrr)rrSrUr/rrr�
_check_xattrs�
sz$ExtendedAttributeTests._check_xattrscCs&|jtjtjtjtj�dS)N)r0rr*r r+r,)rrrr�test_simple�
sz"ExtendedAttributeTests.test_simplecCs,|jtjtjtjtjdd�dS)Nr�F)r0rr*r r+r,)rrrr�
test_lpath�
sz!ExtendedAttributeTests.test_lpathcCsJdd�}dd�}dd�}dd�}|j||||�dS)	Nc
Ws3t|d��}tj|j�|�SWdQRXdS)NrF)rrr*r;)rrSrrrrr*�
sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc
Ws3t|d��}tj|j�|�WdQRXdS)NrE)rrr r;)rrSrrrrr �
sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc
Ws3t|d��}tj|j�|�WdQRXdS)NrE)rrr+r;)rrSrrrrr+�
sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc
Ws3t|d��}tj|j�|�SWdQRXdS)NrF)rrr,r;)rrSrrrrr,�
sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)r0)rr*r r+r,rrr�test_fds�
s
zExtendedAttributeTests.test_fdsN)	rsrtrurvr.r0r1r2r3rrrrr&e
s'r&c@s1eZdZdd�Zejdd��ZdS)�Win32DeprecatedBytesAPIcCsNddl}tjtj�}tj��tjdt�x|j	|f|j
|ftj|tjftj
|ftj|dftjftj||ftj|ftj|ftj|ftj|tjftj||ftj|ftj|ftj|ftj|ftj|ffD]^}}|jt||�q WWdQRXdS)Nr�errori�)r�rr�rrr�r�r�r�Z_getfullpathnameZ_isdirr!�R_OKrre�getcwdbr[rfr�r�rrYr4r�Z	startfilerdrr�r,)rr�r�funcrSrrr�test_deprecated�
s.
	z'Win32DeprecatedBytesAPI.test_deprecatedcCsStjtj�}tj��.tjdt�|jttj	||�WdQRXdS)Nr5)
rr�rrr�r�r�r�r,rl)rrrrr�test_symlink�
s

	z$Win32DeprecatedBytesAPI.test_symlinkN)rsrtrur9r�skip_unless_symlinkr:rrrrr4�
sr4�get_terminal_sizezrequires os.get_terminal_sizec@s(eZdZdd�Zdd�ZdS)�
TermsizeTestscCs�ytj�}Wn_tk
rq}z?tjdksO|jtjtjfkr\|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.
        rUzfailed to query terminal sizeNr)rr<r-r1ryr�r�ENOTTYr*ZassertGreaterEqual�columns�lines)rrDr�rrr�test_does_not_crash�
s*
z!TermsizeTests.test_does_not_crashcCsy%tjddg�j�j�}Wn(ttjfk
rO|jd�YnXt|d�t|d�f}ytj	t
jj��}Wn_t
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.
        ZsttyrDzstty invocation failedr%rrUzfailed to query terminal sizeN)rRZcheck_outputr>r�rcZCalledProcessErrorr*r}rr<r1�	__stdin__r;r-ryr�rr>r5)rrDr�Zactualr�rrr�test_stty_match�
s% *
zTermsizeTests.test_stty_matchN)rsrtrurArCrrrrr=�
sr=c@s(eZdZdd�Zdd�ZdS)�OSErrorTestscCs�Gdd�dt�}g|_g|_tjdk	rCtj}n	tj}|jj|�|jj||��tjdk	r�tj}ntj	tj�}|jj|�|jjt
|��|j|j|_dS)Nc@seZdZdS)zOSErrorTests.setUp.<locals>.StrN)rsrtrurrrr�StrsrE)r)�bytes_filenames�unicode_filenamesrrZrrnZTESTFN_UNDECODABLErr�rM�	filenames)rrEZdecodedZencodedrrrrs			zOSErrorTests.setUpcCs|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	�r�|j|jtjdf�ttd
�r|j|jtjdf�ttd�r3|j|jtjf�ttd�r�t
jdkr�|j|j
tjdf�|j|jtjdf�n|j|jtjdf�ttd
�r|j|jtjf|jtjdf|jtjddf|jtjdff�ttd�r7|j|jtjdf�ttd�r�t
jdkrq|j|jtj f�n|j|jtj f�x�|D]�^}}}xp|D]h}y|||�Wn8t!k
r�}z|j"|j#|�WYdd}~Xq�X|j$dj%|��q�Wq�WdS)Ni�rUsdstror�r�lchownr%�chflags�lchflags�chrootr[r,z	user.testsuser�lchmod�readlinkzNo exception thrown by {})&rHrrrer�rrYr�rdrr1ryr�rFr4rbrGrfr�rnr�rIr%rJrKrLr[r,r*r r+rMrNr-rDrr�r.)rZfuncsrHr8Z	func_argsr�r�rrr�test_oserror_filenamesl

&z"OSErrorTests.test_oserror_filenameN)rsrtrurrOrrrrrDsrDc@seZdZdd�ZdS)�
CPUCountTestscCsLtj�}|dk	r;|j|t�|j|d�n
|jd�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countr'r}�
assertGreaterr*)rZcpusrrr�test_cpu_countes
zCPUCountTests.test_cpu_countN)rsrtrurSrrrrrPdsrPc@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)�FDInheritanceTestscCsntjttj�}|jtj|�|jtj|�d�tj|d�|jtj|�d�dS)NFT)	rrrjrYrGrr5r/r0)rrArrr�test_get_set_inheritableos
z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlcCs�tjttj�}|jtj|�|jtj|�d�tj|tj	�}|tj
M}tj|tj|�|jtj|�d�dS)NFT)rrrjrYrGrr5r/�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)rrArgrrr�test_get_inheritable_cloexecwsz/FDInheritanceTests.test_get_inheritable_cloexeccCs�tjttj�}|jtj|�|jtj|tj�tj	@tj	�tj
|d�|jtj|tj�tj	@d�dS)NTr)rrrjrYrGrr5rVrWrXr0)rrArrr�test_set_inheritable_cloexec�s
z/FDInheritanceTests.test_set_inheritable_cloexeccCsEtjttj�}|jtj|�|jtj|�d�dS)NF)rrrjrYrGrr5r/)rrArrrra�szFDInheritanceTests.test_openr�zneed os.pipe()cCsntj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr�rGrr5r/)rZrfdZwfdrrr�	test_pipe�s
zFDInheritanceTests.test_pipecCsgtjttj�}|jtj|�tj|�}|jtj|�|jtj|�d�dS)NF)	rrrjrYrGrr)r5r/)rZfd1�fd2rrr�test_dup�s
zFDInheritanceTests.test_duprzneed os.dup2()cCs�tjttj�}|jtj|�tjttj�}z-tj||�|jtj|�d�Wdtj|�Xtjttj�}z3tj||dd�|jtj|�d�Wdtj|�XdS)NTZinheritableF)	rrrjrYrGrrr5r/)rrAr\Zfd3rrrr�szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsntj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr^rGrr5r/)rZ	master_fdZslave_fdrrr�test_openpty�s
zFDInheritanceTests.test_openpty)rsrtrurUrwrrVrYrZrarxr�rr[r]rr_rrrrrTns$
$''rTr2z-needs os.get_blocking() and os.set_blocking()c@seZdZdd�ZdS)�
BlockingTestscCs�tjttj�}|jtj|�|jtj|�d�tj|d�|jtj|�d�tj|d�|jtj|�d�dS)NTF)	rrrjrYrGrr5r2r3)rrArrrr4�szBlockingTests.test_blockingN)rsrtrur4rrrrr`�sr`c@seZdZdd�ZdS)�ExportsTestscCs*|jdtj�|jdtj�dS)NrrS)r�r�__all__)rrrr�test_os_all�szExportsTests.test_os_allN)rsrtrurcrrrrra�srac@s�eZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&S)'�TestScandircCsBtjjtj�|_|jtj|j�tj|j�dS)N)rr�realpathrrrGr�r�)rrrrr�szTestScandir.setUpzfile.txtc	CsBtjj|j|�}t|d��}|jd�WdQRX|S)NrEspython)rrr�rr)rr�rrrrrr�szTestScandir.create_filecCsEtdd�tj|j�D��}|jt|j��|�|S)Ncss|]}|j|fVqdS)N)r�)r�entryrrrr/�sz*TestScandir.get_entries.<locals>.<genexpr>)rr�scandirrr5r��keys)r�names�entriesrrr�get_entries�szTestScandir.get_entriescCs�|roxvt|�D]U}|jd�s+q|dkr:q|jt||�t||�|||f�qWn|j||�dS)NZst_�st_dev�st_ino�st_nlink)rlrmrn)r�r�r5r�)rZstat1Zstat2Zskip_fieldsr�rrr�assert_stat_equal�szTestScandir.assert_stat_equalcCs�|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|jdd�tj	|j
��|j|jdd�tj|j
��|j|j�|tjdkok|�|j|jdd�|tjdk�dS)Nr�Fr�)r5r�rrr��inoderdrm�is_dirr�r��is_file�S_ISREG�
is_symlinkrvro)rrfr�rqrrrtZ
entry_statZentry_lstatrrr�check_entry�s,%zTestScandir.check_entrycCs�ttd�}tj�}tjj|jd�}tj|�|jd�}|rwtj|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	�|rw|d}|j
|dd	dd	�|r�|d}|j
|ddd	d�|d}|j
|dd	dd�dS)Nr[r�zfile.txtz
link_file.txt�symlink_dirrpT�symlink_file.txtF)rvrw)r�rrrcrr�r�rr[rlrnr�rkru)rr[rlr�rrirjrfrrr�test_attributess:
"!"






zTestScandir.test_attributescCsOttj|j��}|jt|�d�|d}|j|j|�|S)Nr%r)rirrgrr5rr�)rr�rjrfrrr�	get_entry8s

zTestScandir.get_entrycCs%|j�}|jtjj|��S)N)rryrr�basename)rrrrr�create_file_entry@szTestScandir.create_file_entrycCs�|j�}tj�}z^tj|j�tdd�tj�D��}|jt|j	��tjj
|�g�Wdtj|�XdS)Ncss|]}|j|fVqdS)N)r�)rrfrrrr/Lsz5TestScandir.test_current_directory.<locals>.<genexpr>)rrr^rrrrgr5r�rhrz)rrZold_dirrjrrr�test_current_directoryDsz"TestScandir.test_current_directorycCs&|j�}|jt|�d�dS)Nz<DirEntry 'file.txt'>)r{r5r0)rrfrrr�	test_reprRszTestScandir.test_reprcCstjj|jd�}tj|�|jd�}tj|�tjdkrc|j|j��|j	|j
��|j	|j��tjdkr�|jt
|j�|j�|jdd�nB|j|j�d�|jt
|j�|jt
|jdd�dS)Nr�r�r�Fr)rrr�r�ryr�r�r rqr�rrrtr,rcrprdrR)rrrfrrr�test_removed_dirVs


zTestScandir.test_removed_dircCs�|j�}tj|j�|j|j��tjdkrQ|j|j��|j|j	��tjdkr�|j
t|j�|j
�|j
dd�nB|j|j�d�|j
t|j
�|j
t|j
dd�dS)Nr�r�Fr)r{rrrr�rqr�r rrrtr,rcrprdrR)rrfrrr�test_removed_filels
zTestScandir.test_removed_filecCstj�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.txtrr�F)rrcr*rrrlrr�rkrrRrpr�rqrrr rtr,rcrd)rrrjrfrrr�test_broken_symlinks 
	

zTestScandir.test_broken_symlinkcCs�tjdkr)|jttjd�dS|jd�tj|j�}ttj|��}|j	t
|�d|�|d}|j	|jd�|j	|jtjtjj|jd���dS)Nr��.zfile.txtr%rsfile.txt)rr�r,r3rgrr�rrir5rr�)r�
path_bytesrjrfrrr�
test_bytes�s

zTestScandir.test_bytescCs1tjdkrFx0ttfD]"}|jttj|d��qWdS|jd�x�ttfD]�}|tj|j	��}t
tj|��}|jt|�d|�|d}|j|jd�|j|j	tjtj	j
|j	d���|jt|j�t�|jt|j	�t�q`WdS)Nr�r�zfile.txtr%rsfile.txt)rr�rLrMr,r3rgrr�rrir5rr�rDr>r?)rr�r�rjrfrrr�test_bytes_like�s 

"zTestScandir.test_bytes_likecCs|jttjd�dS)Nr)r,rcrrg)rrrr�test_empty_path�szTestScandir.test_empty_pathcCsm|jd�tj|j�}t|�}|jt|�d|�t|�}|jt|�d|�dS)Nzfile.txtr%r)rrrgrrir5r)rrHrjZentries2rrr�test_consume_iterator_twice�s
z'TestScandir.test_consume_iterator_twicecCs7x0ddiggD]}|jttj|�qWdS)Ni�gX9��v��?)r,r3rrg)r�objrrr�test_bad_path_type�szTestScandir.test_bad_path_typeN)rsrtrurrrkrorurxryr{r|r}r~rr�r�r�r�r�r�rrrrrd�s$
&rd�__main__)rr�r�r�r�r�r�r�rr�r�rrr�ryr"r]rzr�rdrRr1�	sysconfigr�rwr~r�r:rr��ImportErrorr�rVr�ZgrpZgetgrallr�r�r	Zprocess_gidrn�pwdZgetpwallr�Z	_testcapirr�maxsizeZtest.support.script_helperr
r�rr�versionr�rrJrZTestCaserrzr�rZBasicTestMappingProtocolrrPrxrr�r�r�r�r�r��get_config_varZOS_URANDOM_DONT_USE_FDrr��contextmanagerr�r�rrr6rCrVrer�r;r�r�r�r�r�r�r�r�r�r�r�r�r�rr%r&r4r=rDrPrTr`rardrs�mainrrrr�<module>s"






$�����%OS%5+	!	H V%d%%?%G%s%-�%:%!T%�K%$%+a
T�