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-2.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�)�getpassZgetuser�gr_mem�gr_gid)�.0�grr�,/opt/alt/python35/lib64/python3.5/test_os.py�
<listcomp>2s	r
�getgidcCsg|]}|j�qSr)�pw_uid)r�urrr	r
;s	)�INT_MAX�PY_SSIZE_T_MAX)�assert_python_okF�geteuid�thread_infoZlinuxthreadsZfreebsdscontentc	Cs-t|dd��}|j|�WdQRXdS)N�xbr)�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)
rrrrr!r"�dupr#�skipTest�
closerange�assertRaises�OSErrorr)r�first�secondZretriesrrr	�test_closerangefs


zFileTests.test_closerangecCsTtj}tj|�}|jttj|d�tj|�}|j||�dS)Nr)	rr�sys�getrefcountr0�	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�readr9�type�bytes)r�fobj�fd�srrr	�	test_read�s

zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAX�sizer*Zmemuser)�dry_runFcCs�ttjd��}|jd�WdQRX|jtjtj�ttjd��}tj|j�|�}WdQRX|j	|d�dS)N�wbstest�rb)
rrrr�
addCleanuprrrAr?r9)rrHr�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
rKsbaconseggssspam)rrrrr!�O_WRONLYr0r7r�	bytearray�
memoryviewr#r9rA�
splitlines)rrErDrrr	�
test_write�s
zFileTests.test_writecGs2tj|dtjdd�}|j|d�dS)N�
creationflags�shellTr)�
subprocess�callZCREATE_NEW_CONSOLEr9)r�args�retcoderrr	�write_windows_console�s		zFileTests.write_windows_console�win32z$test specific to the Windows consolecCs9d}|jtjd|�|jtjdd|�dS)Nzprint('x' * 100000)z-cz-u)r[r5�
executable)r�coderrr	�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs8tjtjtj�}tj||�}|j�dS)N)rrrr�O_RDONLY�fdopenr#)rrYrEr'rrr	�
fdopen_helper�szFileTests.fdopen_helpercCsWtjtjtjtjB�}tj|�|j�|jd�|jdd�dS)N�r�d)rrrrr!r"r#rb)rrErrr	�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�2rc)
rrrrrLrr�replacer0�FileNotFoundError�statr9rA)r�TESTFN2r'rrr	�test_replace�s
zFileTests.test_replacec	Cs8tjdtdtjdddd�}tj|�dS)Nr�flags�modei��dir_fd)rr�__file__r`r#)rr'rrr	�test_open_keywords�s	zFileTests.test_open_keywordscCsWtjtd�}y&|dddtjdddd�Wnttfk
rRYnXdS)N�symlink�src�target�dst�target_is_directoryFrp)rZ
get_attributerr�NotImplementedErrorr1)rrsrrr	�test_symlink_keywords�szFileTests.test_symlink_keywordsN)�__name__�
__module__�__qualname__r �tearDownr(r4rZcpython_onlyr<rG�unittest�
skipUnlessrrZ
bigmemtestrNrTr[r5�platformr_rbrermrrryrrrr	r[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�fnamerLrr)rrrr	r �szStatAttributeTests.setUprkztest 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�rrr	r��szst_atime st_mtime st_ctimei��Z_nsi'�deltar+��zNo exception raisedr)r*rr=�����	���
�)r*)rr)r+r�r=r�r�r�r�r�r*r�r�r�r�)rrkr9�ST_SIZE�st_size�dir�lower�endswith�getattr�assertIn�splitr��assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevr7�parrot�stat_result)
rr��result�members�name�attrr�ZfloatyZnanosecondy�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��encoder5�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_resultr=scos
stat_result
)
rrkr��range�pickle�HIGHEST_PROTOCOL�dumpsr��loadsr9)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+r=r�r�r�r�r�r�r�r�r�)
r�r�r�r�r�r�r�r�r�r�)r*)rr)r+r�r=r�r�r�r�r�r*r�r�r�r�)rr�r�r1�errno�ENOSYSr.r9�f_bfree�	enumerater�r�r�r��statvfs_resultr7)rr��er��value�memberr�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_resultr=scos
statvfs_result
)rr�r�r1r�r�r.r�r�r�r�r�r�r9)rr�r�r�r�r�rrr	�test_statvfs_result_picklers z-StatAttributeTests.test_statvfs_result_pickler\zWin32 specific testscCshytjd�WnPtk
r2|jd�Yn2tk
rc}z|jd�WYdd}~XnXdS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rrkrjr.r1r�)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�rkr#r0r1r9�	exceptionr��EBADF)rrcrf�ctxrrr	�
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�)rrkr�r�r9r��FILE_ATTRIBUTE_DIRECTORYrr�mkdirrL�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)	N�TEMPsABCr�z
icacls.exez/denyz*S-1-5-32-545:(S)rUr)rr�join�environr�rLrrrrW�
check_callrk�assertNotEqualr�)rr�ZDETACHED_PROCESSr�rrr	�test_access_denied�s
z%StatAttributeTests.test_access_deniedN)rzr{r|r r~rr�rr�r�r�r�r�r�r5r�r�r�r�r�r�rrrr	r��s'B	
','
*
r�c@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�f1rJsABCc
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�rL�rmtreer�rrr�r�r�r�r�)rrr�Zold_float_timesrrr	r �s
zUtimeTests.setUpcCsFtj|�}|j|dkpE|j|dkpE|j|dkS)Nr�r�r�)rrk�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�rrkr�r�r�r9�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�rrr	r�
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)rrr	r�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�)rrr	r�%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�rrr	r�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)NrJr�)rrr�r?)rr�rrrr	r�: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)Nrpr�)rrr�rr`r�r#)rr�r�r��dirfdrrr	r�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�rrr	r�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�rrkr�r�)rr��currentr�r�rrrr	�_test_utime_currentTs
	zUtimeTests._test_utime_currentcs#�fdd�}�j|�dS)Ncstj�j�dS)N)rr�r�)r)rrr	r�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)rrr	r�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)Nr\r�\�rd)
r5r�rr�
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)	rr�r.rr�r�r9rkr�)rZlargerrr	�test_large_times

zUtimeTests.test_large_timec
Cs4|jt��tj|jddd�WdQRXdS)Nr�r�)r�r�)r�r�)r0�
ValueErrorrr�r�)rrrr	�test_utime_invalid_arguments�sz'UtimeTests.test_utime_invalid_arguments)rzr{r|r r�r�r��staticmethodr�r�r�r~rrr��supports_follow_symlinksr�supports_fdr�supports_dir_fdrrr	r
rrrrrrrr	r��s(			

r�)�
mapping_testsc@sTeZdZdZdd�Zdd�Zdd�Zdd	�Zej	e
jjd
�d�dd
��Z
ej	e
jjd
�d�dd��Zdd�Zdd�Zdd�Zdd�Zej	e
jd�dd��Zejd�ejdd�dd���Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�ZdS)*�EnvironTestsNcCsattj�|_tjr-ttj�|_x-|j�j�D]\}}|tj|<q@WdS)N)	�dictrr��_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items)r�keyr�rrr	r �s
	zEnvironTests.setUpcCsMtjj�tjj|j�tjrItjj�tjj|j�dS)N)rr��clear�updater"r#r$r%)rrrr	r}�s

	
zEnvironTests.tearDowncCsddddddiS)NZKEY1ZVALUE1ZKEY2ZVALUE2ZKEY3ZVALUE3r)rrrr	r&�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�r)r*�popenrA�stripr9)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,�iterr9�nextr0�
StopIteration)rr,�itrrr	�test_os_popen_iter�szEnvironTests.test_os_popen_itercCsPxItjj�D]8\}}|jt|�t�|jt|�t�qWdS)N)rr�r'r9rB�str)rr(�valrrr	�test_keyvalue_types�sz EnvironTests.test_keyvalue_typescCsCx<|j�j�D](\}}|jtjj|�|�qWdS)N)r&r'r9rr��get)rr(r�rrr	�
test_items�szEnvironTests.test_itemscCsHtj}|jt|�djdjdd�|j�D����dS)Nzenviron({{{}}})z, css'|]\}}dj||�VqdS)z
{!r}: {!r}N)�format)rr(r�rrr	�	<genexpr>�sz-EnvironTests.test___repr__.<locals>.<genexpr>)rr�r9�reprr9r�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/pythonr
z/flying/circus�PATHr<�recordTrgsPATH�2sabc�abc)r
)r�defpathr��pathsepr�r�r!�assertSequenceEqual�
get_exec_pathr#r�r��BytesWarningr0r)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 %s�unicodesunicodes�sbytesrC)
r�r5r�r�r.rr�r9r$�decode)rr�Zvalue_bytesrZ	value_strrrr	�
test_environb�s 



zEnvironTests.test_environbr�r*r�cCsXtjdkr5dd}|jttjj|�nd}|jttjj|�dS)Nr\r�iP�zkey=)r5r�r0rrr��__delitem__r1)rr(rrr	�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�r0�KeyError�assertIsr�rYr$�__suppress_context__)r�missing�cmrrr	�
test_key_typeszEnvironTests.test_key_typecCs`t|�}d}t|�dtj|<z%t|�|jtj|d�Wdtj|=XdS)NZ__new_key__Ztest_environ_iteration)r/r0rr�r9)rZ
collection�iteratorZnew_keyrrr	�_test_environ_iteration,s


z$EnvironTests._test_environ_iterationcCs|jtj�dS)N)rVrr�)rrrr	�(test_iter_error_when_changing_os_environ;sz5EnvironTests.test_iter_error_when_changing_os_environcCs|jtjj��dS)N)rVrr�r')rrrr	�.test_iter_error_when_changing_os_environ_items>sz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|jtjj��dS)N)rVrr��values)rrrr	�/test_iter_error_when_changing_os_environ_valuesAsz<EnvironTests.test_iter_error_when_changing_os_environ_values)rzr{r|Z	type2testr r}r&r+r~rrr�existsr.r3r6r8r=rGr#rKrZrequires_freebsd_versionZrequires_mac_verrMrTrVrWrXrZrrrr	r �s(**)!r c@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�	WalkTestscKs/d|kr|jd�|d<tj||�S)Nr�followlinks)�popr�walk)r�top�kwargsrrr	r_Js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.
�brokenTZtmp5rr))rrr�rr�	walk_path�	sub1_path�
sub11_path�
sub21_path�	link_path�makedirsrr�can_symlinkrsr�	sub2_tree�chmod�listdir�PermissionErrorrk�S_IRWXUrr�)rr�Z	sub2_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZ	tmp5_pathZt2_pathZ	tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathrr'rrr	r OsT

 	

	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)Nr=rr)rbr�r+rdrercrfr�)	�listr_rjr9r�sortrkrlrq)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)Nrbr+rrdrer)r�)r_rj�append�remover9rrwrq)rrxr�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�topdownFr=r�r)rrbr+rdrercrfr�)	rvr_rjr9rrwrlrkrq)rrxryrrr	�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 supportrTrhz+Didn't follow symlink with followlinks=True)rrpr.r_rjrnr9r�)r�walk_itrr}r�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)NrF)
rmrrrrkrur_rrr|rr��islinkr�)rrr}r�r�r�rrr	r}�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�onerrorrbz.newcSsg|]\}}}|�qSrr)rrc�dr'rrr	r
�s	z/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)r_rjr{r0r9rrr�r8r$rNr�)r�errorsr�rr}r��dir1Zpath1Zpath1new�roots�dir2rrr	�test_walk_bad_dir�s"

'zWalkTests.test_walk_bad_dirN)rzr{r|r_r rzr~r�r�r}r�rrrr	r\EsEr\�fwalkzTest needs os.fwalk()c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�
FwalkTestscks;x4tj||�D] \}}}}|||fVqWdS)N)rr�)rr`rarr}r�Zroot_fdrrr	r_s%zFwalkTests.walkc
Cs|j�}|j�}x�tjddd�D]�\}}|jd|d|�|jd|d|�i}x<tj|�D]+\}}}t|�t|�f||<q|WxYtj|�D]H\}}}}	|j||�|j	||t|�t|�f�q�Wq.WdS)	NTF�repeatr+rr]r)TF)
�copy�	itertools�productr*rr_�setr�r�r9)
r�walk_kwargs�fwalk_kwargsrr�expectedrr}r��rootfdrrr	�_compare_to_walk
s" "zFwalkTests._compare_to_walkcCs#dtji}|j||�dS)Nr`)rrr�)rrarrr	�test_compare_to_walkszFwalkTests.test_compare_to_walkcCsczNtjdtj�}dtji}|j�}||d<|j||�Wdtj|�XdS)N�.r`rp)rrr`rrr�r�r#)rrEr�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��fstatrkr9r�rs)rrrrYrr}r�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-r#r�r�rrrLr9)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)NrFrpr)rmrrrrkrur�rrr�S_ISDIRr�r�)rrr}r�r�r�r�rrr	r}Cs	+

zFwalkTests.tearDownN)
rzr{r|r_r�r�r�r�r�r}rrrr	r�s

r�cs@eZdZ�fdd�Z�fdd�Zdd�Z�S)�BytesWalkTestscsUt�j�tj�|_tjdkrQ|jjtj	��tj
dt�dS)N�ntr�)�superr �
contextlib�	ExitStack�stackrr��
enter_contextr�r�r�r�)r)�	__class__rr	r Ts

zBytesWalkTests.setUpcs|jj�t�j�dS)N)r�r#r�r})r)r�rr	r}[s
zBytesWalkTests.tearDownc	ks�d|kr|jd�|d<x�tjtj|�|�D]�\}}}tj|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q;WdS)Nrr])r^rr_�fsencode�fsdecoderv�map)	rr`raZbrootZbdirsZbfilesrr}r�rrr	r__s+"zBytesWalkTests.walk)rzr{r|r r}r_rr)r�r	r�Rsr�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�MakedirTestscCstjtj�dS)N)rr�rr)rrrr	r lszMakedirTests.setUpc	Cs�tj}tjj|ddd�}tj|�tjj|dddd�}tj|�|jttjtj�tjj|dddddtj�}tj|�tjj|dtjddddd�}tj|�dS)Nr�r��dir3�dir4�dir5�dir6)	rrrrr�ror0r1�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)
Nr�i���exist_okFi�Tro�/)
rrr�rr�umaskror0r1r)rrro�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)Nr�i�r�zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.r�T)rrr�rrrk�S_ISGIDr��S_IMODE�lstatr�rrrtr~�SkipTestro)rrr�ror�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)Nr�rfrAr�FT)rrrrr�rrr#r0r1ror|)rr�rr'rrr	�#test_exist_ok_existing_regular_file�s	

z0MakedirTests.test_exist_ok_existing_regular_filecCsstjjtjdddddd�}x8tjj|�ra|tjkratjj|�}q*Wtj|�dS)Nr�r�r�r�r�r�)rrr�rrr[r��
removedirs)rrrrr	r}�s
%zMakedirTests.tearDownN)	rzr{r|r r�r�r�r�r}rrrr	r�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�)rrkrr�st_uid�st_gid�decimalZDecimal�	fractionsZFractionr0r7r��assertIsNone)rrk�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+)	�groupsrrkrrr�r�r�r9)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_usersrrkrrr�r�r�r9)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�rrkrrr�r0rtr�)rr�r�r�rrr	�test_chown_without_permission�s
z,ChownFileTests.test_chown_without_permissioncCstjtj�dS)N)rr�rr)r�rrr	�
tearDownClass�szChownFileTests.tearDownClassN)rzr{r|�classmethodr�r�r~rrr�r��
root_in_posixr�r�r�r�rrrr	r��s
*r�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCstjtj�dS)N)rrorr)rrrr	r �szRemoveDirsTests.setUpcCstjtj�dS)N)rr�r)rrrr	r}�szRemoveDirsTests.tearDowncCs�tjjtjd�}tj|�tjj|d�}tj|�tj|�|jtjj|��|jtjj|��|jtjjtj��dS)N�dira�dirb)	rrr�rrr�r��assertFalser[)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.txtrf�text)rrr�rrr�rrr�r�r[r$)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.txtrfr�)
rrr�rrr�rrr0r1r�r$r[)rr�r�r'rrr	�test_remove_nothings

!z#RemoveDirsTests.test_remove_nothingN)rzr{r|r r}r�r�r�rrrr	r��s

r�c@seZdZdd�ZdS)�DevNullTestscCsittjd��}|jd�|j�WdQRXttjd��}|j|j�d�WdQRXdS)NrJshellorK�)rr�devnullrr#r9rA)rr'rrr	�test_devnull s

zDevNullTests.test_devnullN)rzr{r|r�rrrr	r�sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCs�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�|jttjd��d�dS)Nrr)r*rdi�)r9rr�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�rr9r)r�countr^�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)rzr{r|r�r�r�r�rrrr	r�(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)rr^rrr	�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)rr^�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)
NrJ�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�rr=)rrrrrLrrr9rr9rr�)rr'r^r�r�r�Zout2Zerr2rrr	�test_urandom_fd_reopenedus$z'URandomFDTests.test_urandom_fd_reopenedN)	rzr{r|r~r�resourcer�r�r�rrrr	r�Msr�c#s�g��fdd�}�fdd�}zKtj}tj}tj}|t_|t_|dk	ro|t_�VWd|t_|t_|t_XdS)Ncs&�jd||f�td��dS)N�execvzexecv called)r{�RuntimeError)r�rY)�callsrr	�
mock_execv�sz#_execvpe_mockup.<locals>.mock_execvcs,�jd||f�ttjd��dS)N�execvez
execve called)r{r1r��ENOTDIR)r�rY)r�rr	�mock_execve�sz$_execvpe_mockup.<locals>.mock_execve)rr�r�rB)rBr�rZ
orig_execvZorig_execveZorig_defpathr)r�r	�_execvpe_mockup�s										rc@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-)r0r1r�execvpe)rrrr	�test_execvpe_with_bad_program�sz'ExecTests.test_execvpe_with_bad_programcCs |jttjdgd�dS)NZnotepad)r0rrr)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
executablesprognameZarg1Zarg2r]Zprognamer�ZspamrOr)rr�rBr<r�sPATHr>)r�seprCrr�r�r�rr0r�rr9rr1rDr�)
rZ	test_typeZprogram_pathZprogramZfullpathZnative_fullpathZ	argumentsr<r�Zenv_pathrrr	�_test_internal_execvpe�sD
	'	


	
z ExecTests._test_internal_execvpecCs-|jt�tjdkr)|jt�dS)Nr�)r	r4rr�rC)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)r5r]rr�r�r0rr�)rrY�newenvrrr	�test_execve_invalid_env�s


z!ExecTests.test_execve_invalid_envN)rzr{r|r~�skipIf�USING_LINUXTHREADSrrrr�rr	r
rrrrr	r�s	0rr\zWin32 specific testsc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�Win32ErrorTestscCs'|jttjtjtjd�dS)Nz.bak)r0r1rr8rr)rrrr	r<szWin32ErrorTests.test_renamecCs|jttjtj�dS)N)r0r1rr|rr)rrrr	�test_removeszWin32ErrorTests.test_removecCs|jttjtj�dS)N)r0r1r�chdirrr)rrrr	�
test_chdirszWin32ErrorTests.test_chdircCsQttjd�}z|jttjtj�Wd|j�tjtj�XdS)Nrf)	rrrr0r1rr�r#r)rr'rrr	�
test_mkdirs

zWin32ErrorTests.test_mkdircCs |jttjtjd�dS)N)r0r1rr�rr)rrrr	r�!szWin32ErrorTests.test_utimecCs |jttjtjd�dS)Nr)r0r1rrrrr)rrrr	�
test_chmod$szWin32ErrorTests.test_chmodN)	rzr{r|r<rrrr�rrrrr	rs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-ra�	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'r!r)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_fdr1r9r�r�r�)rr'rYr�rrr	r 4s)	zTestInvalidFD.check�isattyztest needs os.isatty()cCs#|jtjtj��d�dS)NF)r9rr$rr#)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))
rr#r�rr�r1r~r�r9r/)rrEr�rrr	r4As
	zTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|jtjd�dS)N�)r rr&)rrrr	�	test_dup2QszTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|jtjd�dS)Nr)r rr))rrrr	�test_fchmodUszTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|jtjdd�dS)Nr)r�r�)r rr+)rrrr	�test_fchownYszTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs*|jtjd�|jtjd�dS)N�PC_NAME_MAX)r r�pathconfr-)rrrr	�test_fpathconf]szTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs*|jtjd�|jtjd�dS)Nr)r r�truncater1)rrrr	�test_ftruncatebszTestInvalidFD.test_ftruncater@ztest needs os.lseek()cCs|jtjdd�dS)Nr)r rr@)rrrr	�
test_lseekgszTestInvalidFD.test_lseekrAztest needs os.read()cCs|jtjd�dS)Nr))r rrA)rrrr	rGkszTestInvalidFD.test_read�readvztest needs os.readv()cCs&td�}|jtj|g�dS)Nr*)rQr rr5)rrrrr	�
test_readvoszTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|jtjd�dS)Nr)r rr7)rrrr	�test_tcsetpgrpttszTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs|jtjd�dS)N� )r rr)rrrr	rTxszTestInvalidFD.test_write�writevztest needs os.writev()cCs|jtjdg�dS)Nsabc)r rr:)rrrr	�test_writev|szTestInvalidFD.test_writevcCs'|jtj�|jtjd�dS)NT)r r�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)r rr?�set_blocking)rrrr	�
test_blocking�szTestInvalidFD.test_blockingN)rzr{r|Zsinglesr"r'�localsr r~rr�rr%r4r(r*r,r0r3r4rGr6r8rTr;r>rArrrr	r's,
	'''''''''''''rc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs,tj|_tjjtjd�|_dS)Nrh)rr�file1rrr��file2)rrrr	r �szLinkTests.setUpcCs@x9|j|jfD]%}tjj|�rtj|�qWdS)N)rDrErrr[r)r�filerrr	r}�szLinkTests.tearDownc Cs�t|d��}|jd�WdQRXtj��%tjdt�tj||�WdQRXt|d��H}t|d��/}|jtj	j
|j�|j���WdQRXWdQRXdS)Nrf�testr�rc)rrr�r�r�r�rrgr$r�sameopenfiler?)rrDrEr��f2rrr	�
_test_link�s
$zLinkTests._test_linkcCs|j|j|j�dS)N)rJrDrE)rrrr	�	test_link�szLinkTests.test_linkcCs8|jt|jtj��t|jtj���dS)N)rJrCrDr5r�rE)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.rh)rr��UnicodeErrorr~r�rDrErJ)rrrr	�test_unicode_name�s
zLinkTests.test_unicode_nameN)	rzr{r|r r}rJrKrLrOrrrr	rC�s
rCzPosix 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�getuidr0r1rQr7�
OverflowError)rrrr	�test_setuid�szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCs_tj�dkr/tr/|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr)rRl)rrS�HAVE_WHEEL_GROUPr0r1rVr7rT)rrrr	�test_setgid�szPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCsXtj�dkr(|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr)rRl)rrSr0r1rYr7rT)rrrr	�test_seteuid�szPosixUidGidTests.test_seteuid�setegidztest needs os.setegid()cCs_tj�dkr/tr/|jttjd�|jttjd�|jttjd�dS)Nrz
not an intr)rRl)rrSrWr0r1r[r7rT)rrrr	�test_setegid�szPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCs�tj�dkr+|jttjdd�|jttjdd�|jttjdd�|jttjdd�|jttjdd�dS)Nrz
not an intr)rRll)rrSr0r1r]r7rT)rrrr	�
test_setreuid�szPosixUidGidTests.test_setreuidcCstjtjddg�dS)Nz-cz,import os,sys;os.setreuid(-1,-1);sys.exit(0))rWr�r5r])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)rRll)rrSrWr0r1r`r7rT)rrrr	�
test_setregid�szPosixUidGidTests.test_setregidcCstjtjddg�dS)Nz-cz,import os,sys;os.setregid(-1,-1);sys.exit(0))rWr�r5r])rrrr	�test_setregid_neg1�s	z#PosixUidGidTests.test_setregid_neg1N)rzr{r|r~rr�rrUrXrZr\r^r_rarbrrrr	rP�s'''''	''	rPc@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�r{)�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�)rrfrdr)rer	r �s6		
	
	


zPep383Tests.setUpcCstj|j�dS)N)rjr�r�)rrrr	r}szPep383Tests.tearDowncCs�|j}ttj|j��}|j||�tj�}zBtjtj�|jttj��ttjtj���Wdtj|�XdS)N)	rhr�rrsr�r9�getcwdrr)rr��foundZcurrent_directoryrrr	�test_listdirs	2zPep383Tests.test_listdircCsCx<|jD]1}ttjj|j|�d�}|j�q
WdS)NrK)rhrrrr�r�r#)rrdr'rrr	�	test_open&s!zPep383Tests.test_openr�zneed os.statvfs()cCs=x6|jD]+}tjj|j|�}tj|�q
WdS)N)rhrrr�r�r�)rrd�fullnamerrr	�test_statvfs+szPep383Tests.test_statvfscCs7x0|jD]%}tjtjj|j|��q
WdS)N)rhrrkrr�r�)rrdrrr	�	test_stat4szPep383Tests.test_statN)
rzr{r|r r}rmrnr~rr�rrprqrrrr	rc�s%rcc@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�stdinrdzPeekNamedPipe failedg�������?r)z1Did not receive communication from the subprocess)rrd))rrs�msvcrtrr�
PeekNamedPipe�BOOL�restypeZHANDLE�POINTERZc_charZDWORD�argtypesrW�Popenr5r]r9�PIPErLr�r#rurv�pollZcreate_string_bufferrZ
get_osfhandler?Zsizeofr�r�r9rJr�sleepr�r�kill�pid�wait)r�sigrrsrwrxr�procr��maxrZrsltrrr	�_kill:sF		!	

zWin32KillTests._killcCs|jtj�dS)N)r��signal�SIGTERM)rrrr	�test_kill_sigtermpsz Win32KillTests.test_kill_sigtermcCs|jd�dS)Nrd)r�)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.pyrUrdg�������?z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {}r�)rrd)�uuidZuuid1�mmaprWr}r5r]rrr�r�rqZCREATE_NEW_PROCESS_GROUPrrr�r�r�r��SIGINTr�r9)r�eventr�Ztagname�mr�r�r�rrr	�_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)rs�CTRL_C_EVENT)
rrsr{Zc_intrr�SetConsoleCtrlHandlerryr|rzr�r�r�)rrsrZNULLr�rrr	�test_CTRL_C_EVENT�s
z Win32KillTests.test_CTRL_C_EVENTcCs|jtjd�dS)N�CTRL_BREAK_EVENT)r�r�r�)rrrr	�test_CTRL_BREAK_EVENT�sz$Win32KillTests.test_CTRL_BREAK_EVENTN)rzr{r|r�r�r�r�r~�skipr�r�rrrr	rr8s6rrc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�Win32ListdirTestscCs�g|_x�td�D]�}d|}tjjtj|�}d|}tjjtj|�}tj|�t|d��}|j	d|�WdQRX|jj
||g�qW|jj�dS)Nr+zSUB%dzFILE%drfz'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rrr�rrrorr�extendrw)rr�Zdir_nameZdir_path�	file_nameZ	file_pathr'rrr	r �s	


zWin32ListdirTests.setUpcCstjtj�dS)N)rjr�rr)rrrr	r}�szWin32ListdirTests.tearDowncCsd|jttjtj��|j�|jttjtjtj���dd�|jD��dS)NcSsg|]}tj|��qSr)rr�)rrrrr	r
�s	zCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>)r9�sortedrrsrrr�r�)rrrr	�test_listdir_no_extended_path�s
z/Win32ListdirTests.test_listdir_no_extended_pathcCs�dtjjtj�}|jttj|��|j�dtj	tjjtj��}|jttj|��dd�|jD��dS)Nz\\?\s\\?\cSsg|]}tj|��qSr)rr�)rrrrr	r
�s	z@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>)
rrrrrr9r�rsr�r�)rrrrr	�test_listdir_extended_path�s
"z,Win32ListdirTests.test_listdir_extended_pathN)rzr{r|r r}r�r�rrrr	r��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)rrrr	r �szWin32SymlinkTests.setUpcCsstjj|j�r%tj|j�tjj|j�rJtj|j�tjj|j�rotj|j�dS)N)	rrr[�filelinkr|�dirlinkr�r�missing_link)rrrr	r}�szWin32SymlinkTests.tearDowncCs�tj|j|j�|jtjj|j��|jtjj|j��|jtjj|j��|j	|j|j�dS)N)
rrs�dirlink_targetr�r$rr[�isdirr��
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)
rrs�filelink_targetr�r$rr[�isfiler�r�)rrrr	�test_file_link�s
z Win32SymlinkTests.test_file_linkcCsK|j}tjj|�r(tj|�d}d}tj|||�dS)Nz"c:\\target does not exist.29r3c740T)r�rrrr|rs)rZlinknameruZ
target_is_dirrrr	�_create_missing_dir_links	
z*Win32SymlinkTests._create_missing_dir_linkcCs|j�tj|j�dS)N)r�rr|r�)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�)
r9rrkr�r�r�r�r�r�r�)rrgruZ
bytes_linkrrr	r�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�level3rDrfrg)rrrrrr�r�rrrkrrs�relpathr�rsr9rkr1r�r|rjr�)	rZlevel1r�r�rDr'Zorig_dirrgr�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�rsrjr|r1r�r)rZsegmentrZ
test_casesrt�destrrr	�test_buffer_overflowPs0

	#

&


z&Win32SymlinkTests.test_buffer_overflowN)rzr{r|r�rrrrqr�r�r�r�r�r r}r�r�r�r�r~r�r�r�r�r�r�rrrr	r��s 

)r�c@sdeZdZdZejjejje��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCsdS)Nr)rrrr	r ~szWin32JunctionTests.setUpcCs)tjj|j�r%tj|j�dS)N)rrr[�junctionr�)rrrr	r}�szWin32JunctionTests.tearDowncCsntj|j|j�|jtjj|j��|jtjj|j��|j	tjj
|j��dS)N)�_winapi�CreateJunction�junction_targetr�r$rrr[r�r�r�)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$rrr[rr�)rrrr	�test_unlink_removes_junction�sz/Win32JunctionTests.test_unlink_removes_junctionN)rzr{r|r�rrr�rrqr�r r}r�r�rrrr	r�ysr�c@s4eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCstjd�dS)Nz
base/some_dir)rro)rrrr	r �szNonLocalSymlinkTests.setUpcCstjd�dS)Nr�)rjr�)rrrr	r}�szNonLocalSymlinkTests.tearDowncCs)tjjdd�}tjd|�dS)Nr�Z	some_linkZsome_dir)rrr�rs)rrtrrr	�test_directory_link_nonlocal�sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)rzr{r|r r}r�rrrr	r��s	r�c@s(eZdZdd�Zdd�ZdS)�FSEncodingTestscCs6|jtjd�d�|jtjd�d�dS)Nsabc�uabcŁ)r9rr�r�)rrrr	�test_nop�szFSEncodingTests.test_nopcCsYxRdD]J}ytj|�}Wntk
r7wYnX|jtj|�|�qWdS)N�	unicodeŁ�latiné�ascii)r�r�r�)rr�r�r9r�)rrdrerrr	�
test_identity�s

zFSEncodingTests.test_identityN)rzr{r|r�r�rrrr	r��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)rzr{r|r�r~rrr$r5r��
startswithr��localer�rrrr	r��s'r�c@sCeZdZejeed�d�dd��Zdd�ZdS)�PidTests�getppidztest needs os.getppidcCsVtjtjddgdtj�}|j�\}}|jt|�tj	��dS)Nz-czimport os; print(os.getppid())r�)
rWr}r5r]r~�communicater9r�r�getpid)rr�r��_rrr	�test_getppid�s
	zPidTests.test_getppidcCsZtjddg}tjtj|d|�}tj|d�}|j||df�dS)Nz-crr)r5r]r�spawnv�P_NOWAIT�waitpidr9)rrYr��statusrrr	�test_waitpid�szPidTests.test_waitpidN)	rzr{r|r~rr�rr�r�rrrr	r��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-crrzFRUITVEGETABLEr�zorangeVEGETABLE=cabbager
rzFRUIT=ORANGErfzPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r5r]rr�r��P_WAITrr9rrrLrrr)r�spawnrYr�exitcoderrrrr	�_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)
rzr{r|r�r~rr�rr�r�rrrr	r��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)rzr{r|r�rrrr	r�"	sr��getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdd�ZdS)�ProgramPriorityTestscCstjtjtj��}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�r~r�r9r1r�ZEACCES)rr�Znew_prior�rrr	�test_set_get_priority/	s  z*ProgramPriorityTests.test_set_get_priorityN)rzr{r|r�rrrr	r�*	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�connrrr	r�G	s		z#SendfileTestServer.Handler.__init__cCs#|jd�}|jj|�dS)Ni)�recvr�r{)rrMrrr	�handle_readM	sz&SendfileTestServer.Handler.handle_readcCsdj|j�S)Nr�)r�r�)rrrr	�get_dataQ	sz#SendfileTestServer.Handler.get_datacCs|j�d|_dS)NT)r#r�)rrrr	�handle_closeT	s
z'SendfileTestServer.Handler.handle_closecCs�dS)Nr)rrrr	�handle_errorX	sz'SendfileTestServer.Handler.handle_errorN)rzr{r|r�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�socket�AF_INET�SOCK_STREAM�bind�listen�getsockname�host�port�handler_instance�_active�Lock�_active_lock)r�addressrrr	r�[	s

%		zSendfileTestServer.__init__cCs|jS)N)r)rrrr	rth	szSendfileTestServer.runningcCs0tj�|_tjj|�|jj�dS)N)r��Event�_SendfileTestServer__flagr��startr�)rrrr	rl	szSendfileTestServer.startcCsd|_|j�dS)NF)rr�)rrrr	�stopr	s	zSendfileTestServer.stopcCs7x&t|jdd�s(tjd�qW|j�dS)Nr�Fg����MbP?)r�r
rr�r)rrrr	r�w	szSendfileTestServer.waitcCsmd|_|jj�xF|jr^tjr^|jj�tjdddd�|jj�qWtj	�dS)NT�timeoutg����MbP?r�r))
rrr�rZ
socket_mapr
�acquireZloop�releaseZ	close_all)rrrr	�run	s	

zSendfileTestServer.runcCs(|j�\}}|j|�|_dS)N)�acceptr�r
)rr��addrrrr	�
handle_accept�	sz SendfileTestServer.handle_acceptcCs|j�dS)N)r#)rrrr	�handle_connect�	sz!SendfileTestServer.handle_connectcCsdS)Nrr)rrrr	�writable�	szSendfileTestServer.writablecCs�dS)Nr)rrrr	r��	szSendfileTestServer.handle_errorN)rzr{r|r�r�r�r��propertyrtrrr�rrrr�rr�rrrr	r�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)NrJ)rZthreading_setupr(rrr�DATA)r�r'rrr	r��	szTestSendfile.setUpClasscCs$tj|j�tjtj�dS)N)rZthreading_cleanupr(rr)r�rrr	r��	szTestSendfile.tearDownClasscCs�ttjdf�|_|jj�tj�|_|jj|jj|jj	f�|jj
d�|jjd�|jj�|_
ttjd�|_|jj�|_dS)Nrr)irK)r�rZHOST�serverrr�client�connectrr	�
settimeoutr�r?�socknorrrF)rrrr	r �	s
"zTestSendfile.setUpcCs@|jj�|jj�|jjr3|jj�d|_dS)N)rFr#r$r#rtr)rrrr	r}�	s



zTestSendfile.tearDowncCs�x�y?|jr+tj||||||�Stj||||�SWqtk
r�}zA|jtjkro�n$|jtjtjfkr�wn�WYdd}~XqXqWdS)N)�SUPPORT_HEADERS_TRAILERSrrr1r�Z
ECONNRESET�EAGAIN�EBUSY)r�sockrF�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)rr"r0r'r?r$r9r$�shutdownr�	SHUT_RDWRr#r#r�r
r�)r�
total_sentr,r-�sentrMrrr	�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)rr"r0r'r?r$r$r1rr2r#r#r�r
r�r9)rr3r,Z	must_sendr-r4rMr�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�)rr"rrr'r?r1r��EINVALr9r$r1rr2r#r#r�r
r�)rr,r4r�rMrrr	�test_offset_overflow
s"

z!TestSendfile.test_offset_overflowcCsR|jt��#}tj|j|jdd�WdQRX|j|jjtj	�dS)Nr)ir�)
r0r1rrr'r?r9r�r�r7)rrSrrr	�test_invalid_offset
s#z TestSendfile.test_invalid_offsetc
Csltjd|jddddd|ji�|jrhtj|j|jdddddfdfd	d�dS)
Nr�r,rr�i�inr.r/rn)rrr'r?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)rrr'r?r0r"r9rr$r#r#r�r
r��hash)rr3r4r,r-Z
expected_datarMrrr	�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)	NrhsabcdefrJrKrr/s1234s
abcdef1234)rrrrrLrr|rr'r?rr$r#r#r�r
r�r9)rrlZ	file_datar'rMrrr	�
test_trailers9
s
$


zTestSendfile.test_trailers�SF_NODISKIOztest needs os.SF_NODISKIOcCssy)tj|j|jdddtj�WnCtk
rn}z#|jtjtjfkr\�WYdd}~XnXdS)Nrirn)	rrr'r?r?r1r�r*r))rr�rrr	�
test_flagsH
szTestSendfile.test_flagsN)rzr{r|r"r5r�r�r(r~rZrequires_headers_trailersr�r�r�r r}r0r5r6r8r9r;r=r>r�rr@rrrr	r�	s*		
rcCs�ttd�sdSzVttjd��=}ytj|j�dd�Wntk
r`dSYnXWdQRXWdtjtj�Xt	j
�}tjd|�}|dkp�t
|jd��dkS)	N�setxattrFrJs	user.testr�z
2.6.(\d{1,2})r)�')r�rrrrrAr?r1rr�r�re�matchr��group)rZkernel_versionr�rrr	�supports_extended_attributesT
s
rFz(no non-broken extended attribute supportc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ExtendedAttributeTestscCstjtj�dS)N)rrr)rrrr	r}i
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)NrJz	user.testr�s	user.testshellosbyez
user.test2sfoor,icss|]}dj|�VqdS)zuser.test{}N)r9)rr�rrr	r:�
sz;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>rdr�)rrrr#r0r1r9r�r��ENODATA�assertIsInstancervr�rir�
XATTR_REPLACE�XATTR_CREATE�EEXISTr|r�r�)
rrF�getxattrrA�removexattr�	listxattrrardrSZ
init_xattrZxattrZmany�thingrrr	�_check_xattrs_strl
sJ	
&&

"&
z(ExtendedAttributeTests._check_xattrs_strcOsFdd�}|jt||�tjtj�|j|||�dS)NcSs
t|d�S)Nr�)rC)rFrrr	�
make_bytes�
sz8ExtendedAttributeTests._check_xattrs.<locals>.make_bytes)rQr4rrr)rrYrarRrrr	�
_check_xattrs�
sz$ExtendedAttributeTests._check_xattrscCs&|jtjtjtjtj�dS)N)rSrrMrArNrO)rrrr	�test_simple�
sz"ExtendedAttributeTests.test_simplecCs,|jtjtjtjtjdd�dS)NrF)rSrrMrArNrO)rrrr	�
test_lpath�
sz!ExtendedAttributeTests.test_lpathcCsJdd�}dd�}dd�}dd�}|j||||�dS)	Nc
Ws3t|d��}tj|j�|�SWdQRXdS)NrK)rrrMr?)rrYrrrr	rM�
sz1ExtendedAttributeTests.test_fds.<locals>.getxattrc
Ws3t|d��}tj|j�|�WdQRXdS)NrJ)rrrAr?)rrYrrrr	rA�
sz1ExtendedAttributeTests.test_fds.<locals>.setxattrc
Ws3t|d��}tj|j�|�WdQRXdS)NrJ)rrrNr?)rrYrrrr	rN�
sz4ExtendedAttributeTests.test_fds.<locals>.removexattrc
Ws3t|d��}tj|j�|�SWdQRXdS)NrK)rrrOr?)rrYrrrr	rO�
sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)rS)rrMrArNrOrrr	�test_fds�
s
zExtendedAttributeTests.test_fdsN)	rzr{r|r}rQrSrTrUrVrrrr	rGe
s'rGc@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_OKrrr�getcwdbrgrsr�r�rr`r8r�Z	startfilerkrr�r0)rr�r�funcrYrrr	�test_deprecated�
s.
	z'Win32DeprecatedBytesAPI.test_deprecatedcCsStjtj�}tj��.tjdt�|jttj	||�WdQRXdS)NrX)
rr�rrr�r�r�r�r0rs)rrrrr	�test_symlink�
s

	z$Win32DeprecatedBytesAPI.test_symlinkN)rzr{r|r\r�skip_unless_symlinkr]rrrr	rW�
srW�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)Nr\zfailed to query terminal sizer)rr_r1r5r�r�r7�ENOTTYr.ZassertGreaterEqual�columns�lines)rrHr�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)NZsttyrHzstty invocation failedr)rr\zfailed to query terminal size)rW�check_outputrJr�rj�CalledProcessErrorr.r�rr_r5�	__stdin__r?r1r�r�r7rar9)rrHr��actualr�rrr	�test_stty_match�
s% *
zTermsizeTests.test_stty_matchN)rzr{r|rdrirrrr	r`�
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)rzr{r|rrrr	�Strsrk)r4�bytes_filenames�unicode_filenamesrrgrr{ZTESTFN_UNDECODABLErr�rR�	filenames)rrkZdecoded�encodedrrr	r s			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�r\sdstrvr�r�lchownr2�chflags�lchflags�chrootrgrOz	user.testsuser�lchmod�readlinkzNo exception thrown by {})&rnrrrrr�rr`r�rkrr5r�r�rlr8rirmrsr�r{r�rpr2rqrrrsrgrOrMrArNrtrur1rPrr�r9)rZfuncsrnr[Z	func_argsr�r�rrr	�test_oserror_filenamesl

&z"OSErrorTests.test_oserror_filenameN)rzr{r|r rvrrrr	rjsrjc@seZdZdd�ZdS)�
CPUCountTestscCsLtj�}|dk	r;|j|t�|j|d�n
|jd�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countrIr��
assertGreaterr.)rZcpusrrr	�test_cpu_countes
zCPUCountTests.test_cpu_countN)rzr{r|rzrrrr	rwdsrwc@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)	rrrqr`rLr#r9r<r=)rrErrr	�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)rrrqr`rLr#r9r<�fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)rrErnrrr	�test_get_inheritable_cloexecwsz/FDInheritanceTests.test_get_inheritable_cloexeccCs�tjttj�}|jtj|�|jtj|tj�tj	@tj	�tj
|d�|jtj|tj�tj	@d�dS)NTr)rrrqr`rLr#r9r}r~rr=)rrErrr	�test_set_inheritable_cloexec�s
z/FDInheritanceTests.test_set_inheritable_cloexeccCsEtjttj�}|jtj|�|jtj|�d�dS)NF)rrrqr`rLr#r9r<)rrErrr	rn�szFDInheritanceTests.test_openr�zneed os.pipe()cCsntj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr�rLr#r9r<)rZrfdZwfdrrr	�	test_pipe�s
zFDInheritanceTests.test_pipecCsgtjttj�}|jtj|�tj|�}|jtj|�|jtj|�d�dS)NF)	rrrqr`rLr#r-r9r<)r�fd1�fd2rrr	�test_dup�s
zFDInheritanceTests.test_dupr&zneed os.dup2()cCs�tjttj�}|jtj|�tjttj�}z-tj||�|jtj|�d�Wdtj|�Xtjttj�}z3tj||dd�|jtj|�d�Wdtj|�XdS)NT�inheritableF)	rrrqr`rLr#r&r9r<)rrEr�Zfd3rrr	r(�szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsntj�\}}|jtj|�|jtj|�|jtj|�d�|jtj|�d�dS)NF)rr�rLr#r9r<)rZ	master_fdZslave_fdrrr	�test_openpty�s
zFDInheritanceTests.test_openpty)rzr{r|r|r~rr}r�r�rnrr�rr�r�r(r�rrrr	r{ns$
$''r{r?z-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)	rrrqr`rLr#r9r?r@)rrErrr	rA�szBlockingTests.test_blockingN)rzr{r|rArrrr	r��sr�c@seZdZdd�ZdS)�ExportsTestscCs*|jdtj�|jdtj�dS)Nrr_)r�r�__all__)rrrr	�test_os_all�szExportsTests.test_os_allN)rzr{r|r�rrrr	r��sr�c@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�realpathrrrLr�r�)rrrr	r �szTestScandir.setUpzfile.txtc	CsBtjj|j|�}t|d��}|jd�WdQRX|S)NrJspython)rrr�rr)rr�rrrrr	r�szTestScandir.create_filecCsEtdd�tj|j�D��}|jt|j��|�|S)Ncss|]}|j|fVqdS)N)r�)r�entryrrr	r:�sz*TestScandir.get_entries.<locals>.<genexpr>)r!r�scandirrr9r��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)r�r�r�)r�r�r9r�)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)NrFr�)r9r�rrr��inoderkr��is_dirr�r��is_file�S_ISREG�
is_symlinkr�r�)rr�r�r�r�r�Z
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)Nrgr�zfile.txtz
link_file.txt�symlink_dirrwT�symlink_file.txtF)r�r�)r�rrrprr�r�rrgrsr{r�r�r�)rrgrsr�rr�r�r�rrr	�test_attributess:
"!"






zTestScandir.test_attributescCsOttj|j��}|jt|�d�|d}|j|j|�|S)Nr)r)rvrr�rr9rr�)rr�r�r�rrr	�	get_entry8s

zTestScandir.get_entrycCs%|j�}|jtjj|��S)N)rr�rr�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�)rr�rrr	r:Lsz5TestScandir.test_current_directory.<locals>.<genexpr>)rrrkrrr!r�r9r�r�r�)rrZold_dirr�rrr	�test_current_directoryDsz"TestScandir.test_current_directorycCs&|j�}|jt|�d�dS)Nz<DirEntry 'file.txt'>)r�r9r;)rr�rrr	�	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�rFr)rrr�r�r�r�r�r$r�r�r�r�r0rjr�rkry)rrr�rrr	�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�rFr)r�rrrr�r�r�r$r�r�r0rjr�rkry)rr�rrr	�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.txtrrF)rrpr.rrrsrr�r�rryr�r�r�r�r$r�r0rjrk)rrr�r�rrr	�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�r0r7r�rr�rrvr9rr�)r�
path_bytesr�r�rrr	�
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�rQrRr0r7r�rr�rrvr9rr�rPrBrC)rr�r�r�r�rrr	�test_bytes_like�s 

"zTestScandir.test_bytes_likecCs|jttjd�dS)Nr
)r0rjrr�)rrrr	�test_empty_path�szTestScandir.test_empty_pathcCsm|jd�tj|j�}t|�}|jt|�d|�t|�}|jt|�d|�dS)Nzfile.txtr)r)rrr�rrvr9r)rrUr�Zentries2rrr	�test_consume_iterator_twice�s
z'TestScandir.test_consume_iterator_twicecCs7x0ddiggD]}|jttj|�qWdS)Ni�gX9��v��?)r0r7rr�)r�objrrr	�test_bad_path_type�szTestScandir.test_bad_path_typeN)rzr{r|r rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	r��s$
&r��__main__)rr�rr�r�r�r�r�rr�r�r�rr�r�rCrjr�rrkrWr5�	sysconfigrr~r�r�rGrr��ImportErrorr�r}r��grp�getgrallr�r�rZprocess_gidr{�pwd�getpwallr�Z	_testcapirr�maxsizeZtest.support.script_helperrr�rr�versionr�rrWrZTestCaserr�r�rZBasicTestMappingProtocolr r\rr�r�r�r�r�r�r��get_config_varZOS_URANDOM_DONT_USE_FDrr��contextmanagerrrrrrCrPrcrrr�r^r�r�r�r�r�r�r�r�r�r�rr�r�rrFrGrWr`rjrwr{r�r�r�rz�mainrrrr	�<module>s"






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