Your IP : 216.73.216.213


Current Path : /opt/alt/python39/lib64/python3.9/test/__pycache__/
Upload File :
Current File : //opt/alt/python39/lib64/python3.9/test/__pycache__/test_os.cpython-39.opt-2.pyc

a

XC?h�}�	@sdddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddl m!Z!zddl"Z"Wne#�y(dZ"Yn0zddl$Z$Wne#�yNdZ$Yn0zddl%Z%Wne#�ytdZ%Yn0zddl&Z&dd�e&�'�D�Z(Wne#e)f�y�gZ(Yn0zddl*m+Z+m,Z,Wne#�y�ej-Z+Z,Yn0ddl.m/Z/dd	lm0Z0m1Z1d
Z2e3ed��re�4�dkZ2e3ed��rDej5j6�rDej5j6�7d
�Z8nd
Z8ej �7d��o`e�9�dkZ:dd�Z;d�dd�Z<Gdd�dej=�Z>Gdd�dej=�Z?Gdd�dej=�Z@Gdd�dej=�ZAddlmBZBGdd�deBjC�ZDGdd �d ej=�ZEe�Fe3ed!�d"�Gd#d$�d$eE��ZGGd%d&�d&eE�ZHe�Fe3ed!�d"�Gd'd(�d(eG��ZIGd)d*�d*ej=�ZJe�Fe3ed+�d,�Gd-d.�d.ej=��ZKGd/d0�d0ej=�ZLGd1d2�d2ej=�ZMGd3d4�d4ej=�ZNe�Fe3ed5�d6�Gd7d8�d8ej=��ZOe�Pd9�d:k�p�e�Pd;�d:k�p�e�Pd<�d:kZQe�ReQd=�e�Rej d>kd?�Gd@dA�dAej=���ZSejTd�dBdC��ZUe�Fe3edD�dE�GdFdG�dGej=��ZVe�Fej dHkdI�GdJdK�dKej=��ZWGdLdM�dMej=�ZXGdNdO�dOej=�ZYe�Rej dHkdP�GdQdR�dRej=��ZZe�Rej dHkdP�GdSdT�dTej=��Z[e�Fej dHkdI�GdUdV�dVej=��Z\e�Fej dHkdI�GdWdX�dXej=��Z]e�Fe3edY�dZ�Gd[d\�d\ej=��Z^e�Fej dHkdI�ej_Gd]d^�d^ej=���Z`e�Fej dHkdI�Gd_d`�d`ej=��Zae�Fej dHkdI�Gdadb�dbej=��Zbej_Gdcdd�ddej=��ZcGdedf�dfej=�ZdGdgdh�dhej=�ZeGdidj�djej=�ZfGdkdl�dlej=�Zge�hdm�e�Fe3edn�do�Gdpdq�dqej=���Zie�Fe3edr��ove3eds�dt�Gdudv�dvej=��ZjGdwdx�dxejkejl�Zme�Fe3edy�dz�Gd{d|�d|ej=��Znd}d~�Zoe�Feo�d�e�pd�d�d��Gd�d��d�ej=���Zqe�Fe3ed��d��Gd�d��d�ej=��Zre�Fe3ed��d��e�pd�d��Gd�d��d�ej=���ZsGd�d��d�ej=�ZtGd�d��d�ej=�ZuGd�d��d�ej=�ZvGd�d��d�ej=�Zwe�Fe3ed��d��Gd�d��d�ej=��ZxGd�d��d�ej=�ZyGd�d��d�ej=�ZzGd�d��d�ej=�Z{Gd�d��d�ej=�Z|Gd�d��d�ej=�Z}e;d��Gd�d��d�ej=��Z~e3ed���rNGd�d��d�e|�Ze�d�k�r`e���dS)��N)�support)�
socket_helper)�win32_is_iotcCsg|]
}|j�qS�)Zpw_uid)�.0�urr�1/opt/alt/python39/lib64/python3.9/test/test_os.py�
<listcomp>3�r	)�INT_MAX�PY_SSIZE_T_MAX��assert_python_ok)�
unix_shell�FakePathF�geteuid�thread_infoZlinuxthreadsZfreebsdcCst�tt|�d|�S)Nzrequires os.%s)�unittest�
skipUnless�hasattr�os��namerrr�requires_os_funcPsr�contentcCs:t|dd��}|�|�Wd�n1s,0YdS)N�xbr)�open�write)�filenameZcontent�fprrr�create_fileTsr c@s$eZdZdd�Zdd�Zdd�ZdS)�	MiscTestscCst��}|�|t�dS�N)r�getcwd�assertIsInstance�str��self�cwdrrr�test_getcwdZszMiscTests.test_getcwdc
Cs~d}d}d}|d|t|�}t����>}t�|���}|}t��}|�||�|t|�ttjj	�}|dkrv�q t|�|kr�|dkr�|d|�}tj�
||�}zt�|�t�|�Wn\t
y�Y�q YnFt�y}	z,|	jtjk�rWYd}	~	�q n�WYd}	~	n
d}	~	00|}q>tj�r:tdt|����Wd�n1�sP0YWd�n1�sp0YdS)Ni���Zpython_test_dir_�arz!Tested current directory length: )�len�tempfileZTemporaryDirectoryrZ
change_cwdrr#�assertEqual�path�sep�join�mkdir�chdir�FileNotFoundError�OSError�errnoZENAMETOOLONG�verbose�print)
r'Zmin_lenZdirlen�dirnameZtmpdirr/�expectedr(Zneed�excrrr�test_getcwd_long_path^s6

zMiscTests.test_getcwd_long_pathcCs.t��}|�|t�|�t�|�t���dSr")r�getcwdbr$�bytesr.�fsdecoder#r&rrr�test_getcwdb�szMiscTests.test_getcwdbN)�__name__�
__module__�__qualname__r)r<r@rrrrr!Ys5r!c@seZdZdd�ZeZdd�Zdd�Zejdd��Z	d	d
�Z
eje�e
ekd�eje
dd
dd�dd����Zdd�Zdd�Ze�ejdkd�dd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�eed$�d%�d&d'��Ze�eed$�d%�d(d)��Ze�eed$�d%�d*d+��Zd,S)-�	FileTestscCstj�tj�rt�tj�dSr")rr/�lexistsr�TESTFN�unlink�r'rrr�setUp�szFileTests.setUpcCs:t�tjtjtjB�}t�|�|�t�tjtj	��dSr")
rrrrF�O_CREAT�O_RDWR�close�
assertTrue�access�W_OK�r'�frrr�test_access�s
zFileTests.test_accessc	Cs�t�tjtjtjB�}t�|�}zTd}||dkrht�|�|d7}|dkrV|�d�|t�|�}}q&Wt�|�nt�|�0t�	||d�|�
ttj|d�dS)Nr��
z%couldn't allocate two consecutive fds��a)
rrrrFrJrK�duprL�skipTest�
closerange�assertRaisesr5r)r'�first�secondZretriesrrr�test_closerange�s


zFileTests.test_closerangecCs<tj}t�|�}|�ttj|d�t�|�}|�||�dS�Nr)	rrF�sys�getrefcountrZ�	TypeErrorr�renamer.)r'r/�old�newrrr�test_rename�s


zFileTests.test_renamecCs�ttjd��`}|�d�|��|��}t�|dd�t�|d�}|�	t
|�t�|�	|d�Wd�n1sr0YdS)N�w+b�spamr�)rrrFr�flush�filenor�lseek�readr.�typer>)r'�fobj�fd�srrr�	test_read�s
zFileTests.test_readzneeds INT_MAX < PY_SSIZE_T_MAXrTrSF)�sizeZmemuseZdry_runcCsh|�tjtj�ttjd�ttjd�� }t�|��|�}Wd�n1sN0Y|�	|d�dS)Nstest�rb)
�
addCleanuprrGrFr rrrlrjr.)r'rrr�datarrr�test_large_read�s
.zFileTests.test_large_readcCs�t�tjtjtjB�}|�ttj|d�t�|d�t�|t	d��t�|t
d��t�|�ttjd��(}|�|�
���gd��Wd�n1s�0YdS)N�beanssbacon
seggs
sspam
rs)sbaconseggsrg)rrrrFrJ�O_WRONLYrZrar�	bytearray�
memoryviewrLr.rl�
splitlines)r'rornrrr�
test_write�s
�zFileTests.test_writecGs"tj|tjdd�}|�|d�dS)NT)�
creationflags�shellr)�
subprocessZcallZCREATE_NEW_CONSOLEr.)r'�argsZretcoderrr�write_windows_console�s
�zFileTests.write_windows_console�win32z$test specific to the Windows consolecCs*d}|�tjd|�|�tjdd|�dS)Nzprint('x' * 100000)�-cz-u)r�r_�
executable�r'�coderrr�test_write_windows_console�sz$FileTests.test_write_windows_consolecGs.t�tjtj�}tj|g|�R�}|��dSr")rrrrF�O_RDONLY�fdopenrL)r'r�rorQrrr�
fdopen_helper�szFileTests.fdopen_helpercCsBt�tjtjtjB�}t�|�|��|�d�|�dd�dS)N�r�d)rrrrFrJrKrLr��r'rorrr�test_fdopens


zFileTests.test_fdopencCs�tjd}|�tjtj�|�tj|�ttjd�t|d�t�tj|�|�ttj	tj�t
|d�� }|�|��d�Wd�n1s�0YdS)Nz.2�1�2r��1)
rrFrtrGr r�replacerZr4�statrr.rl)r'�TESTFN2rQrrr�test_replaces

zFileTests.test_replacecCs"tjttjddd�}t�|�dS)N�)r/�flags�mode�dir_fd)rr�__file__r�rLrPrrr�test_open_keywordss�zFileTests.test_open_keywordsc	Cs>t�td�}z|dtjddd�Wnttfy8Yn0dS)N�symlink�targetF)�src�dst�target_is_directoryr�)rZ
get_attributerrF�NotImplementedErrorr5)r'r�rrr�test_symlink_keywordss�
zFileTests.test_symlink_keywords�copy_file_rangeztest needs os.copy_file_range()cCs<|�t��t�ddd�Wd�n1s.0YdS)NrrSi����)rZ�
ValueErrorrr�rHrrr�#test_copy_file_range_invalid_values%sz-FileTests.test_copy_file_range_invalid_valuesc	
Cs tjd}d}ttj|�|�tjtj�ttjd�}|�|j�|��}t|d�}|�tj|�|�|j�|��}zt�	||d�}Wn<t
y�}z$|jtjkr��|�
|�WYd}~n`d}~00|�|tdd��t|d��(}|�|��|d|��Wd�n1�s0YdS)Nz.3�
0123456789rsrf�r�)rrFr rtrGrrLrjrr�r5r6�ENOSYSrX�assertIn�ranger.rl)	r'r�ru�in_file�in_fd�out_file�out_fd�i�errr�test_copy_file_range*s(

 zFileTests.test_copy_file_rangec

Cs^tjd}d}d}d}d}ttj|�|�tjtj�ttjd�}|�|j�|��}t|d�}|�tj|�|�|j�|��}	ztj	||	|||d�}
Wn<t
y�}z$|jtjkr��|�
|�WYd}~n�d}~00|�|
td	|d
��t|d��}|��}Wd�n1�s0Y|�|d|�d|�|�||d�||||
��dS)Nz.4r�r��r�rsrf)Z
offset_srcZ
offset_dstrrS�)rrFr rtrGrrLrjrr�r5r6r�rXr�r�rlr.)
r'ZTESTFN4ruZ
bytes_to_copyZin_skipZout_seekr�r�r�r�r�r�rlrrr�test_copy_file_range_offsetLs<


�
 (�z%FileTests.test_copy_file_range_offsetN) rArBrCrI�tearDownrRr]r�cpython_onlyrerqrrrrZ
bigmemtestrvr|r�r_�platformr�r�r�r�r�r�rrr�r�r�rrrrrD�s<


�
�
	


!rDc@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Ze�	e
ed�d�d
d��Ze�	e
ed�d�dd��Z
e�	ejdkd�dd��Ze�	ejdkd�e�	e
ed�d�dd���Zdd�Ze�	ejdkd�dd��Ze�	ejdkd�dd ��Ze�	ejdkd�d!d"��Zd#S)$�StatAttributeTestscCs(tj|_|�tj|j�t|jd�dS)N�ABC)rrF�fnamertrGr rHrrrrI{szStatAttributeTests.setUpc
	Cs�t�|�}|�|tjd�|�|jd�t|�}tt�D]d}|dd�dkr:|��}|�d�rjdd�}ndd�}|�|t||��|tt|��|�	||�q:d�
�D]8}tt||�d�}t||d	�d
}|j||dd�q�z|d
|�
d�Wnt�yYn0zd|_|�
d�Wnt�y6Yn0zd|_|�
d�Wnttf�ydYn0zd|_|�
d�Wnt�y�Yn0zt�d�}	|�
d�Wnt�y�Yn0zt�d�}	Wnt�y�Yn0dS)Nr�ZST_ZTIMEcSst|�Sr")�int��xrrr�trunc�r
z7StatAttributeTests.check_stat_attributes.<locals>.trunccSs|Sr"rr�rrrr��r
zst_atime st_mtime st_ctimei��Z_nsi'rU��deltar*�No exception raisedrS�rT�rrSrUr�rhr�r����	rT���
�)rr�r.�ST_SIZE�st_size�dir�lower�endswith�getattrr��splitr��assertAlmostEqual�fail�
IndexError�st_mode�AttributeError�st_rdevra�parrot�stat_result)
r'r��result�membersr�attrr�ZfloatyZnanosecondy�result2rrr�check_stat_attributes�s^


�
z(StatAttributeTests.check_stat_attributescCs|�|j�dSr")r�r�rHrrr�test_stat_attributes�sz'StatAttributeTests.test_stat_attributescCsFz|j�t���}Wn"ty6|�d|j�Yn0|�|�dS)Nz#cannot encode %a for the filesystem)r��encoder_�getfilesystemencoding�UnicodeEncodeErrorrXr�)r'r�rrr�test_stat_attributes_bytes�s
z-StatAttributeTests.test_stat_attributes_bytescCsft�|j�}ttjd�D]F}t�||�}|�d|�|dkrJ|�d|�t�|�}|�	||�qdS)NrSsstat_resultrhscos
stat_result
)
rr�r�r��pickle�HIGHEST_PROTOCOL�dumpsr��loadsr.�r'r��proto�pZ	unpickledrrr�test_stat_result_pickle�s
z*StatAttributeTests.test_stat_result_pickle�statvfsztest needs os.statvfs()cCst�|j�}|�|j|d�d}t|�D]"\}}|�t|d|�||�q*|�t|j	t
��|�t|�d�zd|_|�d�Wnt
y�Yn0zd|_|�d�Wnt
y�Yn0zt�d�}|�d�Wnty�Yn0zt�d�}Wnt�yYn0dS)	Nr�)
ZbsizeZfrsizeZblocksZbfreeZbavail�filesZffreeZfavail�flagZnamemaxZf_rTrSr�r�r�)rr�r�r.�f_bfree�	enumerater�rM�
isinstance�f_fsidr�r,r�r�r��statvfs_resultra)r'r�r��value�memberr�rrr�test_statvfs_attributes�s4
z*StatAttributeTests.test_statvfs_attributes�need os.statvfs()cCsft�|j�}ttjd�D]F}t�||�}|�d|�|dkrJ|�d|�t�|�}|�	||�qdS)NrSsstatvfs_resultrhscos
statvfs_result
)
rr�r�r�r�r�r�r�r�r.r�rrr�test_statvfs_result_pickles
z-StatAttributeTests.test_statvfs_result_pickler��Win32 specific testsc
Cs\zt�d�WnHty*|�d�Yn.tyV}z|�d�WYd}~n
d}~00dS)Nzc:\pagefile.syszc:\pagefile.sys does not existzCould not stat pagefile.sys)rr�r4rXr5r��r'r�rrr�test_1686475szStatAttributeTests.test_1686475�pipezrequires os.pipe()c	Cs�t��\}}z"t�|�Wt�|�t�|�nt�|�t�|�0|�t��}t�|�Wd�n1sp0Y|�|jjtj	�dSr")
rr�r�rLrZr5r.�	exceptionr6�EBADF)r'r��w�ctxrrr�
test_15261s
�
(zStatAttributeTests.test_15261cCsF|�t|d��|�t|jt��|�d|jko:dkn�dS)N�st_file_attributesr���)rMrr�rr�)r'r�rrr�check_file_attributes&sz(StatAttributeTests.check_file_attributesz$st_file_attributes is Win32 specificcCszt�|j�}|�|�|�|jtj@d�tjd}t�	|�|�
tj|�t�|�}|�|�|�|jtj@tj�dS)Nrr�)rr�r�rr.r�FILE_ATTRIBUTE_DIRECTORYrrFr2rt�rmdir)r'r�r9rrr�test_file_attributes+s

�




�z'StatAttributeTests.test_file_attributescCsdtj�tjd|j�}|�tj|�t|d�d}t	j
d|ddg|d�t�|�}|�|j
d�dS)	NZTEMPr�r�z
icacls.exez/denyz*S-1-5-32-545:(S)�r}r)rr/r1�environr�rtrrGr r�
check_callr��assertNotEqualr�)r'r�ZDETACHED_PROCESSr�rrr�test_access_denied@s

�
z%StatAttributeTests.test_access_deniedcCs6dtj�t���d}t�|�}|�|jtj�dS)Nz//./r)rr/�
splitdriver#r�r.r��S_IFBLK)r'r�r�rrr�test_stat_block_deviceUs
z)StatAttributeTests.test_stat_block_deviceN)rArBrCrIr�r�r�r�rrrrr�r�r_r�r�rrrr
rrrrrr�zs2A

+�

	�

r�c@s�eZdZdd�Zdd�Zd)dd�Zdd	�Zed
d��Zdd
�Z	dd�Z
e�e
je
jvd�dd��Ze�e
je
jvd�dd��Ze�e
je
jvd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zejd'd(��ZdS)*�
UtimeTestscCsDtj|_tj�|jd�|_|�tj|j�t�	|j�t
|j�dS)N�f1)rrFr9rr/r1r�rt�rmtreer2r rHrrrrI_s
zUtimeTests.setUpcCs4t�|�}|j|dkp2|j|dkp2|j|dkS)Nr�r�r�)rr��st_atime�st_mtime�st_ctime)r'r�strrr�support_subsecondgs
��zUtimeTests.support_subsecondNcCs�|s
|j}|�|�}|r"d}d}nd}d}||||f�t�|�}|rt|j|j|ddd�|j|j|ddd�n$|�|j|d�|�|j|d�|�|j|�|�|j	|�dS)Ni8Z�;l�
o]�rTlP�9��&�.>g���ư>r�)
r�rrr�r�rrr.�st_atime_ns�st_mtime_ns)r'�set_timerr�atime_ns�mtime_nsrrrr�_test_utimeos"

zUtimeTests._test_utimecCsdd�}|�|�dS)NcSstj||d�dS�N��ns�r�utime�rr#rrrr�sz'UtimeTests.test_utime.<locals>.set_time�r �r'rrrr�
test_utime�szUtimeTests.test_utimecCs|ddS)Nrg��&�.>rr"rrr�	ns_to_sec�szUtimeTests.ns_to_seccs�fdd�}��|�dS)Ncs0|\}}��|�}��|�}t�|||f�dSr"�r*rr%�rr#rrZatime�mtimerHrrr�s

z2UtimeTests.test_utime_by_indexed.<locals>.set_timer'r(rrHr�test_utime_by_indexed�sz UtimeTests.test_utime_by_indexedcs�fdd�}��|�dS)Ncs2|\}}��|�}��|�}tj|||fd�dS)N)�timesr+r,rHrrr�s

z0UtimeTests.test_utime_by_times.<locals>.set_timer'r(rrHr�test_utime_by_times�szUtimeTests.test_utime_by_timesz9follow_symlinks support for utime required for this test.cCsdd�}|�|�dS)NcSstj||dd�dS)NF)r#�follow_symlinksr$r&rrrr�sz9UtimeTests.test_utime_nofollow_symlinks.<locals>.set_timer'r(rrr�test_utime_nofollow_symlinks�sz'UtimeTests.test_utime_nofollow_symlinksz,fd support for utime required for this test.cCsdd�}|�|�dS)NcSsBt|dd��"}tj|��|d�Wd�n1s40YdS)N�wbrr")rrr%rj)rr#rrrrr�sz*UtimeTests.test_utime_fd.<locals>.set_timer'r(rrr�
test_utime_fd�szUtimeTests.test_utime_fdz0dir_fd support for utime required for this test.cCsdd�}|�|�dS)NcSsNtj�|�\}}t�|�� }tj|||d�Wd�n1s@0YdS)N)r�r#)rr/r�r�open_dir_fdr%)rr#r9r�dirfdrrrr�sz.UtimeTests.test_utime_dir_fd.<locals>.set_timer'r(rrr�test_utime_dir_fd�szUtimeTests.test_utime_dir_fdcCsdd�}|j||jd�dS)NcSstj||d�dSr!r$r&rrrr�sz1UtimeTests.test_utime_directory.<locals>.set_time�r)r r9r(rrr�test_utime_directory�szUtimeTests.test_utime_directorycCsbt��}||j�|�|j�s$d}nd}t�|j�}d|j||j|f}|j|j|||d�dS)Ng�?g�������?zst_time=%r, current=%r, dt=%r)r��msg)�timer�rrr�rr�)r'rZcurrentr�rr:rrr�_test_utime_current�s
�
�zUtimeTests._test_utime_currentcs�fdd�}��|�dS)Ncst��j�dSr"�rr%r�r8rHrrr�sz/UtimeTests.test_utime_current.<locals>.set_time�r<r(rrHr�test_utime_current�szUtimeTests.test_utime_currentcs�fdd�}��|�dS)Ncst��jd�dSr"r=r8rHrrr�sz3UtimeTests.test_utime_current_old.<locals>.set_timer>r(rrHr�test_utime_current_old�sz!UtimeTests.test_utime_current_oldcCsltjdkrhtj�tj�|��dd}ddl}|jj}|�	dd�}|�
|ddddd|t|��}|rh|jSdS)Nr�r�\�r�)
r_r�rr/r�abspath�ctypes�windll�kernel32Zcreate_unicode_bufferZGetVolumeInformationWr,r�)r'r/�rootrDrF�buf�okrrr�get_file_system�s

�zUtimeTests.get_file_systemcCsJ|�|j�dkr|�d�d}t�|j||f�|�t�|j�j|�dS)NZNTFSz
requires NTFSr)	rJr9rXrr%r�r.r�r)r'Zlargerrr�test_large_times

zUtimeTests.test_large_timec	Cs�|�t��"tj|jddd�Wd�n1s20Y|�t��"t�|jddg�Wd�n1sn0Y|�t��t�|jd�Wd�n1s�0Y|�t��t�|jd�Wd�n1s�0Y|�t��$tj|jddgd�Wd�n1�s0Y|�t�� tj|jdd�Wd�n1�sZ0Y|�t�� tj|jdd�Wd�n1�s�0Ytjtjv�r�|�t��"tj|jddd�Wd�n1�s�0Ytjtjv�rft	|jdd	��L}|�t�� t�|�
�d�Wd�n1�s<0YWd�n1�s\0Ytjtjv�r�|�t��"tj|jdd	d
�Wd�n1�s�0YdS)N)r�r�r"r�)r�)r�r�r�F�r1r3r�r�)rZr�rr%r�ra�supports_follow_symlinksr��supports_fdrrj�supports_dir_fd)r'rrrr�test_utime_invalid_argumentss000,,4002Pz'UtimeTests.test_utime_invalid_argumentscCs�dd�}|�t��(tj|j|d�dfd�Wd�n1s@0Y|�t��(tj|j|d�dfd�Wd�n1s�0Y|�t��(tj|j|d�dfd�Wd�n1s�0YdS)NcsG�fdd�d�}|�S)NcseZdZ�fdd�ZdS)z?UtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadIntcs�Sr"r)r���divmod_ret_valrr�
__divmod__.szJUtimeTests.test_issue31577.<locals>.get_bad_int.<locals>.BadInt.__divmod__N)rArBrCrTrrRrr�BadInt-srUr)rSrUrrRr�get_bad_int,sz/UtimeTests.test_issue31577.<locals>.get_bad_int�*rSr"r)rSrUr�)rZrarr%r�)r'rVrrr�test_issue31577(s66zUtimeTests.test_issue31577)N)rArBrCrIrr r)�staticmethodr*r.r0rrrr%rNr2rOr4rPr7r9r<r?r@rJrKrQrr�rXrrrrr^s:

	�
�
�


r)�
mapping_testsc@seZdZdZdd�Zdd�Zdd�Zdd	�Ze�	e
o>ej�
e
�d
�dd��Ze�	e
o^ej�
e
�d
�d
d��Zdd�Zdd�Zdd�Zdd�Ze�	ejd�dd��Zdd�Ze�dd�dd��Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Z d.d/�Z!d0d1�Z"d2d3�Z#d4d5�Z$dS)6�EnvironTestsNcCsBttj�|_tjrttj�|_|����D]\}}|tj|<q*dSr")	�dictrr
�_EnvironTests__save�supports_bytes_environ�environb�_EnvironTests__saveb�
_reference�items�r'�keyr�rrrrI?s
zEnvironTests.setUpcCs:tj��tj�|j�tjr6tj��tj�|j�dSr")rr
�clear�updater]r^r_r`rHrrrr�Fs


zEnvironTests.tearDowncCsdddd�S)NZVALUE1ZVALUE2ZVALUE3)ZKEY1ZKEY2ZKEY3rrHrrrraMszEnvironTests._referencecCstj��tjSr")rr
rerHrrr�_empty_mappingPs
zEnvironTests._empty_mappingzrequires a shellcCsbtj��tjjdd�t�dt��(}|����}|�|d�Wd�n1sT0YdS)NZWorld)ZHELLOz%s -c 'echo $HELLO')	rr
rerf�popenrrl�stripr.)r'rhr�rrr�test_update2Us

zEnvironTests.test_update2cCsxt�dt��V}t|�}|�t|�d�|�t|�d�|�t|�d�|�tt|�Wd�n1sj0YdS)Nz %s -c 'echo "line1
line2
line3"'zline1
zline2
zline3
)rrhr�iterr.�nextrZ�
StopIteration)r'rh�itrrr�test_os_popen_iter^s�zEnvironTests.test_os_popen_itercCs8tj��D](\}}|�t|�t�|�t|�t�q
dSr")rr
rbr.rmr%)r'rd�valrrr�test_keyvalue_typesksz EnvironTests.test_keyvalue_typescCs.|����D]\}}|�tj�|�|�qdSr")rarbr.rr
�getrcrrr�
test_itemspszEnvironTests.test_itemsc
Cs4tj}|�t|�d�d�dd�|��D����dS)Nzenviron({{{}}})z, css|]\}}d�||�VqdS)z
{!r}: {!r}N��format)rrdr�rrr�	<genexpr>xs�z-EnvironTests.test___repr__.<locals>.<genexpr>)rr
r.�reprrur1rb)r'�envrrr�
test___repr__us�zEnvironTests.test___repr__cCsZtj�tj�}gd�}dtj�|�i}tj}z8t|�t_|�|t���|�|tjdd��W|t_n|t_0|�|t�i��|�dt�ddi��|�|t�|��tj	�rVz:t
jdd��dd	d
�}Wd�n1s�0YWnty�Yn0|�
ttj|�|�t�ddi�d
g�|�t�dd
i�d
g�|�t�ddi�d
g�dS)N)z/montyz/pythonrBz/flying/circus�PATH�rx�rBrBT)�recordr�r�)rz�PATHr~�abc�abc)r�defpathr��pathsepr1r
r\�assertSequenceEqual�
get_exec_pathr^�warnings�catch_warnings�BytesWarningrZr�)r'Zdefpath_listZ	test_pathZtest_envZ
saved_environZ	mixed_envrrr�test_get_exec_path|s8
,���zEnvironTests.test_get_exec_pathz#os.environb required for this test.cCs�d}z|�t��d�}Wn*tyBdt��f}|�|�Yn0|tjd<|�tjd|�|�tjd|�d}|tjd<|�tjd|�|�	t��d�}|�tjd|�dS)	Nueuro€�surrogateescapez'U+20AC character is not encodable to %sZunicodesunicode��sbytesr>)
r�r_r�r�rXrr
r.r_�decode)r'r�Zvalue_bytesr:Z	value_strrrr�
test_environb�s$
��

zEnvironTests.test_environbcCs�d}d}d|�d�}t����}|�|d�t�||�tjtjd|gdtj	dd�}|�
|j��t
|��t�|�tjtjd|gdtj	dd�}|�
|j��t
d��Wd�n1s�0YdS)NZ
PYTHONTESTVARZ	testvaluez%import os; print(repr(os.environ.get(z)))r�T)�check�stdout�text)rZEnvironmentVarGuard�popr�putenvr�runr_r��PIPEr.r��rstriprw�unsetenv)r'rr�r�rx�procrrr�test_putenv_unsetenv�s
�
�z!EnvironTests.test_putenv_unsetenvrTr�cCs~dD].}|�ttftj|d�|�ttftj|�qtjdkrzdd}|�ttj|d�|�ttjd|�|�ttj|�dS)N)rBz=namezna=mezname=znameznamer�r�r���r��X)rZr5r�rr�r�r_r�)r'rZlongstrrrr�test_putenv_unsetenv_error�s
z'EnvironTests.test_putenv_unsetenv_errorcCs�d}|�|tj�|�t��}tj|Wd�n1s<0Y|�|jjd|�|�|jj	�|�t��}tj|=Wd�n1s�0Y|�|jjd|�|�|jj	�dS)NZ
missingkeyr)
�assertNotInrr
rZ�KeyError�assertIsr�r�rM�__suppress_context__)r'Zmissing�cmrrr�
test_key_type�s(&zEnvironTests.test_key_typecCsTt|�}d}t|�dtj|<z&t|�|�tj|d�Wtj|=n
tj|=0dS)NZ__new_key__Ztest_environ_iteration)rkrlrr
r.)r'Z
collection�iteratorZnew_keyrrr�_test_environ_iteration�s
z$EnvironTests._test_environ_iterationcCs|�tj�dSr")r�rr
rHrrr�(test_iter_error_when_changing_os_environ�sz5EnvironTests.test_iter_error_when_changing_os_environcCs|�tj���dSr")r�rr
rbrHrrr�.test_iter_error_when_changing_os_environ_items�sz;EnvironTests.test_iter_error_when_changing_os_environ_itemscCs|�tj���dSr")r�rr
�valuesrHrrr�/test_iter_error_when_changing_os_environ_valuessz<EnvironTests.test_iter_error_when_changing_os_environ_valuescCsftrtj�t�sdSt�t�d|�d���}|����}Wd�n1sL0Y|�||�dS)Nz -c 'echo $�')rrr/�existsrhrlrir.)r'�varr:rhr�rrr�_test_underlying_process_envs
*z)EnvironTests._test_underlying_process_envcCs�d}d}|tj|<dddd|di}ttj�}|�|�tj|B}|�||�|�d||�|��}|�ttj�	|��|�
dd�|�
||�dS�	N�
_TEST_VAR_�original_value�_A_r��_B_�2�3rB)rr
r\rf�assertDictEqualr.rbr��NotImplemented�__or__r��r'�overridden_keyr��
new_vars_dictr:�actual�new_vars_itemsrrr�test_or_operators



zEnvironTests.test_or_operatorcCs|d}dtj|<dddd|di}ttj�}|�|�tj|O_|�|tj�|�dtj|�|�dd�|�|d�dS)Nr�r�r�r�r�r�r��rr
r\rfr.r�)r'r�r�r:rrr�test_ior_operator!s


zEnvironTests.test_ior_operatorcCs�tj��}|�t��&ddi}tj|O_Wd�n1s@0Y|�t��&ddi}tj|O_Wd�n1s�0Y|�|tj�dS)NrSr�)rr
�copyrZrar.)r'Zos_environ_copyZdict_with_bad_keyZdict_with_bad_valrrr�test_ior_operator_invalid_dicts0s
,,z,EnvironTests.test_ior_operator_invalid_dictscCszd}dtj|<dd|dff}ttj�}|�|�tj|O_|�|tj�|�dtj|�|�dd�|�|d�dS)Nr�r�)r�r�)r�r�r�r�r�r�)r'r�r�r:rrr�$test_ior_operator_key_value_iterable=s


z1EnvironTests.test_ior_operator_key_value_iterablecCs�d}d}|tj|<dddd|di}t|�}|�tj�|tjB}|�||�|�|||�|��}|�ttj�	|��|�
dd�|�
||�dSr�)rr
r\rfr�r.rbr�r��__ror__r�r�rrr�test_ror_operatorLs

zEnvironTests.test_ror_operator)%rArBrCZ	type2testrIr�rargrrrrr/r�rjrorqrsryr�r^r�r�rZrequires_mac_verr�r�r�r�r�r�r�r�r�r�r�r�rrrrr[;sF�
�
)�


	
r[c@sVeZdZdd�Zdd�Zdd�Zddd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�ZdS)�	WalkTestscKs(d|vr|�d�|d<tj|fi|��S�Nr1�followlinks)r�r�walk)r'�top�kwargsrrrr�eszWalkTests.walkc	Cs>tjj}|�tjtj�|tjd�|_||jd�|_||jd�|_	||jd�}||d�}||jd�}||jd�}||d�}||d�}||d	�|_
|tjd
�}|tjd
d�}	||d�}
||d
�}||d�}t�|j	�t�|�t�|�t�|�||||	|fD]H}
t|
ddd��"}|�
d|
d�Wd�n1�s<0Y�qt���r�t�tj�|�|j
�t�d|
d�t�|dd�|d�t�|dd�|d�|dd	ggd�f|_n|dgdgf|_t�|d�zt�|�Wn&t�y|�tj|tj�Yn40t�|tj�t�|�t�|�|jddd�=dS)NZTEST1�SUB1�SUB11�SUB2ZSUB21�tmp1�tmp2�tmp3�linkZTEST2�tmp4�broken_link�broken_link2�broken_link3r��utf-8��encodingzI'm z" and proud of it.  Blame test_os.
ZbrokenTZtmp5)r�r�r�r�rrS)rr/r1rtrrrF�	walk_path�	sub1_path�
sub11_path�	link_path�makedirsrr�can_symlinkr�rC�	sub2_tree�chmod�listdir�PermissionErrorr��S_IRWXUrGr)r'r1Z	sub2_pathZ
sub21_pathZ	tmp1_pathZ	tmp2_pathZ	tmp3_pathZ	tmp5_pathZt2_pathZ	tmp4_pathZbroken_link_pathZbroken_link2_pathZbroken_link3_pathr/rQrrrrIjsT








6
�

zWalkTests.setUpcCs�t|�|j��}|�t|�d�|ddddk}|dd��|dd|d��|dd|d��|�|d|jddgd	gf�|�|d||jd
gdgf�|�|d||jggf�|�|dd||j�dS)NrhrrSr�r�rU���r�r�r�r�)	�listr�r�r.r,�sortr�r�r��r'�allZflippedrrr�test_walk_topdown�s zWalkTests.test_walk_topdownNcCs�|dur|j}g}|�|�D],\}}}|�|||f�d|vr|�d�q|�t|�d�|�|d|jdgdgf�|dd��|dd��|�|d|j�dS)Nr�rUrr�r�rSr�)r�r��append�remover.r,r�r�)r'r�r�rG�dirsr�rrr�test_walk_prune�szWalkTests.test_walk_prunecCs|�t|j��dSr")r�rr�rHrrr�test_file_like_path�szWalkTests.test_file_like_pathcCs�t|j|jdd��}|�t|�d|�|ddddk}|dd��|dd|d	��|dd|d��|�|d|jdd
gdgf�|�|||jggf�|�||d|jdgd
gf�|�|dd||j�dS)NF��topdownrhr�rSrr�rUr�r�r�r�r�)	r�r�r�r.r,r�r�r�r�r�rrr�test_walk_bottom_up�s$
�

���zWalkTests.test_walk_bottom_upcCsht��s|�d�|j|jdd�}|D]2\}}}||jkr&|�|g�|�|dg�qdq&|�d�dS)Nzneed symlink supportTrLr�z+Didn't follow symlink with followlinks=True)rr�rXr�r�r�r.r�)r'�walk_itrGr�r�rrr�test_walk_symlink�s

zWalkTests.test_walk_symlinkc
Cs�g}|j|j|jd�}t|�\}}}|�|g�d}tj�||�}tj�||d�}t�||�zhdd�|D�}	|�	|�|�
||	�|�
||	�|D]"}
|
|kr�|�tj�||
�|	�q�Wt�||�nt�||�0dS)N)�onerrorr�z.newcSsg|]\}}}|�qSrr)rr��drQrrrr	r
z/WalkTests.test_walk_bad_dir.<locals>.<listcomp>)r�r�r�rlr.rr/r1rbrMr�r�)r'�errorsr�rGr�r��dir1Zpath1Zpath1new�roots�dir2rrr�test_walk_bad_dir�s"
zWalkTests.test_walk_bad_dircsd}tj�tjd��tjj�gdg|�R�}t�|���fdd�td�D�}t|d�D]>}||rldgnggf}|D]}��t|�|�qxtj�	|�}q\��fdd�td�D�}�}t|d�D]D}|||kr�dgnggf}|D]}��t|�|�q�tj�|d�}q�dS)	N�Zdeepr�csg|]}�j�dd��qS)Fr��r��r�j��baser'rrr	r
z7WalkTests.test_walk_many_open_files.<locals>.<listcomp>r�rScsg|]}�j�dd��qS)Tr�r�r�r�rrr	r
)
rr/r1rrFr�r�r.rlr9)r'Zdepthr�Zitersr�r:rnrr�r�test_walk_many_open_filess"
z#WalkTests.test_walk_many_open_files)N)rArBrCr�rIr�r�r�r�r�r�r�rrrrr�`sE
r��fwalkzTest needs os.fwalk()c@sHeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dZ
dS)�
FwalkTestscks0|j|fi|��D]\}}}}|||fVqdSr")r�)r'r�r�rGr�r�Zroot_fdrrrr�(szFwalkTests.walkcOstj|i|��Sr")rr��r'r�r�rrrr�,szFwalkTests.fwalkc
Cs�|��}|��}tjddd�D]�\}}|j||d�|j||d�i}tjfi|��D]\}}}t|�t|�f||<qV|jfi|��D]4\}}}}	|�||�|�	||t|�t|�f�q�qdS)N�TFrU��repeat)r�r�)r�r1)
r��	itertools�productrfrr��setr�r�r.)
r'�walk_kwargs�fwalk_kwargsr�r1r:rGr�r��rootfdrrr�_compare_to_walk/szFwalkTests._compare_to_walkcCsdtji}|�||�dS)Nr�)rrFr)r'r�rrr�test_compare_to_walkAs
zFwalkTests.test_compare_to_walkc	CsTzBt�dtj�}dtji}|��}||d<|�||�Wt�|�nt�|�0dS)N�.r�r�)rrr�rrFr�rrL)r'rorr	rrr�test_dir_fdEs
zFwalkTests.test_dir_fdcCs|tjddd�D]h\}}tj|df}|j|d|i�D]B\}}}}t�|�t�|�|�t	t�
|��t	|�t	|�B�q2qdS)NrrUrr1)rrrrFr�r�fstatr�r.rr�)r'r�r1r�rGr�r�r
rrr�test_yields_correct_dir_fdOs

z%FwalkTests.test_yields_correct_dir_fdcCs\t�d�}t�|�td�D]}|�tj�D]}q,qt�d�}|�tj|�|�||�dS)NrS�)	rrWrLr�r�rrFrtr.)r'Zminfdr�r�Znewfdrrr�test_fd_leak[s


zFwalkTests.test_fd_leakN)rArBrCr�r�rrrrrr�rrrrr$s
rc@seZdZdd�ZdS)�BytesWalkTestsc	ks�d|vr|�d�|d<tjt�|�fi|��D]p\}}}t�|�}tttj|��}tttj|��}|||fVtttj|��|dd�<tttj|��|dd�<q.dSr�)r�rr��fsencoder?r��map)	r'r�r��broot�bdirs�bfilesrGr�r�rrrr�ns"
zBytesWalkTests.walkN)rArBrCr�rrrrrlsrc@seZdZddd�ZdS)�BytesFwalkTestsr
cos�tjt�|�g|�Ri|��D]t\}}}}t�|�}tttj|��}	tttj|��}
||	|
|fVtttj|	��|dd�<tttj|
��|dd�<qdSr")rr�rr?r�r)r'r�r�r�rrr�topfdrGr�r�rrrr�|s*
zBytesFwalkTests.fwalkN)r
)rArBrCr�rrrrrysrc@s^eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	�
ejd
kd�dd��Z
dd�ZdS)�MakedirTestscCst�tj�dSr"�rr2rrFrHrrrrI�szMakedirTests.setUpc
Cs�tj}tj�|ddd�}t�|�tj�|dddd�}t�|�|�ttjtj�tj�|dddddtj�}t�|�tj�|dtjddddd�}t�|�dS�Nr�r�Zdir3Zdir4Zdir5Zdir6)	rrFrr/r1r�rZr5�curdir)r'r�r/rrr�test_makedir�s


�zMakedirTests.test_makedircCs�t�d���tj}tj�|d�}tj�|d�}t�|d�|�tj�|��|�tj�	|��tj
dkr�|�t�|�j
d@d�|�t�|�j
d@d�Wd�n1s�0YdS)NrUr�r�im�ntr�i�)rZ
temp_umaskrFrr/r1r�rMr��isdirrr.r�r�)r'r��parentr/rrr�	test_mode�s
zMakedirTests.test_modecCs�tj�tjd�}d}t�d�}t�||�|�ttj||�|jttj||dd�tj|ddd�tj||dd�t�|�tjtj�	d	�dd�dS)
Nr�r��F��exist_oki�T)r�r&�/)
rr/r1rrF�umaskr�rZr5rC)r'r/r��old_maskrrr� test_exist_ok_existing_directory�s

z-MakedirTests.test_exist_ok_existing_directoryc	Cstj�tjd�}tj}d}t�d�}z�t�t�	tj�j
�}zt�tj||B�Wntylt
�d��Yn0t�	tj�j
|@|kr�t
�d��t�|||B�tj||dd�t�|t�t�	|�j
�|@�tj|||Bdd�Wt�|�nt�|�0dS)Nr�r�r$zCannot set S_ISGID for dir.z No support for S_ISGID dir mode.Tr%)rr/r1rrFr��S_ISGIDr(�S_IMODE�lstatr�r�r�r�SkipTestr�)r'r/r+r�r)Zexisting_testfn_moderrr�test_exist_ok_s_isgid_directory�s&
�
 z,MakedirTests.test_exist_ok_s_isgid_directorycCs�tj}tj�tjd�}t|d��}|�d�Wd�n1s@0Y|�ttj	|�|jttj	|dd�|jttj	|dd�t�
|�dS)Nr�rr�Fr%T)rrFrr/r1rrrZr5r�r�)r'r�r/rQrrr�#test_exist_ok_existing_regular_file�s(z0MakedirTests.test_exist_ok_existing_regular_filer zrequires WindowscCsdtj}tj�tj�tjd��}tj|dd�tjd|dgdd�}t�	|�|�
|��|�d��dS)	Nr�i�)r�z	cacls.exez/sZoemr�z6 "D:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;OW)")rrFrr/rCr1r2r�check_outputrr.ri)r'r�r/�outrrr�test_win32_mkdir_700�s
�z!MakedirTests.test_win32_mkdir_700c	CsLtj�tjdddddd�}tj�|�s>|tjkr>tj�|�}qt�|�dSr)rr/r1rrFr�r9�
removedirs�r'r/rrrr��s�zMakedirTests.tearDownN)rArBrCrIrr#r*r/r0rrrrr3r�rrrrr�s

r�chownzTest needs chownc@s�eZdZedd��Zdd�Ze�ee	d�d�dd��Z
e�eoHee
�d	kd
�dd��Ze�eojee
�d	kd
�dd��Zedd��ZdS)�ChownFileTestscCst�tj�dSr"r��clsrrr�
setUpClass�szChownFileTests.setUpClasscCs�t�tj�}|j}|j}ddt�d�t�	dd�fD]0}|�
ttjtj||�|�
ttjtj||�q2|�
t�tj||��|�
t�tjdd��dS)Ng�y��r����rU)rr�rrF�st_uid�st_gid�decimalZDecimal�	fractionsZFractionrZrar6�assertIsNone)r'r��uid�gidr�rrr�*test_chown_uid_gid_arguments_must_be_index�sz9ChownFileTests.test_chown_uid_gid_arguments_must_be_index�	getgroupszneed os.getgroupscCs�t��}t|�dkr|�d�|dd�\}}t�tj�j}t�tj||�t�tj�j	}|�
||�t�tj||�t�tj�j	}|�
||�dS)NrUztest needs at least 2 groups)rrDr,rXr�rrFr<r6r=r.)r'�groupsZgid_1Zgid_2rArBrrr�test_chown_gids
zChownFileTests.test_chown_gidrSz0test needs root privilege and more than one usercCsvtdd�\}}t�tj�j}t�tj||�t�tj�j}|�||�t�tj||�t�tj�j}|�||�dS�NrU)	�	all_usersrr�rrFr=r6r<r.)r'�uid_1�uid_2rBrArrr�test_chown_with_rootsz#ChownFileTests.test_chown_with_rootz2test needs non-root account and more than one usercCsltdd�\}}t�tj�j}|�t��0t�tj||�t�tj||�Wd�n1s^0YdSrG)	rHrr�rrFr=rZr�r6)r'rIrJrBrrr�test_chown_without_permissions
z,ChownFileTests.test_chown_without_permissioncCst�tj�dSr")rrrrFr8rrr�
tearDownClass'szChownFileTests.tearDownClassN)rArBrC�classmethodr:rCrrrrrF�
root_in_posixr,rHrKrLrMrrrrr7�s


�

�
r7c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RemoveDirsTestscCst�tj�dSr")rr�rrFrHrrrrI-szRemoveDirsTests.setUpcCst�tj�dSr")rrrFrHrrrr�0szRemoveDirsTests.tearDowncCsxtj�tjd�}t�|�tj�|d�}t�|�t�|�|�tj�|��|�tj�|��|�tj�tj��dS)N�dira�dirb)	rr/r1rrFr2r4�assertFalser��r'rQrRrrr�test_remove_all3s


zRemoveDirsTests.test_remove_allcCs�tj�tjd�}t�|�tj�|d�}t�|�ttj�|d��t�|�|�tj�	|��|�
tj�	|��|�
tj�	tj��dS�NrQrR�file.txt)rr/r1rrFr2r r4rSr�rMrTrrr�test_remove_partial=s


z#RemoveDirsTests.test_remove_partialcCs�tj�tjd�}t�|�tj�|d�}t�|�ttj�|d��|�t��t�	|�Wd�n1sn0Y|�
tj�|��|�
tj�|��|�
tj�tj��dSrV)rr/r1rrFr2r rZr5r4rMr�rTrrr�test_remove_nothingHs

(z#RemoveDirsTests.test_remove_nothingN)rArBrCrIr�rUrXrYrrrrrP,s

rPc@seZdZdd�ZdS)�DevNullTestscCs�ttjdd��"}|�d�|��Wd�n1s60Yttjd�� }|�|��d�Wd�n1sr0YdS)Nr3r�hellorsr
)rr�devnullrrLr.rlrPrrr�test_devnullVs

&zDevNullTests.test_devnullN)rArBrCr]rrrrrZUsrZc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�URandomTestscCsr|�tt�d��d�|�tt�d��d�|�tt�d��d�|�tt�d��d�|�tt�d��d�dS)NrrSrTr�i�)r.r,r�urandomrHrrr�test_urandom_length_s
z URandomTests.test_urandom_lengthcCs0t�d�}|�|t�t�d�}|�||�dS�N�)rr_r$r>r�r'Zdata1Zdata2rrr�test_urandom_valuefs

zURandomTests.test_urandom_valuecCs<d�dd|ddf�}td|�}|d}|�t|�|�|S)N�
zimport os, syszdata = os.urandom(%s)zsys.stdout.buffer.write(data)zsys.stdout.buffer.flush()r�rS)r1rr.r,)r'�countr�r2r�rrr�get_urandom_subprocessls�
z#URandomTests.get_urandom_subprocesscCs$|�d�}|�d�}|�||�dSra)rgrrcrrr�test_urandom_subprocessws

z$URandomTests.test_urandom_subprocessN)rArBrCr`rdrgrhrrrrr^^sr^�	getrandomzneed os.getrandom()c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�GetRandomTestsc
CsRzt�d�Wn>tyL}z&|jtjkr6t�d��n�WYd}~n
d}~00dS)NrSz%getrandom() syscall fails with ENOSYS)rrir5r6r�rr.)r9r;rrrr:szGetRandomTests.setUpClasscCs*t�d�}|�|t�|�t|�d�dSra)rrir$r>r.r,�r'rurrr�test_getrandom_type�s
z"GetRandomTests.test_getrandom_typecCst�d�}|�|d�dS)Nrr
)rrir.)r'�emptyrrr�test_getrandom0�s
zGetRandomTests.test_getrandom0cCs|�ttd��dS)N�GRND_RANDOM)rMrrrHrrr�test_getrandom_random�sz$GetRandomTests.test_getrandom_randomcCs*zt�dtj�Wnty$Yn0dS�NrS)rri�
GRND_NONBLOCK�BlockingIOErrorrHrrr�test_getrandom_nonblock�sz&GetRandomTests.test_getrandom_nonblockcCs$t�d�}t�d�}|�||�dSra)rrirrcrrr�test_getrandom_value�s

z#GetRandomTests.test_getrandom_valueN)
rArBrCrNr:rlrnrprtrurrrrrj}s
rjZHAVE_GETENTROPYrSZHAVE_GETRANDOMZHAVE_GETRANDOM_SYSCALLz*os.random() does not use a file descriptorZvxworksz$VxWorks can't set RLIMIT_NOFILE to 1c@s0eZdZe�ed�dd��Zdd�Zdd�ZdS)	�URandomFDTestsz!test requires the resource modulecCsd}td|�dS)Na�if 1:
            import errno
            import os
            import resource

            soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
            resource.setrlimit(resource.RLIMIT_NOFILE, (1, hard_limit))
            try:
                os.urandom(16)
            except OSError as e:
                assert e.errno == errno.EMFILE, e.errno
            else:
                raise AssertionError("OSError not raised")
            r�r
r�rrr�test_urandom_failure�sz#URandomFDTests.test_urandom_failurecCsd}td|�\}}}dS)Naif 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                os.closerange(3, 256)
            sys.stdout.buffer.write(os.urandom(4))
            �-Scr
)r'r��rcr2�errrrr�test_urandom_fd_closed�s	z%URandomFDTests.test_urandom_fd_closedcCs�|�tjtj�ttjd�djtjd�}td|�\}}}|�t|�d�|�	|dd�|dd��td|�\}}}|�t|�d�|�	||�dS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa�if 1:
            import os
            import sys
            import test.support
            os.urandom(4)
            with test.support.SuppressCrashReport():
                for fd in range(3, 256):
                    try:
                        os.close(fd)
                    except OSError:
                        pass
                    else:
                        # Found the urandom fd (XXX hopefully)
                        break
                os.closerange(3, 256)
            with open({TESTFN!r}, 'rb') as f:
                new_fd = f.fileno()
                # Issue #26935: posix allows new_fd and fd to be equal but
                # some libc implementations have dup2 return an error in this
                # case.
                if new_fd != fd:
                    os.dup2(new_fd, fd)
                sys.stdout.buffer.write(os.urandom(4))
                sys.stdout.buffer.write(os.urandom(4))
            )rFrxr�rrh)
rtrrGrFr rurr.r,r)r'r�ryr2rzZout2Zerr2rrr�test_urandom_fd_reopened�s�z'URandomFDTests.test_urandom_fd_reopenedN)	rArBrCrr�resourcerwr{r|rrrrrv�s

rvc#s~g��fdd�}�fdd�}zHtj}tj}tj}|t_|t_|durJ|t_�VW|t_|t_|t_n|t_|t_|t_0dS)Ncs��d||f�td��dS)N�execvzexecv called)r��RuntimeError�rr���callsrr�
mock_execvsz#_execvpe_mockup.<locals>.mock_execvcs ��d||f�ttjd��dS)N�execvez
execve called)r�r5r6ZENOTDIRr�r�rr�mock_execvesz$_execvpe_mockup.<locals>.mock_execve)rr~r�r�)r�r�r�Z
orig_execvZorig_execveZorig_defpathrr�r�_execvpe_mockups$	�r�r~zneed os.execv()c@steZdZe�ed�dd��Zdd�Zdd�Ze�	e
ed�d	�d
d��Zdd
�Z
dd�Ze�	ejdkd�dd��ZdS)�	ExecTestsz4avoid triggering a linuxthreads bug: see issue #4970cCs|�ttjddgd�dS)Nzno such app-)rZr5r�execvperHrrr�test_execvpe_with_bad_program$s�z'ExecTests.test_execvpe_with_bad_programcCsN|�ttjdd�|�ttjdg�|�ttjdd�|�ttjddg�dS)N�notepadrr|rB)rZr�rr~rHrrr�test_execv_with_bad_arglist*sz%ExecTests.test_execv_with_bad_arglistcCsB|�ttjdgd�|�ttjdgi�|�ttjddgi�dS)Nr�rB)rZr�rr�rHrrr�test_execvpe_with_bad_arglist0sz'ExecTests.test_execvpe_with_bad_arglist�_execvpez)No internal os._execvpe function to test.c
Cs�tjd}|tur8d}tj�t�|�|�}|}gd�}n4d}gd�}tj�||�}tjdkrht�|�}n|}ddi}t��J}|�t	tj
||�|�t|�d	�|�|d
d||ff�Wd�n1s�0Yt|d��P}|jt
tj
|||d
�|�t|�d	�|�|d
d|||ff�Wd�n1�s60Yt��t}|��}	|tu�rd||	d<n||	d<|jt
tj
|||	d
�|�t|�d	�|�|d
d|||	ff�Wd�n1�s�0YdS)NZabsolutepaths
executable)sprogname�arg1�arg2r�)Zprognamer�r�r ZspamrwrSrr~)r�r{r�r~rz)rr0r>r/r1rrr�rZrr�r.r,r5r�r�)
r'Z	test_typeZprogram_pathZprogram�fullpathZnative_fullpathZ	argumentsrxr�Zenv_pathrrr�_test_internal_execvpe5sN


�6
�
�$


�
�z ExecTests._test_internal_execvpecCs"|�t�tjdkr|�t�dS)Nr )r�r%rrr>rHrrr�test_internal_execvpe_strfs

z#ExecTests.test_internal_execvpe_strcCs�tjddg}tj��}d|d<|�t��"t�|d||�Wd�n1sP0Ytj��}d|d<|�t��"t�|d||�Wd�n1s�0Ytj��}d|d	<|�t��"t�|d||�Wd�n1s�0YdS)
Nr��pass�cabbage�FRUITVEGETABLEr�orangeVEGETABLE=cabbage�FRUIT�lemon�FRUIT=ORANGE)r_r�rr
r�rZr�r�)r'r��newenvrrr�test_execve_invalid_envks
0
0
z!ExecTests.test_execve_invalid_envr�zWin32-specific testc
Csbzt�ddgi�Wn>tyR}z&|�|jdup:|jdk�WYd}~nd}~00|�d�dS)NrB�argrzNo OSError raised)rr�r5rMZwinerrorr�r�rrr�test_execve_with_empty_path�s
0z%ExecTests.test_execve_with_empty_pathN)rArBrCr�skipIf�USING_LINUXTHREADSr�r�r�rrrr�r�r�r_r�r�rrrrr�!s�
�
/r�r�r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Win32ErrorTestsc
Csvzt�tj�WnPty&d}YnLty`}z$d}|�dtj|f�WYd}~nd}~00|�dtj�dS)NFTz.file %s must not exist; os.stat failed with %szfile %s must not exist)rr�rrFr4r5r�)r'r�r;rrrrI�s�zWin32ErrorTests.setUpcCs|�ttjtjtjd�dS)Nz.bak)rZr5rrbrrFrHrrrre�szWin32ErrorTests.test_renamecCs|�ttjtj�dSr")rZr5rr�rrFrHrrr�test_remove�szWin32ErrorTests.test_removecCs|�ttjtj�dSr")rZr5rr3rrFrHrrr�
test_chdir�szWin32ErrorTests.test_chdircCsR|�tjtj�ttjd��"}|�ttjtj�Wd�n1sD0YdS)Nr�)	rtrrGrFrrZr5rr2rPrrr�
test_mkdir�szWin32ErrorTests.test_mkdircCs|�ttjtjd�dSr")rZr5rr%rrFrHrrrr)�szWin32ErrorTests.test_utimecCs|�ttjtjd�dSr^)rZr5rr�rrFrHrrr�
test_chmod�szWin32ErrorTests.test_chmodN)
rArBrCrIrer�r�r�r)r�rrrrr��sr�c@s�eZdZgd�Zdd�ZeD]Zee�e�de<qdd�Ze�	e
ed�d�d	d
��Ze�	e
ed�d�d
d��Z
e�	e
ed�d�dd��Ze�	e
ed�d�dd��Ze�	e
ed�d�dd��Ze�	e
ed�d�dd��Ze�	e
ed�d �d!d"��Ze�	e
ed#�d$�d%d&��Ze�	e
ed'�d(�d)d*��Ze�	e
ed+�d,�d-d.��Ze�	e
ed/�d0�d1d2��Ze�	e
ed3�d4�d5d6��Ze�	e
ed7�d8�d9d:��Zd;d<�Ze�	e
ed=�d>�d?d@��ZdAS)B�
TestInvalidFD)	�fchdirrWr��	fdatasyncr�fstatvfs�fsync�	tcgetpgrp�ttynamecs�fdd�}|S)Ncstt��r|�tt���dSr")rrr�r�rH�rQrr�helper�s
z(TestInvalidFD.get_single.<locals>.helperr)rQr�rr�r�
get_single�szTestInvalidFD.get_singleZtest_c
Gs`z|t��g|�R�Wn4tyL}z|�|jtj�WYd}~nd}~00|�d|�dS)Nz5%r didn't raise an OSError with a bad file descriptor)r�make_bad_fdr5r.r6r�r�)r'rQr�r�rrrr��s&�zTestInvalidFD.check�isattyztest needs os.isatty()cCs|�t�t���d�dS�NF)r.rr�rr�rHrrr�test_isatty�szTestInvalidFD.test_isattyrYztest needs os.closerange()c	Csrt��}td�D].}zt�||�Wnty8Yq0q@q|dkrRt�d��|�t�	|||d�d�dS)NrTrUz5Unable to acquire a range of invalid file descriptorsrS)
rr�r�rrr5rr.r.rY)r'ror�rrrr]�s�zTestInvalidFD.test_closerange�dup2ztest needs os.dup2()cCs|�tjd�dS)N�)r�rr�rHrrr�	test_dup2�szTestInvalidFD.test_dup2�fchmodztest needs os.fchmod()cCs|�tjd�dSr^)r�rr�rHrrr�test_fchmod�szTestInvalidFD.test_fchmod�fchownztest needs os.fchown()cCs|�tjdd�dS)Nr�)r�rr�rHrrr�test_fchown�szTestInvalidFD.test_fchown�	fpathconfztest needs os.fpathconf()cCs |�tjd�|�tjd�dS)N�PC_NAME_MAX)r�r�pathconfr�rHrrr�test_fpathconf�szTestInvalidFD.test_fpathconf�	ftruncateztest needs os.ftruncate()cCs |�tjd�|�tjd�dSr^)r�r�truncater�rHrrr�test_ftruncate�szTestInvalidFD.test_ftruncaterkztest needs os.lseek()cCs|�tjdd�dSr^)r�rrkrHrrr�
test_lseek�szTestInvalidFD.test_lseekrlztest needs os.read()cCs|�tjd�dSrq)r�rrlrHrrrrq�szTestInvalidFD.test_read�readvztest needs os.readv()cCstd�}|�tj|g�dS)NrT)ryr�rr�)r'rHrrr�
test_readv�szTestInvalidFD.test_readv�	tcsetpgrpztest needs os.tcsetpgrp()cCs|�tjd�dSr^)r�rr�rHrrr�test_tcsetpgrpt�szTestInvalidFD.test_tcsetpgrptrztest needs os.write()cCs|�tjd�dS)N� )r�rrrHrrrr|szTestInvalidFD.test_write�writevztest needs os.writev()cCs|�tjdg�dS)Nr)r�rr�rHrrr�test_writevszTestInvalidFD.test_writevcCs|�tj�|�tjd�dS�NT)r�r�get_inheritable�set_inheritablerHrrr�test_inheritableszTestInvalidFD.test_inheritable�get_blocking�-needs os.get_blocking() and os.set_blocking()cCs|�tj�|�tjd�dSr�)r�rr��set_blockingrHrrr�
test_blockingszTestInvalidFD.test_blockingN)rArBrCZsinglesr�rQ�localsr�rrrrr�r]r�r�r�r�r�r�rqr�r�r|r�r�r�rrrrr��sH	












�r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�	LinkTestscCs tj|_tj�tjd�|_dS)Nr�)rrF�file1rr/r1�file2rHrrrrIszLinkTests.setUpcCs,|j|jfD]}tj�|�rt�|�qdSr")r�r�rr/r�rG)r'�filerrrr�szLinkTests.tearDownc
Cs�t|�zt�||�Wn2tyJ}z|�d|�WYd}~n
d}~00t|d��V}t|d��,}|�tj�|�	�|�	���Wd�n1s�0YWd�n1s�0YdS)N�
os.link(): %sr�)
r rr�r�rXrrMr/�sameopenfilerj)r'r�r�r�r�f2rrr�
_test_links$zLinkTests._test_linkcCs|�|j|j�dSr")r�r�r�rHrrr�	test_link'szLinkTests.test_linkcCs(|�t|jt���t|jt����dSr")r�r>r�r_r�r�rHrrr�test_link_bytes*s�zLinkTests.test_link_bytescCsZzt�d�Wnty*t�d��Yn0|jd7_|jd|_|�|j|j�dS)N�ñz#Unable to encode for this platform.r�)rr�UnicodeErrorrr.r�r�r�rHrrr�test_unicode_name.szLinkTests.test_unicode_nameN)	rArBrCrIr�r�r�r�r�rrrrr�s
r�zPosix specific testsc@s�eZdZdZdZe�eed�d�dd��Z	e�eed�d�dd	��Z
e�eed
�d�dd
��Ze�eed�d�dd��Ze�eed�d�dd��Z
e�eed�d�dd��Ze�eed�d�dd��Ze�eed�d�dd��ZdS)�PosixUidGidTests��setuidztest needs os.setuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dS�Nrz
not an int)r�getuidrZr5r�ra�
OverflowError�UID_OVERFLOWrHrrr�test_setuid>szPosixUidGidTests.test_setuid�setgidztest needs os.setgid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dSr�)	rr��HAVE_WHEEL_GROUPrZr5r�rar��GID_OVERFLOWrHrrr�test_setgidEszPosixUidGidTests.test_setgid�seteuidztest needs os.seteuid()cCsBt��dkr|�ttjd�|�ttjd�|�ttj|j�dSr�)	rr�rZr5r�ra�setegidr�r�rHrrr�test_seteuidLszPosixUidGidTests.test_seteuidr�ztest needs os.setegid()cCsFt��dkr ts |�ttjd�|�ttjd�|�ttj|j�dSr�)	rr�r�rZr5r�rar�r�rHrrr�test_setegidSszPosixUidGidTests.test_setegid�setreuidztest needs os.setreuid()cCsnt��dkr|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dSr�)rr�rZr5r�rar�r�rHrrr�
test_setreuidZszPosixUidGidTests.test_setreuidcCst�tjddg�dS)Nr�z,import os,sys;os.setreuid(-1,-1);sys.exit(0)�rrr_r�rHrrr�test_setreuid_neg1cs�z#PosixUidGidTests.test_setreuid_neg1�setregidztest needs os.setregid()cCsrt��dkr"ts"|�ttjdd�|�ttjdd�|�ttjdd�|�ttj|jd�|�ttjd|j�dSr�)	rr�r�rZr5r�rar�r�rHrrr�
test_setregidkszPosixUidGidTests.test_setregidcCst�tjddg�dS)Nr�z,import os,sys;os.setregid(-1,-1);sys.exit(0)r�rHrrr�test_setregid_neg1ts�z#PosixUidGidTests.test_setregid_neg1N)rArBrCr�r�rrrrr�r�r�r�r�r�r�r�rrrrr�8s$






r�c@sNeZdZdd�Zdd�Zdd�Zdd�Ze�e	e
d	�d
�dd��Zd
d�ZdS)�Pep383Testscs�tjrtj|_ntjr tj|_ntj|_t�|j�|_g��fdd�}|tj�tjr`|tj�tjrp|tj��s~|�	d�t
�|_t�|j�zL�D]B}t�
tj�|j|��t�|�}||jvr�td��|j�|�q�Wnt�|j��Yn0dS)Ncs2zt�|�}Wnty"YdS0��|�dSr")rrr�r�)�fn��bytesfnrr�add_filename�s
z'Pep383Tests.setUp.<locals>.add_filenamez&couldn't create any non-ascii filenamezduplicate filename)r�TESTFN_UNENCODABLEr�ZTESTFN_NONASCIIrFrrZbdirZTESTFN_UNICODErXr�	unicodefnr2Zcreate_empty_filer/r1r?r��add�shutilr)r'r�r�rr�rrI~s6







zPep383Tests.setUpcCst�|j�dSr")r�rr�rHrrrr��szPep383Tests.tearDownc	Csv|j}tt�|j��}|�||�t��}z:t�tj�|�tt���tt�tj���Wt�|�nt�|�0dSr")	r�rrr�r�r.r#r3r0)r'r:�foundZcurrent_directoryrrr�test_listdir�s"zPep383Tests.test_listdircCs.|jD]"}ttj�|j|�d�}|��qdS�Nrs)r�rrr/r1r�rL)r'r�rQrrr�	test_open�s
zPep383Tests.test_openr�r�cCs*|jD]}tj�|j|�}t�|�qdSr")r�rr/r1r�r�)r'r��fullnamerrr�test_statvfs�s
zPep383Tests.test_statvfscCs&|jD]}t�tj�|j|��qdSr")r�rr�r/r1r�)r'r�rrr�	test_stat�s
zPep383Tests.test_statN)
rArBrCrIr�rrrrrrrrrrrrr�|s%�
r�c@sFeZdZdd�Zdd�Zdd�Zdd�Ze�d	�d
d��Z	dd
�Z
dS)�Win32KillTestscCsvddl}ddlm}ddl}|jjj}|j|_|j|�	|j
�|j|�	|j�|�	|j�|�	|j�f|_d}t
jtjdd�|�gt
jt
jt
jd�}|�|jj�|�|jj�|�|jj�d\}}	||	k�rJ|��du�rJ|�t|��}
||�|j���|
|�|
�ddd�}|�|dd�|
j�r6|� ||
j�!���qTt"�#d	�|d
7}q�|�$d�t%�&|j'|�|� |�(�|�dS)Nr��wintypes�runningr�z<import sys;sys.stdout.write('{}');sys.stdout.flush();input())r��stderr�stdin�rr�zPeekNamedPipe failed皙�����?rSz1Did not receive communication from the subprocess))rDr�msvcrtrErF�
PeekNamedPipe�BOOL�restype�HANDLE�POINTERZc_char�DWORD�argtypesr�Popenr_r�rur�rtr�rLr
r�pollZcreate_string_bufferr,Z
get_osfhandlerjZsizeofrr�r.r�r;�sleepr�r�kill�pid�wait)r'ZsigrDrrrr:r�rf�maxrHZrsltrrr�_kill�sP




�
����


zWin32KillTests._killcCs|�tj�dSr")r�signal�SIGTERMrHrrr�test_kill_sigterm�sz Win32KillTests.test_kill_sigtermcCs|�d�dS)Nr�)rrHrrr�
test_kill_int	szWin32KillTests.test_kill_intcCs�dt��}t�dd|�}d|d<tjtjtj�	tj�
t�d�|gtjd�}d\}}||kr�|�
�dur�|ddkrvq�t�d�|d7}qTt�|jtj�|�d	�t�|j|�t�d
�|�
�s�t�|jtj�|�d�|��dS)Nz
test_os_%sr�rSrzwin_console_handler.pyr	rr
z'Subprocess didn't finish initializationg�?zsubprocess did not stop on {})�uuidZuuid1�mmaprrr_r�rr/r1r9r�ZCREATE_NEW_PROCESS_GROUPrr;rrrr�SIGINTr�ru)r'ZeventrZtagname�mr�rfrrrr�_kill_with_event	s0���



zWin32KillTests._kill_with_eventz.subprocesses aren't inheriting Ctrl+C propertycCsdddlm}ddl}|�|j��}|jjj}|�|j�|jf|_|j|_	||d�|�
tjd�dS)Nrr�CTRL_C_EVENT)
rDrrZc_intrErF�SetConsoleCtrlHandlerrrrr&rr')r'rrDZNULLr(rrr�test_CTRL_C_EVENT!	s

�
z Win32KillTests.test_CTRL_C_EVENTcCs|�tjd�dS)N�CTRL_BREAK_EVENT)r&rr*rHrrr�test_CTRL_BREAK_EVENT4	sz$Win32KillTests.test_CTRL_BREAK_EVENTN)rArBrCrr r!r&r�skipr)r+rrrrr�s6
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�Win32ListdirTestsc	Cs�g|_td�D]�}d|}tj�tj|�}d|}tj�tj|�}t�|�t|ddd��}|�	d|�Wd�n1s~0Y|j�
||g�q|j��dS)NrUzSUB%dzFILE%drr�r�z'I'm %s and proud of it. Blame test_os.
)�
created_pathsr�rr/r1rrFr�rr�extendr�)r'r�Zdir_nameZdir_path�	file_nameZ	file_pathrQrrrrI<	s
,zWin32ListdirTests.setUpcCst�tj�dSr")r�rrrFrHrrrr�I	szWin32ListdirTests.tearDowncCsH|�tt�tj��|j�|�tt�t�tj���dd�|jD��dS)NcSsg|]}t�|��qSr�rr�rr/rrrr	V	r
zCWin32ListdirTests.test_listdir_no_extended_path.<locals>.<listcomp>)r.�sortedrr�rrFr.rrHrrr�test_listdir_no_extended_pathL	s��z/Win32ListdirTests.test_listdir_no_extended_pathcCshdtj�tj�}|�tt�|��|j�dt�	tj�tj��}|�tt�|��dd�|jD��dS)N�\\?\�\\?\cSsg|]}t�|��qSrr1r2rrrr	e	r
z@Win32ListdirTests.test_listdir_extended_path.<locals>.<listcomp>)
rr/rCrrFr.r3r�r.rr5rrr�test_listdir_extended_pathX	s��z,Win32ListdirTests.test_listdir_extended_pathN)rArBrCrIr�r4r7rrrrr-8	s
r-�readlinkzneeds os.readlink()c@szeZdZdZej�e�Ze�	e�Z
e�	e�Zdd�Zdd�Z
dd�Zdd	�Zejd
d��Zejdd
��Zejdd��ZdS)�
ReadlinkTestsZreadlinktestcCsbtj�|�}tj�|�}tjdkrRdd�}||�r>|dd�}||�rR|dd�}|�||�dS)Nr�cSs|�t|t�rdnd�S)Nr6r5)�
startswithr�r>)r�rrr�<lambda>u	s�z/ReadlinkTests.assertPathEqual.<locals>.<lambda>rh)rr/�normcaser_r�r.)r'�left�rightZ
has_prefixrrr�assertPathEqualo	s
zReadlinkTests.assertPathEqualcCsT|�tj�|j��|�tj�|j��|�tj�|j��|�tj�|j��dSr")	rMrr/r��filelink_target�filelinkb_targetrS�filelink�	filelinkbrHrrrrI}	szReadlinkTests.setUpcCs0t|j�}|�ttj|j�|�ttj|�dSr")rr@rZr5rr8)r'r@rrr�test_not_symlink�	s
zReadlinkTests.test_not_symlinkcCs(|�ttjd�|�ttjtd��dS)Nzmissing-link)rZr4rr8rrHrrr�test_missing_link�	s
�zReadlinkTests.test_missing_linkcCsBt�|j|j�|�tj|j�t|j�}|�t�	|�|j�dSr")
rr�r@rBrtrrGrr?r8)r'rBrrr�
test_pathlike�	s
zReadlinkTests.test_pathlikecCsNt�|j|j�|�tj|j�t�t|j��}|�	||j�|�
|t�dSr")rr�rArCrtrrGr8rr?r$r>r5rrr�test_pathlike_bytes�	s
z!ReadlinkTests.test_pathlike_bytescCsJt�|j|j�|�tj|j�t�|j�}|�||j�|�	|t
�dSr")rr�rArCrtrrGr8r?r$r>r5rrr�
test_bytes�	s
zReadlinkTests.test_bytesN)rArBrCrBrr/rCr�r@rrCrAr?rIrDrEr�skip_unless_symlinkrFrGrHrrrrr9h	s



r9c@s�eZdZdZej�e�ZdZ	ej�
e�ZdZdd�Z
dd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Ze�ej�d�o�ej�d�d�dd��Zdd�Zdd �Zd!S)"�Win32SymlinkTestsZfilelinktestZdirlinktestzmissing linkcCsdSr"rrHrrrrI�	szWin32SymlinkTests.setUpcCsRtj�|j�rt�|j�tj�|j�r4t�|j�tj�|j�rNt�|j�dSr")	rr/r�rBr��dirlinkrrE�missing_linkrHrrrr��	szWin32SymlinkTests.tearDowncCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dSr")
rr��dirlink_targetrKrMr/r�r!�islink�
check_statrHrrr�test_directory_link�	s
z%Win32SymlinkTests.test_directory_linkcCs`t�|j|j�|�tj�|j��|�tj�|j��|�tj�|j��|�	|j|j�dSr")
rr�r@rBrMr/r��isfilerNrOrHrrr�test_file_link�	s
z Win32SymlinkTests.test_file_linkcCs6|j}tj�|�rt�|�d}d}t�|||�dS)Nz"c:\\target does not exist.29r3c740T)rLrr/rEr�r�)r'Zlinknamer�Z
target_is_dirrrr�_create_missing_dir_link�	s
z*Win32SymlinkTests._create_missing_dir_linkcCs|��t�|j�dSr")rSrr�rLrHrrr�,test_remove_directory_link_to_missing_target�	sz>Win32SymlinkTests.test_remove_directory_link_to_missing_targetcCs |��|�tj�|j��dSr")rSrSrr/r!rLrHrrr�.test_isdir_on_directory_link_to_missing_target�	sz@Win32SymlinkTests.test_isdir_on_directory_link_to_missing_targetcCs|��t�|j�dSr")rSrrrLrHrrr�.test_rmdir_on_directory_link_to_missing_target�	sz@Win32SymlinkTests.test_rmdir_on_directory_link_to_missing_targetcCsn|�t�|�t�|��|�t�|�t�|��t�|�}|�t�|�t�|��|�t�|�t�|��dSr")r.rr�rr-r)r'r�r�Z
bytes_linkrrrrO�	s

zWin32SymlinkTests.check_statc	CsJtj�tj�}tj�|d�}tj�|d�}|�tj|�t�|�t�|�t�|�tj�tj�|d��}t	|�t�
�}z�t�|�tj�|d�}t�tj�
|�d�|�dt�t�
���|�t�|�t�d��t�|�|�t�|�t�tj�
|���t�|�|�t�|�t�tj�
|���Wt�|�nt�|�0dS)N�level2�level3r�r�)rr/rCrrFr1rtrr2r r#r3r��relpathr�r�r.r�)r'Zlevel1rWrXr�Zorig_dirr�rrr�
test_12084�	s2




�
�zWin32SymlinkTests.test_12084�C:\Users\All Users�C:\ProgramDatazTest directories not foundcCs"t�d�}|�tj�|d��dS)Nr[r\)rr8rMr/�samefile)r'r�rrr�
test_29248
s
zWin32SymlinkTests.test_29248c	Cs�d}tjj|gd�}d||f||f|dd�|dd�fg}|D]�\}}zt�||�WntynYn$0zt�|�Wnty�Yn0zt�t�|�t�|��Wnty�YqD0zt�|�WqDty�YqD0qDdS)NZXXXXXXXXXXXXXXXXXXXXXXXXXXXrTrA�)rr/r1r�r4r�r5r)r'Zsegmentr/Z
test_casesr��destrrr�test_buffer_overflow
s.
�z&Win32SymlinkTests.test_buffer_overflowcs�tj�d��tj���s"|�d��fdd�t�t���d�D�}|D]\}tj	r`t
�t
d|�t�|�}|�|t�
|��|�t
�|j��|�|jt
j�q�qF|�d�dS)Nz$%LOCALAPPDATA%\Microsoft\WindowsAppsz%test requires a WindowsApps directorycsg|]}tj��|��qSr)rr/r1�rr+�rGrrr	F
s�z6Win32SymlinkTests.test_appexeclink.<locals>.<listcomp>z*.exezTesting withz$test requires an app execution alias)rr/�
expandvarsr!rX�fnmatch�filterr�rr7r8r-r.r�rS�S_ISLNKr�Zst_reparse_tagZIO_REPARSE_TAG_APPEXECLINK)r'�aliases�aliasrrrcr�test_appexeclinkA
s 

�

z"Win32SymlinkTests.test_appexeclinkN)rArBrCrBrr/rCr�r@rKr9rMrLrIr�rPrRrSrTrUrVrOrZrrrEr�r^rarjrrrrrJ�	s,
#
�
#rJc@sDeZdZdZej�ej�e��Z	dd�Z
dd�Zdd�Zdd	�Z
d
S)�Win32JunctionTestsZjunctiontestcCsdSr"rrHrrrrI[
szWin32JunctionTests.setUpcCstj�|j�rt�|j�dSr")rr/rE�junctionrGrHrrrr�_
szWin32JunctionTests.tearDowncCs�t�|j|j�|�tj�|j��|�tj�|j��|�tj�	|j��|�
t�|j�t�|j��|�
t�|j�t�|j��|�tj�|j��|�
tj�d|j�tj�t�|j���dS)Nr5)�_winapi�CreateJunction�junction_targetrlrMrr/rEr�r!rr�r-r.rSrNr<r8rHrrr�test_create_junctionc
s�z'Win32JunctionTests.test_create_junctioncCs\t�|j|j�|�tj�|j��|�tj�|j��t�	|j�|�
tj�|j��dSr")rmrnrorlrMrr/r�rErGrSrHrrr�test_unlink_removes_junctionp
s
z/Win32JunctionTests.test_unlink_removes_junctionN)rArBrCrlrr/r9rCr�rorIr�rprqrrrrrkV
s
rkc@seZdZdd�Zdd�ZdS)�Win32NtTestsc
Cs,t�d�}t�d�}ddl}|jddd�}|jj|j_|jj|j	_|jj|jj
f|j	_|��}|j��}|�	||�
|��}|�d|�|j}dd	d
tg}td�D]R}	|D]H}
z|�|
�Wnty�Yn0zt�|
�Wq�ty�Yq�0q�q�|�	||�
|��}|�d|�|j|}|�d|�dS)Nr rDrzKernel32.dllT)Zuse_last_errorrSz\\?\C:z\\?\NULz	\\?\CONINrT)r�
import_moduleZctypes.wintypesZWinDLLrrZGetCurrentProcessrrZGetProcessHandleCountZLPDWORDrrZbyrefr.r�r�r�Z_getfinalpathname�	Exceptionrr�)r'r rDZkernelZhprocZhandle_countrIZbefore_count�	filenames�_rZhandle_deltarrr�test_getfinalpathname_handlesz
sB

�
�

z*Win32NtTests.test_getfinalpathname_handlescCs�tj}|�tj|�t��d}t�d�}t�t	j
d||t|�g��~}t��|kr�zt�
|�WqFty�}zWYd}~qFd}~00qFz|�d�Wntjy�|��Yn0Wd�n1s�0YdS)Nr�a�            import os
            import sys
            import time

            filename = sys.argv[1]
            deadline = float(sys.argv[2])

            while time.time() < deadline:
                try:
                    with open(filename, "w") as f:
                        pass
                except OSError:
                    pass
                try:
                    os.remove(filename)
                except OSError:
                    pass
            r�rS)rrFrtrGr;�textwrap�dedentrrr_r�r%rr�r4rZTimeoutExpiredZ	terminate)r'rZdeadlineZcommandr�r�rrr�test_stat_unlink_race�
s
z"Win32NtTests.test_stat_unlink_raceN)rArBrCrwrzrrrrrrx
s0rrc@s$eZdZdd�Zdd�Zdd�ZdS)�NonLocalSymlinkTestscCst�d�dS)Nz
base/some_dir)rr�rHrrrrI�
szNonLocalSymlinkTests.setUpcCst�d�dS)Nr�)r�rrHrrrr��
szNonLocalSymlinkTests.tearDowncCstj�dd�}t�d|�dS)Nr�Z	some_linkZsome_dir)rr/r1r�)r'r�rrr�test_directory_link_nonlocal�
sz1NonLocalSymlinkTests.test_directory_link_nonlocalN)rArBrCrIr�r|rrrrr{�
s	r{c@seZdZdd�Zdd�ZdS)�FSEncodingTestscCs(|�t�d�d�|�t�d�d�dS)Nsabc�uabcŁ)r.rrr?rHrrr�test_nop�
szFSEncodingTests.test_nopc	CsFdD]<}zt�|�}Wnty,YqYn0|�t�|�|�qdS)N)u	unicodeŁulatiné�ascii)rrr�r.r?)r'r�r�rrr�
test_identity�
s
zFSEncodingTests.test_identityN)rArBrCr~r�rrrrr}�
sr}c@sVeZdZdd�Ze�e�d�oDe�oDe	j
�d�pDee
d�oDee
d�d�dd	��Zd
S)�DeviceEncodingTestscCs|�t�d��dS)Ni@�)r@r�device_encodingrHrrr�test_bad_fdszDeviceEncodingTests.test_bad_fdr�win�nl_langinfo�CODESETz>test requires a tty and either Windows or nl_langinfo(CODESET)cCs(t�d�}|�|�|�t�|��dSr^)rr�ZassertIsNotNonerM�codecs�lookup)r'r�rrr�test_device_encoding
s

z(DeviceEncodingTests.test_device_encodingN)rArBrCr�rrrr�rr_r�r:r�localer�rrrrr�s"�r�c@s�eZdZe�eed�d�dd��Zddd�Zdd	�Z	d
d�Z
e�ejdkd
�dd��Z
e�ejdkd
�dd��Ze�eed�d�dd��ZdS)�PidTests�getppidztest needs os.getppidcCs<tjtjddgtjd�}|��\}}|�t|�t�	��dS)Nr�zimport os; print(os.getppid()))r�)
rrr_r�r�Zcommunicater.r�r�getpid)r'r�r�rvrrr�test_getppids
��zPidTests.test_getppidNcCs�tjdkr(dtj�d�dd|�d�g}ntjd|g}t�tjtj|�}|durV||�t�|d�\}}|�t�|�|�|�||�dS)Nr��"r�r)	r_r�r�r�spawnv�P_NOWAIT�waitpidr.�waitstatus_to_exitcode)r'r��exitcode�callbackr�rZpid2Zstatusrrr�
check_waitpids
zPidTests.check_waitpidcCs|jddd�dS)Nr�r)r�r��r�rHrrr�test_waitpid/szPidTests.test_waitpidcCsVd}d|�d�}|j||d�|�t��t�d�Wd�n1sH0YdS)N�zimport sys; sys.exit(�)�r�g)r�rZrarr�)r'r�r�rrr�test_waitstatus_to_exitcode2s
z$PidTests.test_waitstatus_to_exitcoder��win32-specific testcCs"d}d|�d�}|j||d�dS)Nl:z$import _winapi; _winapi.ExitProcess(r�r�r�)r'ZSTATUS_CONTROL_C_EXITr�rrr�test_waitpid_windows:szPidTests.test_waitpid_windowscCs�d}ddd|fD]}|�t�|d>�|�q|�t��"t�|dd>�Wd�n1s^0Y|�t��t�d�Wd�n1s�0YdS)NrrrSr�r�r�)r.rr�rZr�r�)r'Zmax_exitcoder�rrr�#test_waitstatus_to_exitcode_windowsBs�0z,PidTests.test_waitstatus_to_exitcode_windows�SIGKILLzneed signal.SIGKILLcs6dtj�d�}tj��fdd�}|j|�|d�dS)Nzimport time; time.sleep(r�cst�|��dSr")rr)r�Zsignumrr�kill_processUsz?PidTests.test_waitstatus_to_exitcode_kill.<locals>.kill_process)r�r�)rZLONG_TIMEOUTrr�r�)r'r�r�rr�r� test_waitstatus_to_exitcode_killPsz)PidTests.test_waitstatus_to_exitcode_kill)N)rArBrCrrrrr�r�r�r�r_r�r�r�rr�rrrrr�s




r�c@s$eZdZddd�dd�Zed�dd��Zed�d	d
��Zed�dd
��Zed�dd��Zed�dd��Z	ed�dd��Z
ed�dd��Zed�dd��Zed�dd��Z
ed�dd ��Zed�d!d"��Zed�d#d$��Zed�d%d&��Zed�d'd(��Zd)d*�Zed�d+d,��Zed�d-d.��Zd/S)0�
SpawnTestsF��with_env�	use_bytescCs�d|_tj}|�tj|�|s*d|j}n8ttj�|_t	t
���|_|j|j|j<d|j|jf}t
|d��}|�|�Wd�n1s�0Ytj|g}|r�dd�|D�}dd�|j��D�|_|S)	N�zimport sys; sys.exit(%s)z4import sys, os; magic = os.environ[%r]; sys.exit(%s)rcSsg|]}t�|��qSrr1rbrrrr	rr
z*SpawnTests.create_args.<locals>.<listcomp>cSs"i|]\}}t�|�t�|��qSrr1)r�k�vrrr�
<dictcomp>ss�z*SpawnTests.create_args.<locals>.<dictcomp>)r�rrFrtrGr\rr
rxr%r"Zuuid4rdrrr_r�rb)r'r�r�rr�rr�rrr�create_args\s(
�(
�zSpawnTests.create_args�spawnlcCs4|��}tjtj|dg|�R�}|�||j�dSr^)r�rr��P_WAITr.r��r'r�r�rrr�test_spawnlxszSpawnTests.test_spawnl�spawnlecCs>|jdd�}tjtj|dg|�|j�R�}|�||j�dS�NT)r�r)r�rr�r�rxr.r�r�rrr�test_spawnle~s zSpawnTests.test_spawnle�spawnlpcCs4|��}tjtj|dg|�R�}|�||j�dSr^)r�rr�r�r.r�r�rrr�test_spawnlp�szSpawnTests.test_spawnlp�spawnlpecCs>|jdd�}tjtj|dg|�|j�R�}|�||j�dSr�)r�rr�r�rxr.r�r�rrr�
test_spawnlpe�s zSpawnTests.test_spawnlper�cCsT|��}t�tj|d|�}|�||j�t�tjt|d�|�}|�||j�dSr^)r�rr�r�r.r�rr�rrr�test_spawnv�s
zSpawnTests.test_spawnv�spawnvecCs6|jdd�}t�tj|d||j�}|�||j�dSr��r�rr�r�rxr.r�r�rrr�test_spawnve�szSpawnTests.test_spawnve�spawnvpcCs.|��}t�tj|d|�}|�||j�dSr^)r�rr�r�r.r�r�rrr�test_spawnvp�szSpawnTests.test_spawnvp�spawnvpecCs6|jdd�}t�tj|d||j�}|�||j�dSr�)r�rr�r�rxr.r�r�rrr�
test_spawnvpe�szSpawnTests.test_spawnvpecCs0|��}t�tj|d|�}tj||jd�dS)Nrr�)r�rr�r�rZwait_processr�)r'r�rrrr�test_nowait�szSpawnTests.test_nowaitcCs8|jddd�}t�tj|d||j�}|�||j�dS)NTr�rr�r�rrr�test_spawnve_bytes�szSpawnTests.test_spawnve_bytescCs>|��}|�ttjtj|d�|�ttjtj|dd�dS�NrrB)r�rZr�rr�r��r'r�rrr�test_spawnl_noargs�szSpawnTests.test_spawnl_noargscCsB|��}|�ttjtj|di�|�ttjtj|ddi�dSr�)r�rZr�rr�r�r�rrr�test_spawnle_noargs�szSpawnTests.test_spawnle_noargscCsv|��}|�ttjtj|dd�|�ttjtj|dg�|�ttjtj|dd�|�ttjtj|ddg�dS�Nrrr|rB)r�rZr�rr�r�r�rrr�test_spawnv_noargs�s
zSpawnTests.test_spawnv_noargscCs~|��}|�ttjtj|ddi�|�ttjtj|dgi�|�ttjtj|ddi�|�ttjtj|ddgi�dSr�)r�rZr�rr�r�r�rrr�test_spawnve_noargs�s
zSpawnTests.test_spawnve_noargscCsttjddg}tj��}d|d<z|tj|d||�}WntyHYn0|�|d�tj��}d|d<z|tj|d||�}Wnty�Yn0|�|d�tj��}d	|d
<z|tj|d||�}Wnty�Yn0|�|d�tj	}|�
tj|�t|d��}|�
d�Wd�n1�s*0Ytj|g}tj��}d
|d<|tj|d||�}|�|d�dS)Nr�r�r�r�r�r�r�r�r�rzPimport sys, os
if os.getenv("FRUIT") != "orange=lemon":
    raise AssertionErrorzorange=lemon)r_r�rr
r�r�r�r.rrFrtrGrr)r'Zspawnr�r�r�rrrrr�_test_invalid_env�s>


*

zSpawnTests._test_invalid_envcCs|�tj�dSr")r�rr�rHrrr�test_spawnve_invalid_envsz#SpawnTests.test_spawnve_invalid_envcCs|�tj�dSr")r�rr�rHrrr�test_spawnvpe_invalid_envsz$SpawnTests.test_spawnvpe_invalid_envN)rArBrCr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�[sD




	








.
r�z>Skip due to platform/environment differences on *NIX buildbots�getloginztest needs os.getloginc@seZdZdd�ZdS)�
LoginTestscCst��}|�t|�d�dSr^)rr�rr,)r'Z	user_namerrr�
test_getloginszLoginTests.test_getloginN)rArBrCr�rrrrr�sr��getpriority�setpriorityz'needs os.getpriority and os.setpriorityc@seZdZdd�ZdS)�ProgramPriorityTestscCst�tjt���}t�tjt��|d�z�t�tjt���}|dkr^|dkr^t�d|��n|�||d�Wzt�tjt��|�Wn2ty�}z|j	t	j
kr��WYd}~n
d}~00nPzt�tjt��|�Wn4t�y
}z|j	t	j
kr��WYd}~n
d}~000dS)NrS�z?unable to reliably test setpriority at current nice level of %s)rr��PRIO_PROCESSr�r�rr.r.r5r6ZEACCES)r'r�Znew_priorzrrr�test_set_get_prioritys&��z*ProgramPriorityTests.test_set_get_priorityN)rArBrCr�rrrrr�sr�c@sveZdZGdd�dej�Zdd�Zedd��Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZeZdd�Zdd�ZdS)�SendfileTestServerc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)zSendfileTestServer.HandlercCs.tj�||�g|_d|_d|_|�d�dS)NTFs220 ready
)�asynchat�
async_chat�__init__�	in_buffer�
accumulate�closed�push)r'�connrrrr�2s
z#SendfileTestServer.Handler.__init__cCs |�d�}|jr|j�|�dS)N�)�recvr�r�r�rkrrr�handle_read9s
z&SendfileTestServer.Handler.handle_readcCsd�|j�S)Nr
)r1r�rHrrr�get_data>sz#SendfileTestServer.Handler.get_datacCs|��d|_dSr�)rLr�rHrrr�handle_closeAsz'SendfileTestServer.Handler.handle_closecCs�dSr"rrHrrr�handle_errorEsz'SendfileTestServer.Handler.handle_errorN)rArBrCr�r�r�r�r�rrrr�Handler0s
r�cCsptj�|�tj�|�|�tjtj�|�	|�|�
d�|j��dd�\|_|_
d|_d|_t��|_dS)Nr�rUF)�	threading�Threadr��asyncore�
dispatcherZ
create_socket�socketZAF_INETZSOCK_STREAMZbindZlistenZgetsockname�host�port�handler_instance�_activeZLock�_active_lock)r'Zaddressrrrr�Hs

zSendfileTestServer.__init__cCs|jSr")r�rHrrrr	UszSendfileTestServer.runningcCs$t��|_tj�|�|j��dSr")r�ZEvent�_SendfileTestServer__flagr��startrrHrrrr�Ys
zSendfileTestServer.startcCsd|_|��dSr�)r�r1rHrrr�stop_szSendfileTestServer.stopcCs&t|jdd�st�d�q|��dS)Nr�F���MbP?)r�r�r;rr�rHrrrrdszSendfileTestServer.waitcCsLd|_|j��|jr@tjr@|j��tjddd�|j��qt�	�dS)NTr�rS)Ztimeoutrf)
r�r�rr�Z
socket_mapr��acquireZloop�releaseZ	close_allrHrrrr�ls

zSendfileTestServer.runcCs|��\}}|�|�|_dSr")Zacceptr�r�)r'r�Zaddrrrr�
handle_acceptusz SendfileTestServer.handle_acceptcCs|��dSr")rLrHrrr�handle_connectysz!SendfileTestServer.handle_connectcCsdSr^rrHrrr�writable}szSendfileTestServer.writablecCs�dSr"rrHrrrr��szSendfileTestServer.handle_errorN)rArBrCr�r�r�r��propertyr	r�r�rr�r�r�r�r�r�rrrrr�.s

	r��sendfileztest needs os.sendfile()c@s
eZdZddZej�d�o8ej�d�o8ej�d�Ze�	ed�Z
e�	ejdkd�Ze
d	d
��Ze
dd��Zd
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Ze
dd��Ze
dd ��Ze
ed!d"���Ze
ed#d$���Ze
e�	eed%�d&�d'd(���Zd)S)*�TestSendfiles�12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde�ZlinuxZsolarisZsunosz%requires headers and trailers supportr�z(test is only meaningful on 32-bit buildscCst��|_ttj|j�dSr")rZthreading_setuprdr rF�DATAr8rrrr:�s
zTestSendfile.setUpClasscCstj|j�t�tj�dSr")rZthreading_cleanuprdrGrFr8rrrrM�szTestSendfile.tearDownClasscCs~ttjdf�|_|j��t��|_|j�|jj|jj	f�|j�
d�|j�d�|j��|_
ttjd�|_|j��|_dS)NrrSr�rs)r�rZHOST�serverr�r��clientZconnectr�r�Z
settimeoutr�rj�socknorrrFr�rHrrrrI�s

zTestSendfile.setUpcCs0|j��|j��|jjr&|j��d|_dSr")r�rLr�r�r	r�rHrrrr��s



zTestSendfile.tearDownc
Ospztj|i|��WStyh}z>|jtjkr2�n"|jtjtjfvrRWYd}~qn�WYd}~qd}~00qdSr")rr�r5r6Z
ECONNRESET�EAGAIN�EBUSY)r'r�r�rzrrr�sendfile_wrapper�szTestSendfile.sendfile_wrappercCs�d}d}d}|t|j�krd|�|j|j||�}|dkr8qd||7}||7}|�||k�|�||�q|�|t|j��|j�t	j
�|j��|j�
�|jj��}|�t|�t|j��|�||j�dS)Nrr�)r,r�rrrjrMr.r��shutdownr��	SHUT_RDWRrLr�rr�r�)r'�
total_sent�offset�nbytes�sentrurrr�test_send_whole_file�s$

z!TestSendfile.test_send_whole_filecCs�d}t|j�d}t|j�|}d}||krj|�|j|j||�}|dkrJqj||7}||7}|�||k�q$|j�tj	�|j�
�|j��|jj
��}|jt|j�dd�}|�|t|��|�t|�t|��|�||�dS)NrrUr�)r,r�rrrjrMr�rr�rrLr�rr�r�r.)r'rrZ	must_sendrr	rur:rrr�test_send_at_certain_offset�s&

z(TestSendfile.test_send_at_certain_offsetc
Cs�t|j�d}zt�|j|j|d�}Wn2tyX}z|jtjkrD�WYd}~nd}~00|�	|d�|j
�tj
�|j
��|j��|jj��}|�	|d�dS)Nr�rr
)r,r�rr�rrjr5r6�EINVALr.r�rr�rrLr�rr�r�)r'rr	r�rurrr�test_offset_overflow�s

z!TestSendfile.test_offset_overflowcCsT|�t��$}t�|j|jdd�Wd�n1s40Y|�|jjtj	�dS)Nr�r�)
rZr5rr�rrjr.r�r6r�r'r�rrr�test_invalid_offset�s2z TestSendfile.test_invalid_offsetc	Cs<tj|j|jddd�|jr8tj|j|jdddddd�dS)Nrr�)r�r�rrfr)r�r�rrf�headers�trailersr�)rr�rrj�SUPPORT_HEADERS_TRAILERSrHrrr�
test_keywords
s��zTestSendfile.test_keywordscCs�d}d|jdd�}tj|j|jddddgd�}|�|d�||7}d}|t|�kr�tt|�|d�}|�|j|j||�}|dkr�q�|�||�||7}||7}qJ|�	|t|��|j
��|j�
�|jj��}|�	t|�t|��dS)	Nrsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr�r�sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy�ri)r�rr�rrjZassertLessEqualr,�minrr.r�rLr�rr�r��hash)r'rZ
expected_datar	rrrurrr�test_headers
s.��


zTestSendfile.test_headerscCs�tjd}d}|�tj|�t||�t|d��Z}tj|j|�	�ddddgd�|j
��|j�
�|jj��}|�|d	�Wd�n1s�0YdS)
Nr�sabcdefrsrr�s123456s789�rsabcde123456789)rrFrtrGr rrr�rrjr�rLr�rr�r�r.)r'r�Z	file_datarQrurrr�
test_trailers%
s

�

zTestSendfile.test_trailerscCsld|jj_|�t��2}tj|j|jddddgdd�Wd�n1sL0Y|�	|j
jtj�dS)NFr�x�r�r�
r�r�r�rZr5rr�rrjr.r�r6rrrrr�test_headers_overflow_32bits5
s
�$z)TestSendfile.test_headers_overflow_32bitscCsld|jj_|�t��2}tj|j|jddddgdd�Wd�n1sL0Y|�	|j
jtj�dS)NFrrrr�rrrrrr�test_trailers_overflow_32bits>
s
�$z*TestSendfile.test_trailers_overflow_32bits�SF_NODISKIOztest needs os.SF_NODISKIOc
Cs\ztj|j|jddtjd�Wn8tyV}z |jtjtjfvrB�WYd}~n
d}~00dS)Nrr�)r�)	rr�rrjrr5r6rr)r'rzrrr�
test_flagsG
s�
zTestSendfile.test_flagsN)rArBrCr�r_r�r:rrrZrequires_headers_trailers�maxsizeZrequires_32brNr:rMrIr�rr
rr
rrrrrrrrr rrrrr��sN����



�r�c	Cs�ttd�sdSz�ttjdd��V}zt�|��dd�Wn.tydYWd�Wt�tj�dS0Wd�n1sz0YWt�tj�nt�tj�0dS)N�setxattrFrr�	user.testr
T)	rrrrrFr"rjr5rG)rrrr�supports_extended_attributesS
s
�&r$z(no non-broken extended attribute supportrUr��'c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ExtendedAttributeTestsc
KsJtj}|�tj|�t|�|�t��&}|||d�fi|��Wd�n1sR0Y|�|jj	t	j
�||�}	|�|	t�|||d�dfi|��t
|	�}
|
�d�|�t
||��|
�|�||dfi|��d�|||d�dtjfi|��|�||dfi|��d�|�t��,}|||d�dtjfi|��Wd�n1�sN0Y|�|jj	t	j�|�t��,}|||d�dtjfi|��Wd�n1�s�0Y|�|jj	t	j
�|||d�dtjfi|��|
�d�|�t
||��|
�|||d�fi|��|�t��&}|||d�fi|��Wd�n1�sL0Y|�|jj	t	j
�|
�d�|�t
||��|
�|�|||d�fi|��d�|||d�dfi|��|�|||d�fi|��d�|||d�fi|��td	d
�td�D��}|D]}|||dfi|���q
|�t
||��t
|	�t
|�B�dS)
N�	user.testr
r#r[sbyez
user.test2sfoosaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacss|]}d�|�VqdS)zuser.test{}Nrt)rr�rrrrv�
r
z;ExtendedAttributeTests._check_xattrs_str.<locals>.<genexpr>r�r)rrFrtrGr rZr5r.r�r6ZENODATAr$r�rr�r�
XATTR_REPLACE�XATTR_CREATEZEEXISTr�r3r�)
r'rp�getxattrr"�removexattr�	listxattrr�r�r�Z
init_xattrZxattr�many�thingrrr�_check_xattrs_stri
sL4
<<
6
z(ExtendedAttributeTests._check_xattrs_strcOsN|jtg|�Ri|��t�tj�|jtjg|�Ri|��t�tj�dSr")r/r%rrGrFrrrrrr�
_check_xattrs�
sz$ExtendedAttributeTests._check_xattrscCs|�tjtjtjtj�dSr"�r0rr*r"r+r,rHrrr�test_simple�
s�z"ExtendedAttributeTests.test_simplecCs |jtjtjtjtjdd�dS)NFrLr1rHrrr�
test_lpath�
s�z!ExtendedAttributeTests.test_lpathcCs4dd�}dd�}dd�}dd�}|�||||�dS)	NcWsDt|d��&}tj|��g|�R�Wd�S1s60YdSr)rrr*rj�r/r�rrrrr*�
sz1ExtendedAttributeTests.test_fds.<locals>.getxattrcWsFt|dd��&}tj|��g|�R�Wd�n1s80YdS�Nr3r)rrr"rjr4rrrr"�
sz1ExtendedAttributeTests.test_fds.<locals>.setxattrcWsFt|dd��&}tj|��g|�R�Wd�n1s80YdSr5)rrr+rjr4rrrr+�
sz4ExtendedAttributeTests.test_fds.<locals>.removexattrcWsDt|d��&}tj|��g|�R�Wd�S1s60YdSr)rrr,rjr4rrrr,�
sz2ExtendedAttributeTests.test_fds.<locals>.listxattr)r0)r'r*r"r+r,rrr�test_fds�
s
zExtendedAttributeTests.test_fdsN)rArBrCr/r0r2r3r6rrrrr&c
s
0r&�get_terminal_sizezrequires os.get_terminal_sizec@seZdZdd�Zdd�ZdS)�
TermsizeTestsc
Cszzt��}WnLtyX}z4tjdks8|jtjtjfvrB|�d��WYd}~n
d}~00|�	|j
d�|�	|jd�dS)Nr��failed to query terminal sizer)rr7r5r_r�r6r�ENOTTYrXZassertGreaterEqual�columns�lines)r'rrr�rrr�test_does_not_crash�
s
z!TermsizeTests.test_does_not_crashc
Cs�ztjddgtjdd���}Wn$ttjtfyB|�d�Yn0t|d�t|d�f}zt	�
tj�
��}WnLty�}z4tjdks�|jtjtjfvr�|�d	��WYd}~n
d}~00|�||�dS)
NZsttyrrT)r
r�zstty invocation failedrSrr�r9)rr1ZDEVNULLr�r4ZCalledProcessErrorr�rXr�rr7r_�	__stdin__rjr5r�r6rr:r.)r'rrr:r�r�rrr�test_stty_match�
s"���

zTermsizeTests.test_stty_matchN)rArBrCr=r?rrrrr8�
sr8�memfd_createzrequires os.memfd_creater�r�c@seZdZdd�ZdS)�MemfdCreateTestscCs�t�dtj�}|�|d�|�tj|�|�t�|��t|ddd��*}|�	d�|�
|��d�Wd�n1sv0Yt�d�}|�tj|�|�t�|��dS)NZHir�r3F)�closefdsmemfd_creater�)rr@�MFD_CLOEXECrrtrLrSr�rrr.�tell)r'rorQ�fd2rrr�test_memfd_create�
s
.
z"MemfdCreateTests.test_memfd_createN)rArBrCrFrrrrrA�
srAc@seZdZdd�Zdd�ZdS)�OSErrorTestscCs�Gdd�dt�}g|_g|_tjdur.tj}ntj}|j�|�|j�||��tjdurbtj}nt�	tj�}|j�|�|j�t
|��|j�t|��|j|j|_dS)Nc@seZdZdS)zOSErrorTests.setUp.<locals>.StrN�rArBrCrrrr�Str�
srI)
r%�bytes_filenames�unicode_filenamesrr�rFr�ZTESTFN_UNDECODABLErrryrzru)r'rIZdecodedZencodedrrrrI�
s

zOSErrorTests.setUpcCsJ|jtjf|jtjdf|jtjf|jtjtjf|jtjf|jtjf|jtj	fg}t
jdkr�|�|j
tjdf|j
tjdf|jtjdf|jtjdf|jtjff�n,|�|jtjf|jtjdf|jtjdff�ttd�r�|�|jtjddf�ttd��r|�|jtjddf�ttd��r.|�|jtjdf�ttd	��rN|�|jtjdf�ttd
��rn|�|jtjdf�ttd��r�|�|jtjf�ttd��r�t
jdk�r�|�|j
tjdf�|�|jtjdf�n|�|jtjdf�ttd
��r(|�|jtjf|jtjdf|jtjddf|jtjdff�ttd��rH|�|jtjdf�ttd��rf|�|jtj f�|D]�^}}}|D]�}zdt!|t"t#f��r�||g|�R�n>|�$t%d�� ||g|�R�Wd�n1�s�0YWnLt&�y}z |�'|j(|t"|��WYd}~n,d}~0t)�y,Yn0|�*d�+|���qx�qjdS)Nr�r�sdstr�r6r�lchownr��chflags�lchflags�chrootr�r,r'suser�lchmodr8z	should bezNo exception thrown by {}),rurr3r�r-rr�rr�rGr_r�r/rJrbr�rKr�rr�r6rLr�rMrNrOr�r,r*r"r+rPr8r�r%r>ZassertWarnsRegex�DeprecationWarningr5r�r�UnicodeDecodeErrorr�ru)r'Zfuncsru�funcZ	func_argsrrzrrr�test_oserror_filenamesz




�	

�
�

�4(z"OSErrorTests.test_oserror_filenameN)rArBrCrIrTrrrrrG�
srGc@seZdZdd�ZdS)�
CPUCountTestscCs8t��}|dur*|�|t�|�|d�n
|�d�dS)Nrz&Could not determine the number of CPUs)r�	cpu_countr$r��
assertGreaterrX)r'Zcpusrrr�test_cpu_countXs
zCPUCountTests.test_cpu_countN)rArBrCrXrrrrrUWsrUc@s�eZdZdd�Ze�edud�dd��Ze�edud�dd��Ze�	e
ed	�d
�dd��Zd
d�Z
dd�Ze�	e
ed�d�dd��Zdd�Zdd�Ze�	ejdkd�dd��Ze�	e
ed�d�dd ��Ze�	e
ed!�d"�d#d$��ZdS)%�FDInheritanceTestscCsPt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�dS�NFT)	rrr�r�rtrLr.r�r�r�rrr�test_get_set_inheritablebs
z+FDInheritanceTests.test_get_set_inheritableNz
need fcntlcCsnt�ttj�}|�tj|�|�t�|�d�t�|tj	�}|tj
M}t�|tj|�|�t�|�d�dSrZ)rrr�r�rtrLr.r��fcntl�F_GETFD�
FD_CLOEXECZF_SETFD)r'ror�rrr�test_get_inheritable_cloexecjsz/FDInheritanceTests.test_get_inheritable_cloexeccCsft�ttj�}|�tj|�|�t�|tj�tj	@tj	�t�
|d�|�t�|tj�tj	@d�dS)NTr)rrr�r�rtrLr.r\r]r^r�r�rrr�test_set_inheritable_cloexecws��z/FDInheritanceTests.test_set_inheritable_cloexec�O_PATHzneed os.O_PATHcCsnt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�t�|d�|�t�|�d�dSrZ)	rrr�rartrLr.r�r�r�rrr�test_get_set_inheritable_o_path�sz2FDInheritanceTests.test_get_set_inheritable_o_pathcCs�t��}|�t��}t�|�Wd�n1s20Y|�|jjtj	�|�t��}t�
|d�Wd�n1sz0Y|�|jjtj	�|�t��}t�
|d�Wd�n1s�0Y|�|jjtj	�dS�NTF)rr�rZr5rr�r.r�r6r�r�)r'rorrrr�test_get_set_inheritable_badf�s(**z0FDInheritanceTests.test_get_set_inheritable_badfcCs2t�ttj�}|�tj|�|�t�|�d�dSr�)rrr�r�rtrLr.r�r�rrrr�szFDInheritanceTests.test_openr�zneed os.pipe()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dSr�)rr�rtrLr.r�)r'ZrfdZwfdrrr�	test_pipe�s
zFDInheritanceTests.test_pipecCsJt�ttj�}|�tj|�t�|�}|�tj|�|�t�|�d�dSr�)	rrr�r�rtrLrWr.r��r'Zfd1rErrr�test_dup�s

zFDInheritanceTests.test_dupcCs(t�d�}|�tj|�|�|d�dS�NrSr)rrWrtrLrWr�rrr�test_dup_standard_stream�s
z+FDInheritanceTests.test_dup_standard_streamr�r�cCsHt�dtj�}|�tj|�t�|�}|�tj|�|�t�|��dS)NZNUL)rrr�rtrLrWrSr�rfrrr�test_dup_nul�s

zFDInheritanceTests.test_dup_nulr�zneed os.dup2()cCs�t�ttj�}|�tj|�t�ttj�}|�tj|�|�t�||�|�|�t�	|��t�ttj�}|�tj|�|�tj||dd�|�|�
t�	|��dS)NF)Zinheritable)rrr�r�rtrLr.r�rMr�rS)r'rorEZfd3rrrr��szFDInheritanceTests.test_dup2�openptyzneed os.openpty()cCsPt��\}}|�tj|�|�tj|�|�t�|�d�|�t�|�d�dSr�)rrkrtrLr.r�)r'Z	master_fdZslave_fdrrr�test_openpty�s
zFDInheritanceTests.test_openpty)rArBrCr[rr�r\r_r`rrrrbrdrrergrir_r�rjr�rlrrrrrYas&






rYc@sHeZdZddddejfdfddddd	eed
d�fgZdd�Zd
d�ZdS)�PathTConverterTests)r�TrN)r-FrNrNFN)rMF�rN)rNFrnNrrnrLcCstj}tjdkrd}}nt�tj�}t|�}t�t|�tjtjB�}|�	tj
tj�|�	tj|�t|�}t|�}|jD�]�\}}}	}
|j
|d���Vztt|�}Wn"ty�YWd�qzYn0||||fD]`}|dur�q�|j
||d��2||g|	�R�}
|
du�r|
|
�Wd�q�1�s,0Yq�|�td�� ||g|	�R�Wd�n1�sl0Y|�r�||g|	�R�}
|
du�r�|
|
�n>|�td�� ||g|	�R�Wd�n1�s�0YWd�qz1�s�0YqzdS)Nr r)rr/zto return str or byteszos.PathLike)rrFrrrrrrxrJrtrGrL�	functionsZsubTestr�r��assertRaisesRegexra)r'Zstr_filenameZbytes_fspath�bytes_filenameroZ
int_fspathZ
str_fspathrZallow_fdZ
extra_argsZ
cleanup_fnr�r/r�rrr�test_path_t_converter�sL

�
*�0

�z)PathTConverterTests.test_path_t_convertercCs�d}|�t|d��t�td��Wd�n1s80Y|�t|d��t�td��Wd�n1sv0Y|�t|d�� t�tt���Wd�n1s�0YdS)Nz-__fspath__\(\) to return str or bytes, not %sr�rU�floatg���Q�@�object)rprarr�rrt)r'r:rrr�&test_path_t_converter_and_custom_classs,,z:PathTConverterTests.test_path_t_converter_and_custom_class)	rArBrCr�F_OKr�rorrrurrrrrm�s�	,rmr�r�c@seZdZdd�ZdS)�
BlockingTestscCsnt�ttj�}|�tj|�|�t�|�d�t�|d�|�t�|�d�t�|d�|�t�|�d�dSrc)	rrr�r�rtrLr.r�r�r�rrrr�szBlockingTests.test_blockingN)rArBrCr�rrrrrwsrwc@seZdZdd�ZdS)�ExportsTestscCs |�dtj�|�dtj�dS)Nrr�)r�r�__all__rHrrr�test_os_all-szExportsTests.test_os_allN)rArBrCrzrrrrrx,srxc@s$eZdZdd�Zdd�Zdd�ZdS)�TestDirEntrycCs0tj�tj�|_|�tj|j�t�|j�dSr")rr/�realpathrrFrtrr2rHrrrrI3szTestDirEntry.setUpcCs|�ttj�dSr")rZrar�DirEntryrHrrr�test_uninstantiable8sz TestDirEntry.test_uninstantiablecCsjttj�|jd�d�}dd�t�|j�D���}|�|tj�|�|j	d�ddl
}|�t|j
||�dS)NrW�pythoncSsg|]}|�qSrr�r�entryrrrr	=r
z0TestDirEntry.test_unpickable.<locals>.<listcomp>r)r rr/r1�scandirr�r$r}r.rr�rZrar�)r'rr�r�rrr�test_unpickable;szTestDirEntry.test_unpickableN)rArBrCrIr~r�rrrrr{2sr{c@s
eZdZejZdd�Zd<dd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
d=dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Ze�ejejvd(�d)d*��Zd+d,�Zd-d.�Zd/d0�Z d1d2�Z!d3d4�Z"d5d6�Z#d7d8�Z$d9d:�Z%d;S)>�TestScandircCs>tj�tj�|_t�|j�|_|�tj|j�t�	|j�dSr")
rr/r|rrFr�
bytes_pathrtrr2rHrrrrIGszTestScandir.setUprWcCs2t|t�r|jn|j}tj�||�}t|d�|S)Nr)r�r>r�r/rr1r )r'rr/rrrrr Ms
zTestScandir.create_filecCs2tdd�t�|j�D��}|�t|���|�|S)Ncss|]}|j|fVqdSr"rr�rrrrvTs�z*TestScandir.get_entries.<locals>.<genexpr>)r\rr�r/r.r3�keys)r'�names�entriesrrr�get_entriesSs

�zTestScandir.get_entriescCsZ|rJt|�D]:}|�d�sq|dvr&q|�t||�t||�|||f�qn|�||�dS)NZst_)�st_dev�st_ino�st_nlink)r�r:r.r�)r'Zstat1Zstat2Zskip_fieldsr�rrr�assert_stat_equalYs
�zTestScandir.assert_stat_equalcCs(t�|j�}|�tt|��|��dSr")rr�r/rZrarmrL)r'�scandir_iterrrrr~fszTestScandir.test_uninstantiablecCs<|�d�}t�|j�}ddl}|�t|j||�|��dS)NrWr)	r rr�r/r�rZrar�rL)r'rr�r�rrrr�ks

zTestScandir.test_unpickablecCs2|�|tj�|�|j|�|�|jtj�|j|��|�|��tj|jdd�j	�t�|j�}|�|�
�t�|j��|�|�
�t�|j��|�|��tj�|j��tj|jdd�}|�|j
dd�t�|j��|�|j
dd�t�|j��|�|��|tjdk�o|�|�|jdd�|tjdk�dS)NFrLr )r$rr}r.rr/r1�inoder�r��is_dir�S_ISDIRr��is_file�S_ISREG�
is_symlinkrNr�)r'r�rr�r�r�Z
entry_statZentry_lstatrrr�check_entryrs>
�

�

�
�
�
�
��zTestScandir.check_entryc	
Cs�ttd�}t��}tj�|jd�}t�|�|�d�}|r�zt�|tj�|jd��Wn2t	y�}z|�
d|�WYd}~n
d}~00|r�tj|tj�|jd�dd�t�|tj�|jd	��ddg}|r�|�d�|r�|�
d
�|�|�}|d}|�|dddd�|d}|�|dddd�|�rD|d}|�|dddd�|�r~|d}|�|dddd�|d	}|�|d	ddd�dS)Nr�r�rWz
link_file.txtr��symlink_dirT)r��symlink_file.txt)r�r�F)rrrr�r/r1r2r r�r�rXr�r�r/r�r�)	r'r�r�r9rr�r�r�r�rrr�test_attributes�sB


$�


zTestScandir.test_attributescCsNt|t�r|jn|j}tt�|��}|�t|�d�|d}|�|j	|�|Srh)
r�r>r�r/r�rr�r.r,r)r'rr/r�r�rrr�	get_entry�szTestScandir.get_entrycCs|j|d�}|�tj�|��S)Nr)r r�rr/�basename)r'rrrrr�create_file_entry�szTestScandir.create_file_entryc	Csp|��}t��}zNt�|j�tdd�t��D��}|�t|�	��tj�
|�g�Wt�|�nt�|�0dS)Ncss|]}|j|fVqdSr"rr�rrrrv�r
z5TestScandir.test_current_directory.<locals>.<genexpr>)r rr#r3r/r\r�r.r3r�r�)r'rZold_dirr�rrr�test_current_directory�s�z"TestScandir.test_current_directorycCs|��}|�t|�d�dS)Nz<DirEntry 'file.txt'>)r�r.rw�r'r�rrr�	test_repr�szTestScandir.test_reprcCs*|��}|�t�|�tj�|jd��dS)NrW)r�r.r�fspathr/r1r�rrr�test_fspath_protocol�sz TestScandir.test_fspath_protocolcCsNt�d�}|j|d�}t�|�}|�|t�|�|tj�t�|j�|��dS)Nz
bytesfile.txtr)	rrr�r�r$r>r.r/r1)r'rqZbytes_entryr�rrr�test_fspath_protocol_bytes�s

�z&TestScandir.test_fspath_protocol_bytescCs�tj�|jd�}t�|�|�d�}t�|�tjdkrF|�|���|�	|�
��|�	|���tjdkr�|�t
|j�|��|jdd�n0|�|��d�|�t
|j�|jt
|jdd�dS)Nr�r FrLr)rr/r1r2r�rrrMr�rSr�r�rZr4r�r�rW)r'r/r�rrr�test_removed_dir�s




zTestScandir.test_removed_dircCs�|��}t�|j�|�|���tjdkr:|�|���|�|�	��tjdkrv|�
t|j�|�
�|j
dd�n0|�|��d�|�
t|j
�|j
t|j
dd�dS)Nr FrLr)r�rrGr/rSr�rrMr�r�rZr4r�r�rWr�rrr�test_removed_file�s

zTestScandir.test_removed_filecCs�t��s|�d�S|�d�}t�|tj�|jd��|�ddg�}|d}t�	|�|�
|��d�|�|�
��|�|���|�|j
dd��|�|jdd��|�|���|�t|j�|jdd�dS)Nzcannot create symbolic linkrWzsymlink.txtrFrL)rr�rXr rr�r/r1r�rGrWr�rSr�r�rMr�rZr4r�)r'rr�r�rrr�test_broken_symlinks"

�
zTestScandir.test_broken_symlinkc	Csp|�d�t�|j�}tt�|��}|�t|�d|�|d}|�|jd�|�|jt�tj�	|jd���dS�NrWrSrsfile.txt)
r rrr/r�r�r.r,rr1)r'�
path_bytesr�r�rrrrH s
�zTestScandir.test_bytesc
Cs�|�d�ttfD]�}|t�|j��}|�t��tt�	|��}Wd�n1sT0Y|�
t|�d|�|d}|�
|jd�|�
|jt�tj�
|jd���|�t|j�t�|�t|j�t�qdSr�)r ryrzrrr/�assertWarnsrQr�r�r.r,rr1r�rmr>)r'r9r�r�r�rrr�test_bytes_like,s
,�zTestScandir.test_bytes_likez.fd support for listdir required for this test.c	Csv|�tjtj�|�d�dg}t��rJt�dtj�	|jd��|�
d�t�|j���}t�|��}t|�}Wd�n1s�0Ydd�|D�}|�
t|�|�|�
|t�|��|D]�}|�
|j|j�|�
t�|�|j�|�
|��|jdk�tjtjvr�tj|j|d�}|�
|��|�tj|j|dd�}|�
|jdd�|�q�Wd�n1�sh0YdS)	NrWr�cSsg|]
}|j�qSrrr�rrrr	Ir
z'TestScandir.test_fd.<locals>.<listcomp>rMF)r�r1rL)r�rr�rOr rr�r�r/r1r�r5r�r.r3r�rr�r�r�rP)r'Zexpected_namesrornr�r�r�rrrr�test_fd<s*

&zTestScandir.test_fdcCs|�ttjd�dS)NrB)rZr4rr�rHrrr�test_empty_pathVszTestScandir.test_empty_pathcCsN|�d�t�|j�}t|�}|�t|�d|�t|�}|�t|�d|�dS)NrWrSr)r rr�r/r�r.r,)r'r�r�Zentries2rrr�test_consume_iterator_twiceYs
z'TestScandir.test_consume_iterator_twicecCs$digfD]}|�ttj|�q
dS)NgX9��v��?)rZrarr�)r'�objrrr�test_bad_path_typedszTestScandir.test_bad_path_typecCsf|�d�|�d�t�|j�}t|�|��|��|���~Wd�n1sX0YdS�NrW�	file2.txt)r rr�r/rlrL�check_no_resource_warning�r'r�rrr�
test_closehs


zTestScandir.test_closecCsv|�d�|�d�t�|j��}t|�Wd�n1s>0Y|���~Wd�n1sh0YdSr�)r rr�r/rlr�r�rrr�test_context_managerss

&
z TestScandir.test_context_managercCsT|�d�|�d�t�|j�� }t|�|��Wd�n1sF0YdSr�)r rr�r/rlrLr�rrr�test_context_manager_close{s


z&TestScandir.test_context_manager_closec	Cs�|�d�|�d�|�t��Lt�|j�� }t|�ddWd�n1sR0YWd�n1sp0Y|���~Wd�n1s�0YdS)NrWr�rSr)r rZ�ZeroDivisionErrorrr�r/rlr�r�rrr�test_context_manager_exception�s

D
z*TestScandir.test_context_manager_exceptioncCs�|�d�|�d�t�|j�}t|�|�t��~t��Wd�n1sR0Yt�|j�}t	|�|�
��~Wd�n1s�0YdSr�)r rr�r/rlr��ResourceWarningrZ
gc_collectr�r�r�rrr�test_resource_warning�s

&
z!TestScandir.test_resource_warningN)rW)rW)&rArBrCrr�rIr r�r�r~r�r�r�r�r�r�r�r�r�r�r�r�rHr�rrrr�rOr�r�r�r�r�r�r�r�r�rrrrr�Ds@

)	
�

r�c@s^eZdZeej�Zdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�ZdS)�
TestPEP519cCs dD]}|�||�|��qdS)N)r[sgoodbyessome/path/and/file�r.r�)r'�brrr�test_return_bytes�szTestPEP519.test_return_bytescCs dD]}|�||�|��qdS)N)ZhelloZgoodbyezsome/path/and/filer�)r'rprrr�test_return_string�szTestPEP519.test_return_stringcCsLdD]B}t|�}|�||�|��|�dt�|��|�dt�|��qdS)N)�path/like/object�path/like/objectr�r�)rr.r�rrr?)r'r�Zpathlikerrr�test_fsencode_fsdecode�s
z!TestPEP519.test_fsencode_fsdecodecCsB|�d|�td���|�tttj��|�ttd�tj��dS)Nz#feelthegilr�)r.r�rrM�
issubclassr�PathLiker�rHrrrrF�szTestPEP519.test_pathlikecCs4tddi�}ttt|�fD]}|�t|j|�qdS)NZblahr)rmr�rrZrar�)r'Zvapor�orrr�test_garbage_in_exception_out�sz(TestPEP519.test_garbage_in_exception_outcCs|�t|j�dSr")rZrar�rHrrr�test_argument_required�sz!TestPEP519.test_argument_requiredcCsR|�t|jtd��tddi�}d|_|�t|j|��|�t|jtt���dS)NrWZfoorrS)rZrar�rrm�
__fspath__r�)r'�crrr�test_bad_pathlike�s
�zTestPEP519.test_bad_pathlikecCs8Gdd�dtj�}|�tt|��|�tttj��dS)Nc@seZdZdS)z0TestPEP519.test_pathlike_subclasshook.<locals>.ANrHrrrr�A�sr�)rr�rSr�rrM)r'r�rrr�test_pathlike_subclasshook�sz%TestPEP519.test_pathlike_subclasshookcCs|�tjttj�dSr")r$rr�r>�types�GenericAliasrHrrr�test_pathlike_class_getitem�sz&TestPEP519.test_pathlike_class_getitemN)rArBrCrYrr�r�r�r�rFr�r�r�r�r�rrrrr��s
r�c@seZdZdd�ZdS)�
TimesTestscCsnt��}|�|tj�dD]}t||�}|�|t�qtjdkrj|�|jd�|�|j	d�|�|j
d�dS)N)�user�system�
children_user�children_system�elapsedr r)rr/r$�times_resultr�rsrr.r�r�r�)r'r/Zfieldr�rrr�
test_times�s

zTimesTests.test_timesN)rArBrCr�rrrrr��sr��forkc@seZdZdd�ZdS)�	ForkTestscCs d}td|�td|dd�dS)Nz�if 1:
            import os
            from test import support
            pid = os.fork()
            if pid != 0:
                support.wait_process(pid, exitcode=0)
        r�Zmalloc_debug)ZPYTHONMALLOCr
r�rrr�	test_fork�s
zForkTests.test_forkN)rArBrCr�rrrrr��sr��_fspathc@seZdZeej�ZdS)�TestPEP519PurePythonN)rArBrCrYrr�r�rrrrr��sr��__main__)r)N)�r�r�r��
contextlibr>r6rer?rr�r#rr�r�rr�r�rr_Z	sysconfigr-rxr�r;r�rr"r��testrZtest.supportrr�rr}�ImportErrorr\rm�pwdZgetpwallrHr�Z	_testcapirrr!Ztest.support.script_helperrrrrOrrr�versionr:r��getgidr�rr ZTestCaser!rDr�rrZZBasicTestMappingProtocolr[r�rrrrrr7rPrZr^rjZget_config_varZOS_URANDOM_DONT_USE_FDr�rv�contextmanagerr�r�r�r�r�r�r�rr-r9rIrJrkrrr{r}r�r�r�r,r�r�r�r�r�r�r$Zrequires_linux_versionr&r8rArGrUrYrmrwrxr{r�r�r�r�r�rA�mainrrrr�<module>sd




Aae\'EG
j;)	-����M �h#d%CGs/<0![H4�VO�Q0
]
yB�Y: