Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/test_tarfile.cpython-39.opt-1.pyc

a

��g�b�@s�ddlZddlZddlZddlZddlmZddlmZddlm	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlmZddlmZddlmZzddlZWney�dZYn0zddlZWney�dZYn0zddlZWne�ydZYn0zddlZWne�y:dZYn0dd	�Zej�ej�d
Z e dZ!e�"d�Z#ej�$e d
�Z%ej�$e d�Z&ej�$e d�Z'ej�$e d�Z(ej�$e d�Z)dZ*dZ+Gdd�d�Z,e�-�Gdd�d��Z.e�/�Gdd�d��Z0e�1�Gdd�d��Z2Gdd�de,�Z3Gdd�de3ej4�Z5Gd d!�d!e.e5�Z6Gd"d#�d#e0e5�Z7Gd$d%�d%e2e5�Z8Gd&d'�d'e3ej4�Z9Gd(d)�d)e.e9�Z:Gd*d+�d+e0e9�Z;Gd,d-�d-e2e9�Z<Gd.d/�d/e3�Z=Gd0d1�d1e=�Z>Gd2d3�d3e>ej4�Z?Gd4d5�d5e.e>ej4�Z@Gd6d7�d7e0e>ej4�ZAGd8d9�d9e2e>ej4�ZBGd:d;�d;e=ej4�ZCGd<d=�d=e.eC�ZDGd>d?�d?e0eC�ZEGd@dA�dAe2eC�ZFGdBdC�dCe,ej4�ZGGdDdE�dEe.eG�ZHGdFdG�dGe0eG�ZIGdHdI�dIe2eG�ZJGdJdK�dKe3ej4�ZKGdLdM�dM�ZLGdNdO�dOeLe3ej4�ZMGdPdQ�dQeLe3ej4�ZNGdRdS�dSe,�ZOGdTdU�dUeOej4�ZPGdVdW�dWe.eP�ZQGdXdY�dYe0eP�ZRGdZd[�d[e2eP�ZSGd\d]�d]eOej4�ZTGd^d_�d_e.eT�ZUGd`da�dae0eT�ZVGdbdc�dce2eT�ZWGddde�deej4�ZXGdfdg�dgeOej4�ZYGdhdi�dieOej4�ZZGdjdk�dke.eZ�Z[Gdldm�dme0eZ�Z\Gdndo�doe2eZ�Z]Gdpdq�dqeZ�Z^e�_e`edr�ds�Gdtdu�duej4��ZaGdvdw�dweX�ZbGdxdy�dy�ZcGdzd{�d{ecej4�ZdGd|d}�d}ecej4�ZeGd~d�decej4�ZfGd�d��d��ZgGd�d��d�egej4�ZhGd�d��d�e.egej4�ZiGd�d��d�e0egej4�ZjGd�d��d�e2egej4�ZkGd�d��d�ej4�ZlGd�d��d�ej4�ZmGd�d��d�ej4�ZnGd�d��d�ej4�Zoe�pe`edr�d��Gd�d��d�e3ej4��ZqGd�d��d�e0ej4�Zrd�d��Zse�_e`ed��d��e�_e`ed��d��Gd�d��d�ej4���ZtGd�d��d�e3ej4�ZuGd�d��d�e3�ZvGd�d��d�evej4�ZwGd�d��d�evej4�ZxGd�d��d�evej4�ZyGd�d��d�evej4�ZzGd�d��d�ej4�Z{d�d��Z|Gd�d��d��Z}Gd�d��d�ej4�Z~d�d��Zd�d��Z�e�d�k�r�e���dS)��N)�sha256)�contextmanager)�Random)�support)�
script_helper)�warnings_helpercCst|���S�N)r�	hexdigest)�data�r�-/usr/local/lib/python3.9/test/test_tarfile.py�	sha256sum(sr
z-tardirz
-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ@e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ceZ@4f05a776071146756345ceee937b33fc5644f5a96b9780d1c7d6a32cdf164d7bc@s.eZdZeZdZejZej	j
Z
edd��ZdS)�TarTest�cCs|j|jSr)�prefix�suffix��selfrrr�modeBszTarTest.modeN)
�__name__�
__module__�__qualname__�tarnamer�io�FileIO�open�tarfile�TarFile�taropen�propertyrrrrrr<src@s*eZdZeZdZerejndZe	j
jZdS)�GzipTest�gzN)
rrr�gzipnamerr�gzipZGzipFilerrrZgzopenrrrrrr Fsr c@s*eZdZeZdZerejndZe	j
jZdS)�Bz2Test�bz2N)
rrr�bz2namerrr%�BZ2FilerrrZbz2openrrrrrr$Msr$c@s*eZdZeZdZerejndZe	j
jZdS)�LzmaTest�xzN)
rrr�xznamerr�lzma�LZMAFilerrrZxzopenrrrrrr(Tsr(c@s eZdZdZdd�Zdd�ZdS)�ReadTest�r:cCstj|j|jdd�|_dS)N�	iso8859-1�r�encoding�rrrr�tarrrrr�setUp`s�zReadTest.setUpcCs|j��dSr)r3�closerrrr�tearDowndszReadTest.tearDownN)rrrrr4r6rrrrr-\sr-c@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�
UstarReadTestcCsj|j�d�}|j�|��>}|��}|�t|�|jd�|�t|�td�Wd�n1s\0YdS)N�
ustar/regtype�regular file extraction failed)	r3�	getmember�extractfile�read�assertEqual�len�sizer
�sha256_regtype�r�tarinfo�fobjr
rrr�test_fileobj_regular_filejs��z'UstarReadTest.test_fileobj_regular_filecCs�|j�dt�|j�d�}ttj�td�d��}|��}Wd�n1sL0Y|j�	|��T}t
�|�}|��}|�||d�|�t
|�dd�|�|ddd�Wd�n1s�0YdS)Nr8�rzfileobj.readlines() failed�r�SzOI will gladly admit that Python is not the fastest running scripting language.
)r3�extract�TEMPDIRr:r�os�path�join�	readlinesr;r�
TextIOWrapperr=r>)rrB�fobj1�lines1rC�fobj2�lines2rrr�test_fileobj_readlinesss"&
��
�z$UstarReadTest.test_fileobj_readlinescCs�|j�dt�|j�d�}ttj�td�d��}|��}Wd�n1sL0Y|j�	|��,}t
t�|��}|�
||d�Wd�n1s�0YdS)Nr8rEzfileobj.__iter__() failed)r3rHrIr:rrJrKrLrMr;�listrrNr=)rrBrOrPrQrRrrr�test_fileobj_iter�s&�zUstarReadTest.test_fileobj_iterc	Cs*|j�dt�ttj�td�d��}|��}Wd�n1s@0Y|j�d�}|j�	|����}|��}|�
d�|�d|��d�|�
dd�|�d|��d�|�
dd�|�d	|��d
�|�
d	d�|�d|��d�|�d�}|�||dd
�d�|�
dd�|�|j
|��d�|�|��dd�|�
|j
d�|�d|��d�|�
d�|��}|�
d�|��}|�||d�|�
d�|�t|���|��d�|�
d�|�t|���d|��d�|�
d�|��}|�|��|t|�d�d�Wd�n1�s0YdS)Nr8�rbrzseek() to file's start failediz"seek() to absolute position failedi�����z+seek() to negative relative position failedz+seek() to positive relative position failed�
i
zread() after seek failed�zseek() to file's end failed�z0read() at file's end did not return empty stringz$relative seek() to file's end failed�zreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failed)r3rHrIrrJrKrLr<r:r;�seekr=�tellr?rMr>�readline)	rrCr
rB�text�s�s1�s2�linerrr�test_fileobj_seek�sr&
����
����

�
�
�
�zUstarReadTest.test_fileobj_seekc	Cs�|j�d��d}t�|�}|���d�}|�t|�t�z|�	d�Wnt
y`|�d�Yn0Wd�n1sv0YdS)Nr8r/�dzseeking failed in text mode)r3r;rrNr<�encoder=r
r@r]�AttributeError�fail�rrCr
rrr�test_fileobj_text�s
zUstarReadTest.test_fileobj_textc	Csl|j�|��L}|j�|�� }|�|j|j�Wd�n1s@0YWd�n1s^0YdSr)r3r;r=�name)rZlnktype�regtype�a�brrr�_test_fileobj_link�s

�z UstarReadTest._test_fileobj_linkcCs|�dd�dS)N�
ustar/lnktyper8�rprrrr�test_fileobj_link1�sz UstarReadTest.test_fileobj_link1cCs|�dd�dS)N�./ustar/linktest2/lnktype�ustar/linktest1/regtyperrrrrr�test_fileobj_link2�s�z UstarReadTest.test_fileobj_link2cCs|�dd�dS)N�
ustar/symtyper8rrrrrr�test_fileobj_symlink1�sz#UstarReadTest.test_fileobj_symlink1cCs|�dd�dS)N�./ustar/linktest2/symtyperurrrrrr�test_fileobj_symlink2�s�z#UstarReadTest.test_fileobj_symlink2cCs|�dd�dS)NZsymtype2r8rrrrrr�test_issue14160�szUstarReadTest.test_issue14160cCs|�d�|�d�dS)N�barZeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)�add_dir_and_getmemberrrrr�test_add_dir_getmember�s
z$UstarReadTest.test_add_dir_getmembercCs�t����t�td��@}z"t�|�|�|�Wt�|�nt�|�0Wd�n1s\0Yt�t��,}|�	|�
|�|�
|d��Wd�n1s�0YWd�n1s�0YdS)N�w�/)r�temp_cwdrr�tmpnamerJ�mkdir�add�rmdirr=r:)rrlr3rrrr}�s

6�z#UstarReadTest.add_dir_and_getmemberN)rrrrDrSrUrerkrprsrvrxrzr{r~r}rrrrr7hs	
0r7c@seZdZdS)�GzipUstarReadTestN�rrrrrrrr��sr�c@seZdZdS)�Bz2UstarReadTestNr�rrrrr��sr�c@seZdZdS)�LzmaUstarReadTestNr�rrrrr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�ListTestcCstj|j|jd�|_dS)N�rr2rrrrr4szListTest.setUpcs@tjt��ddd�}t�td|���jjdd�Wd�n1sF0Y|���	�}��
d|���
d|���
d	|���
d
|���
d|���
d|���
d
|���
d|��fdd�}��
|d�|���
|d�|���
|d�|���
|d�|���
|d�|���|d���d|���d|�dS)N�ascii�
��newline�stdoutF��verbose�ustar/conttype�
ustar/regtypes
ustar/lnktypesustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longnames./ustar/linktest2/symtypes./ustar/linktest2/lnktypesustar/dirtype/sustar/dirtype-with-size/cs|��jjd�}|�dd�S)N�surrogateescaper��backslashreplace)�decoder3r1rg)rorarrr�convsz ListTest.test_list.<locals>.convsustar/umlauts-�����s'misc/regtype-hpux-signed-chksum-�����s)misc/regtype-old-v7-signed-chksum-�����spax/bad-pax-�spax/hdrcharset-�s)ustar/conttype ?\r?\nustar/regtype ?\r?\nslink tos->)
rrN�BytesIOr�	swap_attr�sysr3rT�detach�getvalue�assertIn�assertRegex�assertNotIn)r�tio�outr�rrr�	test_lists2,
�
�zListTest.test_listcCs�tjt��ddd�}t�td|��|jjdd�Wd�n1sF0Y|���	�}|�
|d�|�d|�|�d	|�|�d
|�|�d|�|�d|�dS)
Nr�r�r�r�Tr�s�\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\nsustar/symtype -> regtypes1./ustar/linktest2/symtype -> ../linktest1/regtypes;./ustar/linktest2/lnktype link to ./ustar/linktest1/regtypes	gnu/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longlink link to gnu/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnames	pax/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longlink link to pax/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longname)rrNr�rr�r�r3rTr�r�r�r�)rr�r�rrr�test_list_verbose,s ,���zListTest.test_list_verbosecCs�tjt��ddd�}dd�}t�td|��&|jjd||j�d�Wd�n1sV0Y|���	�}|�
d	|�|�d
|�dS)Nr�r�r�css"|��D]}d|jvr|VqdS)NZreg)�
getmembersrl)r3rBrrr�membersFs
z+ListTest.test_list_members.<locals>.membersr�F)r�r�r�r�)rrNr�rr�r�r3rTr�r�r�r�)rr�r�r�rrr�test_list_membersDs4zListTest.test_list_membersN)rrrr4r�r�r�rrrrr�s%r�c@seZdZdS)�GzipListTestNr�rrrrr�Qsr�c@seZdZdS)�Bz2ListTestNr�rrrrr�Usr�c@seZdZdS)�LzmaListTestNr�rrrrr�Ysr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�CommonReadTestcCs�ttd��Wd�n1s 0Y|�t�t��|�t�t�t���ttd�� }|�t�|��Wd�n1s�0Y|�t�t�d���dS)N�wbrVsinvalid)	rr��assertFalser�
is_tarfile�pathlib�Pathrr��rrCrrr�test_is_tarfile_erroneous_s.z(CommonReadTest.test_is_tarfile_erroneousc	Cs�|�t�|j��|�t�t�|j���t|jd�� }|�t�|��Wd�n1s\0Yt|jd��*}|�t�t�|�	����Wd�n1s�0YdS�NrV)
�
assertTruerr�rr�r�rrr�r<r�rrr�test_is_tarfile_validps.z$CommonReadTest.test_is_tarfile_validcCs�t�t|j�dd���Wd�n1s,0YzVzt�t|j�}|��Wntjyp|�d�Yn0|�|�	�g�W|�
�n
|�
�0dS)NrErz&tarfile.open() failed on empty archive)rrr�r�replace�getnames�	ReadErrorri�assertListEqualr�r5�rr3rrr�test_empty_tarfilesz!CommonReadTest.test_empty_tarfilecCs>|�td��t�d|j�Wd�n1s00YdS)NZxxx)�assertRaisesRegex�FileNotFoundErrorrrrrrrr�test_non_existent_tarfile�sz(CommonReadTest.test_non_existent_tarfilecCsVttd��Wd�n1s 0Y|�tjtjt|j�|�tjtjt�dS�Nr�)rr��assertRaisesrr�rrrrr�test_null_tarfile�sz CommonReadTest.test_null_tarfilec	Cs�td��d�}dD]�}|�td��J}|�|d�t�d�}t|�|_|�|�	��|�|�Wd�n1sr0Ytjtddd	�}z$|�
|��dgd
|�W|��q|��0qdS)Nrr\)��arrX�foorET)rZignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)
r�	randbytesrr��writer�TarInfor>r?�tobufr�r�r5)rr
�charrCrBr3rrr�test_ignore_zeros�s 

(��z CommonReadTest.test_ignore_zerosc
Cs�dD�]�}t�td��2}t�d�}d|_|�|t�d��Wd�n1sN0Yttd��}|�|�Wd�n1s�0Yt�t��H}|�	tj
d��|D]}q�Wd�n1s�0YWd�n1s�0Yt�t���}|��}|�	tj
d��|�|t
�Wd�n1�s40Y|�	tj
d��|�|���Wd�n1�sr0YWd�q1�s�0YqdS)N)r\iXrXi��w:r�rXsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)rrr�r�r?�addfilerr��truncater�r��nextrHrIr;r<)rr?r3�trCrrr�test_premature_end_of_archive�s"

0(>,z,CommonReadTest.test_premature_end_of_archivec	Csb|�tjd��@t�t�d���}Wd�n1s60YWd�n1sT0YdS)N�%file could not be opened successfullyz
recursion.tar)r�rr�rr�findfiler�rrr�test_length_zero_header�sz&CommonReadTest.test_length_zero_headerN)rrrr�r�r�r�r�r�r�r�rrrrr�]s	r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Ze�eed�d�ejdd ���Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Ze�ed-ud.�d/d0��Z d-S)1�MiscReadTestBasecCsdSrrrrrr�requires_name_attribute�sz(MiscReadTestBase.requires_name_attributec	Cs�|��t|jd��t}|�|jt�tj||jd��6}|�|jt�|�|jt	j
�|j��Wd�n1sp0YWd�n1s�0YdS�NrV��fileobjr)r�rr�assertIsInstancerl�strrrr=rJrK�abspath�rrCr3rrr�test_no_name_argument�sz&MiscReadTestBase.test_no_name_argumentcCsnt|jd��}|��}Wd�n1s*0Yt�|�}|�tt|d�tj||j	d�}|�
|j�dS)NrVrlr�)rrr<rr�r�rh�getattrrr�assertIsNonerl�rrCr
r3rrr�test_no_name_attribute�s&
z'MiscReadTestBase.test_no_name_attributecCs�t|jd��}|��}Wd�n1s*0Yt�|�}d|_tj||jd��}|�|j�Wd�n1sv0YdS)NrVrr�)	rrr<rr�rlrrr�r�rrr�test_empty_name_attribute�s&
z*MiscReadTestBase.test_empty_name_attributec	Cs�t�|jtj�}t|d��Z}|�|jt�tj||jd��}|�	|j�Wd�n1s\0YWd�n1sz0YdSr�)
rJrr�O_RDONLYr�rl�intrrr�)r�fdrCr3rrr�test_int_name_attribute�s
z(MiscReadTestBase.test_int_name_attributec	Cs�|��t�|j�}t|d��t}|�|jt�tj||j	d��6}|�|jt�|�
|jtj�|j��Wd�n1sz0YWd�n1s�0YdSr�)
r�rJ�fsencoderrr�rl�bytesrrr=rKr�)rrrCr3rrr�test_bytes_name_attribute�sz*MiscReadTestBase.test_bytes_name_attributec	Cs�t�|j�}tj||jd��:}|�|jt�|�	|jt
j�t
�
|���Wd�n1s\0Y|�|��:}|�|jt�|�	|jt
j�t
�
|���Wd�n1s�0Ytjj||jd��:}|�|jt�|�	|jt
j�t
�
|���Wd�n1�s0Y|jdk�r~tj|dd��:}|�|jt�|�	|jt
j�t
�
|���Wd�n1�st0YdS)Nr�rrE)r�r�rrrrr�rlr�r=rJrKr��fspathrrr)rrr3rrr�test_pathlike_names::<z#MiscReadTestBase.test_pathlike_namecCs�ttd��Wd�n1s 0Y|�td��|�td�}Wd�n1sX0Y|�td��|�td�}Wd�n1s�0Y|�td��|�td�}Wd�n1s�0YdS)Nr�z
mode must be �q�rwr)rr�r��
ValueErrorrr�rrr�test_illegal_mode_args**z&MiscReadTestBase.test_illegal_mode_argc	Cstj|j|jd�}zZ|��|��}|j}|j}|�|��}|��}Wd�n1sX0YW|�	�n
|�	�0|�|j���}|�
|�|j|jd|d��F}|��}|�|j|�|��|�|�|���|d�Wd�n1s�0YWd�n1�s0YdS)Nr�r.�rr�zseek back did not work)
rrrrr�rl�offsetr;r<r5r]r=r�)rr3r�rlr��fr
rCrrr�test_fileobj_with_offsets$(
�z)MiscReadTestBase.test_fileobj_with_offsetcCs\|�tjtjt|j�ttd��(}|jtjtj||jd�Wd�n1sN0YdSr�)r�rr�rrrr�rrr�test_fail_comp8s
�zMiscReadTestBase.test_fail_compcCs"|j�d�}|�|jtjd�dS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r3r:r=�typer�DIRTYPE�rrBrrr�test_v7_dirtype?s�z MiscReadTestBase.test_v7_dirtypecCs2z|j�d�Wnty,|�d�Yn0dS)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r3r:�KeyErrorrirrrr�test_xstar_typeGsz MiscReadTestBase.test_xstar_typecCsN|jD]B}|�t|j�dd|j�|j�d�s2q|�|jdd|j�qdS)N鏽>zwrong mtime for %szustar/rzwrong uname for %s)r3r=r��mtimerl�
startswith�unamer�rrr�test_check_membersPs
�
�z#MiscReadTestBase.test_check_memberscCs|�|j��djdd�dS)N���zmisc/eofzcould not find all members)r=r3r�rlrrrr�test_find_membersYs�z"MiscReadTestBase.test_find_members�link�Missing hardlink implementationc	Cs<tjtddd���}|�dt�|�tjtj	�
td��|�dt�|�tjtj	�
td��ttj	�
td�d��}|��}Wd�n1s�0Y|�t
|�t�|�dt�|�tjtj	�
td��ttj	�
td�d��}|��}Wd�n1s�0Y|�t
|�t�Wd�n1�s.0YdS)NrWr/)�
errorlevelr1r8rqrVrw)rrrrHrI�
addCleanupr�unlinkrJrKrLr<r=r
r@)rr3r�r
rrr�test_extract_hardlink]s&&z&MiscReadTestBase.test_extract_hardlinkc		Cs�tjtdd�}tj�td�}t�|�z�dd�|D�}|�||�|D]x}tj�||j	�}t
jdkr�|�|j
d@t�|�jd@�dd	�}tj�|�}d
�||j�||�|�}|�|j||�qFW|��t�|�n|��t�|�0dS)Nr/�r1�
extractallcSsg|]}|��r|�qSr��isdir��.0r�rrr�
<listcomp>yr[z4MiscReadTestBase.test_extractall.<locals>.<listcomp>�win32�cSs(t|t�rd�||���Sd�|�SdS)Nz{} ({})z
{!r} (int))�
isinstance�float�format�hex)r�rrr�format_mtime�s
z6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrrJrKrLrIr�r	rlr��platformr=r�stat�st_mode�getmtimerr�r5r�rmtree)	rr3�DIR�directoriesrBrKrZ
file_mtime�errmsgrrr�test_extractallrs0

���z MiscReadTestBase.test_extractallc	Cs�d}tj�td�}t�|�z�tjtdd��n}|�|�}|j	||d�tj�||�}|�
tj�|�|j�t
jdkr�|�
t�|�jd@d�Wd�n1s�0YWt�|�nt�|�0dS)	N�
ustar/dirtypeZ
extractdirr/r�rKrri�)rJrKrLrIr�rrrr:rHr=rr�r�rrrrr�rZdirtyperr3rBZ	extractedrrr�test_extract_directory�s


8z'MiscReadTestBase.test_extract_directoryc	Cs�t�t�d}t�|���tjtdd��T}dd�|D�}|�||�|D]$}||j	}|�
tj�
|�|j�qHWd�n1s�0YWd�n1s�0YdS)Nr	r/rcSsg|]}|��r|�qSrr
rrrrr�r[zBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r�r�rIr�temp_dirrrrr	rlr=rJrKrr�)rrr3rrBrKrrr�test_extractall_pathlike_name�s�
z.MiscReadTestBase.test_extractall_pathlike_namec	Cs�d}t�t�d}t�|��ttjtdd��F}|�|�}|j	||d�||}|�
tj�
|�|j�Wd�n1sx0YWd�n1s�0YdS)Nrr	r/rr )r�r�rIrr#rrrr:rHr=rJrKrr�r!rrr�test_extract_pathlike_name�s�
z+MiscReadTestBase.test_extract_pathlike_namec	Cs�tj�td�}t|d��}|�d�Wd�n1s80YzVt�tj	�}z|�
|�Wn"tjy�|�|j
j�Yn0|�d�Wt�|�nt�|�0dS)N�emptyr�r[zReadError not raised)rJrKrLrIrr��object�__new__rr�__init__r�r�r��closedrirr)rr&rCr3rrr�test_init_close_fobj�s(z%MiscReadTestBase.test_init_close_fobjcCsht�|j��H}t||�D],\}}|�|j|j�|�|��|���qWd�n1sZ0YdSr)rrr�zipr=r��get_info)rr3Zm1Zm2rrr�test_parallel_iteration�sz(MiscReadTestBase.test_parallel_iterationNz
requires zlibc	Csptj�d��P}tj|_|�tj��t�	|j
�Wd�n1sD0YWd�n1sb0YdS)Nztarfile.TarInfo.fromtarfile)�unittest�mock�patch�zlib�errorZside_effectr�rr�rr)rr0rrr�test_zlib_error_does_not_leak�sz.MiscReadTestBase.test_zlib_error_does_not_leak)!rrrr�r�r�r�r�r�r�r�r�r�r�r�r�rr/�
skipUnless�hasattrrJr�skip_unless_symlinkrrr"r$r%r+r.�skipIfr2r4rrrrr��s6		
		�

r�c@seZdZdZdS)�MiscReadTestN)rrrr�rrrrr9�sr9c@seZdZdS)�GzipMiscReadTestNr�rrrrr:�sr:c@seZdZdd�ZdS)�Bz2MiscReadTestcCs|�d�dS)NzBZ2File have no name attribute��skipTestrrrrr��sz'Bz2MiscReadTest.requires_name_attributeN�rrrr�rrrrr;�sr;c@seZdZdd�ZdS)�LzmaMiscReadTestcCs|�d�dS)NzLZMAFile have no name attributer<rrrrr��sz(LzmaMiscReadTest.requires_name_attributeNr>rrrrr?�sr?c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�StreamReadTest�r|c
Cs||jD]p}|��sq|j�|��F}z|�d�}WntjyN|�d�Yn0|s"qXq"Wd�q1sl0YqdS)Nr\z6simple read-through using TarFile.extractfile() failed)r3�isregr;r<r�StreamErrorri)rrBrC�bufrrr�test_read_through�s
z StreamReadTest.test_read_throughcCsh|j��}|j�|��}|��}Wd�n1s40Y|�t|�|jd�|�t|�td�dS)Nr9)	r3r�r;r<r=r>r?r
r@rArrrrD�s
&��z(StreamReadTest.test_fileobj_regular_filecCsN|j��}|j�|d�� }|�tj|j�Wd�n1s@0YdS�Nr)r3r�r;r�rrCr<)rZtarinfosr�rrr�test_provoke_stream_errors
z(StreamReadTest.test_provoke_stream_errorcCs�tjtdd�}z�|j}|��}|��}|dur0q�|�|d�|��sL|��r�|�tj	��|�
|�Wd�q1sx0Yq|�
|�}|�
|�}|dur�q|�|d�|�|��|��d�qW|�
�n
|�
�0dS)Nr/rzstream.next() failed.zstream.extractfile() failedzstream extraction failed)rrrr3r��assertIsNotNoneZislnkZissymr�rCr;r=r<r5)rZtar1Ztar2�t1�t2�v1�v2rrr�test_compare_members	s*(

�z#StreamReadTest.test_compare_membersN)rrrrrErDrGrMrrrrr@�s
	r@c@seZdZdS)�GzipStreamReadTestNr�rrrrrN$srNc@seZdZdS)�Bz2StreamReadTestNr�rrrrrO'srOc@seZdZdS)�LzmaStreamReadTestNr�rrrrrP*srPc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�DetectReadTestc
CsLzt�||�}Wn.tjy>}z|��WYd}~nd}~00|��dSr)rrr�rir5)rrlrr3�errr�_testfunc_file/s
zDetectReadTest._testfunc_filec
Cszz>t|d�� }tj|||d�}Wd�n1s20YWn.tjyl}z|��WYd}~nd}~00|��dS)NrV�r�)rrr�rir5)rrlrr�r3rRrrr�_testfunc_fileobj7s2z DetectReadTest._testfunc_fileobjcCsJ|jr�|�tj��$tjtd|jd�Wd�n1s<0Y|�tj��$tjtd|jd�Wd�n1s|0Y|�tj�� tj|jdd�Wd�n1s�0Y|�tj�� tj|jdd�Wd�n1s�0Y||jd�||jd|j�||jd�||jd|j�||jd�dS)Nr.r�rArEzr:*�r|*)rr�rr�rr)rZtestfuncrrr�_test_modes@s22..zDetectReadTest._test_modescCs|�|j�dSr)rWrSrrrr�test_detect_filePszDetectReadTest.test_detect_filecCs|�|j�dSr)rWrUrrrr�test_detect_fileobjSsz"DetectReadTest.test_detect_fileobjN)rrrrSrUrWrXrYrrrrrQ.s
	rQc@seZdZdS)�GzipDetectReadTestNr�rrrrrZVsrZc@seZdZdd�ZdS)�Bz2DetectReadTestcCs|ttd��}|��}Wd�n1s(0Ytjtddd��}|�|�Wd�n1sb0Y|�td�dS)NrVr�rW��
compresslevelrV)rrr<r%r'r�r�rSrjrrr�test_detect_stream_bz2Zs
&(z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrr^rrrrr[Ysr[c@seZdZdS)�LzmaDetectReadTestNr�rrrrr_hsr_c@s�eZdZd(dd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�ZdS))�MemberReadTestNcKs�|durP|j�|��,}|�t|���|d|j�Wd�n1sF0Yd|d<d|d<d|d<d|jvr�d	|d
<d	|d<|��D]&\}}|�t||�|d||jf�q�dS)
N�wrong sha256sum for %sr�r����uidrf�gidzold-v7rr��gnamezwrong value in %s field of %s)r3r;r=r
r<rl�itemsr�)rrB�chksum�kwargsr��k�vrrr�_test_memberns�"
�zMemberReadTest._test_membercCs |j�d�}|j|dtd�dS)Nr8�c�r?rg�r3r:rkr@r�rrr�test_find_regtypesz MemberReadTest.test_find_regtypecCs |j�d�}|j|dtd�dS)Nzustar/conttyperlrmrnr�rrr�test_find_conttype�sz!MemberReadTest.test_find_conttypecCs|j�d�}|j|dd�dS)Nrr�r?�r3r:rkr�rrr�test_find_dirtype�sz MemberReadTest.test_find_dirtypecCs|j�d�}|j|dd�dS)Nzustar/dirtype-with-size�rqrrr�rrr�test_find_dirtype_with_size�sz*MemberReadTest.test_find_dirtype_with_sizecCs |j�d�}|j|ddd�dS)Nrqrr8�r?�linknamerrr�rrr�test_find_lnktype�sz MemberReadTest.test_find_lnktypecCs |j�d�}|j|ddd�dS)Nrwrrmrvrrr�rrr�test_find_symtype�sz MemberReadTest.test_find_symtypecCs"|j�d�}|j|dddd�dS)Nz
ustar/blktyper��r?�devmajor�devminorrrr�rrr�test_find_blktype�sz MemberReadTest.test_find_blktypecCs"|j�d�}|j|dddd�dS)Nz
ustar/chrtyperrWrzr{rrr�rrr�test_find_chrtype�sz MemberReadTest.test_find_chrtypecCs|j�d�}|j|dd�dS)Nzustar/fifotyperrqrrr�rrr�test_find_fifotype�sz!MemberReadTest.test_find_fifotypecCs |j�d�}|j|dtd�dS)Nzustar/sparse�Prm�r3r:rk�
sha256_sparser�rrr�test_find_sparse�szMemberReadTest.test_find_sparsecCs |j�d�}|j|dtd�dS)N�
gnu/sparser�rmr�r�rrr�test_find_gnusparse�sz"MemberReadTest.test_find_gnusparsecCs |j�d�}|j|dtd�dS)N�gnu/sparse-0.0r�rmr�r�rrr�test_find_gnusparse_00�sz%MemberReadTest.test_find_gnusparse_00cCs |j�d�}|j|dtd�dS)N�gnu/sparse-0.1r�rmr�r�rrr�test_find_gnusparse_01�sz%MemberReadTest.test_find_gnusparse_01cCs |j�d�}|j|dtd�dS)N�gnu/sparse-1.0r�rmr�r�rrr�test_find_gnusparse_10�sz%MemberReadTest.test_find_gnusparse_10cCs |j�d�}|j|dtd�dS)Nuustar/umlauts-ÄÖÜäöüßrlrmrnr�rrr�test_find_umlauts�sz MemberReadTest.test_find_umlautscCsd}|�||j���dS)Naustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longname)r�r3r�)rrlrrr�test_find_ustar_longname�sz'MemberReadTest.test_find_ustar_longnamecCs |j�d�}|j|dtd�dS)Nzmisc/regtype-old-v7rlrmrnr�rrr�test_find_regtype_oldv7�sz&MemberReadTest.test_find_regtype_oldv7cCs@|j��tj|j|jdd�|_|j�d�}|j|dtd�dS)Nr/r0upax/umlauts-ÄÖÜäöüßrlrm)	r3r5rrrrr:rkr@r�rrr�test_find_pax_umlauts�s
�z$MemberReadTest.test_find_pax_umlauts)N)rrrrkrorprsrurxryr~rr�r�r�r�r�r�r�r�r�r�rrrrr`ls&
r`c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LongnameTestcCsV|jddd}z|j�|�}Wnty>|�d�Yn0|�|jtjd�dS)Nr���123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/�longnamezlongname not foundzread longname as dirtype)	�subdirr3r:r�ri�assertNotEqualr�rr�)rr�rBrrr�test_read_longname�s�zLongnameTest.test_read_longnamecCsf|jddd}|jddd}z|j�|�}WntyP|�d�Yn0|�|j|d�dS)Nr�r�r��longlinkzlonglink not foundzlinkname wrong)r�r3r:r�rir=rw)rr�r�rBrrr�test_read_longlink�szLongnameTest.test_read_longlinkcCs�|jddd}|j�|�}|j}|jj�|�t�|jj�d��}|�	t
j��t
jd|d�Wd�n1sv0YdS)Nr�r�r�izfoo.tar)rlr�)
r�r3r:r�r�r]rr�r<r�rr�r)rr�rBr�rCrrr�test_truncated_longname�sz$LongnameTest.test_truncated_longnamecCs~|jddd}|j�|�j}ttd��@}|�|�tj�	|�
d�dd�}|�|j|j
�Wd�n1sp0YdS)Nr�r�r�rVr\r/�strict)r�r3r:r�rrr]rr�Zfrombufr<r=r��longnametype)rr�r�rCrBrrr�test_header_offset�s
�zLongnameTest.test_header_offsetN)rrrr�r�r�r�rrrrr��s
		r�c@sJeZdZdZejZdd�Zdd�Zdd�Z	dd	�Z
d
d�Zedd
��Z
dS)�GNUReadTestZgnucCs�|j�|t�tj�t|�}t|d��}|��}Wd�n1sD0Y|�t	|�t
d|�|��r�t�|�}|�
|jd|j�dS)NrVrar\)r3rHrIrJrKrLrr<r=r
r��_fs_supports_holesrZ
assertLess�	st_blocks�st_size)rrl�filenamerCr
rarrr�_test_sparse_files&�
zGNUReadTest._test_sparse_filecCs|�d�dS)Nr��r�rrrr�test_sparse_file_oldsz GNUReadTest.test_sparse_file_oldcCs|�d�dS)Nr�r�rrrr�test_sparse_file_00szGNUReadTest.test_sparse_file_00cCs|�d�dS)Nr�r�rrrr�test_sparse_file_01szGNUReadTest.test_sparse_file_01cCs|�d�dS)Nr�r�rrrr�test_sparse_file_10szGNUReadTest.test_sparse_file_10cCs�tj�d�r�tj�td�}t|d��,}|�d�|�	d�|�
�Wd�n1sV0Yt�|�}t�
|�|jd|jkSdSdS)N�linuxzsparse-testr�isxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr\F)r�rr�rJrKrLrIrr]r�r�rrrr�r�)rlrCrarrrr�s

&

zGNUReadTest._fs_supports_holesN)rrrr�r�GNUTYPE_LONGNAMEr�r�r�r�r�r��staticmethodr�rrrrr��s	r�c@s.eZdZdZejZdd�Zdd�Zdd�Z	dS)	�PaxReadTest�paxcCs�tjtdd�}z�|�d�}|�|jd�|�|jd�|�|j�d�d�|�d�}|�|jd	�|�|jd�|�|j�d�d�|�d
�}|�|jd�|�|jd�|�|j�d�d�W|�	�n
|�	�0dS)Nr/r�pax/regtype1r�r|zVENDOR.umlautsuÄÖÜäöüßzpax/regtype2rzpax/regtype3r)
rrrr:r=r�re�pax_headers�getr5�rr3rBrrr�test_pax_global_headers7s*
�
�
�z#PaxReadTest.test_pax_global_headerscCs�tjtdd�}z�|�d�}|�|jd�|�|jd�|�|jd�|�|jd�|�t	|j�t
�|�t
|jd�d�|�t
|jd�d�W|��n
|��0dS)	Nr/rzpax/regtype4rl�{g��^�AZatime�ctime)
rrrr:r=r?rcrdr�r�rr�r5r�rrr�test_pax_number_fieldsNs
z"PaxReadTest.test_pax_number_fieldsc
Cs`d}ddi}|D�]H}|j|d���$tjtdtjdd�}z0t��}d|_d	|_||_|�	|�W|�
�n
|�
�0ttd
��0}|��}|�d|�|�
d|�}Wd�n1s�0Yttd��"}|��|�|�Wd�n1s�0Y|�tjd
��tjtdd�Wd�n1�s00YWd�q1�sP0YqdS)N)
s	 foo=bar
s0 
s1 
s2 
s3 =
s4 =a
s1000000 foo=bar
s
0 foo=bar
s-12 foo=bar
s$000000000000000000000000036 foo=bar
r�r|)�headerrr/�rr1r�rWrVs11 foo=bar
r�r�r)�subTestrrr��
PAX_FORMATr�rlrcr�r�r5r<r�r�r�r�r�r�)rZpax_header_replacementsr�Zreplacementr3r�r�r
rrr�test_pax_header_bad_formats]s.
�*(z'PaxReadTest.test_pax_header_bad_formatsN)
rrrr�r�XHDTYPEr�r�r�r�rrrrr�2s
r�c@seZdZdd�Zdd�ZdS)�
WriteTestBasecCs�t��}tj||jd�� }|�t�d��Wd�n1s>0Y|�|jd�|�	�}~t
��|�|j�|�||�	��dS)Nr�r�z#external fileobjs must never closed)
rr�rrrr�r�r�r*r�r�
gc_collectr=)rrCr3r
rrr�test_fileobj_no_close�s.z#WriteTestBase.test_fileobj_no_closecCs�t�t|j��@}t�d�}tjtj|_|�|t	�
d|j��Wd�n1sT0Y|�td��*}|�t|�
��tjd�Wd�n1s�0YdS)Nr�r�rVrZ)rrr�rr��
RECORDSIZE�	BLOCKSIZEr?r�rr�r=r>r<)rr3r�rCrrr�test_eof_marker�s
6zWriteTestBase.test_eof_markerN)rrrr�r�rrrrr��sr�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
�ee
d�d�dd��Zejdd��Zdd�Zdd�Zd&dd�Zejdd��Zdd�Zd d!�Zd"d#�Zd$d%�ZdS)'�	WriteTestr�cCszd}t�t|j�}z t�|�}|�|�W|��n
|��0t�t�}z"|�|��d|d�W|��n
|��0dS)N�d0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rz!failed to store 100 char filename)	rrr�rr�r�r5r=r�)rrlr3r�rrr�test_100_char_name�s

�zWriteTest.test_100_char_namecCs�t�t|j�}zXtj�td�}t|d��}|�d�Wd�n1sH0Y|�	|�W|�
�n
|�
�0|�tj�t�dd�dS)N�filer��aaarztarfile is empty)
rrr�rrJrKrLrIr�r�r5Z
assertGreater�getsize)rr3rKrCrrr�
test_tar_size�s(�zWriteTest.test_tar_sizecCs�t�t|j�}z�tj�td�}t|d��Wd�n1s>0Y|�|�}|�	|j
d�t|d��}|�d�Wd�n1s�0Y|�|�}|�	|j
d�W|��n
|��0dS)Nr�r�rr�rz)
rrr�rrJrKrLrI�
gettarinfor=r?r�r5)rr3rKrBrCrrr�test_file_size�s
(
zWriteTest.test_file_sizec	Csvtj�td�}t�|�zLt�t|j�}z$|�	|�}|�
|jd�W|��n
|��0Wt
�|�nt
�|�0dS)N�	directoryr)rJrKrLrIr�rrr�rr�r=r?r5rr��rrKr3rBrrr�test_directory_size�s

zWriteTest.test_directory_sizecCsXtj�td�}t�|�ttj�|d�d���ttj�|d�d���z�t�t|j	�}z�t
j�d��$}ddg|_
|�|�Wd�n1s�0Yg}|��D]}|�tj�|j�d�q�|�|gd��W|��n
|��0Wt�tj�|d��t�tj�|d��t�|�n4t�tj�|d��t�tj�|d��t�|�0dS)Nr��1rn�2z
os.listdirr)r�r�r�)rJrKrLrIr�rr5rr�rr/r0r1�return_valuer�r��append�splitrlr=rrr�)rrKr3Zmock_listdir�paths�mrrr�test_ordered_recursion�s*

(�z WriteTest.test_ordered_recursionc	Cs�t�t|j���}t�t�d}t|d��}|�d�Wd�n1sH0Y|�|�}|�t	�
|��}|�|jt
�|�|j|j�|�|jd�Wd�n1s�0YdS)Nr�r�r�rz)rrr�rr�r�rIr�r�rJr�r�rlr�r=r?)rr3rKrCrBZtarinfo2rrr�test_gettarinfo_pathlike_names(
z'WriteTest.test_gettarinfo_pathlike_namerrc
Cstj�td�}tj�td�}t|d��}|�d�Wd�n1sF0Yzt�||�Wn2ty�}z|�d|�WYd}~n
d}~00z`t	�t
|j�}z.|�|�|�|�}|�
|jd�W|��n
|��0Wt�|�t�|�nt�|�t�|�0dS)Nr�link_targetr�r��
os.link(): %sr)rJrKrLrIrr�r�PermissionErrorr=rr�rr�r=r?r5rr)rr�targetrCrRr3rBrrr�test_link_sizes&($


�
zWriteTest.test_link_sizec	Csxtj�td�}t�d|�zLt�t|j�}z$|�	|�}|�
|jd�W|��n
|��0Wt
�|�nt
�|�0dS)N�symlinkr�r)rJrKrLrIr�rrr�rr�r=r?r5rrr�rrr�test_symlink_size$s
zWriteTest.test_symlink_sizecCs�tj�t�}t�t|j�}z~|�|j|d�|�	|�|�|�
�gd�t�t
��|�	|�Wd�n1sr0Y|�|�
�gd�W|��n
|��0dS)Nzarchive name must be absolutezadded the archive to itself)rJrKr�r�rrrr=rlr�r�r�
change_cwdrIr5)r�dstnamer3rrr�
test_add_self2s 
�
�(�zWriteTest.test_add_selfc	Cs8tj�td�}t�|��zdD]}tj�||�}t�|�q dd�}tjt	|j
dd�}z|j|d|d�W|��n
|��0|�
t��"|�|dd	d|�Wd�n1s�0Yt�t	d
�}zF|D] }|�|jd�|�|jd�q�|�t|���d
�W|��n
|��0Wt�|�nt�|�0dS)N�filter)r�r|ZbazcSs&tj�|j�dkrdSd|_d|_|S)Nr|r�r�)rJrK�basenamerlrcr�)rBrrrr�Ls
z%WriteTest.test_filter.<locals>.filterr/rZ	empty_dir)�arcnamer�TrEr�r�rz)rJrKrLrIr�r�create_empty_filerrr�rr�r5r��	TypeErrorr=rcr�r>r�r)r�tempdirrlr�r3rBrrr�test_filterDs*
0zWriteTest.test_filterNFcCs�tj�td�}|st�|�n
t�|�t�t	|j
�}z|j||d�W|��n
|��0t�t	d�}z|�
�}W|��n
|��0|s�t�|�n
t�|�|�|j|p�|�tjd��dS)Nr��r�rEr�)rJrKrLrIrr�r�rrr�rr�r5r�rr�r=rlr��sep)rrKZcmp_path�dirr�r3r�rrr�_test_pathnamels 


zWriteTest._test_pathnamec	Cs`tj�td�}tj�td�}t�|��ztj�|d�}tj�|d�}t|d��}|�d�Wd�n1sp0Yt�||�t�|d��,}|j	|dd�|j	|dd�Wd�n1s�0Ytj|dd	��@}z|j
|d
�Wnt�y|�d�Yn0Wd�n1�s$0YWt
�|�t
�|�nt
�|�t
�|�0dS)NZtestsymlinksztestsymlinks.tar�sourcer�rz
something
r�rZ�rr z&extractall failed with symlinked files)rJrKrLrIr�rr�r�rr�r	�OSErrorrirrr)rr�ZtemparchiveZsource_fileZtarget_filer�r3rrr�test_extractall_symlinks�s*
(,2
�
z"WriteTest.test_extractall_symlinkscCs<|�d�|�tj�ddd��|�tj�ddd��|�tj�dd��|�tj�ddd��|�tj�dddd��|�tj�dddd��|�tj�dddd��|�tj�dd��|�tj�ddd��|�tj�dddd��|�tj�dddd��|�dtjtjd�|jdtjtjddd�dS)Nr��.r|�..T)r�)r�rJrKrLr�rrrr�test_pathnames�s
zWriteTest.test_pathnamescCs4tjdkr|�dd�n|�dd�|�dd�dS)NrzC:\foor�z/fooz///foo)r�rr�rrrr�test_abs_pathnames�s
zWriteTest.test_abs_pathnamesc	Cs�t�t���t�t|j�}z|�d�W|��n
|��0t�td�}z6|D]$}|j	dkrN|�
|j	�d�|j	�qNW|��n
|��0Wd�n1s�0YdS)Nr�rEz./)rr�rIrrr�rr�r5rlr�r��rr3r�rrr�test_cwd�s
zWriteTest.test_cwdc	s�tttfD]r�G�fdd�dtj�}|�}|����,tjt|j	|tj
ddid�}Wd�n1sf0Y|�|j�q
dS)NcseZdZdZ�fdd�ZdS)z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTcs|jrd|_��dS�NF)�first�rr
��exctyperrr��sz>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)rrrr�r�rr�rr�BadFile�sr�Znonr&)r�rr�)
r��EOFError�RuntimeErrorrr�r�rrr�rr�r�r*)rr�r�r3rr�r�test_open_nonwritable_fileobj�s�$z'WriteTest.test_open_nonwritable_fileobj)NF)rrrrr�r�r�r�r�r�r/r5r6rJr�rr7r�r�r�r�r�r�r�r�r�rrrrr��s,�


(

r�c@seZdZdS)�
GzipWriteTestNr�rrrrr��sr�c@seZdZdS)�Bz2WriteTestNr�rrrrr��sr�c@seZdZdS)�
LzmaWriteTestNr�rrrrr�src@s@eZdZdZdZdd�Ze�ej	dko.e
ed�d�dd	��ZdS)
�StreamWriteTestzw|NcCs�t�t|j�}|��|jrp|��}ttd��}|��}Wd�n1sL0Y|�|�}|�|j	d�n2|�t��}|��}Wd�n1s�0Y|�
|�d�tjd�dS)NrVzfound trailing datar�zincorrect zero padding)
rrr�rr5�decompressorr<�
decompressr��unused_datar=�countr�)rr3ZdecrCr
rrr�test_stream_padding�s&
&�z#StreamWriteTest.test_stream_paddingr�umaskzMissing umask implementationc	Csttj�t�rt�t�t�d�}zBt�t|j	�}|�
�t�t�jd@}|�
|dd�Wt�|�nt�|�0dS)N�ri�zwrong file permissions)rJrK�existsr�rrrrrrr5rrr=)rZoriginal_umaskr3rrrr�test_file_mode�s

zStreamWriteTest.test_file_mode)
rrrrrrr/r5r�rr6rJr
rrrrr�s�rc@seZdZdd�ZdS)�GzipStreamWriteTestcCs(t�t|j���t�t�jdd�}dS)zf
        Ensure the source directory is not included in the tar header
        per bpo-41316.
        zlatin-1rN)rrr�rr5r�r��	read_text)r�payloadrrr� test_source_directory_not_leakedsz4GzipStreamWriteTest.test_source_directory_not_leakedN)rrrrrrrrrsrc@seZdZerejndZdS)�Bz2StreamWriteTestN)rrrr%�BZ2Decompressorrrrrrrsrc@seZdZerejndZdS)�LzmaStreamWriteTestN)rrrr+�LZMADecompressorrrrrrrsrc@speZdZdd�Zddd�Zddd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�GNUWriteTestcCst|�dd}|dS)Nr\rW)r>)rraZblocksrrr�_length&szGNUWriteTest._lengthNcCsXd}t|�tjkr(|d7}||�|�7}|durTt|�tjkrT|d7}||�|�7}|S)Nr\)r>r�LENGTH_NAMEr�LENGTH_LINK)rrlrrrrr�
_calc_size*szGNUWriteTest._calc_sizecCs�t�|�}|r||_tj|_t�td�}z>tj|_|�	|�|�
||�}|j}|�||d�W|�
�n
|�
�0t�t�}zD|��}|�|d�|�|j|jd�|�|j|jd�W|�
�n
|�
�0dS)Nrz%GNU longname/longlink creation failedzunable to read longname member)rr�rw�LNKTYPEr�rr��
GNU_FORMATrr�rr�r=r5r�rHrl)rrlrrBr3rKrL�memberrrr�_test8s2


���zGNUWriteTest._testcCs|�d�dS)N�longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam�rrrrr�test_longname_1023UszGNUWriteTest.test_longname_1023cCs|�d�dS)N�longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamerrrrr�test_longname_1024XszGNUWriteTest.test_longname_1024cCs|�d�dS)N�longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longname_rrrrr�test_longname_1025[szGNUWriteTest.test_longname_1025cCs|�dd�dS)Nrl�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnkrrrrr�test_longlink_1023^szGNUWriteTest.test_longlink_1023cCs|�dd�dS)Nrl�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlinkrrrrr�test_longlink_1024aszGNUWriteTest.test_longlink_1024cCs|�dd�dS)Nrl�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlink_rrrrr�test_longlink_1025dszGNUWriteTest.test_longlink_1025cCs|�dd�dS)Nrr#rrrrr�test_longnamelink_1023gs�z#GNUWriteTest.test_longnamelink_1023cCs|�dd�dS)Nrr%rrrrr�test_longnamelink_1024ks�z#GNUWriteTest.test_longnamelink_1024cCs|�dd�dS)Nr!r'rrrrr�test_longnamelink_1025os�z#GNUWriteTest.test_longnamelink_1025)N)N)rrrrrrrr r"r$r&r(r)r*r+rrrrr"s

rc@seZdZdZdd�ZdS)�DeviceHeaderTestr�c	Cs�tj�td�}t�|��z^t�t|j�}zHtj	dd�}tj	dd�}tj
|_tj|_|�
|�|�
|�W|��n
|��0t�td�}z |�d�}|�d�}W|��n
|��0|�|jd�|�|jd�|�|jd�|�|jd�ttd��}|��}Wd�n1�s0Y||j|j�}	||j|j�}
tdd	�}|�|	|d
�|�|
|d�Wt�|�nt�|�0dS)NZdevice_header_testZmy_block_device�rlZmy_regular_filerErrViIiYs00000000000000s)rJrKrLrIr�rrr�rr��BLKTYPEr��REGTYPEr�r5r:r=r|r}r<r�Zoffset_data�slicerr)rr�r3Z	input_blkZ	input_regZ
output_blkZ
output_regZinfilerDZbuf_blkZbuf_regZdevice_headersrrr�*test_headers_written_only_for_device_filesxs:


(
z;DeviceHeaderTest.test_headers_written_only_for_device_filesN)rrrrr1rrrrr,tsr,c@sneZdZdZej�ed�Zdd�Z	e
dd��Ze
dd��Zd	d
�Z
dd�Zd
d�Zdd�Zdd�Zdd�ZdS)�
CreateTestzx:�
spameggs42cCst�t�dSr)rrr�rrrrr4�szCreateTest.setUpcCs:t|jd��}|�d�Wd�n1s,0YdS)Nr�r�)r�	file_pathr�)�clsrCrrr�
setUpClass�szCreateTest.setUpClasscCst�|j�dSr)rrr4�r5rrr�
tearDownClass�szCreateTest.tearDownClasscCs�t�t|j��}|�|j�Wd�n1s00Y|�t��}|��}Wd�n1sb0Y|�t	|�d�|�
d|d�dS�NrWr3r)rrr�rr�r4rr�r=r>r��r�tobj�namesrrr�test_create�s*&zCreateTest.test_createcCs�t�t|j��}|�|j�Wd�n1s00Y|�t��t�t|j�}Wd�n1sh0Y|�t��}|�	�}Wd�n1s�0Y|�
t|�d�|�d|d�dSr9)
rrr�rr�r4r��FileExistsErrorrr�r=r>r�r:rrr�test_create_existing�s*,&zCreateTest.test_create_existingcCs�|�td��}|�|j�Wd�n1s.0Y|�t��}|��}Wd�n1s`0Y|�t|�d�|�d|d�dS�N�xrWr3r)rr�r�r4r�r=r>r�r:rrr�test_create_taropen�s*&zCreateTest.test_create_taropenc	Cs�|�td��}|�|j�Wd�n1s.0Y|�t��<|�td��Wd�n1sf0YWd�n1s�0Y|�t��}|��}Wd�n1s�0Y|�t|�d�|�	d|d�dSr@)
rr�r�r4r�r>r�r=r>r�r:rrr�test_create_existing_taropen�s*<&z'CreateTest.test_create_existing_taropencCs�t�t�t�|j��N}|�|jt�|�	|jt
j�t��|�
t�|j��|��}Wd�n1sh0Y|�	t|�d�|�d|d�|�t��}|��}Wd�n1s�0Y|�	t|�d�|�d|d�dSr9)rrr�r�r�rr�rlr�r=rJrKr�r�r4r�r>r�rr:rrr�test_create_pathlike_name�s&&z$CreateTest.test_create_pathlike_namecCs�|�t�t�d��N}|�|jt�|�|jtj	�
t��|�t�|j��|�
�}Wd�n1sf0Y|�t|�d�|�d|d�|�t��}|�
�}Wd�n1s�0Y|�t|�d�|�d|d�dSr@)rr�r�r�r�rlr�r=rJrKr�r�r4r�r>r�r:rrr�!test_create_taropen_pathlike_name�s&&z,CreateTest.test_create_taropen_pathlike_nameN)rrrrrJrKrLrIr4r4�classmethodr6r8r=r?rBrCrDrErrrrr2�s

		
r2c@seZdZdd�ZdS)�GzipCreateTestcCsrtjt|jdd��}|�|j�Wd�n1s40Ytjtddd��}Wd�n1sd0YdS)NrWr\zr:gz�rrr�rr�r4�rr;rrr�test_create_with_compresslevel�s*z-GzipCreateTest.test_create_with_compresslevelN�rrrrJrrrrrG�srGc@seZdZdd�ZdS)�
Bz2CreateTestcCsrtjt|jdd��}|�|j�Wd�n1s40Ytjtddd��}Wd�n1sd0YdS)NrWr\�r:bz2rHrIrrrrJs*z,Bz2CreateTest.test_create_with_compresslevelNrKrrrrrLsrLc@seZdZdd�ZdS)�LzmaCreateTestcCsBtjt|jdd��}|�|j�Wd�n1s40YdS)NrW)�presetrHrIrrr�test_create_with_presetsz&LzmaCreateTest.test_create_with_presetN)rrrrPrrrrrNsrNc@seZdZdZdZdZdS)�CreateWithXModeTestrAN)rrrrrBrCrrrrrQsrQrrc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�HardlinkTestc
Cs�tj�td�|_tj�td�|_t|jd��}|�d�Wd�n1sL0Yzt�|j|j�Wn2t	y�}z|�
d|�WYd}~n
d}~00t�td�|_
|j
�|j�dS)Nr�r|r��foor�r)rJrKrLrIr�r|rr�rr�r=rr�r3r�)rrCrRrrrr4#s($zHardlinkTest.setUpcCs&|j��t�|j�t�|j�dSr)r3r5rrr�r|rrrrr62s
zHardlinkTest.tearDowncCs$|j�|j�}|�|jtjd�dS)Nzadd file as regular failed)r3r�r�r=r�rr/r�rrr�test_add_twice7s�zHardlinkTest.test_add_twicecCs$|j�|j�}|�|jtjd�dS)Nzadd file as hardlink failed)r3r�r|r=r�rrr�rrr�test_add_hardlink>s�zHardlinkTest.test_add_hardlinkcCs,d|j_|j�|j�}|�|jtjd�dS)NTzdereferencing hardlink failed)r3Zdereferencer�r|r=r�rr/r�rrr�test_dereference_hardlinkCs
�z&HardlinkTest.test_dereference_hardlinkN)rrrr4r6rTrUrVrrrrrRs
rRc@s.eZdZd
dd�Zdd�Zdd�Zdd	�ZdS)�PaxWriteTestNcCs�t�|�}|r||_tj|_tjtdtjd�}z|�|�W|�	�n
|�	�0t�t�}zJ|r~|�
�dj}|�||d�n|�
�dj}|�||d�W|�	�n
|�	�0dS)Nr�rrzPAX longlink creation failedzPAX longname creation failed)
rr�rwrr�rr�r�r�r5r�r=rl)rrlrrBr3�l�nrrrrLs 

zPaxWriteTest._testc
Csdddddd�}tjtdtj|d�}z|�t�d��W|��n
|��0tjtd	d
�}z�|�|j|�|�|�	�dj|�|j�
�D]f\}}|�t|�t
�|�t|�t
�|tjvr�ztj||�Wq�ttfy�|�d�Yq�0q�W|��n
|��0dS)
Nr|�0z1.23�äöü�test)r�rcr�r]r\r)rr�r/rrz"unable to convert pax header field)rrr�r�r�r�r5r=r�r�rfZassertIsNotr�r��PAX_NUMBER_FIELDSr�r�ri)rr�r3�key�valrrr�test_pax_global_headerds2��
z#PaxWriteTest.test_pax_global_headercCs�ddd�}tjtdtjdd�}z0t��}d|_d|_||_|�|�W|�	�n
|�	�0tjtdd	�}zB|�
�d
}|�|j|�|�|jd�|�|jd�W|�	�n
|�	�0dS)Nr�Z123)rKrcrr/r�r\�rrr�)rrr�r�r�rlrcr�r�r5r�r=)rr�r3r�rrr�test_pax_extended_header�s$
�z%PaxWriteTest.test_pax_extended_headercCs�t��}d|_d|_d|_d|_d|_|��}|j|dd�}|�	|dd�|�
|d	t�|�	|d	d
�|�	|dd�|�	|dd�|�	|d
d�|�	|dtd�dtd�dtd�dtd�dtd�dtd�dtd��t��}d|_d|_d|_d|_d|_|��}|j|dd�}|�	|dd�|�	|d	d�|�	|dd�|�	|dd�|�	|d
d�|�	|dtd�dtd�dtd�ddd td!�d"td#�d$td�dtd��dS)%Nr�g�����@�@rfr��|r/rrlr�rbr?rcrds././@PaxHeader�Vs90000000000000000000000000000002000000000000010205 xsustar00�s16 mtime=1000.1
i�rS�as90000644000017300001740000000014400000001750006516 0ufoo㍴ld(	rbirs90000000000000000000000000000013000000000000010207 xs15 path=foo㍴
16 uid=16777216
s$16 gid=16777217
20 size=10000000000
s21 mtime=10000000000
i�sfoo?�`s90000644000000000000000000000000000000000000006540 0)
rr�rlr�r?rcrdr-Zcreate_pax_headerr=r�r�r�)rr��infor�rrr�test_create_pax_header�s�
�������������	
���������������z#PaxWriteTest.test_create_pax_header)N)rrrrrarcrjrrrrrWJs
 rWc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�UnicodeTestcCs|�d�dS)Nr/��_test_unicode_filenamerrrr�test_iso8859_1_filename�sz#UnicodeTest.test_iso8859_1_filenamecCs|�d�dS)N�utf7rlrrrr�test_utf7_filename�szUnicodeTest.test_utf7_filenamecCs|�d�dS)N�utf-8rlrrrr�test_utf8_filename�szUnicodeTest.test_utf8_filenamecCs�tjtd|j|dd�}z d}|�t�|��W|��n
|��0tjt|d�}z"|�|��dj	|�W|��n
|��0dS)Nrr��rr1�errorsr\rr)
rrr�rr�r�r5r=r�rl)rr1r3rlrrrrm�s�z"UnicodeTest._test_unicode_filenamecCsltjtd|jddd�}zFt��}d|_|�t|j|�d|_d|_	|�t|j|�W|�
�n
|�
�0dS)Nrr�r�rsr\r�)rrr�rr�rlr��UnicodeErrorr�r�r5r�rrr�test_unicode_filename_error�s�z'UnicodeTest.test_unicode_filename_errorcCs�tjtdddd�}z^|D]L}|�t|j�t�|�t|j�t�|�t|j�t�|�t|j	�t�qW|�
�n
|�
�0dS)NrEr/r��r1rt)rrr�assertIsr�rlr�rwr�rer5r�rrr�test_unicode_argument�s�z!UnicodeTest.test_unicode_argumentcCs�t�d�}d|_d|_tjtd|jdd�}z|�|�W|��n
|��0tjtdd�}zz|�	d�}|�
|jd�|�
|jd�|jtjkr�|��tjtdd�}|�	d�}|�
|jd�|�
|jd�W|��n
|��0dS)	Nr�r\rr/)rrr1rr�u	���)rr�r�rerr�rr�r5r:r=r�)rr�r3rrr�test_uname_unicode
s*
�

zUnicodeTest.test_uname_unicodeN)
rrrrnrprrrmrvryrzrrrrrk�srkc@sfeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zddd�Zdd�Z
dd�Zddd�Zd
S)�UstarUnicodeTestcCs0|�d�|�dt�|�d�|�dt�dS�Nr��e01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ��_test_ustar_namer�rrrr�test_unicode_name1-s

z#UstarUnicodeTest.test_unicode_name1cCs|�d�|�dt�dS�Nud012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr~rrrr�test_unicode_name23s
z#UstarUnicodeTest.test_unicode_name2cCs0|�d�|�dt�|�d�|�dt�dS)Na01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r~rrrr�test_unicode_longname19s

z'UstarUnicodeTest.test_unicode_longname1cCs|�dt�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r~rrrr�test_unicode_longname2?sz'UstarUnicodeTest.test_unicode_longname2cCs&|�dt�|�d�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿr~rrrr�test_unicode_longname3Cs
z'UstarUnicodeTest.test_unicode_longname3cCs|�d�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr~rrrr�test_unicode_longname4Hs
z'UstarUnicodeTest.test_unicode_longname4NcCs�tjtd|jdd��>}t�|�}|dur4|�|�n|�||j|�Wd�n1sX0Y|dur�tjtddd��,}|D]}|�||j�q�q�Wd�n1s�0YdS)Nrrqr�rEr)	rrr�rr�r�r�r=rl�rrl�excr3r�rrrrLs
.z!UstarUnicodeTest._test_ustar_namecCs0|�d�|�dt�|�d�|�dt�dSr|��_test_ustar_linkr�rrrr�test_unicode_link1[s

z#UstarUnicodeTest.test_unicode_link1cCs|�d�|�dt�dSr�r�rrrr�test_unicode_link2as
z#UstarUnicodeTest.test_unicode_link2cCs�tjtd|jdd��D}t�d�}||_|dur:|�|�n|�||j|�Wd�n1s^0Y|dur�tjtddd��,}|D]}|�||j�q�q�Wd�n1s�0YdS)Nrrqr�r�rEr)	rrr�rr�rwr�r�r=r�rrrr�es
.z!UstarUnicodeTest._test_ustar_link)N)N)rrrr�USTAR_FORMATrr�r�r�r�r�r�rr�r�r�rrrrr{&s
r{c@seZdZejZdd�ZdS)�GNUUnicodeTestc
CsndD]d\}}tjt|dd��<}z|�|�}WntyH|�d�Yn0Wd�q1s^0YqdS)N))rqupax/bad-pax-���)r/upax/bad-pax-äöür�rwz%unable to read bad GNU tar pax header�rrrr:r�ri�rr1rlr3r�rrr�test_bad_pax_headerys�z"GNUUnicodeTest.test_bad_pax_headerN)rrrrrrr�rrrrr�usr�c@seZdZejZdZdd�ZdS)�PAXUnicodeTestNc
CsndD]d\}}tjt|dd��<}z|�|�}WntyH|�d�Yn0Wd�q1s^0YqdS)N))rqupax/hdrcharset-���)r/upax/hdrcharset-äöür�rwz)unable to read POSIX.1-2008 binary headerr�r�rrr�test_binary_header�s�z!PAXUnicodeTest.test_binary_header)rrrrr�rrvr�rrrrr��sr�c@s&eZdZdd�Zd	dd�Zdd�ZdS)
�AppendTestBasecCs$t|_tj�|j�r t�|j�dSr)r�rrJrKr	rrrrrrr4�szAppendTestBase.setUpr�c
Cs�tjtdd���}|�d�}d|_|�|��J}t�|j|��}|�||�Wd�n1s\0YWd�n1sz0YWd�n1s�0YdS)Nr/rr8r�)rrrr:rlr;r�)rr�srcr�r�r3rrr�_create_testtar�s
zAppendTestBase._create_testtarcCs(|�d|j�|�tjtjtd�dS)Nr�rn)r�rr�rr�rr�rrrr�test_append_compressed�sz%AppendTestBase.test_append_compressedN)r�)rrrr4r�r�rrrrr��s
r�c@s�eZdZdZddd�Zdgdfdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
AppendTestNcCsFtj|jd|d�� }|�t�d��Wd�n1s80YdS)NrnrTr|)rrrr�r�)rr�r3rrr�
_add_testfile�szAppendTest._add_testfiler|cCsDtj|j|d�� }|�|��|�Wd�n1s60YdS)NrT)rrrr=r�)rr<r�r3rrrr�szAppendTest._testcCs|��|��dSr)r�rrrrr�test_non_existing�szAppendTest.test_non_existingcCs&t�|jd���|��|��dS)Nr�)rrrr5r�rrrrr�
test_empty�szAppendTest.test_emptycCs.t�d�}|�|�|�d�|j|d�dS)NsrrT)rr�r�r]rr�rrr�test_empty_fileobj�s


zAppendTest.test_empty_fileobjcCsp|��t|jd��}|��}Wd�n1s20Yt�|�}|�|�|�d�|jddg|d�dS)NrVrr�r|)r<r�)	r�rrr<rr�r�r]rrjrrr�test_fileobj�s&


zAppendTest.test_fileobjcCs$|��|��|jddgd�dS)Nr�r|)r<)r�r�rrrrr�
test_existing�szAppendTest.test_existingcCsJt|jd��}|�|�Wd�n1s,0Y|�tj|j�dSr�)rrr�r�rr�r�)rr
rCrrr�_test_error�s(zAppendTest._test_errorcCs|�d�dS)Nr[�r�rrrr�	test_null�szAppendTest.test_nullcCs|�d�dS)N�
r�rrrr�test_incomplete�szAppendTest.test_incompletecCst�d���}|�|�dS)Nr��rr�r�r�r�rrr�test_premature_eof�szAppendTest.test_premature_eofcCs t�d���}|�|d�dS)Nr�r�r�r�rrr�test_trailing_garbage�sz AppendTest.test_trailing_garbagecCs|�d�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar�rrrr�test_invalid�szAppendTest.test_invalid)N)rrrr�r�rr�r�r�r�r�r�r�r�r�r�r�rrrrr��s
	r�c@seZdZdS)�GzipAppendTestNr�rrrrr��sr�c@seZdZdS)�
Bz2AppendTestNr�rrrrr��sr�c@seZdZdS)�LzmaAppendTestNr�rrrrr��sr�c@s$eZdZdd�Zdd�Zdd�ZdS)�
LimitsTestcCs�t�d�}|�tj�t�d�}|�t|jtj�t�d�}|�tj�t�d�}|�t|jtj�t�d�}|�t|jtj�t�d�}d|_|�t|jtj�t�d�}d|_|�t|jtj�dS)	Nr�r}a123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamea1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/longname�123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamer�rl� )rr�r�r�r�r�rwrcr�rrr�test_ustar_limits�s 






zLimitsTest.test_ustar_limitscCsXt�d�}|�tj�t�d�}d|_|�tj�t�d�}d|_|�t|jtj�dS�Nr�r�rll)rr�r�rrwrcr�r�r�rrr�test_gnu_limits	s


zLimitsTest.test_gnu_limitscCsRt�d�}|�tj�t�d�}d|_|�tj�t�d�}d|_|�tj�dSr�)rr�r�r�rwrcr�rrr�test_pax_limits'	s


zLimitsTest.test_pax_limitsN)rrrr�r�r�rrrrr��s
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�MiscTestcCs`|�t�dddd�d�|�t�dddd�d�|�t�ddd�d�|�t�d	dd�d�dS)
Nr��r�r�sfooZfoobarrzrSsfoobar)r=r�stn�ntsrrrr�test_char_fields6	s����zMiscTest.test_char_fieldscCs�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d	�d
�|�t�d�d�|�t�d
�d�|�t�d�d�|�t�d�d�dS)N�0000001rW�7777777��� r�������������������r�����������������r�rs       )r=r�ntirrrr�test_read_number_fields@	s&�����z MiscTest.test_read_number_fieldscCs�|�t�d�d�|�t�d�d�|�tjdtjd�d�|�tjdtjd�d	�|�tjd
tjd�d�|�tjdtjd�d
�|�tjdtjd�d�|�tjdtjd�d
�|�tjdtjd�d�|�t�tjdtjd��d�dS)NrWr�r�r�r�rXr�r�r�rr�r�r�r�r�gY�g0Bs�g��������r)r=r�itnrr�rrrr�test_write_number_fieldsT	s4����
����z!MiscTest.test_write_number_fieldscCs�|�t�� t�ddtj�Wd�n1s00Y|�t�� t�ddtj�Wd�n1sj0Y|�t�� t�ddtj�Wd�n1s�0Y|�t�� t�ddtj�Wd�n1s�0YdS)Nrr�r�l�����l)r�r�rr�r�rrrrr�test_number_field_limitsk	s...z!MiscTest.test_number_field_limitscCshd�}tj|t|d�dS)N>8ZGNUTYPE_LONGLINKZPAX_NAME_FIELDSr�Z	GNU_MAGICr��fully_trusted_filterr��NULZAREGTYPE�FilterError�AbsoluteLinkErrorZEOFHeaderError�LinkOutsideDestinationErrorZ
REGULAR_TYPESZSubsequentHeaderErrorr�rZsymlink_exception�SYMTYPEr�Z	GNU_TYPES�
tar_filterZTruncatedHeaderErrorZSUPPORTED_TYPES�filemoderZXGLTYPEZCONTTYPEZEmptyHeaderError�mainZExFileObjectZSOLARIS_XHDTYPEr�r�rZPOSIX_MAGICr�Z
PAX_FIELDSZcalc_chksumsr^r/�copyfileobj�SpecialFileError�OutsideDestinationErrorZ
LENGTH_PREFIXZGNUTYPE_SPARSE�version�AbsolutePathErrorr�r.�grpZInvalidHeaderError�data_filter�FIFOTYPE�pwd�CHRTYPE)�	blacklist)rZcheck__all__r)rr�rrr�test__all__u	szMiscTest.test__all__N)rrrr�r�r�r�r�rrrrr�4	s


r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�CommandLineTestcOs2tjddg|�Ri|��\}}}|�tj��d�S)N�-mr�
)rZassert_python_okr�rJ�lineseprg)r�argsrh�rcr��errrrr�
tarfilecmd�	s�zCommandLineTest.tarfilecmdcGstjddg|�R�S)Nr�r)rZassert_python_failure�rr�rrr�tarfilecmd_failure�	sz"CommandLineTest.tarfilecmd_failurecCsrt�d�t�d�g}|�tj|�t�|d��0}|D]}|j|tj�	|�d�q4Wd�n1sd0YdS)N�tokenize_tests.txt�9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtrr�)
rr�rrrrr�rJrKr�)r�tar_name�files�tfZtardatarrr�make_simple_tarfile�	s�z#CommandLineTest.make_simple_tarfilecCs�t�d�g}|�tj|�t�|d��L}t�d�}|j|t�	d�d�t�d�}|j|t�	d�d�Wd�n1sx0YdS)Nr�r�benignr[rT�../evil)
rr�rrrrr�r�rr�)rr�r�r�r�Zevilrrr�make_evil_tarfile�	s

z!CommandLineTest.make_evil_tarfilecCs||��\}}}|�|d�|�d|���|�d|���|�d|���|�dd�\}}}|�|d�|�|��d�dS)Nr[susageserrorsrequired�-lr)r�r=r��lowerr��strip)rr�r�r�rrr�test_bad_use�	szCommandLineTest.test_bad_usecCs0tD]&}dD]}|�||�}|�|d�qqdS)N)�-tz--testr[)�testtarnamesr�r=�rr��optr�rrr�test_test_command�	sz!CommandLineTest.test_test_commandcCs6tD],}dD]"}|j|d|dd�}|�d|�qqdS)N��-vz	--verboser�rq��PYTHONIOENCODINGsis a tar archive.
)r�r�r�r�rrr�test_test_command_verbose�	s
�z)CommandLineTest.test_test_command_verbosecCs0t�d�}|�d|�\}}}|�d|�|�|d�|�|d�tD]�}|j|d���t|d��}|��}Wd�n1s~0Yzttt	d��"}|�
|dd	��Wd�n1s�0Y|�dt	�\}}}|�|d�|�|d�Wt�t	�nt�t	�0Wd�qD1�s 0YqDdS)
N�
zipdir.zipr�� is not a tar archive.r[rW)r�rVr�r)rr�r�r�r=r�r�rr<r�r�r)r�zipnamer�r�r�r�r�r
rrr�test_test_command_invalid_file�	s 
&0z.CommandLineTest.test_test_command_invalid_filec
Cs�tD]�}t���H}t�|d��}|jdd�Wd�n1s@0YWd�n1s^0Y|���dd�}dD] }|j||dd�}|�	||�q|qdS)NrEFr�r�r�)r�z--listr��
r�rZcaptured_stdoutrrrTr�rgr�r=�rr�r�r��expectedr�r�rrr�test_list_command�	s
H�z!CommandLineTest.test_list_commandc
Cs�tD]�}t���H}t�|d��}|jdd�Wd�n1s@0YWd�n1s^0Y|���dd�}dD]"}|j|d|dd�}|�	||�q|qdS)	NrETr�r�r�r�r�r�rrrrr�test_list_command_verbose�	s
H
�z)CommandLineTest.test_list_command_verbosecCsDt�d�}|�d|�\}}}|�d|�|�|d�|�|d�dS)Nr�r�r�r[rW)rr�r�r�r=�rrr�r�r�rrr�test_list_command_invalid_file�	s

z.CommandLineTest.test_list_command_invalid_filec
Cs�t�d�t�d�g}dD]r}z`|j|tg|�R�}|�|d�t�t��}|��Wd�n1sf0YWt�t�qt�t�0qdS)Nr�r�)�-cz--creater[)	rr�r�r�r=rrr�r�rr�r�r�r3rrr�test_create_command�	s�(z#CommandLineTest.test_create_commandc
Cs�t�d�t�d�g}dD]z}zh|j|dtg|�Rddi�}|�d|�t�t��}|��Wd�n1sn0YWt�t�qt�t�0qdS)Nr�r�r�r	r�rqs file created.)	rr�r�r�r�rrr�rr
rrr�test_create_command_verbose�	s��(z+CommandLineTest.test_create_command_verbosec	Cs~t�d�g}z`|jdtg|�R�}|�|d�t�t��}|��Wd�n1sV0YWt�t�nt�t�0dS)Nr�r	r[)	rr�r��dotlessnamer=rrr�r)rr�r�r3rrr�$test_create_command_dotless_filename
s(z4CommandLineTest.test_create_command_dotless_filenamec	Cs�tj�td�}t�d�g}z`|jd|g|�R�}|�|d�t�	|��}|�
�Wd�n1sd0YWt�|�nt�|�0dS)Nz.testtarr�r	r[)rJrKrLrIrr�r�r=rrr�r)rr�r�r�r3rrr�(test_create_command_dot_started_filename
s(z8CommandLineTest.test_create_command_dot_started_filenamec
Cs�t�d�t�d�g}tttfD]|}|js*qzbtd|j}|jd|g|�R�}|�	|��}|�
�Wd�n1sv0YWt�|�qt�|�0qdS)Nr�r�r�r	)rr�r r$r(rr�rr�rr�r)rr�Zfiletyper�r�r3rrr�test_create_command_compressed!
s�(z.CommandLineTest.test_create_command_compressedc
Csv|�t�dD]b}zPt�t��|�|t�}Wd�n1s@0Y|�|d�Wt�t�qt�t�0qdS)N)�-ez	--extractr[�r�r�rr��	tarextdirr�r=r�rr�r�rrr�test_extract_command0
s
*z$CommandLineTest.test_extract_commandc
Cs||�t�dD]h}zVt�t��"|j|dtdd�}Wd�n1sF0Y|�d|�Wt�t�qt�t�0qdS)Nr�rrqr�� file is extracted.)r�r�rr�rr�r�rrrrr�test_extract_command_verbose:
s

�$z,CommandLineTest.test_extract_command_verbosec	Cs�|�t�tj�td�}t�t�zlt�|��D|�	dtddd�|j
dtddddd�}|�d	|�Wd�n1sx0YWt�t�nt�t�0dS)
N�destrr�z--filterr
�
fully_trustedrqr�r)
r�r�rJrKrLrr�rr�r�r�r�r)r�destdirr�rrr�test_extract_command_filterE
s 

��,z+CommandLineTest.test_extract_command_filterc	Csn|�t�zRt�t��|�dtd�}Wd�n1s:0Y|�|d�Wt�t�nt�t�0dS)NrZspamdirr[r)rr�rrr�(test_extract_command_different_directoryX
s
,z8CommandLineTest.test_extract_command_different_directorycCsnt�d�}t�t��"|�d|�\}}}Wd�n1s<0Y|�d|�|�|d�|�|d�dS)Nr�rr�r[rW)rr�r�rr�r�r=rrrr�!test_extract_command_invalid_filea
s
0z1CommandLineTest.test_extract_command_invalid_fileN)rrrr�r�r�r�r�r�r�rrrrrrrrrrrrrrrrrrr��	s*		



	r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextManagerTestcCsJt�t��}|�|jd�Wd�n1s.0Y|�|jd�dS)Nzclosed inside runtime context�context manager failed)rrrr�r*r�r�rrr�
test_basicl
s,zContextManagerTest.test_basicc	Csdt�t�}|��|�t��4|�Wd�n1s80YWd�n1sV0YdSr)rrrr5r�r�r�rrr�test_closedq
s

zContextManagerTest.test_closedc	Csz|�t��>}t�t��}t�Wd�n1s00YWd�n1sN0Y|�|jtd�|�|j	d�dS)Nz)wrong exception raised in context managerr)
r��	Exceptionrrrr�r��	exceptionr�r*)rr�r3rrr�test_exceptionz
s@
�z!ContextManagerTest.test_exceptioncCsjz4t�td��}t�Wd�n1s(0YWnYn0|�tj�t�dd�|�|j	d�dS)Nrrz-context manager wrote an end-of-archive blockr)
rrr�r"r=rJrKr�r�r*r�rrr�test_no_eof�
s&�zContextManagerTest.test_no_eofcCsFt�td��Wd�n1s"0Y|�tj�t�dd�dS)Nrrz-context manager wrote no end-of-archive block)rrr�r�rJrKr�rrrr�test_eof�
s
�zContextManagerTest.test_eofc	Cs�ttd��p}z6tj|dd��}t�Wd�n1s60YWnYn0|�|jd�|�|jd�Wd�n1s�0YdS)Nr�rr�zexternal file object was closedr)rr�rr"r�r*r�r�rrrr��
s&zContextManagerTest.test_fileobjN)	rrrr r!r$r%r&r�rrrrrj
s		rzrequires os.link to be missingc@s�eZdZdd�Ze�eejd�d�dd��Z	e�eejd�d�dd��Z
e�eed	�d
�dd��Ze�eed	�d
�d
d��ZdS)�LinkEmulationTestcCs^|j�|t�ttj�t|�d��}|��}Wd�n1s@0Y|�t	|�t
�dSr�)r3rHrIrrJrKrLr<r=r
r@)rrlr�r
rrr�_test_link_extraction�
s&z'LinkEmulationTest._test_link_extraction�islinkz3Skip emulation - has os.path.islink but not os.linkcCs|�d�dS)Nrq�r(rrrr�test_hardlink_extraction1�
sz+LinkEmulationTest.test_hardlink_extraction1cCs|�d�dS)Nrtr*rrrr�test_hardlink_extraction2�
sz+LinkEmulationTest.test_hardlink_extraction2r�z Skip emulation if symlink existscCs|�d�dS)Nrwr*rrrr�test_symlink_extraction1�
sz*LinkEmulationTest.test_symlink_extraction1cCs|�d�dS)Nryr*rrrr�test_symlink_extraction2�
sz*LinkEmulationTest.test_symlink_extraction2N)
rrrr(r/r8r6rJrKr+r,r-r.rrrrr'�
s"�
�
�
�r'c@s$eZdZdd�Zdd�Zdd�ZdS)�Bz2PartialReadTestc	sxG�fdd�dtj��t�t�d����}tt|�d�D]8}ztj	�|d|��|d�Wq:tj
ypYq:0q:dS)Ncs0eZdZdZ��fdd�Z��fdd�Z�ZS)z9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOFcs4|jrtd��|��t|���k|_t�|��|�S)Nz(infinite loop detected in tarfile.open())�hit_eof�AssertionErrorr^r>r��superr<)rrZ��	MyBytesIO�	__class__rrr<�
sz>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readcsd|_t�|�j|�Sr�)r0r2r]r�r3rrr]�
sz>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)rrrr0r<r]�
__classcell__r�r4)r5rr4�
sr4r�rWr�)rr�r%�compressrr�r��ranger>rr�)rrr
rArr7r�_test_partial_input�
sz&Bz2PartialReadTest._test_partial_inputcCs|�d�dS)NrE�r:rrrr�test_partial_input�
sz%Bz2PartialReadTest.test_partial_inputcCs|�d�dS)NrMr;rrrr�test_partial_input_bz2�
sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrr:r<r=rrrrr/�
sr/cCsZzddl}ddl}Wnty(YdS0|�d�ddkr@dS|�d�ddkrVdSdS)NrF�rootT)r�r��ImportError�getpwuid�getgrgid)r�r�rrr�root_is_uid_gid_0�
srB�chownzmissing os.chown�geteuidzmissing os.geteuidc@s�eZdZedd��Zeedd���Zej�	d�ej�	d�ej�	d�dd	����Z
ej�	d�ej�	d�ej�	d�d
d����Ze�e
�d�ej�	d�ej�	d�ej�	d�d
d�����Zej�	d�dd��ZdS)�NumericOwnerTestcCs�t�d�}|ddtj|f|ddtjdf|ddtj|fg}t�td��X}|D]B\}}}}	}
t�|�}||_||_	d	|_
d	|_|	|_|�
||
�qJWd�n1s�0YtS)
Nscontent�c�b�M�L�X�Wrr>)rr�rr/r�rr�r�rcrdr�rer�r�)�
filename_1�	dirname_1�
filename_2rCrf�tarflrlrcrd�typ�contentsr�rrr�_make_test_archive�
s
�
,z#NumericOwnerTest._make_test_archiveccsnd|_d}d}|}|}tj�||�}t�|||�}t�|��}||||fVWd�n1s`0YdS)Nrznumeric-owner-testfiler�)r�rJrKrLrErRrr)�mock_geteuidZfname�dirnamerLrMrNZtar_filenamerOrrr�_setup_tests�zNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc
Cs�|�|��8\}}}}|j|tdd�|j|tdd�Wd�n1sH0Ytj�t|�}tj�t|�}	|jtj�	|dd�tj�	|	dd�gdd�dS)NT�Z
numeric_ownerrFrGrJrK�Z	any_order)
rUrHrIrJrKrL�assert_has_callsr/r0�call)
rrS�
mock_chmod�
mock_chownrOrL�_rN�f_filename_1�f_filename_2rrr�test_extract_with_numeric_owner(s.��z0NumericOwnerTest.test_extract_with_numeric_ownercCs�|�|��&\}}}}|jtdd�Wd�n1s60Ytj�t|�}tj�t|�}	tj�t|�}
|jtj�	|dd�tj�	|	dd�tj�	|
dd�gdd	�dS)
NTrVrFrGrHrIrJrKrW)
rUr	rIrJrKrLrXr/r0rY)rrSrZr[rOrLrMrNr]Zf_dirname_1r^rrr�"test_extractall_with_numeric_owner;s,��z3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"cCsb|�|��(\}}}}|j|tdd�Wd�n1s80Ytj�t|�}|�|dd�dS)NFrVr)rUrHrIrJrKrLZassert_called_with)rrSrZr[rOrLr\r]rrr�"test_extract_without_numeric_ownerSs.z3NumericOwnerTest.test_extract_without_numeric_ownerc	CsL|�|��.\}}}}|�t|j|tdd�Wd�n1s>0YdS)NFT)rUr�r�rHrI)rrSrOrLr\rrr�test_keyword_onlybs�z"NumericOwnerTest.test_keyword_onlyN)rrrr�rRrrUr/r0r1r_r`r5rBrarbrrrrrE�
s,	






�




rEc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ReplaceTestscCsN|j�d�}|jdd�}|�|jd�|�|jd�|�|j�d�jd�dS)Nr8z
misc/otherr-)r3r:r�r=rl�rr�replacedrrr�test_replace_namejs�zReplaceTests.test_replace_namecCsN|j�d�}|��}d|jd<|�|jdd�|�|j�d�jdd�dS)Nr��not-barrer|�r3r:r�r�r=rdrrr�test_replace_deeprs
�zReplaceTests.test_replace_deepcCsR|j�d�}|jdd�}d|jd<|�|jdd�|�|j�d�jdd�dS)Nr�F)Zdeeprgrerhrdrrr�test_replace_shallowzs
�z!ReplaceTests.test_replace_shallowc	Cs~|j�d�}dD]h}|j|d��H|jfi|di��}|�t||�d�|�t||�d�Wd�q1sn0YqdS)Nr8)rlr�rrwrcrdr�re��	attr_name)r3r:r�r�r=r�r�)rrrlrerrr�test_replace_all�szReplaceTests.test_replace_allcCsF|j�d�}|�t��|jdd�Wd�n1s80YdS)Nr8i�[)r�)r3r:r�r�r�)rrrrr�test_replace_internal�sz"ReplaceTests.test_replace_internalN)rrrrfrirjrmrnrrrrrcis
	rcc@steZdZdZedd��Zedd��Zdd�Zedd	��Z	d
d�Z
dd
�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�NoneInfoExtractTestsNcsjtjtddd�}t�t�d�_d|_|j�j�j	d�|�
�t�fdd�t��j��d	�D���_
dS)
NrEr/r0Zextractall_ctrlr�r�c3s|]}|��j�VqdSr)�relative_to�control_dir�r
�pr7rr�	<genexpr>�s�z2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>�**/*)rrrr�r�rIrrrr	�extraction_filterr5�set�glob�
control_paths)r5r3rr7rr6�s�zNoneInfoExtractTests.setUpClasscCst�|j�dSr)�shutilrrrr7rrrr8�sz"NoneInfoExtractTests.tearDownClasscs4t�fdd�t����d�D��}|�|j|�dS)Nc3s|]}|���VqdSr)rqrs�r�rrru�s�z;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>rv)rxr�r�ryr=rz)rr�Z	got_pathsrr|r�check_files_present�s�z(NoneInfoExtractTests.check_files_presentcgs�t�t�d}d|j_|j��D]}|D]}t||d�q(q t�|��0|jj	|dd�|�
|�|VWd�n1s|0YdS)NZextractall_nonerrrp)r�r�rIr3rr��setattrrr#r	r})r�
attr_namesrrrlrrr�extract_with_none�s
z&NoneInfoExtractTests.extract_with_nonecCs�t�t���j}|�d���}t�|��d�D]n}|j|d��Nz|��j}Wntyh|�	�sd�Yn0|�
|��j|�Wd�q,1s�0Yq,Wd�n1s�0YdS)Nr�rvr )r�r�rIr�st_mtimer�ryr�r��
is_symlinkZassertGreaterEqual)rZnowrrKr�rrr�test_extractall_none_mtime�sz/NoneInfoExtractTests.test_extractall_none_mtimec
Cs�t�t���j}t�t�d}|�d�|��j}|�d���}t�|��d�D]f}|j|d��F|�	�r||�
|��j|�n|��r�|�
|��j|�Wd�qN1s�0YqNWd�n1s�0YdS)N�regular_filerrrvr )r�r�rIrr�
write_textr�ryr��is_dirr=�is_file)rZdir_moder�Zregular_file_moderrKrrr�test_extractall_none_mode�s

�z.NoneInfoExtractTests.test_extractall_none_modecCs.|�d��Wd�n1s 0YdS)Nrc�r�rrrr�test_extractall_none_uid�sz-NoneInfoExtractTests.test_extractall_none_uidcCs.|�d��Wd�n1s 0YdS)Nrdr�rrrr�test_extractall_none_gid�sz-NoneInfoExtractTests.test_extractall_none_gidcCs.|�d��Wd�n1s 0YdS)Nr�r�rrrr�test_extractall_none_uname�sz/NoneInfoExtractTests.test_extractall_none_unamecCs.|�d��Wd�n1s 0YdS)Nrer�rrrr�test_extractall_none_gname�sz/NoneInfoExtractTests.test_extractall_none_gnamecCs4|�dddd��Wd�n1s&0YdS)Nrcrdr�rer�rrrr�test_extractall_none_ownership�sz3NoneInfoExtractTests.test_extractall_none_ownership)rrrrwrFr6r8r}rr�r�r�r�r�r�r�r�rrrrro�s



roc@seZdZdZdS)�NoneInfoExtractTests_Datar
N�rrrrwrrrrr��sr�c@seZdZdZdS)�!NoneInfoExtractTests_FullyTrustedrNr�rrrrr��sr�c@seZdZdZdS)�NoneInfoExtractTests_Tarr3Nr�rrrrr��sr�c@seZdZdZdS)�NoneInfoExtractTests_DefaultNr�rrrrr��sr�c@seZdZdd�Zdd�ZdS)�NoneInfoTests_MisccCst��}tjtjtjfD]�}|j|d���tj|d|d�}|�t	�}z|�
|�Wn tyr|tjkrln�Yn�0dD]|}|j|d��\|jfi|di��}|�
t|���|�
|�Wd�n1s�0YWd�qx1s�0YqxWd�q1�s0YqdS)N)�	tarformatr)r�rr)r�rrcrdr�rerk)rr�rr�rr�r�rr�rr�r"r�r�r�)r�bior�r3rBrlrerrr�test_add�s(�

�zNoneInfoTests_Misc.test_addc
Cs�dhdhdhdhdhdhddhddhfD�]�}|j|d����tjtdd	���^}tjt��d
dd�}t�t	d
|��|�
�Wd�n1s�0Y|��D]}|D]}t||d�q�q�tjt��d
dd�}t�t	d
|��|�
�Wd�n1s�0Yt
|������|�������D�]p\}}|dhk�r^t�d|��r^|�|d��q*|dhk�r�t�d|��r�|�|d��q*|dhk�r�t�d|��r�|�|d��q*|dhk�r|�d��r|�d�\}	}
|�d�\}}|�||
�|�|d��q*|dhk�rR|�d��rR|�d�\}	}
|�d�\}}|�||	�|�|d��q*|dhk�r�|�d��r�|�d�\}	}
|�d�\}}|�||
�|�|d�n�|dhk�r�|�d��r�|�d�\}	}
|�d�\}}|�||	�|�|d�n�|ddhk�r>|�d��r>|�d�\}	}
|�d�\}}|�||
�|�|d�n\|ddhk�r�|�d��r�|�d�\}	}
|�d�\}}|�||	�|�|d�n|�||��q*Wd�n1�s�0YWd�q(1�s�0Yq(dS)Nr�rrcrdr�re)rr/rr�r�r�r�s2003-01-\d\ds
????-??-??s\d\d:\d\d:\d\ds??:??:??s.([r-][w-][x-]){3}s
??????????)�tarfile/�lars/�foo/�/s[0-9]+)�/tarfile�/users�/bar�1000/sNone�/100)r�r�r�r�)r�r�r�r�)r�rrrrrNr�rr�r�rTr�r~r,r�r�r��re�matchr=r�r��endswith)
rrr3Ztio_prevrrlZtio_newr�gotZexp_userZ	exp_groupZgot_userZ	got_grouprrrr�s��
�&&�������zNoneInfoTests_Misc.test_listN)rrrr�r�rrrrr��sr�cCs�|dd�}tjdd�|dtjdd�|dBtjdtjtjBtjd�|dBtjdd�|dBtjdd�|d	BtjdtjtjBtjd�|d
Btj	dd�|dBtj
dd�|dBtjdtjtjBtjd
�|dB}|S)z�Inverse of `stat.filemode` (for permission bits)

    Using mode strings rather than numbers makes the later tests more readable.
    rWNr)rE�-)rr�)rAr�ra�SrZrz��r��)rAr�r��Tr�)
r�S_IRUSR�S_IWUSR�S_IXUSR�S_ISUID�S_IRGRP�S_IWGRP�S_IXGRP�S_ISGID�S_IROTH�S_IWOTH�S_IXOTH�S_ISVTX)rZstr_mode�resultrrr�_filemode_to_int[sF�
�����
���
��
����r�c@sFeZdZdZdd�Zdd�Zdd�Zdddddd	�d
d�Zdd
�ZdS)�ArchiveMakerz�Helper to create a tar file with specific contents

    Usage:

        with ArchiveMaker() as t:
            t.add('filename', ...)

        with t.open() as tar:
            ... # `tar` is now a TarFile with 'filename' in it!
    cCst��|_dSr)rr�r�rrrrr)�szArchiveMaker.__init__cCstjd|jd�|_|S)Nrr�)rrr��tar_wrrrr�	__enter__�szArchiveMaker.__enter__cGs |j��|j��|_d|_dSr)r�r5r�r�rQ)rr�rrr�__exit__�s
zArchiveMaker.__exit__N)r��
symlink_to�hardlink_torr?c
Ks�t|�}t�|�jfi|��}|dur,||_|r:t|�|_|durRtj}t|�|_|durjtj	}t|�|_|�
d�r�|dur�tj}|dur�||_|�
�r�t�t|j��}	nd}	|j�||	�dS)z5Add a member to the test archive. Call within `with`.Nr�)r�rr�r�r?r�rr�rwrr�r�r�rBrr�r�r�r�)
rrlr�r�r�rr?rhrBr�rrrr��s(


zArchiveMaker.addcKs t�|j�}tjfd|i|��S)z9Open the resulting archive as TarFile. Call after `with`.r�)rr�rQrr)rrhr�rrrr�szArchiveMaker.open)	rrr�__doc__r)r�r�r�rrrrrr�ws
�r�c@s
eZdZe�e�dZedZedd��Z	d=dd�Z
d>d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Z d5d6�Z!d7d8�Z"d9d:�Z#d;d<�Z$dS)?�TestExtractionFilters�outerdirrccs�t�|j���z|j|j|d�Wn2tyT}z||_t�|_WYd}~n0d}~00d|_t|j�	d��|_|j�
|j�zdVW|��n
|��0|jr�|j�|�|jt��Wd�n1s�0YdS)a}Extracts `tar` to `self.destdir` and allows checking the result

        If an error occurs, it must be checked using `expect_exception`

        Otherwise, all resulting files must be checked using `expect_file`,
        except the destination directory itself and parent directories of
        other files.
        When checking directories, do so before their contents.
        rpNrv)
rr#r�r	rr"�raised_exceptionrx�expected_pathsry�discardr5r=)rr3r�r�rrr�
check_context�sz#TestExtractionFilters.check_contextNc
Csj|jr|j�t�tj�|j|��}|�||j�|j�	|�|durrt
jdkrrt�
t�|��j��}|�||�|dur�t|t�r�|�d�r�tj}|dur�|j|��}t�|�}||kr�|�|�|��nb|tjks�|dur�|�|���n@|tjk�r|�|���n$|tjk�r(|�|���nt|��|du�rL|�|��j|�|j D]}	|j�!|	��qRdS)z'Check a single file. See check_context.Nrr�)"r�r�r�rJrK�normpathrr�r��remover�rrr��S_IMODErr=rr�r�rr��readlinkr��samefiler/r�r�r��is_fifo�NotImplementedErrorr��parentsr�)
rrlr�r�rr?rKr�r�parentrrr�expect_file�s4


z!TestExtractionFilters.expect_filer�cCsF|�||�� |jdur|j�Wd�n1s20Yd|_dSr)r�r�)r�exc_typeZ
message_rerrr�expect_exception�s
$z&TestExtractionFilters.expect_exceptionc	Csxt��}|�d�Wd�n1s&0YdD]>}|�|��|��|�d�Wd�q41sh0Yq4dS)Nz
benign.txt)rr3r
�r�r�r�rr��r�arcr�rrr�test_benign_file
s
(z&TestExtractionFilters.test_benign_filec	Cs�t�� }|�|jd�Wd�n1s,0Y|�|��d��|�d�Wd�n1sf0YdD]t}|�|��|��Pt|j��d�r�t|j��d�}|�|�d��n|�	t
jd�Wd�qt1s�0YqtdS)Nzescaped.evilrz../escaped.evil�r3r
r�z
/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r�r�r�r�rr�r�r��lstripr�rr�)rr�r�Zouterdir_strippedrrr�
test_absolute	
s.(�z#TestExtractionFilters.test_absolutecCs
t��6}|jddd�|jddd�|�d�Wd�n1sB0Yt���rR|�|��d��Z|jdur�|�t�Wd�dS|j	ddd�|j	ddd�|�	d�Wd�n1s�0Y|�|��d	��|�t
jd
�Wd�n1�s0Y|�|��d��|�t
jd�Wd�n1�sF0Yn�|�|��d��|�	d�Wd�n1�s�0Y|�|��d	��|�	d�Wd�n1�s�0Y|�|��d��|�	d�Wd�n1�s�0YdS)
N�currentr��r�r�z
current/..�parent/evilrr�r3�T'parent/evil' would be extracted to ['"].*evil['"], which is outside the destinationr
zK'parent' would link to ['"].*outerdir['"], which is outside the destination)
r�r�r�can_symlinkr�rr�r�r>r�rr�r��rr�rrr�test_parent_symlink"
s8(


(�$�&**z)TestExtractionFilters.test_parent_symlinkcCsNt��r�tj�td�}t�|�t�dtj�|d��ttj�|ddd�d��Wd�n1sd0Ytj�	tj�|d��r�d}n&tj�	tj�|dd��r�d}nt
d	��t��6}|jddd
�|jddd
�|�d�Wd�n1s�0Y|�
|��d
��Vt���r@|jddd
�|jddd
�|�d�n|�d�|�d�Wd�n1�sj0Y|�
|��d��>t���r�|�tjd�n|�d�|�d�Wd�n1�s�0Y|�
|��d��Tt���r|�r|�tjd�n|�tjd�n|�d�|�d�Wd�n1�s@0YdS)NZresolution_testr�r�r�r�rTFz#Could not determine link resolutionr�zcurrent/parentr�rr�r�zcurrent/r3r�r
zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)rr�rJrKrLrIr�r�rr	r1r�r�r�r�r�rr�r�)rZtestpathZdotdot_resolves_earlyr�rrr�test_parent_symlink2T
sV
(

*
�
*
��
z*TestExtractionFilters.test_parent_symlink2cCs4t��*}|jd|jd�|�d�Wd�n1s60Y|�|��d��>t��rv|jd|jd�|�d�n
|�d�Wd�n1s�0Y|�|��d��2t��r�|�t	j
d�n
|�d�Wd�n1s�0Y|�|��d��|�t	jd	�Wd�n1�s&0YdS)
Nr�r�r�rr�r3r�r
�&'parent' is a link to an absolute path)r�r�r�r�rrr�r�r�rr�r�r�rrr�test_absolute_symlink�
s(((�(�z+TestExtractionFilters.test_absolute_symlinkcCs�t��$}|jd|jdd�Wd�n1s00Y|�|��d��|�td�Wd�n1sl0Y|�|��d��|�td�Wd�n1s�0Y|�|��d��|�tjd�Wd�n1s�0YdS)	Nr�r��r�rz.*foo. not foundr3r
r�)	r�r�r�r�rr�r�rr�r�rrr�test_absolute_hardlink�
s2**�z,TestExtractionFilters.test_absolute_hardlinkc	Cs�t��}|jddd�Wd�n1s*0Yzf|j|��dd��@t��rzt|jt�rj|�	t�qz|j
ddd�nWd�n1s�0YWnty�Yn0dD]B}|�|��|��|�	tjd�Wd�q�1s�0Yq�dS)N�../mooz..//tmp/moor�rrpr�zH'../moo' would be extracted to '.*moo', which is outside the destination)
r�r�r�rrr�rr�r>r�r�rr�r�rrr�test_sly_relative0�
s","�z(TestExtractionFilters.test_sly_relative0c	Cs�t��(}|�d�|jddd�Wd�n1s40Y|�|��d��6|jdtjd�t��rv|jdd	d�Wd�n1s�0Yd
D]B}|�|��|��|�	tj
d�Wd�q�1s�0Yq�dS)Nztmp/z
tmp/../../mooztmp/../..//tmp/moor�r�tmp�r�r�ztmp/../../tmp/moor�zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r�r�r�rr�rr�rr�r�r�r�rrr�test_sly_relative2�
s
,,�z(TestExtractionFilters.test_sly_relative2c	Cs�t��P}|jddd�|jdtj�dd�d�|jdtj�d	dd�d
�Wd�n1s\0YdD]x}|�|��|��T|jddd�|jddd�t�	�r�|jdddd
�n|jddd�Wd�qj1s�0YqjdS)N�targetdir/targetrzrq�linkdir/hardlinkZ	targetdirr�r��linkdir/symlinkr�r��r3r
rz../targetdir/target�r?r��
r�r�rJrKrLr�rr�rr�r�rrr�test_deep_symlink
s"��&�z'TestExtractionFilters.test_deep_symlinkc	Cs&t��`}|jddd�|jdtj�dd�d�|jddd	�|jd
dd�|jddd�Wd�n1sl0Yd
D]�}|�|��|���|jddd	�|jd
dd	�|jddd	�t�	�r�|jdddd�|jdddd�n|jddd	�|jddd	�Wd�qz1�s0YqzdS)Nr�Zhardlinkr�Zsymlink2ZlinkdirZ	hardlink2r�rzrqr�r�zlinkdir/hardlink2r�r�r�r�rrr�test_chains$s,�,��z!TestExtractionFilters.test_chainsc

Cs*t��r}|jddd�|jddd�|jddd�|jdd	d�|jd
dd�|jdd
d�|jddd�Wd�n1s~0Ytj�td�}t|d��Wd�n1s�0Yz�t�|�jtj	Btj
BtjB}zt�||�WnHt
�y8}z.|jttdd�k�r"|�d�n�WYd}~n
d}~00t�|�j}|tj	@�rVdnd}|tj@�rjdnd}|tj
@�r~dnd}Wt�|�nt�|�0t�|�t�|�jtj	Btj
BtjB}t�||�t�|�j}|tj	@�r�dnd}	|tj@�rdnd}
|tj
@�rdnd}t�|�|�|��d���|jdd|�d|�d|��d�|jddd�|jddd�|jdd	d�|jd
dd�|jdd|�d|	��d�|jdd|
�d|�d|	��d�Wd�n1�s�0Y|�|��d��r|jddd�|jddd�|jddd�|jdd	d�|jd
dd�|jddd�|jddd�Wd�n1�sp0Y|�|��d���t�t�|j��j��}|jddd�|jddd�|jdd d�|jdd!d�|jd
d"d�|jd|d�|jd|d�Wd�n1�s0YdS)#NZall_bitsz
?rwsrwsrwtr�Z	perm_bitsz
?rwxrwxrwxZexec_group_otherz
?rw-rwxrwxZread_group_onlyz
?---r-----Zno_bitsz
?---------zdir/z
?---rwsrwtz
dir_all_bits/ztmp.filerZEFTYPErz?chmod() failed with EFTYPE: regular users cannot set sticky bitr�rArarz?rwr�z?---rwr3z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr
z
?rw-r--r--z
?rw-r-----z
?rw-------)r�r�rJrKrLrIrrrr�r�r��chmodr��errnor�r=rr�r�r�r�r�r�r�)
rr�Ztmp_filenameZnew_moder�Zgot_modeZ_t_fileZ
_suid_fileZ
_sgid_fileZ_t_dirZ	_suid_dirZ	_sgid_dirZnormal_dir_moderrr�
test_modes=s�,
���

���
��&.
�z TestExtractionFilters.test_modesc	Cs�t�� }|jdtjd�Wd�n1s,0YdD]P}|�|��|��,ttd�rl|jdtjd�nWd�q:1s�0Yq:|�|��d��|�	tj
d�Wd�n1s�0YdS)Nr�r�)rr3�mkfifor
z'foo' is a special file)r�r�rr�r�rr6rJr�r�r�r�rrr�	test_pipe�s.
 �zTestExtractionFilters.test_pipec	Cs�tjtjtjfD]�}t�d�}||_t�|d�}|�||�t�|d�}|�	|j|�|�
tj��}t�|d�Wd�n1s�0Y|�
|jjtj�|�	|jjjd�qdS)Nr�r)rr�r�r.r�r�r�rxr�r=r�r�r�r�r#rBrl)rZspecial_typerBZtrustedr3�cmrrr�test_special_files�s
*z(TestExtractionFilters.test_special_filescCsVtj�t��6}|��D]}t�|d�}|�||�qWd�n1sH0YdS�Nr)rrrrr�r�rx�rr3rBZfilteredrrr�test_fully_trusted_filter�sz/TestExtractionFilters.test_fully_trusted_filtercCsjtj�t��J}|��D]0}t�|d�}|�|j|j�|�|j|j�qWd�n1s\0YdSr�)	rrrrr�r�rxrlr�r�rrr�test_tar_filter�s
z%TestExtractionFilters.test_tar_filterc
Cs�tj�t��h}|��D]N}zt�|d�}WntjyBYqYn0|�|j|j�|�|j	|j	�qWd�n1sz0YdSr�)
rrrrr�r�r�rxrlr�r�rrr�test_data_filter�s
z&TestExtractionFilters.test_data_filterc	Cs�t��}|�d�Wd�n1s&0Yt�|��J|�|��d��|�d�Wd�n1sl0YWd�n1s�0YdS)z6Ensure the default filter does not warn (like in 3.12)r�N)r�r�rZcheck_no_warningsr�rr�r�rrr�test_default_filter_warns_not�s
(z3TestExtractionFilters.test_default_filter_warns_notcCsTt�td�}dd�}||_|�|d��|�d�Wd�n1sF0YdS)NrEcSs|jdkr|SdSdS�Nr8r-�rBrKrrr�
strict_filter�s
zSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filterr8)rrrrwr�r�)rr3rrrr�&test_change_default_filter_on_instance�s
z<TestExtractionFilters.test_change_default_filter_on_instancec	Cs�dd�}t�td�}t�tjdt|���F|�|d��|�d�Wd�n1sV0YWd�n1st0YdS)NcSs|jdkr|SdSdSr�r-rrrrr�s
zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filterrErwr8)rrrrr�r�r�r�)rrr3rrr�#test_change_default_filter_on_class�s
�z9TestExtractionFilters.test_change_default_filter_on_classcCsVGdd�dtj�}|td�}|�|d��|�d�Wd�n1sH0YdS)Nc@seZdZdd�ZdS)zQTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclasscSs|jdkr|SdSdSr�r-�rrBrKrrrrw�s
zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filterNr�rrrr�TarSubclass�srrEr8)rrrr�r�)rrr3rrr�&test_change_default_filter_on_subclass�s
z<TestExtractionFilters.test_change_default_filter_on_subclasscCsLt�td�}d|_|�|d��|�t�Wd�n1s>0YdS)NrEr
)rrrrwr�r�r�r�rrr�$test_change_default_filter_to_string�sz:TestExtractionFilters.test_change_default_filter_to_stringcs��fdd�}t��.}|�d�|�d�|�d�Wd�n1sF0Y��|��|��$��d���d�Wd�n1s�0YdS)Ncs6��|�j�|jdkr$|jdd�S|jdkr2dS|S)N�	move_this�movedr-�ignore_this)rxrrlr�rrrr�
custom_filter�s

z?TestExtractionFilters.test_custom_filter.<locals>.custom_filterrr
Zkeepr	r�)rrr�rrr�test_custom_filter�s

(
z(TestExtractionFilters.test_custom_filtercCsnt��}|�d�Wd�n1s&0Y|�|��d��|�t�Wd�n1s`0YdS)Nr�zbad filter name)r�r�r�rr�r�r�rrr�test_bad_filter_name
s(z*TestExtractionFilters.test_bad_filter_namec	Cs�Gdd�d�}t��2}|�d�|jddd�|�d�Wd�n1sL0Y|��J}|�|��|��|�d�Wd�n1s�0YWd�n1s�0Y|�|jd�|�|jd�dS)	Nc@s$eZdZdd�Zdd�Zdd�ZdS)zBTestExtractionFilters.test_stateful_filter.<locals>.StatefulFiltercSs
d|_|SrF)�num_files_processedrrrrr�szLTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__enter__cSs:zt�||�}Wntjy&YdS0|jd7_|S)NrW)rr�r�rrrrr�__call__szKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__cWs
d|_dS)NT)�done)r�exc_inforrrr�$szKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__N)rrrr�rr�rrrr�StatefulFiltersrZgoodZbadr�r�rZT)r�r�r�rr�r=rr)rrr�rrrr�test_stateful_filters
(Fz*TestExtractionFilters.test_stateful_filtercCsddd�}dd�}dd�}dd�}d	d
�}t��}|�d�Wd�n1sN0Y|�|jdd
�|��|�d�Wd�n1s�0Y|�|jdd
�|��|�d�Wd�n1s�0Y|�|jdd
�|��|�d�Wd�n1�s
0Y|�|jdd
�|��|�tj�Wd�n1�sL0Y|�|jdd
�|��|�t�Wd�n1�s�0Y|�|jdd
�|��|�d�Wd�n1�s�0Y|�|jdd
�|��|�tj	�Wd�n1�s0Y|�|jdd
�|��|�t
�Wd�n1�sN0Y|�|jdd
�|��|�tj�Wd�n1�s�0Y|�|jdd
�|��|�t�Wd�n1�s�0Y|�|jdd
�|��|�tj�Wd�n1�s0Y|�|jdd
�|��|�tj	�Wd�n1�sT0Y|�|jdd
�|��|�t
�Wd�n1�s�0Y|�|jdd
�|��|�tj�Wd�n1�s�0Y|�|jdd
�|��|�t�Wd�n1�s0Y|�|jdd
�|��|�t�Wd�n1�sV0YdS)NcSst�d��dS)Nzfailed with ExtractError)r�ExtractErrorrrrr�extracterror_filter2szBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filtercSst�d��dS)Nzfailed with FilterError)rr�rrrr�filtererror_filter4szATestExtractionFilters.test_errorlevel.<locals>.filtererror_filtercSstd��dS)Nzfailed with OSError)r�rrrr�oserror_filter6sz=TestExtractionFilters.test_errorlevel.<locals>.oserror_filtercSst�d��dS)Nzfailed with base TarError)r�TarErrorrrrr�tarerror_filter8sz>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filtercSstd��dS)Nzfailed with ValueError)r�rrrr�valueerror_filter:sz@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filterr�rr�rWrZzboo!)
r�r�r�rr�r�rrr�r�r�rr�)rrrrrrr�rrr�test_errorlevel1sN(((*,**,*,*,,*,*z%TestExtractionFilters.test_errorlevel)NNNN)r�)%rrrr�r�rIr�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr
rrrrrrr��sB
�
(
2V"P
r�c	Cs�t�t�t�t�tgattd��}|��}Wd�n1sB0Yt	t
tfD]Z}|jrVt�|j�t�|j�|�|jd��}|�
|�Wd�qV1s�0YqVdS)NrVr�)rrrIrJ�makedirsrr�rr<r r$r(r�r�)rCr
�cr3rrr�setUpModuleys

&rcCstj�t�rt�t�dSr)rJrKr	rIrrrrrr�tearDownModule�sr�__main__)�r�r�rJrZhashlibr�
contextlibr�randomrr�r{r��warningsrr/Z
unittest.mockrr]rZtest.supportrrr#r?r2r%r+r
rKr�ZTESTFNrIrr�rrLr"r&r*r�r
r@r�rZ
requires_gzipr Zrequires_bz2r$Z
requires_lzmar(r-ZTestCaser7r�r�r�r�r�r�r�r�r�r9r:r;r?r@rNrOrPrQrZr[r_r`r�r�r�r�r�r�r�rrrrrrr,r2rGrLrNrQr5r6rRrWrkr{r�r�r�r�r�r�r�r�r�r�rr8r'r/rBrErcror�r�r�r�r�r�r�r�rrrr�rrrr�<module>s*




��
Pw=(a*;V9'R.Z			*QO@;Y^:!v(^��^6Q


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists