Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_shutil.cpython-310.pyc
o

�9j��@stddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlZddlZzddlZWneyudZYnwddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl"m'Z'e%dZ(e%dZ)e%d	Z*ej+�,d
�Z-ej+�,d�Z.ej+dd�d
kZ/zddl0Z0ddl1Z1dZ2Wney�dZ2Ynwzddl3Z3Wney�dZ3Ynwej4j5de6d�d�Z7dd�Z8dd�Z9dFdd�Z:dd�Z;dFdd�Z<dd�Z=dd �Z>e>�Z?d!d"�Z@Gd#d$�d$�ZAGd%d&�d&eAejB�ZCGd'd(�d(eAejB�ZDGd)d*�d*eAejB�ZEGd+d,�d,eAejB�ZFGd-d.�d.eAejB�ZGGd/d0�d0eAejB�ZHGd1d2�d2eH�ZIGd3d4�d4eAejB�ZJGd5d6�d6ejB�ZKGd7d8�d8ejB�ZLGd9d:�d:eM�ZNe�Oe?d;�Gd<d=�d=eNejB��ZPe�Oe-d>�Gd?d@�d@eNejB��ZQGdAdB�dBejB�ZRGdCdD�dDejB�ZSeTdEk�r�e�U�dSdS)G�N)�make_archive�register_archive_format�unregister_archive_format�get_archive_formats�Error�unpack_archive�register_unpack_format�
RegistryError�unregister_unpack_format�get_unpack_formats�
SameFileError�_GiveupOnFastCopy)�support)�	os_helper)�TESTFN�FakePath)�warnings_helper�2�_SRC�_DST�darwin�sunos��aixTFzos.chdirzshouldn't call os.chdir()��side_effectcOstttdd�d��)N�EXDEV�zInvalid cross-device link)�OSError�getattr�errno��args�kwargs�r$�'/usr/lib/python3.10/test/test_shutil.py�_fake_rename:sr&cst����fdd��}|S)Ncs,ztj}tt_�|i|��W|t_S|t_w�N)�os�renamer&)r"r#�builtin_rename��funcr$r%�wrap?s
zmock_rename.<locals>.wrap)�	functools�wraps)r,r-r$r+r%�mock_rename>sr0cCslt|t�rtjj|�}|rdnd}|rdnd}t|||d��}|�|�Wd�dS1s/wYdS)z�Write *content* to a file located at *path*.

    If *path* is a tuple instead of a string, os.path.join will be used to
    make a path.  If *binary* is true, the file will be opened in binary
    mode.
    �wb�wN�utf-8��encoding)�
isinstance�tupler(�path�join�open�write)r8�content�binary�moder5�fpr$r$r%�
write_fileIs
"�r@cCs�dd�}t|d�}d�dd�t|�D��}t|d��}|||�D]}|�|�q Wd�n1s2wYtj�|�|ksAJ�dS)	zBCreate a test file with an arbitrary size and random text content.css>�||ksJ�||kr|V||8}||ks|r|VdSdSr'r$)�total�stepr$r$r%�chunksYs��
�zwrite_test_file.<locals>.chunksi �cSsg|]
}t�tj����qSr$)�random�choice�string�
ascii_letters�encode)�.0�ir$r$r%�
<listcomp>bs�z#write_test_file.<locals>.<listcomp>r1N)�minr9�ranger:r;r(r8�getsize)r8�sizerC�bufsize�chunk�f�csizer$r$r%�write_test_fileWs

���rUcCsht|t�rtjj|�}|rdnd}|rdnd}t|||d��}|��Wd�S1s-wYdS)z�Return contents from a file located at *path*.

    If *path* is a tuple instead of a string, os.path.join will be used to
    make a path.  If *binary* is true, the file will be opened in binary
    mode.
    �rb�rNr3r4)r6r7r(r8r9r:�read)r8r=r>r5r?r$r$r%�	read_fileis
$�rYcCs|g}tt�|��D]2}tj�||�}tj�|�r6tj�|�s6|�|d�t|�D]}|�|d|�q)q	|�|�q	|S)N�/)	�sortedr(�listdirr8r9�isdir�islink�append�rlistdir)r8�res�name�p�nr$r$r%r`ws�r`c
Cs�ttd�sdSd}d}z�tjdt��dd��}|j}|�d�Wd�n1s)wYt|d���}tjdt��dd��f}|j}|��}|��}z
t�	||dd�Wn+t
yYWd�Wd�W|durrt�|�|dur}t�|�dSdSw	Wd�Wd�W|dur�t�|�|dur�t�|�d	Sd	S1s�wYWd�n1s�wYW|dur�t�|�|dur�t�|�dSdS|dur�t�|�|dur�t�|�ww)
N�sendfileFr1��dir�deletes
0123456789rVr�T)
�hasattrr(�tempfile�NamedTemporaryFile�getcwdrbr;r:�filenorerr�unlink)�srcname�dstnamerS�src�dst�infd�outfdr$r$r%�supports_file2file_sendfile�s^
���
����
����
��
�rvcCsFtr!tjdkr!t�dtj�}|�d�d��d}t|d�dkSdS)	Ni���z/usr/bin/dump -o %s�
�����i T)�AIX�sys�maxsize�
subprocess�	getoutput�
executable�split�int)�hdrs�maxdatar$r$r%�
_maxdataOK�s
r�c@seZdZddd�ZdS)�BaseTestNcCs$tj|t��d�}|�tj|�|S)zjCreate a temporary directory that will be cleaned up.

        Returns the path of the directory.
        )�prefixrg)rk�mkdtempr(rm�
addCleanupr�rmtree)�selfr��dr$r$r%r��szBaseTest.mkdtempr')�__name__�
__module__�__qualname__r�r$r$r$r%r��sr�c@s�eZdZdd�Zejdd��Zejdd��Ze�	e
d�dd	��Ze�	e
d�d
d��Zdd
�Z
e�ejdd�dkd�e�eed�oFe��dkd�dd���Zdd�Zdd�Zdd�Zdd�Zejdd ��Ze�	e
d�d!d"��ZdS)#�
TestRmTreecCsX|��}tj�|d�}t�|�ttj�|d�d�t�|�}|�|t�t	�
|�dS)N�killme�somefile�foo)r�r(r8r9�mkdirr@�fsencode�assertIsInstance�bytes�shutilr�)r��tmp�victimr$r$r%�test_rmtree_works_on_bytes�s

z%TestRmTree.test_rmtree_works_on_bytescs�|��}tj�|d�}t�|�tj�|d�}t�||�|�ttj	|�|�
tj�|��|�
tj�|��g��fdd�}tj	||d�|�
t��d�|��ddtjj�|�
�dd|�|��dddt�dS)	Nrg�linkc���|�dSr'�r_�r"��errorsr$r%�onerror��z8TestRmTree.test_rmtree_fails_on_symlink.<locals>.onerror�r�ryrri)r�r(r8r9r��symlink�assertRaisesrr�r��
assertTrue�exists�lexists�assertEqual�len�assertIsr^r��r�r��dir_r�r�r$r�r%�test_rmtree_fails_on_symlink�s
z'TestRmTree.test_rmtree_fails_on_symlinkc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}|||fD]}t�|�qtj�|d�}t|d�tj�|d�}t�||�tj�|d�}t�||�tj�|d�}	t�||	�t�|�|�	tj�
|��|�tj�
|��|�tj�
|��dS�	N�dir1�dir2�dir3�file1r��link1�link2�link3)r�r(r8r9r�r@r�r�r��assertFalser�r��
r�r�r�r�r�r�r�r�r�r�r$r$r%�test_rmtree_works_on_symlinks��$

z(TestRmTree.test_rmtree_works_on_symlinkszonly relevant on Windowscs�|��}tj�|d�}t�|�tj�|d�}t�||�|�tj	|�|�
ttj
|�|�tj�|��|�tj�|��g��fdd�}tj
||d�|�t��d�|��ddtjj�|��dd|�|��dddt�dS)	Nrgr�cr�r'r�r�r�r$r%r��r�z:TestRmTree.test_rmtree_fails_on_junctions.<locals>.onerrorr�ryrri)r�r(r8r9r��_winapi�CreateJunctionr�rror�rr�r�r�r�r�r�r�r�r^r�r�r$r�r%�test_rmtree_fails_on_junctions�s 
z)TestRmTree.test_rmtree_fails_on_junctionsc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}|||fD]}t�|�qtj�|d�}t|d�tj�|d�}t�||�tj�|d�}t�||�tj�|d�}	t�||	�t�	|�|�
tj�|��|�tj�|��|�tj�|��dSr�)
r�r(r8r9r�r@r�r�r�r�r�r�r�r�r$r$r%�test_rmtree_works_on_junctionsr�z)TestRmTree.test_rmtree_works_on_junctionscs�tj|��d�}|�ttj|�tj|dd�|��}t|dfd�tj	�
|d�}|�t��
}t�|�Wd�n1s>wY|�|j
j|�|�tj	�|��tj|dd�|�tj	�|��g��fdd�}tj||d�|�t��d	�|��d
d
tj�|��d
d|�|��d
d	dt�|��d
d	dj|�|��dd
tj�|��dd|�|��dd	dt�|��dd	dj|�dS)N�rgT��
ignore_errors�tstfile�cr�r'r�r�r�r$r%r�,r�z.TestRmTree.test_rmtree_errors.<locals>.onerrorr�rirry)rk�mktempr�r��FileNotFoundErrorr�r�r@r(r8r9�NotADirectoryErrorr��	exception�filenamer�r�r�r��scandirr��rmdir)r�r��tmpdir�cmr�r$r�r%�test_rmtree_errorss2�zTestRmTree.test_rmtree_errorsN��cygwinz2This test can't be run on Cygwin (issue #1071513).�geteuidrz9This test can't be run reliably as root (issue #1076467).cCs
d|_t�t�|�tjt�tj�td�|_	tj�td�|_
t�|j	�t�|j
�t�
t�j}t�
|j	�j}t�
|j
�j}t
jt
jB}t�|j	|�t�|j
|�t�t|�|�tjt|�|�tj|j	|�|�tj|j
|�tjt|jd�|�|jdd�dS)Nr�a�br�rz1Expected call to onerror function did not happen.)�
errorStater(r�rr�r�r�r8r9�child_file_path�child_dir_pathr�create_empty_file�stat�st_mode�S_IREAD�S_IEXEC�chmod�check_args_to_onerrorr�)r��old_dir_mode�old_child_file_mode�old_child_dir_mode�new_moder$r$r%�
test_on_error:s*

�zTestRmTree.test_on_errorcCs�|jdkrB|tjur|�||j�n|tjur|�||j�n|�|tj�|�	|t
|jg�|�t|dt
��|jd7_dS|�|tj�|�|t
�|�t|dt
��d|_dS)Nrirryr)r�r(ror�r�r�r�r�r\�assertInrr��
issubclassr)r�r,�arg�excr$r$r%r�Ys



z TestRmTree.check_args_to_onerrorcsPz#tj��fdd�}|t_t�t�ttdfd�t�t�W�t_dS�t_w)Ncs|tkrt���|�Sr')rr)�fnr"r#��
orig_lstatr$r%�raiserwszFTestRmTree.test_rmtree_does_not_choke_on_failing_lstat.<locals>.raiserr�)r(�lstatr�rr@r�r�)r�r�r$r�r%�+test_rmtree_does_not_choke_on_failing_lstatts
z6TestRmTree.test_rmtree_does_not_choke_on_failing_lstatcs�tjtjtjtjhtjkotjtjvotjtjv}|r_|�	t
j�|�	t
jj
�|��}tj�|d�}t�|�z"t
j}Gdd�dt���fdd�}|t
_|��t
j|�W|t
_dS|t
_w|�t
j�|�t
jj
�dS)Nr�c@seZdZdS)zHTestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>.CalledN)r�r�r�r$r$r$r%�Called�sr�cs��r'r$r!�r�r$r%�_raiser��zITestRmTree.test_rmtree_uses_safe_fd_version_if_available.<locals>._raiser)r(r:r�ror��supports_dir_fdr\�supports_fd�supports_follow_symlinksr�r��_use_fd_functionsr��avoids_symlink_attacksr�r8r9r��_rmtree_safe_fd�	Exceptionr�r�)r�r��tmp_dirr��real_rmtreer�r$r�r%�-test_rmtree_uses_safe_fd_version_if_available�s,�
�
�
z8TestRmTree.test_rmtree_uses_safe_fd_version_if_availablecCs<tj|��d�\}}t�|�|�ttj|�t�	|�dS�Nr�)
rk�mkstempr�r(�closer�r�r�r��remove)r��handler8r$r$r%�test_rmtree_dont_delete_file�s
z'TestRmTree.test_rmtree_dont_delete_filec
Cs�t�t�z2tj�td�}tj�td�}t�|�t�||�|�ttj	|�tj	|dd�Wtj	tdd�dStj	tdd�w)N�cheese�shopTr�)
r(r�rr8r9r�r�rr�r��r�rrrsr$r$r%�test_rmtree_on_symlink�s

"z!TestRmTree.test_rmtree_on_symlinkc
Cs�t�t�z>tj�td�}tj�td�}t�|�ttj�|d�d���t�||�|�	t
tj|�tj|dd�Wtjtdd�dStjtdd�w)Nrr�spamr1Tr�)
r(r�rr8r9r:r�r�r�r�rr�r�rr$r$r%�test_rmtree_on_junction�s

"z"TestRmTree.test_rmtree_on_junction)r�r�r�r�r�skip_unless_symlinkr�r��unittest�
skipUnlessr�r�r�r��skipIfr|�platformrjr(r�r�r�r�r�rrrr$r$r$r%r��s4	





!��


r�c@s�eZdZdd�Zdd�Zejdd��Zdd�Zd	d
�Z	dd�Z
ej�
d
�dd��Zdd�Ze�eed�d�eje�ejdkd�dd����Zdd�Zejdd��Zejdd��Zdd�Zd d!�Zd"S)#�TestCopyTreec	Cs|��}tj�|��d�}|�tj|�|�tjtj�|��t|dfd�t�	tj�|d��t|ddfd�t�
||�|�tj�tj�|d���|�tj�
tj�|d���|�tj�tj�|dd���t|df�}|�|d�t|ddf�}|�|d�dS)N�destination�test.txt�123�test_dir�456)r�r(r8r9r�r�r��dirnamer@r��copytreer��isfiler]rYr��r��src_dir�dst_dir�actualr$r$r%�test_copytree_simple�s"�z!TestCopyTree.test_copytree_simplec	CsZ|��}|��}|�tj|�|�tj|�t|dfd�t�tj�|d��t�tj�|d��t|ddfd�t|ddfd�tj	||dd�|�
tj�tj�|d���|�
tj�tj�|d���|�
tj�tj�|dd���t
|df�}|�|d�t
|ddf�}|�|d�|�t��tj	||d	d�Wd�dS1s�wYdS)
Nznonexisting.txtr�existing_dirzexisting.txtzwill be replacedzhas been replacedT)�
dirs_exist_okF)r�r�r�r�r@r(r�r8r9rr�rr]rYr�r��FileExistsErrorrr$r$r%�test_copytree_dirs_exist_ok�s,�"�z(TestCopyTree.test_copytree_dirs_exist_okc
	Cs�|��}tj�|d�}tj�|d�}tj�|d�}t�|�t�|�t|dfd�tj�|d�}tj�|d�}t�tj�|d�|�ttd�rRt�|t	j
t	jB�ttd	�rctt	d
�rct�|t	j
�t�|�}tj||dd�|�tj�tj�|dd���t�tj�|dd��}tjd
kr�|�d�r�|dd�}|�|tj�|d��t�|�}	ttd�r�|�|	j|j�ttd	�r�|�|	j|j�dSdS)Nrrrs�subzfile.txtr�r�zsub/link�lchmod�lchflags�	UF_NODUMPT��symlinks�ntz\\?\�)r�r(r8r9r�r@r�rjrr��S_IRWXU�S_IRWXOr r!r�r�rr�r^�readlinkrb�
startswithr�r��st_flags)
r�r�rr�sub_dir�src_link�dst_link�src_statr�dst_statr$r$r%�test_copytree_symlinks�s:

�




�z#TestCopyTree.test_copytree_symlinkscCs\tjj}tjj}|��}�z||��d�}t|dfd�t|dfd�t�||d��t|ddfd�t�||d��t|ddfd�t�||dd��t�||dd	��t|dddfd�t|dd	d
fd�z3t�dd�}tj	|||d�|�
|||d���|�|||d���|�|||d���Wt�|�nt�|�wz5t�dd
�}tj	|||d�|�|||d���|�|||dd	���|�|||dd���Wt�|�nt�|�wz*dd�}tj	|||d�|�|||dd	d
���|�|||dd���Wt�|�nt�|�wWt�|�t�tj�
|��dSt�|�t�tj�
|��w)Nr
rrztest.tmprr�	test_dir2�subdir�subdir2ztest.pyz*.tmp��ignorezsubdir*cSsfg}|D],}tj�||�}tj�|�r!|��ddkr!|�|�qtj�|�ddvr0|�|�q|S)Nrxr2z.py)r(r8r9r]r�r_�splitext)rr�namesrarbr8r$r$r%�_filter6s
�z8TestCopyTree.test_copytree_with_exclude.<locals>._filter)r(r8r9r�r�r@r�r��ignore_patternsrr�r�r�r)r�r9r�rr�patternsr8r$r$r%�test_copytree_with_excludesR�

�z'TestCopyTree.test_copytree_with_excludecsVtjj}tjj}���}||d�}t�||��t�||d��t�tj�|dd��t|dddfd�g���fdd�}|���d�}tj|||d	���	|||ddd���|���d�}tjt
�|�||d	���	|||ddd���|���d�}tt�
|��d
}��|tj�tj|||d	���	|||ddd�����t��d�dS)N�sourcerr2rrcsT��|���|t���|t���t|�tt|���|D]}��|t�qgSr')r_r��str�listr�r��set)rrr7rb��invokationsr�r$r%�_ignore]s
z?TestCopyTree.test_copytree_arg_types_of_ignore.<locals>._ignorer
r4r�	)r(r8r9r�r�r�r@r�rr��pathlib�Pathr>r�r��DirEntryr�r�)r�r9r�r�rrBr�
src_dir_entryr$r@r%�!test_copytree_arg_types_of_ignoreOs8
	���z.TestCopyTree.test_copytree_arg_types_of_ignorec	Csx|��}tj�|d�}t�|�tj�|d�}|�tj|�t�|d�t	|dfd�t�tj�|d�d�t	|dfd�t�tj�|d�d�t
j|d	�}|�tj|�t�|d�t�||�|�
t�|�jt�|�j�|�
t�tj�|d��jt�tj�|d��j�|�
t�tj�|d��jt�tj�|d��j�tj�|tj�|�d
�}|�
t�|�jt�|�j�dS)Nr<r
i�zpermissive.txtrzrestrictive.txtri�r�ry)r�r(r8r9r�r�r�r�r�r@rkrrr�r�r�r�)r�r�rr�restrictive_subdir�restrictive_subdir_dstr$r$r%�!test_copytree_retains_permissionsys6
���
�z.TestCopyTree.test_copytree_retains_permissionszos.chmodcCs�|��}tj�|��d�}|�tj|�|�tjtj�|��td�|_	|�
tj��t�||�Wd�dS1s<wYdS)Nr
zka-boom)
r�r(r8r9r�r�r�r�PermissionErrorrr�rr)r��
mock_patchrrr$r$r%�test_copytree_winerror�s
"�z#TestCopyTree.test_copytree_winerrorcs�����fdd�}g�����tj���d��ttj��d�ddd��}|��Wd�n1s2wYtj	��|d���
t��d	�dS)
NcsR��d���|t���|t���|tj��d����|tj��d��dS�Nr�)r_r�r=r�r(r8r9)r�r��rs�flagr�rrr$r%�custom_cpfun�s

zETestCopyTree.test_copytree_custom_copy_function.<locals>.custom_cpfunr�r�r2r3r4��
copy_functionry)r�rkr�r:r(r8r9r�r�rr�r�)r�rRrSr$rPr%�"test_copytree_custom_copy_function�s
�z/TestCopyTree.test_copytree_custom_copy_function�mkfifo�requires os.mkfifo()�vxworks�%fifo requires special path on VxWorksc
CsPt�t�z�tj�td�}t�|�tj�|d�}zt�|�Wnty9}z
|�d|�WYd}~nd}~wwzt�	tt
�Wn/tjyq}z"|jd}|�
t|�d�|d\}}}|�
d||�WYd}~nd}~ww|�d�Wtjtdd	�tjt
dd	�dSWtjtdd	�tjt
dd	�dStjtdd	�tjt
dd	�w)
Nr2�mypipe�os.mkfifo(): %srryz`%s` is a named pipez$shutil.Error should have been raisedTr�)r(r�rr8r9rVrL�skipTestr�r�TESTFN2rr"r�r��failr�)r�r2�pipe�er�rrrs�	error_msgr$r$r%�test_copytree_named_pipe�s8

��
����z%TestCopyTree.test_copytree_named_pipecs�|��}tj�|��d�}t|dfd�t�tj�|d��t|ddfd�g��fdd�}tj|||d�|�t	��d	�dS)
Nr
rrrrc���||f�dSr'r��rrrs��copiedr$r%�_copy��z6TestCopyTree.test_copytree_special_func.<locals>._copyrSri)
r�r(r8r9r@r�r�rr�r�)r�rrrgr$rer%�test_copytree_special_func�sz'TestCopyTree.test_copytree_special_funcc	Cs|��}tj�|d�}t|d�tj�|d�}t�|�||fD]}t�dtj�|d��t�|tj�|d��q tj�|��d�}|�tt	j
||�tj�|��d�}t	j
||d	d
�t�|�D]\}}}|�d|�|�
d|�qatj�|��d�}t	j
||d	d�|�
dt�|��dS)
Nr�abc�dir_a�
IDONTEXIST�broken�validr
�destination2T)�ignore_dangling_symlinks�destination3r")r�r(r8r9r@r�r�r�rr�r�walk�assertNotInr�r\)	r�r�
valid_filerkr�r�root�dirs�filesr$r$r%�test_copytree_dangling_symlinks�s$

z,TestCopyTree.test_copytree_dangling_symlinksc	Cs.|��}tj�|��d�}t�tj�|d��ttj�|dd�d��Wd�n1s-wYtjtj�|d�tj�|d�dd�tj||dd	�|�	tj�
tj�|d���|�dt�tj�|d���tj�|��d
�}tj||dd	�|�
tj�
tj�|d���|�dt�tj�|d���dS)Nr
�real_dirrr1�link_to_dirT)�target_is_directoryFr"ro)r�r(r8r9r�r:r�r�rr�r^r�r\r�)r�rrr$r$r%�test_copytree_symlink_dir�s"�� z&TestCopyTree.test_copytree_symlink_dircCs\|��}|d}|�tj|d�tj�|d�}t|d�t�||�}|�	dgt�
|��dS)N�destTr�)r�r�r�r�r(r8r9r@rr�r\)r�rrrr�rvr$r$r%�test_copytree_return_values
z'TestCopyTree.test_copytree_return_valuecCs�|��}|jtj|dd�tj�|dd�}tj�|dd�}t�|�tj�|d�}t|d�t�	||�}|�
dgt�|��dS)NTr��t�pg�
somevendorz1.0�pol)r�r�r�r�r(r8r9�makedirsr@rr�r\)r��base_dirrrrrr~r$r$r%�test_copytree_subdirectorys

z'TestCopyTree.test_copytree_subdirectoryN)r�r�r�rrrrr0r;rHrKr�mock�patchrNrUr	rjr(r
r|rrbrirxr|rr�r$r$r$r%r�s0
A*


�


rc@s�eZdZejdd��Ze�ee	d�d�ejdd���Z
e�ee	d�d�ejdd	���Zejd
d��Z
e�ee	d�oBeed
�oBeed�d�dd��Zejdd��Zejeje�ee	d�o`e	��dkd�dd����Zdd�Zdd�Zejdd��Ze�ee	d�d �d!d"��Zejd#d$��Zejd%d&��Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zejd/d0��Ze�ee	d1�d2�d3d4��Zejd5d6��Z e�ee	d7�d8�e�e!j"d9kd:�d;d<���Z#d=d>�Z$d?d@�Z%e�e&p�e'p�e(dA�e�e)dB�dCdD���Z*dEdF�Z+dGS)H�TestCopycCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t|d�t�||�t�||�t�|tjtj	B�t�|tj
�|�t�|�jt�|�j�t
�||�|�t�|�jt�|�j�tjdkr�t�|tj
�t
�||�|�t�|�jt�|�j�t�|tj
�t
�||�|�t�|�jt�|�j�t�|tj
�t
�||�|�t�|�jt�|�j�dSdS)Nr��bar�baz�quuxr$)r�r(r8r9r@r�r�r�r&�S_IRWXGr'�assertNotEqualr�r��copymoder�rb�r�r�rrrsr,r-r$r$r%�test_copymode_follow_symlinks&s2


 �z&TestCopy.test_copymode_follow_symlinksrzrequires os.lchmodcCsp|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t|d�t�||�t�||�t�|tjtj	B�t�|tj�t�
|tjtj	B�t�
|tj�tj
||dd�|�t�|�jt�|�j�|�t�|�jt�|�j�t�
|tj�tj
||dd�|�t�|�jt�|�j�t�
|tj�tj
||dd�|�t�|�jt�|�j�dS�Nr�r�r�r�F��follow_symlinks)r�r(r8r9r@r�r�r�r&r�rr'r�r�r�r�r�r�r�r$r$r%� test_copymode_symlink_to_symlinkFs0


� z)TestCopy.test_copymode_symlink_to_symlinkz requires os.lchmod to be missingcCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t|d�t�||�t�||�tj||dd�dSr�)r�r(r8r9r@r�r�r�r�r$r$r%�*test_copymode_symlink_to_symlink_wo_lchmodds

z3TestCopy.test_copymode_symlink_to_symlink_wo_lchmodc
Cs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t�|�}t�||j|jdf�t|d�|�	t�|�jt�|�j�t�
||�t�
||�ttd�rat�|tj
�ttd�rrttd�rrt�|tj�t�|�}ttd�r�tj||d	d
�|�	|jt�|�j�tj||dd
�t�|�}tjtjvr�dD]}	|�t||	�t||	�d
�q�ttd�r�|�|j|j�ttd�r�t|d�r�|�|j|j�tj||dd
�|�tt�|�jt�|�j�dk�dS)Nr�r�r��quxgE@rr r!Tr�F��st_atime�st_mtimeryr*g�������?)r�r(r8r9r@r��utimer�r�r�r�rjrr'r r!r�r��copystatr�r��assertLessEqualrr�r*r��abs)
r�r�rrrsr,r-r.�
src_link_stat�
dst_link_stat�attrr$r$r%�test_copystat_symlinkstsJ


�




�

�zTestCopy.test_copystat_symlinks�chflags�
EOPNOTSUPP�ENOTSUPz)requires os.chflags, EOPNOTSUPP & ENOTSUPcCs�|��}tj�|d�}tj�|d�}t|d�t|d�dd�}tj}z,tjtjfD]
}||�t_t	�
||�q*|tjtj�t_|�tt	j
||�W|t_dS|t_w)Nr��file2�xxxcst��dd���fdd�
}|S)NTr�cs
��_��r')r )r8�flagsr���err�exr$r%�_chflags_raiser�szlTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser.<locals>._chflags_raiser�r)r�r�r$r�r%�make_chflags_raiser�szSTestCopy.test_copystat_handles_harmless_chflags_errors.<locals>.make_chflags_raiser)
r�r(r8r9r@r�r r�r�r�r�r�r)r�r�r�r�r��old_chflagsr�r$r$r%�-test_copystat_handles_harmless_chflags_errors�s


z6TestCopy.test_copystat_handles_harmless_chflags_errorscs |��}tj�|d��t�d�tj�|d�}t|d�t��|�t��dd�t��dd�t��|�|�t	t�
���t	t�
|���|�t��d�t�|d��t�|�t|d�t
tjd����fdd	�}ztj�|t_t��|�|�dt�
|��W�t_n�t_wd
d���fdd
�
}ztj
�|t_
t��|�W�t_
n�t_
wtj�|d��tj�|d�}t���t||�t��dd�t�|dd�t�|d�tj�|d�}tj�|d�}t||�t||�t��|�t�||�|�t�|d�d�|�t�|d�d�dS)Nr�r��user.foo�42zuser.bar�43�EPERMcs$|dkr���|||fi|��dS)Nr�r$)�fnamer��valr#)�
orig_setxattr�os_errorr$r%�_raise_on_user_foo�sz3TestCopy.test_copyxattr.<locals>._raise_on_user_fooTr�cs |�kr
ttjd���||d�S)NzOperation not supportedr�)rr r�)r�r�)�orig_listxattrrrr$r%�
_raise_on_src�sz.TestCopy.test_copyxattr.<locals>._raise_on_src�the_original�the_original_rozuser.the_valuesfiddlyi$�the_copy�the_copy_ro)r�r(r8r9r@r��
_copyxattr�setxattrr�r[�	listxattr�getxattrr�rr r�r�r�r�)r�r�rsr�r��srcro�dstror$)r�r�r�rrr%�test_copyxattr�sZ

 

�





zTestCopy.test_copyxattrr�r�root privileges requiredcCs�|��}tj�|d�}tj�|d�}t|d�t�||�t�|dd�tj|dddd�tj�|d�}tj�|d	�}t|d�t�||�tj||dd�|�	tj
|ddd�d�|�ttj
|d�tj||dd�|�	t�
|d�d�dS)
Nr�r�ztrusted.foor�r�Fr�r�r�)
r�r(r8r9r@r�r�r�r�r�r�r�r)r�r�rrr,rsr-r$r$r%�test_copyxattr_symlinks�s 

z TestCopy.test_copyxattr_symlinkscCsPd}|��}t||fd�tj�||�}|��}|||�tj�||�}||fS)Nrr�)r�r@r(r8r9)r��methodr�r�r��tmpdir2r�r$r$r%�
_copy_files
zTestCopy._copy_filecCsB|�tj�\}}|�tj�|��|�t�|�j	t�|�j	�dSr')
r�r��copyr�r(r8r�r�r�r�)r�r�r�r$r$r%�	test_copy!s zTestCopy.test_copycCs|��}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�ttd�r3t�|tj	tj
B�tj||dd�|�
tj�|��|�t|�t|��t�|�tj||dd�|�tj�|��|�t�|�t�|��ttd�r�|�t�|�jt�|�j�dSdS)Nr�r�r�rTr�F)r�r(r8r9r@r�rjrr�r&r'r�r�r�r^r�rYr�r�r(r�r�)r�r�rrrsr,r$r$r%�test_copy_symlinks's(




��zTestCopy.test_copy_symlinksr�zrequires os.utimecCs�|�tj�\}}|�tj�|��t�|�}t�|�}|�|j	|j	�dD]}|�
t||�t||�d�q%ttd�rNt|d�rP|�t|d�t|d��dSdSdS)Nr�ryr�r*)
r�r��copy2r�r(r8r�r�r�r�r�rrj)r�r�r��
file1_stat�
file2_statr�r$r$r%�
test_copy2@s

���zTestCopy.test_copy2c	Cs�|��}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�ttd�r3t�|tj	tj
B�ttd�rDttd�rDt�|tj�t�|�}t�
|�}tj||dd�|�tj�|��|�t|�t|��t�|�tj||d	d�|�tj�|��|�t�|�t�|��t�
|�}tjtjvr�d
D]}|�t||�t||�d�q�ttd�r�|�|j|j�|�|j|j�ttd�r�t|d�r�|�|j|j�dSdSdS)
Nr�r�r�rr r!Tr�Fr�ryr*)r�r(r8r9r@r�rjrr�r&r'r r!r�r�r�r�r^r�rYr�r�r(r�r�r�rr�r�r*)	r�r�rrrsr,r.r�r/r�r$r$r%�test_copy2_symlinksQs>





�
�zTestCopy.test_copy2_symlinkscCsr|��}tj�|d�}tj�|d�}t|d�t�|dd�t�||�|�t�	|d�t�	|d��t�
|�dS)Nr�r�r�r�)r�r(r8r9r@r�r�r�r�r�r�)r�r�rrrsr$r$r%�test_copy2_xattrts


�zTestCopy.test_copy2_xattrcCs�tjtjfD];}|��}|��}tj�|d�}t|d�|||�}|�|tj�|d��||tj�|d��}|�|tj�|d��qdS)Nr�r�)	r�r�r�r�r(r8r9r@r�)r�r�rrrrr~r$r$r%�test_copy_return_value�s

�zTestCopy.test_copy_return_valuecC�|�tj�dSr')�_test_copy_dirr�r��r�r$r$r%�
test_copy_dir��zTestCopy.test_copy_dircCr�r')r�r�r�r�r$r$r%�test_copy2_dir�r�zTestCopy.test_copy2_dircCsx|��}tj�|d�}|��}tj�|d�}t|d�tjdkr#t}nt}|�	||||�|�	||||�|||�dS�Nr��does_not_exist/�win32)
r�r(r8r9r@r|rrL�IsADirectoryErrorr�)r��	copy_funcr�src_filer�rsr�r$r$r%r��s

zTestCopy._test_copy_dircCs�|��}tj�|d�}tj�|d�}tj�|d�}tj�|d�}t|d�t�||�tj||dd�|�tj�	|��|�
t�|�t�|��t�||�|�tj�	|��dS)Nrrrsr-r�r�Fr�)
r�r(r8r9r@r�r��copyfiler�r^r�r(r�)r�r�rrrsr-r�r$r$r%�test_copyfile_symlinks�s
zTestCopy.test_copyfile_symlinksr�zrequires os.linkc
Cs$t�t�tj�td�}tj�td�}zvt|ddd��
}|�d�Wd�n1s+wYzt�||�WntyQ}z
|�	d|�WYd}~nd}~ww|�
tjtj
||�t|ddd��}|�|��d�Wd�n1svwYt�|�Wtjtd	d
�dStjtd	d
�w)Nrrr2r3r4�cheddarz
os.link(): %srWTr�)r(r�rr8r9r:r;r�rLr\r�r�rr�r�rXr�r�)r�rrrsrSr`r$r$r%�'test_dont_copy_file_onto_link_to_itself�s&
����"z0TestCopy.test_dont_copy_file_onto_link_to_itselfc
Cs�t�t�tj�td�}tj�td�}zZt|ddd��
}|�d�Wd�n1s+wYt�d|�|�t	j
t	j||�t|ddd��}|�|�
�d�Wd�n1sZwYt�|�Wt	jtdd	�dSt	jtdd	�w)
Nrrr2r3r4r�rWTr�)r(r�rr8r9r:r;r�r�r�rr�r�rXr�r�)r�rrrsrSr$r$r%�*test_dont_copy_file_onto_symlink_to_itself�s
��"z3TestCopy.test_dont_copy_file_onto_symlink_to_itselfrVrWrXrYc
Cs�zt�t�Wnty }z
|�d|�WYd}~nd}~wwz|�tjtjtt	�|�tjtjt
t�Wt�t�dSt�t�w)Nr[)r(rVrrLr\r�r��SpecialFileErrorr�r]�__file__r�)r�r`r$r$r%�test_copyfile_named_pipe�s����z!TestCopy.test_copyfile_named_pipecCsl|��}|��}tj�|d�}tj�|d�}t|d�t�||�}|�tj�|��|�	t
|�t
|��dS)Nr�r�)r�r(r8r9r@r�r�r�r�r�rY)r�rr�dst_filer�r~r$r$r%�test_copyfile_return_value�s
z#TestCopy.test_copyfile_return_valuecCsX|��}tj�|d�}t|d�|�ttj||�|�t	tj||�|�
t|�d�dSrO)r�r(r8r9r@r�rr�r�rr�rY)r�rr�r$r$r%�test_copyfile_same_file�s
z TestCopy.test_copyfile_same_filezMOn MACOS, Solaris and Windows the errors are not confusing (though different)zNot valid on AIX, see gh-92670cCsD|��}tj�|d�}tj�|d�}t|d�|�ttj||�dS)Nr�r�)	r�r(r8r9r@r�r�r�r�)r�rr�rsr$r$r%�test_copyfile_nonexistent_dirs

z&TestCopy.test_copyfile_nonexistent_dircCs�|��}tj�|d�}|��}tj�|d�}t|d�tjdkr#t}nt}|�	|t
j||�|�	|t
j||�|�	|t
j||�dSr�)r�r(r8r9r@r|rrLr�r�r�r�)r�rr�r�rsr�r$r$r%�test_copyfile_copy_dirs

zTestCopy.test_copyfile_copy_dirN),r�r�r�rrr�rr	rjr(r�r
r�r�r r��skip_unless_xattrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r|rr�r�r��MACOS�SOLARISr�r{r�r�r$r$r$r%r�"sr

(��

?�



"



�

r�c@s|eZdZe��dd��Zdd�Zd9dd�Ze��e�	e
�d�d	�d
d���Ze��dd
��Z
e��e�	e
�d�d�dd���Ze��e�	e
�d�d�dd���Zdd�Ze��dd��Ze��e�	ed�dd���Zdd�Zdd �Ze��d!d"��Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Ze��d-d.��Ze��d/d0��Ze��e� e!o�e"�d1�d2d3���Z#e��d4d5��Z$d6d7�Z%d8S):�TestArchivesc		Cs�|�d�\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|��'t
�tj�|�}t|d|d�}Wd�n1sAwYWd�n1sPwY|�
||d�|�tj�|��|�t�|��t�|d��}|�|��gd��Wd�n1s�wYt�	|��!t
�t|d|d�}Wd�n1s�wYWd�n1s�wY|�
||d	�|�tj�|��|�t�|��t�|d
��}|�|��gd��Wd�dS1s�wYdS)Nr��archive�gztar�.�.tar.gzzr:gz)r�z./subz./sub2z./file1z./file2z./sub/file3�tar�.tarrW)�
_create_filesr�r(r�r8rr9�basenamer�
change_cwd�no_chdir�abspathrr�r�r�tarfile�
is_tarfiler:�assertCountEqual�getnames)	r��root_dirr�r��work_dir�
rel_base_name�	base_name�tarball�tfr$r$r%�test_make_tarball*s@
��
����
�"�zTestArchives.test_make_tarballcCsFt�|��}|��}|��t|�Wd�S1swYdSr')r�r:r�sortr7)r�r8r�r7r$r$r%�_tarinfoNs
$�zTestArchives._tarinfo�distcCs�|��}tj�||�}tj|dd�t|dfd�t|dfd�t�tj�|d��t|ddfd�t�tj�|d��|rEt|d	fd�||fS)
NT)�exist_okr�r�r�r�file3�sub2�outer)r�r(r8r9r�r@r�)r�r�rrr$r$r%r�TszTestArchives._create_filesr�zNeed the tar command to runcCsx|��\}}tj�|��d�}t�t|d||�}Wd�n1s#wY|�||d�|�tj�	|��tj�|d�}ddd|g}t
j||t
jd�|�tj�	|��|�|�
|�|�
|��t�t|d||�}Wd�n1sxwY|�||d�|�tj�	|��t�t|d||d	d
�}Wd�n1s�wY|�||d�|�tj�	|��dS)Nr�r�r�zarchive2.tarr�z-cf��cwd�stdoutr�T)�dry_run)r�r(r8r9r�r�rr�r�rr~�
check_call�DEVNULLr
)r�rr�rr�tarball2�tar_cmdr$r$r%�test_tarfile_vs_tarbs4���
��z TestArchives.test_tarfile_vs_tarc		Cs�|��\}}|��}t�|�tj�|�}tj�tj�|�d�}t�	|��&t
�tj�|�}t|d|�}Wd�n1s?wYWd�n1sNwY|�
||d�|�tj�|��|�t�|��t�|��}|�|��gd��Wd�n1s�wYt�	|��'t
�tj�|�}t|d||�}Wd�n1s�wYWd�n1s�wY|�
||d�|�tj�|��|�t�|��t�|��}|�|��gd��Wd�dS1s�wYdS)Nr��zip�.zip)�dist/�	dist/sub/�
dist/sub2/�
dist/file1�
dist/file2�dist/sub/file3r)rrrrrr )r�r�r(r�r8rr9r�rr�r�r�rr�r�r�zipfile�
is_zipfile�ZipFiler�namelist)	r�rr�r�rrrra�zfr$r$r%�test_make_zipfile�sB
��
����
�"�zTestArchives.test_make_zipfilerzNeed the zip command to runc
Cs.|��\}}tj�|��d�}t�t|d||�}Wd�n1s#wY|�||d�|�tj�	|��tj�|d�}dddd|g}t
j||t
jd�|�tj�	|��t
�|��}|��}Wd�n1smwYt
�|��}|��}	Wd�n1s�wY|�t|�t|	��dS)Nr�rrzarchive2.zipz-qz-rr)r�r(r8r9r�r�rr�r�rr~rrr!r#r$r[)
r�rr�rr��archive2�zip_cmdr%r7�names2r$r$r%�test_zipfile_vs_zip�s(��
�
�z TestArchives.test_zipfile_vs_zip�unzipzNeed the unzip command to runc	Cs.|��\}}tj�|��d�}t�t|d||�}Wd�n1s#wY|�||d�|�tj�	|��dd|g}t
�|��Jz
tj
|tjd�Wn.tjy|}z!|jjdd�}d	|vrg|�d
�d}|�|�||��WYd}~n
d}~wwWd�dSWd�dS1s�wYdS)Nr�rrr+z-t)�stderr�replacer�zunrecognized option: tzunzip doesn't support -tz{}

**Unzip Output**
{})r�r(r8r9r�r�rr�r�rrr�r~�check_output�STDOUT�CalledProcessError�output�decoder\r^�format)	r�rr�rr�r(r��details�msgr$r$r%�test_unzip_zipfile�s.�

����"�zTestArchives.test_unzip_zipfilecCs*|��}tj�|d�}|�tt|d�dS)Nr�r�)r�r(r8r9r��
ValueErrorr)r�r�rr$r$r%�test_make_archive�szTestArchives.test_make_archivecCs�trt�d�d}t�d�d}nd}}|��\}}tj�|�	�d�}t
|d||||d�}|�tj�|��t
|d||�}|�tj�|��t
|d||||d�}|�tj�|��t
|d||ddd�}|�tj�|��dS)	Nrrur�r��owner�groupr��	kjhkjhkjg�oihohoh)
�UID_GID_SUPPORT�grp�getgrgid�pwd�getpwuidr�r(r8r9r�rr�r)r�r;r:rr�rrar$r$r%�test_make_archive_owner_group�s(�
�
�z*TestArchives.test_make_archive_owner_group�Requires grp and pwd supportc	
Cs�|��\}}tj�|��d�}t�d�d}t�d�d}t	�
|��$t�t|d|d||d�}Wd�n1s:wYWd�n1sIwY|�
tj�|��t�|�}z|��D]}|�|jd�|�|jd�qaW|��dS|��w)Nr�rr�rr9)r�r(r8r9r�r?r@rArBrr�r�rr�rr�r:�
getmembersr��uid�gidr�)	r�rr�rr;r:�archive_namer��memberr$r$r%�test_tarfile_root_owners&
���
�z$TestArchives.test_tarfile_root_ownerc	s�t��}|��}dd�}g���fdd�}td|gd�zAt�td|���z	tdd|d�Wn	ty7YnwWd�n1sBwY|�t��|�|��||g�Wt	d�dSt	d�w)	Nc_st��r')�RuntimeError)r"�kwr$r$r%�_breakssz3TestArchives.test_make_archive_cwd.<locals>._breakscs��|��|�dSr'r��r8�rv�
orig_chdirr$r%�_chdirs
z2TestArchives.test_make_archive_cwd.<locals>._chdirr��xxx file�chdir)r)
r(rmr�rr�	swap_attrrr�r�r)r��current_dirrrMrQr$rOr%�test_make_archive_cwds$���z"TestArchives.test_make_archive_cwdc	C�|��}t�|��5t�|�tdd�d�|�tj�	d��Wd�n1s)wYWd�dSWd�dS1sAwYdS)N�testr�ztest.tar�
r�rr�r�r�rr�r(r8r�r�rr$r$r%�test_make_tarfile_in_curdir-s
P�z(TestArchives.test_make_tarfile_in_curdirc	CrW)NrXrztest.ziprYrZr$r$r%�test_make_zipfile_in_curdir4s
P�z(TestArchives.test_make_zipfile_in_curdircCs�|�ttdd�|�ttddd�d�|�ttddd�ddg�tddd�dgd	�d
d�t�D�}|�d|�td�dd�t�D�}|�d|�dS)
Nr�rycS�tSr'��xr$r$r$r%�<lambda>?�z;TestArchives.test_register_archive_format.<locals>.<lambda>cSr]r'r^r$r$r$r%r`Ara)ryri)ryrircSr]r'r^r$r$r$r%r`DrarRcS�g|]\}}|�qSr$r$�rJrb�paramsr$r$r%rLE�z=TestArchives.test_register_archive_format.<locals>.<listcomp>cSrbr$r$rcr$r$r%rLIre)r��	TypeErrorrrr�rrs)r��formatsr$r$r%�test_register_archive_format<s��z)TestArchives.test_register_archive_formatcKsF|j|dd�fi|��|j|tjfi|��|j|tfi|��dS)NcSs|Sr'r$rNr$r$r%r`Praz3TestArchives.check_unpack_archive.<locals>.<lambda>)�#check_unpack_archive_with_converterrDrEr)r�r3r#r$r$r%�check_unpack_archiveNs����z!TestArchives.check_unpack_archivecKs.|��\}}t|�}|�d�tj�|��d�}t||||�}|��}	t||�||	�fi|��|�	t|	�|�|��}
t||�||
�fd|i|��|�	t|
�|�|�
tj��t|t
�fi|��Wd�n1snwY|�
t��t|t
�fddi|��Wd�dS1s�wYdS)Nrr�r3r�)r�r`r�r(r8r9r�rrr�r�r��	ReadErrorrr7)r�r3�	converterr#rr��expectedrr�r��tmpdir3r$r$r%riUs&
��"�z0TestArchives.check_unpack_archive_with_convertercCsV|j|dd�|j|dd�t�|��|�|�Wd�dS1s$wYdS)N�
fully_trusted��filter�data)rjr�check_no_warnings)r�r3r$r$r%�check_unpack_tarballms
"�z!TestArchives.check_unpack_tarballcC�|�d�dS)Nr��rtr�r$r$r%�test_unpack_archive_tarsr�z$TestArchives.test_unpack_archive_tarcCru)Nr�rvr�r$r$r%�test_unpack_archive_gztarv�z&TestArchives.test_unpack_archive_gztarcCru)N�bztarrvr�r$r$r%�test_unpack_archive_bztarzryz&TestArchives.test_unpack_archive_bztarz(AIX MAXDATA must be 0x20000000 or largercCru)N�xztarrvr�r$r$r%�test_unpack_archive_xztar~sz&TestArchives.test_unpack_archive_xztarcCsH|�d�|�t��|jddd�Wd�dS1swYdS)Nrrrrp)rjr�rfr�r$r$r%�test_unpack_archive_zip�s
"�z$TestArchives.test_unpack_archive_zipcs�t�}�fdd�}tdddg|dg�tdd���ttd	dg|�td�td	dg|���d	dgd
ft����ddgd
ft��td	���t�|�dS)Ncs(��|d���|d���|d�dS)Nry�	stuff.boo�xx)r�)r��extract_dir�extrar�r$r%�_boo�sz/TestArchives.test_unpack_registry.<locals>._boo�Booz.booz.b2)r�ryrr��Boo2r�)	rrrr�r	r
r�rsr�)r�rgr�r$r�r%�test_unpack_registry�s

�z!TestArchives.test_unpack_registryN)r)&r�r�r�r�
requires_zlibrr
r�rr	r��whichrr&r*r6r8rCr>rJrVr[r\rhrjrirtrwrx�requires_bz2r{�
requires_lzmar
r{r�r}r~r�r$r$r$r%r�&s^
#
�!
$��





r�c@sLeZdZe�eed�d�dd��Ze�ed�e�ee	d�d�dd	���Z
d
S)�TestMisc�
disk_usagez)disk_usage not available on this platformcCs�t�tj�t��}dD]}|�t||�t�q|�	|j
d�|�	|jd�|�|j
d�|�|j
|j�|�	|j
|j
�t�t�dS)N)rA�used�freer)r�r�r(r8rr�r�rr��
assertGreaterrAr��assertGreaterEqualr�)r��usager�r$r$r%�test_disk_usage�szTestMisc.test_disk_usagerD�chownzrequires os.chowncs����}tj|d��t�d���t��
t���Wd�n1s$wY��t��tj�dd�Wd�n1s@wY��t��tj�dd�Wd�n1s\wY��t	��t��d�Wd�n1swwY��t	��t��d�Wd�n1s�wYt
��}t
��}d
��fd	d
�	}t��||�|�||�t��|�|�|�tj�|d�|�|�tj�|d�|�|d�t�|||�||||�t�||�|||�tj||d�|||�tj||d�|||d�zt
�|�d}t�|�d}Wnt�y$YdSwt��||�|�||�t�|||�||||�dS)Nr�ztesting chown functionznon-existing username)�userznon-existing groupname)r;�spamg��Q�	@cs>t���}|dur��||j�|dur��||j�dSdSr')r(r�r��st_uid�st_gid)r8rFrG�s�r�r�r$r%�check_chown�s
�z(TestMisc.test_chown.<locals>.check_chown)rGr)NN)r�rkr�r@r�r7r�r��LookupErrorrfr(�getuid�getgidrArBr?r@�KeyError)r�rrFrGr�r�r;r$r�r%�
test_chown�s^
�����



�zTestMisc.test_chownN)r�r�r�rr	rjr�r�r>r(r�r$r$r$r%r��s�


r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Ze�	e
ed�o$e��dkd
�dd��Z
dd�Zdd�Ze�ejdkd�dd��Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Ze�ejdkd$�d%d&��Ze�ejdkd$�d'd(��Zd)S)*�	TestWhichcCst|jdd�|_tj|jddd�|_t�|jjtj	�|�
|jj�tj�
|jj�\|_|_|j|_tj|_d|_dS)N�Tmp)r�z.Exe�rgr��suffixz.EXE)r��temp_dirrkrl�	temp_filer(r�rbr��S_IXUSRr�r�r8r�rg�file�env_path�curdir�extr�r$r$r%�setUp�s�
zTestWhich.setUpcCs&tj|j|jd�}|�||jj�dS�NrN)r�r�r�rgr�r�rb�r�r~r$r$r%�
test_basicszTestWhich.test_basiccCs(tj|jj|jd�}|�||jj�dSr�)r�r�r�rbr�r�r�r$r$r%�test_absolute_cmd	szTestWhich.test_absolute_cmdcCs�tj�|j�\}}tj�||j�}tj|d��tj	||j
d�}|�||�Wd�n1s0wYtj|jd��tj	||d�}|�|�Wd�dS1sTwYdSr�)
r(r8r�rgr9r�rr�r�r�r�r��assertIsNone)r�r��tail_dir�relpathr~r$r$r%�test_relative_cmds�"�zTestWhich.test_relative_cmdcCs�tj�|j�}tj|jd��1tj|j|d�}t	j
dkr*|�|tj�|j
|j��n
|�|�Wd�dSWd�dS1sBwYdS)NrNr�)r(r8rrgrr�r�r�r�r|rr�r9r�r�)r�r�r~r$r$r%�test_cwds
�"�zTestWhich.test_cwdr�rznon-root user requiredcCsRt�|jjtj�t�|jjtj�r|�d�t	j
|j|jtjd�}|�
|�dS)Nzcan't set the file read-only)r8r>)r(r�r�rbr�r��access�W_OKr\r�r�r�rgr�r�r$r$r%�test_non_matching_mode(s

z TestWhich.test_non_matching_modecCsltj�|j�\}}tj|d��tj|j|d�}|�	|tj�
||j��Wd�dS1s/wYdSr�)r(r8r�rgrr�r�r�r�r�r9)r�r�r�r~r$r$r%�test_relative_path2s
"�zTestWhich.test_relative_pathcCstjd|jd�}|�|�dS)Nzfoo.exerN)r�r�rgr�r�r$r$r%�test_nonexistent_file8szTestWhich.test_nonexistent_filer�zpathext check is Windows-onlycCs<tj|jdd�|jd�}|�||jjdd�|j�dS)N���rN)r�r�r�rgr�r�rbr�r�r$r$r%�test_pathext_checking=s"zTestWhich.test_pathext_checkingcCsTt���}|j|d<t�|j�}|�||jj�Wd�dS1s#wYdS�N�PATH)	r�EnvironmentVarGuardr�r�r�r�r�r�rb�r��envr~r$r$r%�test_environ_pathEs


"�zTestWhich.test_environ_pathcCs�t���h}d|d<tjjd|jdd��At�td|j��)t�	|j��t
�|j�}|�
|�Wd�n1s9wYWd�n1sHwYWd�n1sWwYWd�dSWd�dS1sowYdS)Nr�r��
os.confstrT��return_value�create�defpath)rr�rr�r�rgrrTr(r�r�r�r�r�r�r$r$r%�test_environ_path_emptyKs&
��
�����"�z!TestWhich.test_environ_path_emptycCsHtj�|jj�}tjdkr!tj}t|t	�rt�
|�}tj�||�}t�
��u}tj|d<tjjd|jdd��Mt�td|j��5t�|j�}|�|�t�|j��t�|j�}|�||�Wd�n1sgwYWd�n1svwYWd�n1s�wYWd�dSWd�dS1s�wYdS)Nr�r�r�Tr�r�)r(r8r�r�rbr|rr�r6r�r�r9rr��pathseprr�r�rgrrTr�r�r�r�r�r�)r��expected_cwdr�r�r~r$r$r%�test_environ_path_cwdVs4




��
�����"�zTestWhich.test_environ_path_cwdc
Cs6t����}|�dd�tjjdtdd��&t�t	d|j
��t�|j
�}Wd�n1s.wYWd�n1s=wY|�||jj�tjjd|j
dd��%t�t	dd��t�|j
�}Wd�n1smwYWd�n1s|wY|�||jj�Wd�dS1s�wYdS)Nr�r�T)rr�r�r�r�)rr��poprr�r�r7rrTr(rgr�r�r�r�r�rbr�r$r$r%�test_environ_path_missingls.

��������"�z#TestWhich.test_environ_path_missingc	Cs�tj�|j�}tj|jd��7t���}|j|d<tj	|j
dd�}|�|�Wd�n1s0wYWd�dSWd�dS1sHwYdS)NrNr�r�)r(r8rrgrr�r�r�r�r�r�r�)r�r�r�r~r$r$r%�test_empty_path~s�
P�zTestWhich.test_empty_pathcCsPt���}|�dd�t�|j�}|�|�Wd�dS1s!wYdSr�)rr�r�r�r�r�r�r�r$r$r%�test_empty_path_no_PATH�s

"�z!TestWhich.test_empty_path_no_PATHztest specific to WindowscCs�d}tj|jd|d�}t�|jtj�|�|j	�tj
�|j�}tj
�|�d}t
���}||d<tj||jd�}|�||j�Wd�dS1sKwYdS)N�.xyz�Tmp2r�r�PATHEXTrN)rkrlr�r(r�rbr�r�r�r�r8r�r6rr�r�r�r��r�r��temp_filexyz�programr�r~r$r$r%�test_pathext�s�
"�zTestWhich.test_pathextcCs�d}tj|jd|d�}|�|j�tj�|j�}tj�	|�d}t
���}|�d�|d<tj
||jd�}|�||j�Wd�dS1sFwYdS)Nr�r�r�r�;r�rN)rkrlr�r�r�r(r8r�rbr6rr�r�r�r�r�r$r$r%�test_pathext_with_empty_str�s�
"�z%TestWhich.test_pathext_with_empty_strN)r�r�r�r�r�r�r�r�rr
rjr(r�r�r�r�r	r|rr�r�r�r�r�r�r�r�r�r$r$r$r%r��s4
�
�

r�c@seZdZdd�ZdS)�TestWhichBytescCsXt�|�t�|j�|_t�|j�|_t�|jj�|j_t�|j�|_t�|j	�|_	dSr')
r�r�r(r�rgr�r�rbr�r�r�r$r$r%r��s
zTestWhichBytes.setUpN)r�r�r�r�r$r$r$r%r��sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��Ze
dd��Zdd�Z
e
dd��Zdd�Ze
dd��Zdd�Ze�ejjd�dd��Zd d!�Zd"d#�Zd$d%�Zd&d'�Zeje
d(d)���Zeje
d*d+���Zeje
d,d-���Z eje
d.d/���Z!d0d1�Z"d2d3�Z#e
d4d5��Z$e
d6d7��Z%d8d9�Z&e�e'ed:�o�e�(�d;ko�e'ed<�o�e'e)d=�o�e'e)d>�d?�d@dA��Z*dBS)C�TestMovecCsxd}|��|_|��|_tj�|j|�|_tj�|j|�|_t|jd��}|�	d�Wd�dS1s5wYdS)Nr�r1r�)
r�rrr(r8r9r�r�r:r;)r�r�rSr$r$r%r��s

"�zTestMove.setUpcCs�t|d��}|��}Wd�n1swYt�||�t|d��}|�||���Wd�n1s7wY|�tj�|��dS�NrV)	r:rXr��mover�r�r(r8r�)r�rrrs�real_dstrS�contentsr$r$r%�_check_move_file�s
��zTestMove._check_move_filecCsFtt�|��}t�||�|�|tt�|���|�tj�|��dSr')	r[r(r\r�r�r�r�r8r�)r�rrrsr�r�r$r$r%�_check_move_dir�szTestMove._check_move_dircCs|�|j|j|j�dSr')r�r�r�r�r$r$r%�test_move_file��zTestMove.test_move_filecCs|�|j|j|j�dSr')r�r�rr�r�r$r$r%�test_move_file_to_dir�r�zTestMove.test_move_file_to_dircCs"t�|j�}|�||j|j�dSr')rDrEr�r�rr�)r�rrr$r$r%�"test_move_file_to_dir_pathlike_src��z+TestMove.test_move_file_to_dir_pathlike_srccCs"t�|j�}|�|j||j�dSr')rDrErr�r�r��r�rsr$r$r%�"test_move_file_to_dir_pathlike_dst�r�z+TestMove.test_move_file_to_dir_pathlike_dstcC�|��dSr')r�r�r$r$r%�test_move_file_other_fs��z TestMove.test_move_file_other_fscCr�r')r�r�r$r$r%�test_move_file_to_dir_other_fs�r�z'TestMove.test_move_file_to_dir_other_fsc	Cs>tj|��d�}z|�|j||�Wt�|�dSt�|�wr�)rkr�r�r�rrr��r�rr$r$r%�
test_move_dir�szTestMove.test_move_dircCr�r')r�r�r$r$r%�test_move_dir_other_fs�r�zTestMove.test_move_dir_other_fsc
Cs,|�|j|jtj�|jtj�|j���dSr')r�rrr(r8r9r�r�r$r$r%�test_move_dir_to_dir�s�zTestMove.test_move_dir_to_dircCr�r')r�r�r$r$r%�test_move_dir_to_dir_other_fsr�z&TestMove.test_move_dir_to_dir_other_fsc
C�4|�|jtjj|jtj�|jtj�|j���dSr')r�rr(r8�seprr9r�r�r$r$r%�test_move_dir_sep_to_dirs�z!TestMove.test_move_dir_sep_to_dirzrequires os.path.altsepc
Cr�r')r�rr(r8�altseprr9r�r�r$r$r%�test_move_dir_altsep_to_dir	s�z$TestMove.test_move_dir_altsep_to_dircCsHt|jd��Wd�n1swY|�tjtj|j|j�dS)Nr1)r:r�r�r�rr�r�rr�r$r$r%�"test_existing_file_inside_dest_dirs�z+TestMove.test_existing_file_inside_dest_dircCs*tj�|jd�}|�tjtj|j|�dS�Nr�)r(r8r9rr�r�rr�r�r$r$r%�test_dont_move_dir_in_itselfsz%TestMove.test_dont_move_dir_in_itselfc	C�pt�t�z,dD]!\}}tj�t|�}tj�t|�}|jt�||�d||fd�qWt�	t�dSt�	t�w)N))�srcdirzsrcdir/destz?_destinsrc() wrongly concluded that dst (%s) is not in src (%s)�r5)
r(r�rr8r9r�r��
_destinsrcrr�rr$r$r%�test_destinsrc_false_negative�
���z&TestMove.test_destinsrc_false_negativec	Cr�)N))r�zsrc/dest)r�z
srcdir.newz;_destinsrc() wrongly concluded that dst (%s) is in src (%s)r�)
r(r�rr8r9r�r�r�rr�rr$r$r%�test_destinsrc_false_positive%r�z&TestMove.test_destinsrc_false_positivecCs\tj�|jd�}t�|j|�t�||j�|�	tj�
|j��|�	tj�|j|j��dSr�)r(r8r9rr�r�r�r�r�r�r^�samefiler�r$r$r%�test_move_file_symlink1s
zTestMove.test_move_file_symlinkcCsld}tj�|j|�}t�|j|�t�||j�tj�|j|�}|�	tj�
|��|�	tj�|j|��dSr�)r(r8r9rr�r�r�r�rr�r^r�)r�r�rs�
final_linkr$r$r%�test_move_file_symlink_to_dir:sz&TestMove.test_move_file_symlink_to_dircCsztj�|jd�}tj�|jd�}t�||�tj�|jd�}t�||�|�tj�	|��|�
tj�|�tj�|��dS�Nr�r�r�)r(r8r9rr�rr�r�r�r^r��realpath�r�rrrsr-r$r$r%�test_move_dangling_symlinkEs z#TestMove.test_move_dangling_symlinkcCs|tj�|jd�}tj�|jd�}t�|�t�||�tj�|jd�}t�||�|�	tj�
|��|�	tj�||��dSr)r(r8r9rr�r�rr�r�r�r^r�rr$r$r%�test_move_dir_symlinkPs
zTestMove.test_move_dir_symlinkc	Cs6t�|j|j�}|�|tj�|jtj�|j���dSr')	r�r�r�rr�r(r8r9r�r�r$r$r%�test_move_return_value\s�zTestMove.test_move_return_valuecCs6t�|jtj�|jd��}|�|tj�|jd��dSr�)r�r�r�r(r8r9rr�r�r$r$r%� test_move_as_rename_return_valueasz)TestMove.test_move_as_rename_return_valuecs8g��fdd�}tj|j|j|d�|�t��d�dS)Ncrcr'r�rd��movedr$r%rghrhz7TestMove.test_move_file_special_function.<locals>._copyrSry)r�r�r�rr�r��r�rgr$r
r%�test_move_file_special_functionesz(TestMove.test_move_file_special_functioncsdg��fdd�}t�tj�|jd��t�tj�|jd��tj|j|j|d�|�	t
��d�dS)Ncrcr'r�rdr
r$r%rgprhz6TestMove.test_move_dir_special_function.<locals>._copy�child�child1rSr)rr�r(r8r9rr�r�rr�r�rr$r
r%�test_move_dir_special_functionmsz'TestMove.test_move_dir_special_functionc	Cs||��|_tj�tj�|j�tj�|j����}|�|j|�zt	�
|j|�|�tj�|��Wt�
|�dSt�
|�wr')r�rr(r8r9rr��upperr�r�r�r�r]r�r�r$r$r%�test_move_dir_caseinsensitivews
�z&TestMove.test_move_dir_caseinsensitiver�rr �SF_IMMUTABLE�	UF_OPAQUEr�c
Cs0zqt�t�t�ttj�|�ttj	tt
�|�t
t��v�t�ttj
�t�tj�td��t�ttj�|�ttj	tt
�|�t
t��v�Wtj�t�r\t�ttj
�t�t�tj�t
�rpt�t
tj
�t�t
�dSdStj�t�r�t�ttj
�t�t�tj�t
�r�t�t
tj
�t�t
�ww)Nr)r(r��
TESTFN_SRCr r�rr�rLr�r��
TESTFN_DSTr�r\rrr�r8r9r�r�r�r$r$r%�test_move_dir_permission_denied�s0

��
�z(TestMove.test_move_dir_permission_deniedN)+r�r�r�r�r�r�r�r�r�r�r0r�r�r�r�r�r�r�rr	r(r8r�r�r�r�r�r�rrrrrrrr	r
rrrjr�r�rr$r$r$r%r��sj	




		


	���r�c@s`eZdZGdd�de�Zdd�Ze�ed�dd��Z	e�ed�dd	��Z
e�ed�d
d��ZdS)
�TestCopyFilec@s:eZdZdZdZdZddd�Zdd�Zdd	�Zd
d�Z	dS)
zTestCopyFile.FauxFNTcCs||_||_dSr')�_raise_in_exit�_suppress_at_exit)r��
raise_in_exit�suppress_at_exitr$r$r%�__init__�s
zTestCopyFile.Faux.__init__cGsdS)Nr�r$)r�r"r$r$r%rX�r�zTestCopyFile.Faux.readcCs
d|_dS)NT)�_enteredr�r$r$r%�	__enter__�s
zTestCopyFile.Faux.__enter__cCs&|||f|_|jrd|_td��|jS)NT�Cannot close)�_exited_withr�_raisedrr)r��exc_type�exc_val�exc_tbr$r$r%�__exit__�s
zTestCopyFile.Faux.__exit__)FT)
r�r�r�rr!r"rrXrr&r$r$r$r%�Faux�s
r'c	Cs�ddd�}t�td|��,|�t��t�dd�Wd�n1s#wYWd�dSWd�dS1s;wYdS)NrWcSs|dkrtd��J�)N�srcfilezCannot open "srcfile"r��r�r>r$r$r%�_open�sz4TestCopyFile.test_w_source_open_fails.<locals>._openr:r(�destfile�rW)rrTr�r�rr��r�r*r$r$r%�test_w_source_open_fails�s
��"�z%TestCopyFile.test_w_source_open_failszskipped on macOScs�|���d
�fdd�	}t�td|��t�dd�Wd�n1s#wY|��j�|��jdtu�|�	�jdj
d	�dS)NrWcs |dkr�S|dkrtd��J�)Nr(r+�Cannot open "destfile"r�r)�r(r$r%r*�s
z2TestCopyFile.test_w_dest_open_fails.<locals>._openr:r(r+rry)r/r,)r'rrTr�r�r�rr!rr�r"r-r$r0r%�test_w_dest_open_fails�s��z#TestCopyFile.test_w_dest_open_failscs�|���|�d��d��fdd�	}t�td|��t�dd�Wd�n1s)wY|��j�|��j�|��j�|��jdt	u�|�
�jd	jd
�dS)NTrWc�|dkr�S|dkr�SJ��Nr(r+r$r)�r+r(r$r%r*��
z3TestCopyFile.test_w_dest_close_fails.<locals>._openr:r(r+rry)r r,)r'rrTr�r�r�rr"r!rr�r"r-r$r4r%�test_w_dest_close_fails�s
��z$TestCopyFile.test_w_dest_close_failsc	s�|�d��|���d	��fdd�	}t�td|��#|�t��t�dd�Wd�n1s/wYWd�n1s>wY|��j�|��j�|�	�j
�|��jddu�|��j
�dS)
NTrWcr2r3r$r)r4r$r%r*�r5z5TestCopyFile.test_w_source_close_fails.<locals>._openr:r(r+rr,)r'rrTr�r�rr�r�rr�r"r!r-r$r4r%�test_w_source_close_fails�s
���z&TestCopyFile.test_w_source_close_failsN)r�r�r��objectr'r.rr
r�r1r6r7r$r$r$r%r�s





rc@sxeZdZdZedd��Zedd��Zdd�Zej	dd	��Z
d
d�Zdd
�Zdd�Z
dd�Ze�ejdkd�dd��ZdS)�TestCopyFileObji cCstt|j�dSr')rUr�FILESIZE��clsr$r$r%�
setUpClass
	szTestCopyFileObj.setUpClasscCst�t�t�t�dSr')rrorr]r;r$r$r%�
tearDownClass	s
zTestCopyFileObj.tearDownClasscC�t�t�dSr'�rror]r�r$r$r%�tearDown	r�zTestCopyFileObj.tearDownc	c�v�ttd��+}ttd��
}||fVWd�n1swYWd�dSWd�dS1s4wYdS�NrVr1�r:rr]rr$r$r%�	get_files	����"�zTestCopyFileObj.get_filesc	Cs~t|d��0}t|d��}|�|��|���Wd�n1s wYWd�dSWd�dS1s8wYdSr�)r:r�rX)r�rrrs�fsrc�fdstr$r$r%�assert_files_eq	s��"�zTestCopyFileObj.assert_files_eqcCsH|���\}}t�||�Wd�n1swY|�tt�dSr')rEr��copyfileobjrIrr]rr$r$r%�test_content!	s�zTestCopyFileObj.test_contentcCsR|���\}}t�||�|jrJ�|jrJ�Wd�dS1s"wYdSr')rEr�rJ�closedrr$r$r%�test_file_not_closed&	s

"�z$TestCopyFileObj.test_file_not_closedcCsb|���#\}}t�||�|�|��|j�|�|��|j�Wd�dS1s*wYdSr')rEr�rJr��tellr:rr$r$r%�test_file_offset,	s
"�z TestCopyFileObj.test_file_offsetr$zWindows onlycCs�tj�d��}t�tt�Wd�n1swY|js!J�|�|j	ddd�t
jt�
�dd��
}|�d�Wd�n1sEwY|j}|�tj|�tj�d��}t�|t�Wd�n1skwY|�|j	ddd�t
jt�
�dd��}Wd�n1s�wY|j}|�tj|�tj�d��}t�|t�Wd�n1s�wY|jr�J�|�|t�dS)	Nzshutil._copyfileobj_readintorriiFrfsfoor)rr�r�r�r�rr]�calledr��	call_argsrkrlr(rmr;rbr�rrorI)r��mrSr�r$r$r%�
test_win_impl2	s0�
����
zTestCopyFileObj.test_win_implN)r�r�r�r:�classmethodr=r>rA�
contextlib�contextmanagerrErIrKrMrOrr
r(rbrSr$r$r$r%r9	s


r9c@s�eZdZdZdZdZdZedd��Zedd��Z	d	d
�Z
ejdd��Z
d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS) �_ZeroCopyFileTestz#Tests common to all zero-copy APIs.i�rDr�cCsZtt|j�ttd��}|��|_t|j�|jksJ�Wd�dS1s&wYdSr�)rUrr:r:rX�FILEDATAr�)r<rSr$r$r%r=W	s

"�z_ZeroCopyFileTest.setUpClasscCr?r')rrorr;r$r$r%r>^	ryz_ZeroCopyFileTest.tearDownClasscCr?r'r@r�r$r$r%rAb	r�z_ZeroCopyFileTest.tearDownc	crBrCrDrr$r$r%rEe	rFz_ZeroCopyFileTest.get_filescOstd��)Nzmust be implemented in subclass)�NotImplementedError)r�r"r#r$r$r%�zerocopy_funk	sz_ZeroCopyFileTest.zerocopy_funcCs$|��|��|��|��dSr')rAr>r=r�r�r$r$r%�resetn	sz_ZeroCopyFileTest.resetc	Cs�|���\}}|�||�Wd�n1swY|�ttdd�|j�|���,\}}tj�d��}t	�
tt�Wd�n1sEwY|jrOJ�Wd�dS1sZwYdS)NT�r=zshutil.copyfileobj)
rErZr�rYr]rXrr�r�r�r�rrP)r�rrrsrRr$r$r%�test_regular_copyv	s��"�z#_ZeroCopyFileTest.test_regular_copyc	Cs�|�|j�|���%\}}|�t��|�||�Wd�n1s#wYWd�n1s2wY|�ttdd�|j	�dS)NTr\)
r�r[rEr�r�rZr�rYrrXrr$r$r%�test_same_file�	s���z _ZeroCopyFileTest.test_same_filecCsZtjt��d�}|�t��}t�|d�Wd�n1swY|�|j	j
|�dS)Nr��new)rkr�r(rmr�r�r�r�r�r�r�)r�rbr�r$r$r%�test_non_existent_src�	s
�z'_ZeroCopyFileTest.test_non_existent_srcc	s�td�td�|��fdd��|��fdd��t�d��Wd�n1s*wYt�d��#}t�d��}|�||�Wd�n1sKwYWd�n1sZwY|�t�dd	�d
�dS)Nrrrsc�
t���Sr'�rror$)rpr$r%r`�	�
z3_ZeroCopyFileTest.test_empty_file.<locals>.<lambda>crar'rbr$)rqr$r%r`�	rcr1rVTr\rD)rr�r:rZr�rYrr$)rqrpr%�test_empty_file�	s����z!_ZeroCopyFileTest.test_empty_filecCsJtjj|jtd��|�ttjtt	�Wd�dS1swYdS)Nr)
rr�r��
PATCHPOINT�ZeroDivisionErrorr�r�r�rr]r�r$r$r%�test_unhandled_exception�	s
��"�z*_ZeroCopyFileTest.test_unhandled_exceptionc
Cs�tjj|jttjd�d��B|���%\}}|�t	��|�
||�Wd�n1s+wYWd�n1s:wYWd�dSWd�dS1sRwYdS�N�yor)rr�r�rerr �EINVALrEr�r
rZrr$r$r%�test_exception_on_first_call�	s

�����"�z._ZeroCopyFileTest.test_exception_on_first_callc	Cs�tjj|jttjd�d��0|���\}}|�t|j	||�Wd�n1s(wYWd�dSWd�dS1s@wYdSrh)
rr�r�rerr �ENOSPCrEr�rZrr$r$r%�test_filesystem_full�	s

���"�z&_ZeroCopyFileTest.test_filesystem_fullN)r�r�r��__doc__r:rXrerTr=r>rArUrVrErZr[r]r^r`rdrgrkrmr$r$r$r%rWQ	s*




rWzos.sendfile() not supportedc@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�TestZeroCopySendfile�os.sendfilecCst�||�Sr')r��_fastcopy_sendfile)r�rGrHr$r$r%rZ�	sz!TestZeroCopySendfile.zerocopy_func
Cs�t�|j��>}ttd��)}|�t��|�||�Wd�n1s#wYt�	||�Wd�n1s8wYWd�n1sGwY|�
ttdd�|j�dS)Nr1Tr\)�io�BytesIOrXr:r]r�r
rZr�rJr�rYrr$r$r%�test_non_regular_file_src�	s����z.TestZeroCopySendfile.test_non_regular_file_srcc
Cs�ttd��T}t���7}|�t��|�||�Wd�n1s!wYt�||�|�	d�|�
|��|j�Wd�n1sDwYWd�dSWd�dS1s\wYdS)NrVr)
r:rrrrsr�r
rZr�rJ�seekr�rXrXrr$r$r%�test_non_regular_file_dst�	s
�
��"�z.TestZeroCopySendfile.test_non_regular_file_dstc
s���fdd�}g�tj�tjjdd|d��9|���%\}}|�t��}t�	||�Wd�n1s3wYWd�n1sBwYWd�n1sQwY�sZJ�|�
|jjtj
�dS)Ncs(�s��d��|i|��Sttjd��)Nri)r_rr �EBADFr!�rQ�
orig_sendfiler$r%re�	s
zDTestZeroCopySendfile.test_exception_on_second_call.<locals>.sendfilerpT)r�r)r(rerr�r�rEr�rr�rqr�r�r rw)r�rerrrsr�r$rxr%�test_exception_on_second_call�	s 
������z2TestZeroCopySendfile.test_exception_on_second_callc	Cs�tjjdtd��)}|���\}}t�||�|jsJ�Wd�n1s%wYWd�n1s4wY|�t	t
dd�|j�dS)N�os.fstatrTr\)rr�r�rrEr�rqrPr�rYr]rX�r�rRrrrsr$r$r%�test_cant_get_size�	s���z'TestZeroCopySendfile.test_cant_get_sizec	Cs�tj��}d|_tjjd|d��)}|���\}}t�||�|js#J�Wd�n1s-wYWd�n1s<wY|�	t
tdd�|j�dS)Nir{�r�Tr\)
rr��Mock�st_sizer�rEr�rqrPr�rYr]rX�r�r�rRrrrsr$r$r%�test_small_chunks�	s
���z&TestZeroCopySendfile.test_small_chunksc	Cs�tj��}|jd|_tjjd|d��)}|���\}}t�||�|j	s&J�Wd�n1s0wYWd�n1s?wY|�
ttdd�|j
�dS)Ni@r{r~Tr\)rr�rr:r�r�rEr�rqrPr�rYr]rXr�r$r$r%�test_big_chunk�	s
���z#TestZeroCopySendfile.test_big_chunkcCs�tjjdtd��P}|�ttjtt�|j	dd}|�
|tj�
t��t�t�ttddd�|�tjtd�|�ttjttd�|j	dd}|�
|d	�Wd�dS1s[wYdS)
NrprrrshelloTr\�3i�)rr�r�rfr�r�r�rr]rQr�r(r8rOrror@r�)r�rR�	blocksizer$r$r%�test_blocksize_arg
s$��
�"�z'TestZeroCopySendfile.test_blocksize_argc
Cs tjsJ�z�tjj|jttjd�d��>}|�	��%\}}|�
t��t�||�Wd�n1s1wYWd�n1s@wY|j
sJJ�Wd�n1sTwYtjr^J�tj�|j��}t�tt�|j
rqJ�Wd�n1s{wYWdt_dSWdt_dSdt_w)NrirT)r��_USE_CP_SENDFILErr�r�rerr �ENOTSOCKrEr�r
rqrPr�rr]r|r$r$r%�test_file2file_not_supported
s.

�����
�
�z1TestZeroCopySendfile.test_file2file_not_supportedN)
r�r�r�rerZrtrvrzr}r�r�r�r�r$r$r$r%ro�	s		


roz
macOS onlyc@�eZdZdZdd�ZdS)�TestZeroCopyMACOSzposix._fcopyfilecCst�||tj�Sr')r��_fastcopy_fcopyfile�posix�_COPYFILE_DATArr$r$r%rZ0
r�zTestZeroCopyMACOS.zerocopy_funN)r�r�r�rerZr$r$r$r%r�,
sr�c@s^eZdZdd�Zdd�Zdd�Ze�e�	e
j���d�e�e
ed�d	�d
d���Zdd
�ZdS)�TestGetTerminalSizecCs(t��}|�|jd�|�|jd�dS)z�Check if get_terminal_size() returns a meaningful value.

        There's no easy portable way to actually check the size of the
        terminal, so let's check if it returns something sensible instead.
        rN)r��get_terminal_sizer��columns�lines)r�rPr$r$r%�test_does_not_crash5
sz'TestGetTerminalSize.test_does_not_crashcCs�t���}d|d<|d=t��}Wd�n1swY|�|jd�t���}|d=d|d<t��}Wd�n1s@wY|�|jd�dS)z.Check if environment variables have precedence�777�COLUMNS�LINESNi	�888ix)rr�r�r�r�r�r��r�r�rPr$r$r%�test_os_environ_first?
s

�

�z)TestGetTerminalSize.test_os_environ_firstcCs`t���}d|d<d|d<t��}Wd�n1swY|�|jd�|�|jd�dS)Nr�r��yyyr�r)rr�r�r�r�r�r�r�r$r$r%�test_bad_environN
s

�z$TestGetTerminalSize.test_bad_environz
not on ttyr�zneed os.get_terminal_size()c
Cs�z
t�ddg�����}Wntttjfy|�d�Ynwt|d�t|d�f}t	�
��}|d=|d=t��}Wd�n1sEwY|�
||�dS)	z�Check if stty returns the same results ignoring env

        This test will fail if stdin and stdout are connected to
        different terminals with different sizes. Nevertheless, such
        situations should be pretty rare.
        �sttyrPzstty invocation failedryrr�r�N)r~r.r2r�r�rLr0r\r�rr�r�r�r�)r�rPrmr�rr$r$r%�test_stty_matchV
s

��

�z#TestGetTerminalSize.test_stty_matchc
Cst���}}|d=|d=t�tdd��tjdd�}Wd�n1s#wY|�|jd�|�|j	d�t
tjdd	d
��%}t�td|��tjdd�}Wd�n1sWwYWd�n1sfwY|�|jd�|�|j	d
�Wd�dS1s�wYdS)Nr�r��
__stdout__)�
�)�fallbackr�r�r2r3r4)��(r�r�)
rr�rrTr|r�r�r�r�r�r:r(�devnull)r�r�rPrSr$r$r%�
test_fallbackn
s$
����"�z!TestGetTerminalSize.test_fallbackN)r�r�r�r�r�r�rr	r(�isattyr|r�rnrjr�r�r$r$r$r%r�4
s
�r�c@r�)�PublicAPITestsz>Ensures that the correct values are exposed in the public API.cCsP|�ttd��gd�}ttd�stjdkr|�d�|�ttj�t|��dS)N�__all__)rJr�r�r�r�r�rr�r�rr��	ExecErrorrrrrrrr
rr9r�r�r�r�statvfsr$r�)	r�rjr�r(rbr_r�r?r�)r��
target_apir$r$r%�test_module_all_attribute�
s

z(PublicAPITests.test_module_all_attributeN)r�r�r�rnr�r$r$r$r%r��
sr��__main__)F)Vr�
unittest.mockr�rkr|r�r(�os.pathr r.rDr~rErGrUrrrrrrrrrr	r
rrr
r�r!r��ImportErrorrXr�test.supportr�test.support.os_helperrrrr]rrrr)r�r�r{r?rAr>r�r�r��AssertionErrorr�r&r0r@rUrYr`rv�SUPPORTS_SENDFILEr�r��TestCaser�rr�r�r�r�r�r�rr9r8rWr
ror�r�r�r��mainr$r$r$r%�<module>s�8����

	dP<
s\JdvN
�

Youez - 2016 - github.com/yon3zu
LinuXploit