Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_tarfile.cpython-38.opt-2.pyc
U

>��gG:�@sNddlZddlZddlZddlmZddlmZddlmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlmZzddlZWnek
r�dZYnXzddlZWnek
r�dZYnXzddlZWnek
�rdZYnXdd�Zej�ej�d	Zed
Ze�d�Z ej�!ed�Z"ej�!ed
�Z#ej�!ed�Z$ej�!ed�Z%ej�!ed�Z&dZ'dZ(Gdd�d�Z)ej*Gdd�d��Z+ej,Gdd�d��Z-ej.Gdd�d��Z/Gdd�de)�Z0Gdd�de0ej1�Z2Gdd �d e+e2�Z3Gd!d"�d"e-e2�Z4Gd#d$�d$e/e2�Z5Gd%d&�d&e0ej1�Z6Gd'd(�d(e+e6�Z7Gd)d*�d*e-e6�Z8Gd+d,�d,e/e6�Z9Gd-d.�d.e0�Z:Gd/d0�d0e:�Z;Gd1d2�d2e;ej1�Z<Gd3d4�d4e+e;ej1�Z=Gd5d6�d6e-e;ej1�Z>Gd7d8�d8e/e;ej1�Z?Gd9d:�d:e:ej1�Z@Gd;d<�d<e+e@�ZAGd=d>�d>e-e@�ZBGd?d@�d@e/e@�ZCGdAdB�dBe)ej1�ZDGdCdD�dDe+eD�ZEGdEdF�dFe-eD�ZFGdGdH�dHe/eD�ZGGdIdJ�dJe0ej1�ZHGdKdL�dL�ZIGdMdN�dNeIe0ej1�ZJGdOdP�dPeIe0ej1�ZKGdQdR�dRe)�ZLGdSdT�dTeLej1�ZMGdUdV�dVe+eM�ZNGdWdX�dXe-eM�ZOGdYdZ�dZe/eM�ZPGd[d\�d\eLej1�ZQGd]d^�d^e+eQ�ZRGd_d`�d`e-eQ�ZSGdadb�dbe/eQ�ZTGdcdd�ddej1�ZUGdedf�dfeLej1�ZVGdgdh�dhe+eV�ZWGdidj�dje-eV�ZXGdkdl�dle/eV�ZYGdmdn�dneV�ZZe�[e\edo�dp�Gdqdr�drej1��Z]Gdsdt�dteU�Z^Gdudv�dv�Z_Gdwdx�dxe_ej1�Z`Gdydz�dze_ej1�ZaGd{d|�d|e_ej1�ZbGd}d~�d~�ZcGdd��d�ecej1�ZdGd�d��d�e+ecej1�ZeGd�d��d�e-ecej1�ZfGd�d��d�e/ecej1�ZgGd�d��d�ej1�ZhGd�d��d�ej1�ZiGd�d��d�ej1�ZjGd�d��d�ej1�Zke�le\edo�d��Gd�d��d�e0ej1��ZmGd�d��d�e-ej1�Znd�d��Zoe�[e\ed��d��e�[e\ed��d��Gd�d��d�ej1���ZpGd�d��d�e0ej1�ZqGd�d��d�e0�ZrGd�d��d�erej1�ZsGd�d��d�erej1�ZtGd�d��d�erej1�ZuGd�d��d�erej1�ZvGd�d��d�ej1�Zwd�d��ZxGd�d��d��ZyGd�d��d�ej1�Zzd�d��Z{d�d��Z|e}d�k�rJe�~�dS)��N)�sha256)�contextmanager)�Random)�support)�
script_helpercCst|���S�N)r�	hexdigest)�data�r
�0/opt/cppython/lib/python3.8/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��selfr
r
r�mode<szTarTest.modeN)
�__name__�
__module__�__qualname__�tarnamer�io�FileIO�open�tarfile�TarFile�taropen�propertyrr
r
r
rr
6sr
c@s*eZdZeZdZerejndZe	j
jZdS)�GzipTest�gzN)
rrr�gzipnamerr�gzipZGzipFilerrrZgzopenrr
r
r
rr@src@s*eZdZeZdZerejndZe	j
jZdS)�Bz2Test�bz2N)
rrr�bz2namerrr$�BZ2FilerrrZbz2openrr
r
r
rr#Gsr#c@s*eZdZeZdZerejndZe	j
jZdS)�LzmaTest�xzN)
rrr�xznamerr�lzma�LZMAFilerrrZxzopenrr
r
r
rr'Nsr'c@s eZdZdZdd�Zdd�ZdS)�ReadTest�r:cCstj|j|jdd�|_dS)N�	iso8859-1�r�encoding�rrrr�tarrr
r
r�setUpZs�zReadTest.setUpcCs|j��dSr)r2�closerr
r
r�tearDown^szReadTest.tearDownN)rrrrr3r5r
r
r
rr,Vsr,c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�
UstarReadTestc	CsV|j�d�}|j�|��4}|��}|�t|�|jd�|�t|�td�W5QRXdS)N�
ustar/regtype�regular file extraction failed)	r2�	getmember�extractfile�read�assertEqual�len�sizer�sha256_regtype�r�tarinfo�fobjr	r
r
r�test_fileobj_regular_fileds��z'UstarReadTest.test_fileobj_regular_filec	Cs�|j�dt�|j�d�}ttj�td�d��}|��}W5QRX|j�	|��J}t
�|�}|��}|�||d�|�t
|�dd�|�|ddd�W5QRXdS)Nr7�rzfileobj.readlines() failed�r�SzOI will gladly admit that Python is not the fastest running scripting language.
)r2�extract�TEMPDIRr9r�os�path�join�	readlinesr:r�
TextIOWrapperr<r=)rrA�fobj1�lines1rB�fobj2�lines2r
r
r�test_fileobj_readlinesms"
��
�z$UstarReadTest.test_fileobj_readlinesc	Csz|j�dt�|j�d�}ttj�td�d��}|��}W5QRX|j�	|��"}t
t�|��}|�
||d�W5QRXdS)Nr7rDzfileobj.__iter__() failed)r2rGrHr9rrIrJrKrLr:�listrrMr<)rrArNrOrPrQr
r
r�test_fileobj_iters�zUstarReadTest.test_fileobj_iterc		Cs|j�dt�ttj�td�d��}|��}W5QRX|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�W5QRXdS)Nr7�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)r2rGrHrrIrJrKr;r9r:�seekr<�tellr>rLr=�readline)	rrBr	rA�text�s�s1�s2�liner
r
r�test_fileobj_seek�sr
����
����

�
�
�
�zUstarReadTest.test_fileobj_seekc	Csr|j�d��\}t�|�}|���d�}|�t|�t�z|�	d�Wnt
k
rb|�d�YnXW5QRXdS)Nr7r.�dzseeking failed in text mode)r2r:rrMr;�encoder<rr?r\�AttributeError�fail�rrBr	r
r
r�test_fileobj_text�s
zUstarReadTest.test_fileobj_textc
CsD|j�|��.}|j�|��}|�|j|j�W5QRXW5QRXdSr)r2r:r<�name)rZlnktype�regtype�a�br
r
r�_test_fileobj_link�s

�z UstarReadTest._test_fileobj_linkcCs|�dd�dS)N�
ustar/lnktyper7�rorr
r
r�test_fileobj_link1�sz UstarReadTest.test_fileobj_link1cCs|�dd�dS)N�./ustar/linktest2/lnktype�ustar/linktest1/regtyperqrr
r
r�test_fileobj_link2�s�z UstarReadTest.test_fileobj_link2cCs|�dd�dS)N�
ustar/symtyper7rqrr
r
r�test_fileobj_symlink1�sz#UstarReadTest.test_fileobj_symlink1cCs|�dd�dS)N�./ustar/linktest2/symtypertrqrr
r
r�test_fileobj_symlink2�s�z#UstarReadTest.test_fileobj_symlink2cCs|�dd�dS)NZsymtype2r7rqrr
r
r�test_issue14160�szUstarReadTest.test_issue14160N)rrrrCrRrTrdrjrorrrurwryrzr
r
r
rr6bs	
0r6c@seZdZdS)�GzipUstarReadTestN�rrrr
r
r
rr{�sr{c@seZdZdS)�Bz2UstarReadTestNr|r
r
r
rr}�sr}c@seZdZdS)�LzmaUstarReadTestNr|r
r
r
rr~�sr~c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�ListTestcCstj|j|jd�|_dS)N�rr1rr
r
rr3�szListTest.setUpc	s,tjt��ddd�}t�td|���jjdd�W5QRX|���	�}��
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)�decoder2r0rf)rnr`rr
r�conv�sz 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->)
rrM�BytesIOr�	swap_attr�sysr2rS�detach�getvalue�assertIn�assertRegex�assertNotIn)r�tio�outr�r
rr�	test_list�s2
�
�zListTest.test_listc	Cs�tjt��ddd�}t�td|��|jjdd�W5QRX|���	�}|�
|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)rrMr�rr�r�r2rSr�r�r�r�)rr�r�r
r
r�test_list_verboses ���zListTest.test_list_verbosec	Csttjt��ddd�}dd�}t�td|��|jjd||j�d�W5QRX|���	�}|�
d	|�|�d
|�dS)Nr�r�r�css"|��D]}d|jkr|VqdS)NZreg)�
getmembersrk)r2rAr
r
r�members-s
z+ListTest.test_list_members.<locals>.membersr�F)r�r�r�r�)rrMr�rr�r�r2rSr�r�r�r�)rr�r�r�r
r
r�test_list_members+s zListTest.test_list_membersN)rrrr3r�r�r�r
r
r
rr�s%rc@seZdZdS)�GzipListTestNr|r
r
r
rr�8sr�c@seZdZdS)�Bz2ListTestNr|r
r
r
rr�<sr�c@seZdZdS)�LzmaListTestNr|r
r
r
rr�@sr�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonReadTestc	Cs�t�t|j�dd���W5QRXzPzt�t|j�}|��Wn tjk
r^|�d�YnX|�	|�
�g�W5|��XdS)NrD�wz&tarfile.open() failed on empty archive)rr�tmpnamer�replacer4�getnames�	ReadErrorrh�assertListEqualr��rr2r
r
r�test_empty_tarfileFs
z!CommonReadTest.test_empty_tarfilec	Cs*|�td��t�d|j�W5QRXdS)NZxxx)�assertRaisesRegex�FileNotFoundErrorrrrrr
r
r�test_non_existent_tarfileWsz(CommonReadTest.test_non_existent_tarfilec	CsBttd��W5QRX|�tjtjt|j�|�tjtjt�dS�N�wb)rr��assertRaisesrr�rrr
r
r�test_null_tarfile]s
z CommonReadTest.test_null_tarfilec
Cs�td��d��dd�}dD]�}|�td��@}|�|d�t�d�}t|�|_	|�|�
��|�|�W5QRXtjtd	d
d�}z|�|�
�dgd|�W5|��XqdS)
Nr�r[�big)��ar�rW�foorDT)rZignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r�getrandbits�to_bytesrr��writer�TarInfor=r>�tobufr4r�r�)rr	�charrBrAr2r
r
r�test_ignore_zerosfs 

��z CommonReadTest.test_ignore_zeroscCsdD�]}t�td��(}t�d�}d|_|�|t�d��W5QRXttd��}|�|�W5QRXt�t��*}|�	tj
d��|D]}q�W5QRXW5QRXt�t��\}|��}|�	tj
d��|�|t
�W5QRX|�	tj
d��|�|���W5QRXW5QRXqdS)N)r[iXrWi��w:r�rWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)rrr�r�r>�addfilerr��truncater�r��nextrGrHr:r;)rr>r2�trBr
r
r�test_premature_end_of_archive|s"

z,CommonReadTest.test_premature_end_of_archivec
Cs:|�tjd��"t�t�d���}W5QRXW5QRXdS)Nz%file could not be opened successfullyz
recursion.tar)r�rr�rr�findfiler�r
r
r�test_length_zero_header�sz&CommonReadTest.test_length_zero_headerN)	rrrr�r�r�r�r�r�r
r
r
rr�Ds	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,�Zd-S).�MiscReadTestBasecCsdSrr
rr
r
r�requires_name_attribute�sz(MiscReadTestBase.requires_name_attributec
Cst|��t|jd��V}|�|jt�tj||jd��,}|�|jt�|�|jt	j
�|j��W5QRXW5QRXdS�NrU��fileobjr)r�rr�assertIsInstancerk�strrrr<rIrJ�abspath�rrBr2r
r
r�test_no_name_argument�sz&MiscReadTestBase.test_no_name_argumentc	CsZt|jd��}|��}W5QRXt�|�}|�tt|d�tj||j	d�}|�
|j�dS)NrUrkr�)rrr;rr�r�rg�getattrrr�assertIsNonerk�rrBr	r2r
r
r�test_no_name_attribute�s
z'MiscReadTestBase.test_no_name_attributec	Cs\t|jd��}|��}W5QRXt�|�}d|_tj||jd��}|�|j�W5QRXdS)NrUrr�)	rrr;rr�rkrrr�r�r
r
r�test_empty_name_attribute�s
z*MiscReadTestBase.test_empty_name_attributec
Cs`t�|jtj�}t|d��<}|�|jt�tj||jd��}|�	|j�W5QRXW5QRXdSr�)
rIrr�O_RDONLYr�rk�intrrr�)r�fdrBr2r
r
r�test_int_name_attribute�s
z(MiscReadTestBase.test_int_name_attributec
Cs~|��t�|j�}t|d��V}|�|jt�tj||j	d��,}|�|jt�|�
|jtj�|j��W5QRXW5QRXdSr�)
r�rI�fsencoderrr�rk�bytesrrr<rJr�)rrrBr2r
r
r�test_bytes_name_attribute�sz*MiscReadTestBase.test_bytes_name_attributec	Cs.t�|j�}tj||jd��0}|�|jt�|�	|jt
j�t
�
|���W5QRX|�|��0}|�|jt�|�	|jt
j�t
�
|���W5QRXtjj||jd��0}|�|jt�|�	|jt
j�t
�
|���W5QRX|jdk�r*tj|dd��0}|�|jt�|�	|jt
j�t
�
|���W5QRXdS)Nr�rrD)�pathlib�Pathrrrrr�rkr�r<rIrJr��fspathrrr)rrr2r
r
r�test_pathlike_name�s&&&z#MiscReadTestBase.test_pathlike_namec	Cs�ttd��W5QRX|�td��|�td�}W5QRX|�td��|�td�}W5QRX|�td��|�td�}W5QRXdS)Nr�z
mode must be �q�rwr)rr�r��
ValueErrorrr�r
r
r�test_illegal_mode_arg�s
z&MiscReadTestBase.test_illegal_mode_argc
Cs�tj|j|jd�}z>|��|��}|j}|j}|�|��}|�	�}W5QRXW5|��X|�|j��d}|�
|�|j|jd|d��<}|��}|�|j|�|��|�|�|��	�|d�W5QRXW5QRXdS)Nr�r-�rr�zseek back did not work)
rrrrr4r�rk�offsetr:r;r\r<r�)rr2r�rkr��fr	rBr
r
r�test_fileobj_with_offset�s$

�z)MiscReadTestBase.test_fileobj_with_offsetc	CsH|�tjtjt|j�ttd��}|jtjtj||jd�W5QRXdSr�)r�rr�rrr�rrBr
r
r�test_fail_comp�s�zMiscReadTestBase.test_fail_compcCs"|j�d�}|�|jtjd�dS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r2r9r<�typer�DIRTYPE�rrAr
r
r�test_v7_dirtypes�z MiscReadTestBase.test_v7_dirtypecCs4z|j�d�Wntk
r.|�d�YnXdS)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r2r9�KeyErrorrhrr
r
r�test_xstar_typesz 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)r2r<r��mtimerk�
startswith�unamer�r
r
r�test_check_memberss
�
�z#MiscReadTestBase.test_check_memberscCs|�|j��djdd�dS)N���zmisc/eofzcould not find all members)r<r2r�rkrr
r
r�test_find_members s�z"MiscReadTestBase.test_find_members�link�Missing hardlink implementationc
Cs�tjtddd���}|�dt�|�tjtj	�
td��|�dt�|�tjtj	�
td��ttj	�
td�d��}|��}W5QRX|�t
|�t�|�dt�|�tjtj	�
td��ttj	�
td�d��}|��}W5QRX|�t
|�t�W5QRXdS)NrVr.)�
errorlevelr0r7rprUrv)rrrrGrH�
addCleanupr�unlinkrIrJrKr;r<rr?)rr2r�r	r
r
r�test_extract_hardlink$sz&MiscReadTestBase.test_extract_hardlinkc		Cs�tjtdd�}tj�td�}t�|�z�dd�|D�}|�||�|D]x}tj�||j�}t
jdkr�|�|jd@t�|�jd@�dd	�}tj�|�}d
�||j�||�|�}|�|j||�qFW5|��t	�
|�XdS)Nr.�r0�
extractallcSsg|]}|��r|�qSr
��isdir��.0r�r
r
r�
<listcomp>@sz4MiscReadTestBase.test_extractall.<locals>.<listcomp>�win32�cSs(t|t�rd�||���Sd�|�SdS)Nz{} ({})z
{!r} (int))�
isinstance�float�format�hex)r�r
r
r�format_mtimeHs
z6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrrIrJrKrH�mkdirr4r�rmtreer�rkr��platformr<r�stat�st_mode�getmtimerr�)	rr2�DIR�directoriesrArJrZ
file_mtime�errmsgr
r
r�test_extractall9s,

��z MiscReadTestBase.test_extractallc	Cs�d}tj�td�}t�|�z|tjt	dd��d}|�
|�}|j||d�tj�||�}|�tj�
|�|j�tjdkr�|�t�|�jd@d�W5QRXW5t�|�XdS)	N�
ustar/dirtypeZ
extractdirr.r��rJrri�)rIrJrKrHr	rr
rrrr9rGr<rr�r�rrr
�rZdirtyperr2rAZ	extractedr
r
r�test_extract_directoryWs


&z'MiscReadTestBase.test_extract_directoryc
Cs�t�t�d}t�|��dtjtdd��J}dd�|D�}|�||�|D]$}||j	}|�
tj�
|�|j�qHW5QRXW5QRXdS)Nr�r.r�cSsg|]}|��r|�qSr
r�r�r
r
rrjszBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r�r�rHr�temp_dirrrrr�rkr<rIrJrr�)rrr2rrArJr
r
r�test_extractall_pathlike_namefs�
z.MiscReadTestBase.test_extractall_pathlike_namec
Cs|d}t�t�d}t�|��Vtjtdd��<}|�|�}|j	||d�||}|�
tj�
|�|j�W5QRXW5QRXdS)Nrr�r.r�r)r�r�rHrrrrrr9rGr<rIrJrr�rr
r
r�test_extract_pathlike_nameps�
z+MiscReadTestBase.test_extract_pathlike_namec	Cs�tj�td�}t|d��}|�d�W5QRXzNt�	t
j�}z|�|�Wn$t
j
k
rn|�|jj�YnX|�d�W5t�|�XdS)N�emptyr�rZzReadError not raised)rIrJrKrHrr�rr��object�__new__rr�__init__r��
assertTruer��closedrh)rrrBr2r
r
r�test_init_close_fobjzsz%MiscReadTestBase.test_init_close_fobjc	CsTt�|j��>}t||�D],\}}|�|j|j�|�|��|���qW5QRXdSr)rrr�zipr<r�Zget_info)rr2Zm1Zm2r
r
r�test_parallel_iteration�sz(MiscReadTestBase.test_parallel_iterationN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r��unittest�
skipUnless�hasattrrIr�skip_unless_symlinkr�rrrrr r"r
r
r
rr��s2		
		�

r�c@seZdZdZdS)�MiscReadTestN)rrrr�r
r
r
rr'�sr'c@seZdZdS)�GzipMiscReadTestNr|r
r
r
rr(�sr(c@seZdZdd�ZdS)�Bz2MiscReadTestcCs|�d�dS)NzBZ2File have no name attribute��skipTestrr
r
rr��sz'Bz2MiscReadTest.requires_name_attributeN�rrrr�r
r
r
rr)�sr)c@seZdZdd�ZdS)�LzmaMiscReadTestcCs|�d�dS)NzLZMAFile have no name attributer*rr
r
rr��sz(LzmaMiscReadTest.requires_name_attributeNr,r
r
r
rr-�sr-c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�StreamReadTest�r|c
Csj|jD]^}|��sq|j�|��>}z|�d�}Wn tjk
rP|�d�YnX|s"qZq"W5QRXqdS)Nr[z6simple read-through using TarFile.extractfile() failed)r2�isregr:r;r�StreamErrorrh)rrArB�bufr
r
r�test_read_through�s
z StreamReadTest.test_read_throughc	CsT|j��}|j�|��}|��}W5QRX|�t|�|jd�|�t|�td�dS)Nr8)	r2r�r:r;r<r=r>rr?r@r
r
rrC�s
��z(StreamReadTest.test_fileobj_regular_filec	Cs:|j��}|j�|d��}|�tj|j�W5QRXdS�Nr)r2r�r:r�rr1r;)rZtarinfosr�r
r
r�test_provoke_stream_error�s
z(StreamReadTest.test_provoke_stream_errorc	Cs�tjtdd�}z�|j}|��}|��}|dkr0q�|�|d�|��sL|��rp|�	tj
��|�|�W5QRXq|�|�}|�|�}|dkr�q|�|d�|�|�
�|�
�d�qW5|��XdS)Nr.r�zstream.next() failed.zstream.extractfile() failedzstream extraction failed)rrrr4r2r��assertIsNotNoneZislnkZissymr�r1r:r<r;)rZtar1Ztar2�t1�t2�v1�v2r
r
r�test_compare_members�s*

�
z#StreamReadTest.test_compare_membersN)rrrrr3rCr5r;r
r
r
rr.�s
	r.c@seZdZdS)�GzipStreamReadTestNr|r
r
r
rr<�sr<c@seZdZdS)�Bz2StreamReadTestNr|r
r
r
rr=�sr=c@seZdZdS)�LzmaStreamReadTestNr|r
r
r
rr>�sr>c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�DetectReadTestc
CsJzt�||�}Wn,tjk
r<}z|��W5d}~XYn
X|��dSr)rrr�rhr4)rrkrr2�er
r
r�_testfunc_file�s
zDetectReadTest._testfunc_filec
Csdz*t|d��}tj|||d�}W5QRXWn,tjk
rV}z|��W5d}~XYn
X|��dS)NrU�r�)rrr�rhr4)rrkrr�r2r@r
r
r�_testfunc_fileobj�sz DetectReadTest._testfunc_fileobjc	Cs�|jr�|�tj��tjtd|jd�W5QRX|�tj��tjtd|jd�W5QRX|�tj��tj|jdd�W5QRX|�tj��tj|jdd�W5QRX||jd�||jd|j�||jd�||jd|j�||jd�dS)Nr-r�r/rDzr:*�r|*)rr�rr�rr)rZtestfuncr
r
r�_test_modes�szDetectReadTest._test_modescCs|�|j�dSr)rErArr
r
r�test_detect_file
szDetectReadTest.test_detect_filecCs|�|j�dSr)rErCrr
r
r�test_detect_fileobjsz"DetectReadTest.test_detect_fileobjN)rrrrArCrErFrGr
r
r
rr?�s
	r?c@seZdZdS)�GzipDetectReadTestNr|r
r
r
rrHsrHc@seZdZdd�ZdS)�Bz2DetectReadTestc	CsTttd��}|��}W5QRXtjtddd��}|�|�W5QRX|�td�dS)NrUr�rV)�
compresslevelrD)rrr;r$r&r�r�rArir
r
r�test_detect_stream_bz2s
z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrrKr
r
r
rrIsrIc@seZdZdS)�LzmaDetectReadTestNr|r
r
r
rrL%srLc@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))�MemberReadTestNc	Ks�|dk	r<|j�|��"}|�t|���|d|j�W5QRXd|d<d|d<d|d<d|jkrnd	|d
<d	|d<|��D]&\}}|�t||�|d||jf�qvdS)
N�wrong sha256sum for %sr�r�i��uidre�gidzold-v7rr��gnamezwrong value in %s field of %s)r2r:r<rr;rk�itemsr�)rrA�chksum�kwargsr��k�vr
r
r�_test_member+s�
�zMemberReadTest._test_membercCs |j�d�}|j|dtd�dS)Nr7�c�r>rS�r2r9rWr?r�r
r
r�test_find_regtype<sz MemberReadTest.test_find_regtypecCs |j�d�}|j|dtd�dS)Nzustar/conttyperXrYrZr�r
r
r�test_find_conttype@sz!MemberReadTest.test_find_conttypecCs|j�d�}|j|dd�dS)Nrr�r>�r2r9rWr�r
r
r�test_find_dirtypeDsz MemberReadTest.test_find_dirtypecCs|j�d�}|j|dd�dS)Nzustar/dirtype-with-size�r]r^r�r
r
r�test_find_dirtype_with_sizeHsz*MemberReadTest.test_find_dirtype_with_sizecCs |j�d�}|j|ddd�dS)Nrprr7�r>�linknamer^r�r
r
r�test_find_lnktypeLsz MemberReadTest.test_find_lnktypecCs |j�d�}|j|ddd�dS)Nrvrrlrbr^r�r
r
r�test_find_symtypePsz MemberReadTest.test_find_symtypecCs"|j�d�}|j|dddd�dS)Nz
ustar/blktyper��r>ZdevmajorZdevminorr^r�r
r
r�test_find_blktypeTsz MemberReadTest.test_find_blktypecCs"|j�d�}|j|dddd�dS)Nz
ustar/chrtyperrVrfrgr^r�r
r
r�test_find_chrtypeXsz MemberReadTest.test_find_chrtypecCs|j�d�}|j|dd�dS)Nzustar/fifotyperr]r^r�r
r
r�test_find_fifotype\sz!MemberReadTest.test_find_fifotypecCs |j�d�}|j|dtd�dS)Nzustar/sparse�PrY�r2r9rW�
sha256_sparser�r
r
r�test_find_sparse`szMemberReadTest.test_find_sparsecCs |j�d�}|j|dtd�dS)N�
gnu/sparserkrYrlr�r
r
r�test_find_gnusparsedsz"MemberReadTest.test_find_gnusparsecCs |j�d�}|j|dtd�dS)N�gnu/sparse-0.0rkrYrlr�r
r
r�test_find_gnusparse_00hsz%MemberReadTest.test_find_gnusparse_00cCs |j�d�}|j|dtd�dS)N�gnu/sparse-0.1rkrYrlr�r
r
r�test_find_gnusparse_01lsz%MemberReadTest.test_find_gnusparse_01cCs |j�d�}|j|dtd�dS)N�gnu/sparse-1.0rkrYrlr�r
r
r�test_find_gnusparse_10psz%MemberReadTest.test_find_gnusparse_10cCs |j�d�}|j|dtd�dS)Nuustar/umlauts-ÄÖÜäöüßrXrYrZr�r
r
r�test_find_umlautsts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�r2r�)rrkr
r
r�test_find_ustar_longnameysz'MemberReadTest.test_find_ustar_longnamecCs |j�d�}|j|dtd�dS)Nzmisc/regtype-old-v7rXrYrZr�r
r
r�test_find_regtype_oldv7}sz&MemberReadTest.test_find_regtype_oldv7cCs@|j��tj|j|jdd�|_|j�d�}|j|dtd�dS)Nr.r/upax/umlauts-ÄÖÜäöüßrXrY)	r2r4rrrrr9rWr?r�r
r
r�test_find_pax_umlauts�s
�z$MemberReadTest.test_find_pax_umlauts)N)rrrrWr[r\r_rardrerhrirjrnrprrrtrvrwrxryrzr
r
r
rrM)s&
rMc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LongnameTestcCsX|jddd}z|j�|�}Wntk
r@|�d�YnX|�|jtjd�dS)N�/��123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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)	�subdirr2r9r�rh�assertNotEqualr�rr�)rr~rAr
r
r�test_read_longname�s�zLongnameTest.test_read_longnamecCsh|jddd}|jddd}z|j�|�}Wntk
rR|�d�YnX|�|j|d�dS)Nr|r}r~�longlinkzlonglink not foundzlinkname wrong)rr2r9r�rhr<rc)rr~r�rAr
r
r�test_read_longlink�szLongnameTest.test_read_longlinkc	Csp|jddd}|j�|�}|j}|jj�|�t�|jj�d��}|�	t
j��t
jd|d�W5QRXdS)Nr|r}r~izfoo.tar)rkr�)
rr2r9r�r�r\rr�r;r�rr�r)rr~rAr�rBr
r
r�test_truncated_longname�sz$LongnameTest.test_truncated_longnamec	Csj|jddd}|j�|�j}ttd��6}|�|�tj�	|�
d�dd�}|�|j|j
�W5QRXdS)Nr|r}r~rUr[r.�strict)rr2r9r�rrr\rr�Zfrombufr;r<r��longnametype)rr~r�rBrAr
r
r�test_header_offset�s
�zLongnameTest.test_header_offsetN)rrrr�r�r�r�r
r
r
rr{�s
		r{c@sJeZdZdZejZdd�Zdd�Zdd�Z	dd	�Z
d
d�Zedd
��Z
dS)�GNUReadTestZgnuc	Csz|j�|t�tj�t|�}t|d��}|��}W5QRX|�t	|�t
d|�|��rvt�|�}|�
|jd|j�dS)NrUrNr[)r2rGrHrIrJrKrr;r<rrm�_fs_supports_holesrZ
assertLess�	st_blocks�st_size)rrk�filenamerBr	r`r
r
r�_test_sparse_file�s�
zGNUReadTest._test_sparse_filecCs|�d�dS)Nro�r�rr
r
r�test_sparse_file_old�sz GNUReadTest.test_sparse_file_oldcCs|�d�dS)Nrqr�rr
r
r�test_sparse_file_00�szGNUReadTest.test_sparse_file_00cCs|�d�dS)Nrsr�rr
r
r�test_sparse_file_01�szGNUReadTest.test_sparse_file_01cCs|�d�dS)Nrur�rr
r
r�test_sparse_file_10�szGNUReadTest.test_sparse_file_10c	Csxtj�d�rptj�td�}t|d��"}|�d�|�	d�|�
�W5QRXt�|�}t�
|�|jd|jkSdSdS)N�linuxzsparse-testr�r�sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr[F)r�rr�rIrJrKrHrr\r�r�rrr�r�r�)rkrBr`r
r
rr��s



zGNUReadTest._fs_supports_holesN)rrrrr�GNUTYPE_LONGNAMEr�r�r�r�r�r��staticmethodr�r
r
r
rr��s	r�c@s&eZdZdZejZdd�Zdd�ZdS)�PaxReadTestZpaxcCs�tjtdd�}z�|�d�}|�|jd�|�|jd�|�|j�	d�d�|�d�}|�|jd	�|�|jd�|�|j�	d�d�|�d
�}|�|jd�|�|jd�|�|j�	d�d�W5|��XdS)Nr.r��pax/regtype1r��barzVENDOR.umlautsuÄÖÜäöüßzpax/regtype2rzpax/regtype3r)
rrrr4r9r<r�rQ�pax_headers�get�rr2rAr
r
r�test_pax_global_headers�s*
�
�
�z#PaxReadTest.test_pax_global_headerscCs�tjtdd�}z�|�d�}|�|jd�|�|jd�|�|jd�|�|j	d�|�t
|j	�t�|�t|jd�d�|�t|jd�d�W5|��XdS)	Nr.r�zpax/regtype4rX�{g��^�AZatime�ctime)
rrrr4r9r<r>rOrPr�r�rr�r�r
r
r�test_pax_number_fieldss
z"PaxReadTest.test_pax_number_fieldsN)	rrrrr�XHDTYPEr�r�r�r
r
r
rr��sr�c@seZdZdd�Zdd�ZdS)�
WriteTestBasec	Cstt��}tj||jd��}|�t�d��W5QRX|�|jd�|�	�}~t
��|�|j�|�||�	��dS)Nr�r�z#external fileobjs must never closed)
rr�rrrr�r��assertFalserr�r�
gc_collectr<)rrBr2r	r
r
r�test_fileobj_no_closesz#WriteTestBase.test_fileobj_no_closec	Cs�t�t|j��6}t�d�}tjtj|_|�|t	�
d|j��W5QRX|�td�� }|�t|�
��tjd�W5QRXdS)Nr�r�rUrY)rrr�rr��
RECORDSIZE�	BLOCKSIZEr>r�rr�r<r=r;)rr2r�rBr
r
r�test_eof_marker+s
"zWriteTestBase.test_eof_markerN)rrrr�r�r
r
r
rr�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�cCsjd}t�t|j�}zt�|�}|�|�W5|��Xt�t�}z|�|��d|d�W5|��XdS)N�d0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rz!failed to store 100 char filename)	rrr�rr4r�r�r<r�)rrkr2r�r
r
r�test_100_char_name=s


�zWriteTest.test_100_char_namec	Cspt�t|j�}z<tj�td�}t|d��}|�	d�W5QRX|�
|�W5|��X|�tj�t�dd�dS)N�filer��aaarztarfile is empty)
rrr�rr4rIrJrKrHr��addZ
assertGreater�getsize)rr2rJrBr
r
r�
test_tar_sizeQs
�zWriteTest.test_tar_sizec	Cs�t�t|j�}zxtj�td�}t|d��W5QRX|�	|�}|�
|jd�t|d��}|�d�W5QRX|�	|�}|�
|jd�W5|��XdS)Nr�r�rr�rf)
rrr�rr4rIrJrKrH�
gettarinfor<r>r�)rr2rJrArBr
r
r�test_file_size_s


zWriteTest.test_file_sizec	Csdtj�td�}t�|�z:t�t	|j
�}z|�|�}|�
|jd�W5|��XW5t�|�XdS)N�	directoryr)rIrJrKrHr	r�rmdirrrr�rr4r�r<r>�rrJr2rAr
r
r�test_directory_sizeos

zWriteTest.test_directory_sizecCstj�td�}t�|�ttj�|d�d���ttj�|d�d���z�t
�t|j�}zlt
j�d��}ddg|_|�|�W5QRXg}|��D]}|�tj�|j�d�q�|�|dddg�W5|��XW5t�tj�|d��t�tj�|d��t�	|�XdS)Nr��1rm�2z
os.listdirr�)rIrJrKrHr	rr4rr�r�rr�rr#�mock�patch�return_valuer�r��append�splitrkr<)rrJr2Zmock_listdir�paths�mr
r
r�test_ordered_recursion~s$

z WriteTest.test_ordered_recursionc
Cs�t�t|j��z}t�t�d}t|d��}|�d�W5QRX|�|�}|�t	�
|��}|�|jt
�|�|j|j�|�|jd�W5QRXdS)Nr�r�r�rf)rrr�rr�r�rHr�r�rIr�r�rkr�r<r>)rr2rJrBrAZtarinfo2r
r
r�test_gettarinfo_pathlike_name�s
z'WriteTest.test_gettarinfo_pathlike_namer�r�c
Cs�tj�td�}tj�td�}t|d��}|�d�W5QRXzt�||�Wn0tk
r|}z|�d|�W5d}~XYnXzDt�t|j
�}z&|�|�|�|�}|�|jd�W5|��XW5t	�
|�t	�
|�XdS)Nr��link_targetr�r��
os.link(): %sr)rIrJrKrHrr�r��PermissionErrorr+rr�rr�rr4r�r<r>)rr��targetrBr@r2rAr
r
r�test_link_size�s" 


zWriteTest.test_link_sizec	Csftj�td�}t�d|�z:t�t	|j
�}z|�|�}|�
|jd�W5|��XW5t�|�XdS)N�symlinkr�r)rIrJrKrHr�rr�rrr�rr4r�r<r>r�r
r
r�test_symlink_size�s
zWriteTest.test_symlink_sizec	Cs�tj�t�}t�t|j�}zb|�|j	|d�|�
|�|�|��gd�t�
t��|�
|�W5QRX|�|��gd�W5|��XdS)Nzarchive name must be absolutezadded the archive to itself)rIrJr�r�rrrr4r<rkr�r�r�
change_cwdrH)r�dstnamer2r
r
r�
test_add_self�s 
�
��zWriteTest.test_add_selfc	Cstj�td�}t�|�z�dD]}tj�||�}t�|�qdd�}tj	t
|jdd�}z|j
|d|d�W5|��X|�t��|�
|dd	d|�W5QRXt�	t
d
�}z>|D] }|�|jd�|�|jd�q�|�t|���d
�W5|��XW5t�|�XdS)N�filter)r�r�ZbazcSs&tj�|j�dkrdSd|_d|_|S)Nr�r�r�)rIrJ�basenamerkrOr�)rAr
r
rr��s
z%WriteTest.test_filter.<locals>.filterr.r�Z	empty_dir)�arcnamer�TrDr�r�rf)rIrJrKrHr	rr
�create_empty_filerrr�rr4r�r��	TypeErrorr<rOr�r=r�)r�tempdirrkr�r2rAr
r
r�test_filter�s*

zWriteTest.test_filterNFcCs�tj�td�}|st�|�n
t�|�t�t	|j
�}z|j||d�W5|��Xt�t	d�}z|�
�}W5|��X|s�t�|�n
t�|�|�|j|p�|�tjd��dS)Nr��r�rDr|)rIrJrKrHrr�r	rrr�rr4r�r�r�r�r<rkr��sep)rrJZcmp_path�dirr�r2r�r
r
r�_test_pathname�s 



zWriteTest._test_pathnamec	Cstj�td�}tj�td�}t�|�z�tj�|d�}tj�|d�}t|d��}|�	d�W5QRXt�
||�t�|d��"}|j|dd�|j|dd�W5QRXtj|dd	��6}z|j
|d
�Wntk
r�|�d�YnXW5QRXW5t�|�t�|�XdS)NZtestsymlinksztestsymlinks.tar�sourcer�r�z
something
r�rY�r�rz&extractall failed with symlinked files)rIrJrKrHr	rr�r
rr�r�rr�r��OSErrorrh)rr�ZtemparchiveZsource_fileZtarget_filer�r2r
r
r�test_extractall_symlinkss&

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�rIrJrKr�rr
r
r�test_pathnames6s
zWriteTest.test_pathnamescCs4tjdkr|�dd�n|�dd�|�dd�dS)NrzC:\foor�z/fooz///foo)r�rr�rr
r
r�test_abs_pathnamesGs
zWriteTest.test_abs_pathnamesc	Cs�t�t��tt�t|j�}z|�d�W5|��Xt�td�}z.|D]$}|j	dkrF|�
|j	�d�|j	�qFW5|��XW5QRXdS)Nr�rDz./)rr�rHrrr�rr4r�rkrr��rr2r�r
r
r�test_cwdNs

zWriteTest.test_cwdc
sntttfD]^�G�fdd�dtj�}|�}|����"tjt|j	|tj
ddid�}W5QRX|�|j�q
dS)NcseZdZdZ�fdd�ZdS)z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTcs|jrd|_��dS�NF)�first�rr	��exctyper
rr�csz>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)rrrr�r�r
r�r
r�BadFileasr�Znonr)r�rr�)
r��EOFError�RuntimeErrorrr�r�rrr�r�
PAX_FORMATr�r)rr�r�r2r
r�r�test_open_nonwritable_fileobj_s�z'WriteTest.test_open_nonwritable_fileobj)NF)rrrrr�r�r�r�r�r�r#r$r%rIr�rr&r�r�r�r�r�r�r�r�r�r
r
r
rr�9s,�


(

r�c@seZdZdS)�
GzipWriteTestNr|r
r
r
rr�psr�c@seZdZdS)�Bz2WriteTestNr|r
r
r
rr�tsr�c@seZdZdS)�
LzmaWriteTestNr|r
r
r
rr�xsr�c@s@eZdZdZdZdd�Ze�ej	dko.e
ed�d�dd	��ZdS)
�StreamWriteTestzw|Nc	Cs�t�t|j�}|��|jr\|��}ttd��}|��}W5QRX|�|�}|�|j	d�n|�t��}|��}W5QRX|�
|�d�tjd�dS)NrUzfound trailing datar�zincorrect zero padding)
rrr�rr4�decompressorr;�
decompressr��unused_datar<�countr�)rr2ZdecrBr	r
r
r�test_stream_padding�s
�z#StreamWriteTest.test_stream_paddingr�umaskzMissing umask implementationc	Csjtj�t�rt�t�t�d�}z8t�t|j	�}|�
�t�t�jd@}|�
|dd�W5t�|�XdS)N�ri�zwrong file permissions)rIrJ�existsr�rr�r�rrrr4rr
r<)rZoriginal_umaskr2rr
r
r�test_file_mode�s

zStreamWriteTest.test_file_mode)
rrrrr�r�r#r$r�rr%rIr�r
r
r
rr�|s�r�c@seZdZdd�ZdS)�GzipStreamWriteTestcCs(t�t|j���t�t�jdd�}dS)Nzlatin-1r�)rrr�rr4r�r�Z	read_text)r�payloadr
r
r� test_source_directory_not_leaked�sz4GzipStreamWriteTest.test_source_directory_not_leakedN)rrrr�r
r
r
rr��sr�c@seZdZerejndZdS)�Bz2StreamWriteTestN)rrrr$�BZ2Decompressorr�r
r
r
rr��sr�c@seZdZerejndZdS)�LzmaStreamWriteTestN)rrrr*�LZMADecompressorr�r
r
r
rr��sr�c@speZdZdd�Zddd�Zddd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�GNUWriteTestcCst|�dd}|dS)Nr[rV)r=)rr`Zblocksr
r
r�_length�szGNUWriteTest._lengthNcCsXd}t|�tjkr(|d7}||�|�7}|dk	rTt|�tjkrT|d7}||�|�7}|S)Nr[)r=r�LENGTH_NAMEr��LENGTH_LINK)rrkr�r�r
r
r�
_calc_size�szGNUWriteTest._calc_sizecCs�t�|�}|r||_tj|_t�td�}z6tj|_	|�
|�|�||�}|j}|�
||d�W5|��Xt�t�}z<|��}|�|d�|�
|j|jd�|�
|j|jd�W5|��XdS)Nr�z%GNU longname/longlink creation failedzunable to read longname member)rr�rc�LNKTYPEr�rr�r4�
GNU_FORMATrr�rr�r<r�r6rk)rrkr�rAr2r9r:�memberr
r
r�_test�s2



���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�rrr
r
r�test_longname_1023�szGNUWriteTest.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/longnamerrr
r
r�test_longname_1024�szGNUWriteTest.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_rrr
r
r�test_longname_1025�szGNUWriteTest.test_longname_1025cCs|�dd�dS)Nrk�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnkrrr
r
r�test_longlink_1023�szGNUWriteTest.test_longlink_1023cCs|�dd�dS)Nrk�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlinkrrr
r
r�test_longlink_1024�szGNUWriteTest.test_longlink_1024cCs|�dd�dS)Nrk�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_rrr
r
r�test_longlink_1025�szGNUWriteTest.test_longlink_1025cCs|�dd�dS)Nrrrrr
r
r�test_longnamelink_1023�s�z#GNUWriteTest.test_longnamelink_1023cCs|�dd�dS)Nr
rrrr
r
r�test_longnamelink_1024�s�z#GNUWriteTest.test_longnamelink_1024cCs|�dd�dS)Nrrrrr
r
r�test_longnamelink_1025s�z#GNUWriteTest.test_longnamelink_1025)N)N)rrrr�rrr	rr
rrrrrrr
r
r
rr��s

r�c@sneZdZdZej�ed�Zdd�Z	e
dd��Ze
dd��Zd	d
�Z
dd�Zd
d�Zdd�Zdd�Zdd�ZdS)�
CreateTestzx:�
spameggs42cCst�t�dSr)rr�r�rr
r
rr3
szCreateTest.setUpc	Cs&t|jd��}|�d�W5QRXdS)Nr�r�)r�	file_pathr�)�clsrBr
r
r�
setUpClassszCreateTest.setUpClasscCst�|j�dSr)rr�r�rr
r
r�
tearDownClassszCreateTest.tearDownClassc	Csht�t|j��}|�|j�W5QRX|�t��}|��}W5QRX|�t	|�d�|�
d|d�dS�NrVrr)rrr�rr�rrr�r<r=r��rZtobj�namesr
r
r�test_createszCreateTest.test_createc	Cs�t�t|j��}|�|j�W5QRX|�t��t�t|j�}W5QRX|�t��}|�	�}W5QRX|�
t|�d�|�d|d�dSr)
rrr�rr�rr��FileExistsErrorrr�r<r=r�rr
r
r�test_create_existing"szCreateTest.test_create_existingc	Csf|�td��}|�|j�W5QRX|�t��}|��}W5QRX|�t|�d�|�d|d�dS�N�xrVrr)rr�r�rr�r<r=r�rr
r
r�test_create_taropen.szCreateTest.test_create_taropenc
Cs�|�td��}|�|j�W5QRX|�t��|�td��W5QRXW5QRX|�t��}|��}W5QRX|�t|�d�|�	d|d�dSr$)
rr�r�rr�r"r�r<r=r�rr
r
r�test_create_existing_taropen7sz'CreateTest.test_create_existing_taropenc	Cs�t�t�t�|j��D}|�|jt�|�	|jt
j�t��|�
t�|j��|��}W5QRX|�	t|�d�|�d|d�|�t��}|��}W5QRX|�	t|�d�|�d|d�dSr)rrr�r�r�rr�rkr�r<rIrJr�r�rr�r=r�rrr
r
r�test_create_pathlike_nameDsz$CreateTest.test_create_pathlike_namec	Cs�|�t�t�d��D}|�|jt�|�|jtj	�
t��|�t�|j��|�
�}W5QRX|�t|�d�|�d|d�|�t��}|�
�}W5QRX|�t|�d�|�d|d�dSr$)rr�r�r�r�rkr�r<rIrJr�r�rr�r=r�rr
r
r�!test_create_taropen_pathlike_nameRsz,CreateTest.test_create_taropen_pathlike_nameN)rrrrrIrJrKrHrr3�classmethodrrr!r#r&r'r(r)r
r
r
rrs

		
rc@seZdZdS)�GzipCreateTestNr|r
r
r
rr+asr+c@seZdZdS)�
Bz2CreateTestNr|r
r
r
rr,esr,c@seZdZdS)�LzmaCreateTestNr|r
r
r
rr-isr-c@seZdZdZdZdZdS)�CreateWithXModeTestr%N)rrrrr&r'r
r
r
rr.msr.r�r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�HardlinkTestc
Cs�tj�td�|_tj�td�|_t|jd��}|�d�W5QRXzt�|j|j�Wn0t	k
r�}z|�
d|�W5d}~XYnXt�td�|_
|j
�|j�dS)Nr�r�r��foor�r�)rIrJrKrHr�r�rr�r�r�r+rr�r2r�)rrBr@r
r
rr3ys zHardlinkTest.setUpcCs&|j��t�|j�t�|j�dSr)r2r4rr�r�r�rr
r
rr5�s
zHardlinkTest.tearDowncCs$|j�|j�}|�|jtjd�dS)Nzadd file as regular failed)r2r�r�r<r�r�REGTYPEr�r
r
r�test_add_twice�s�zHardlinkTest.test_add_twicecCs$|j�|j�}|�|jtjd�dS)Nzadd file as hardlink failed)r2r�r�r<r�rrr�r
r
r�test_add_hardlink�s�zHardlinkTest.test_add_hardlinkcCs,d|j_|j�|j�}|�|jtjd�dS)NTzdereferencing hardlink failed)r2Zdereferencer�r�r<r�rr1r�r
r
r�test_dereference_hardlink�s
�z&HardlinkTest.test_dereference_hardlinkN)rrrr3r5r2r3r4r
r
r
rr/us
r/c@s&eZdZddd�Zdd�Zdd�ZdS)	�PaxWriteTestNcCs�t�|�}|r||_tj|_tjtdtjd�}z|�	|�W5|��Xt�t�}zB|rv|�
�dj}|�||d�n|�
�dj}|�||d�W5|��XdS)Nr��rrzPAX longlink creation failedzPAX longname creation failed)
rr�rcrr�rr�r�r4r�r�r<rk)rrkr�rAr2�l�nr
r
rr�s 


zPaxWriteTest._testc
Cs�dddddd�}tjtdtj|d�}z|�t�d��W5|��Xtjtd	d
�}z�|�|j|�|�|�	�dj|�|j�
�D]h\}}|�t|�t
�|�t|�t
�|tjkr�ztj||�Wq�ttfk
r�|�d�Yq�Xq�W5|��XdS)
Nr��0z1.23�äöü�test)r�rOr�r;r:r�)rr�r.r�rz"unable to convert pax header field)rrr�r�r4r�r�r<r�r�rRZassertIsNotr�r��PAX_NUMBER_FIELDSr�r�rh)rr�r2�key�valr
r
r�test_pax_global_header�s2��

z#PaxWriteTest.test_pax_global_headercCs�ddd�}tjtdtjdd�}z(t��}d|_d|_||_|�	|�W5|��Xtjtdd	�}z:|�
�d
}|�|j|�|�|jd�|�|jd�W5|��XdS)Nr�Z123)rJrOr�r.�rr0r:ir�rr�)rrr�r�r4r�rkrOr�r�r�r<)rr�r2r�r
r
r�test_pax_extended_header�s$
�
z%PaxWriteTest.test_pax_extended_header)N)rrrrr?rAr
r
r
rr5�s
 r5c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�UnicodeTestcCs|�d�dS)Nr.��_test_unicode_filenamerr
r
r�test_iso8859_1_filename�sz#UnicodeTest.test_iso8859_1_filenamecCs|�d�dS)N�utf7rCrr
r
r�test_utf7_filename�szUnicodeTest.test_utf7_filenamecCs|�d�dS)N�utf-8rCrr
r
r�test_utf8_filename�szUnicodeTest.test_utf8_filenamecCsrtjtd|j|dd�}zd}|�t�|��W5|��Xtjt|d�}z|�|��dj	|�W5|��XdS)Nr�r��rr0�errorsr:r�r)
rrr�rr4r�r�r<r�rk)rr0r2rkr
r
rrD�s�
z"UnicodeTest._test_unicode_filenamecCsdtjtd|jddd�}z>t��}d|_|�t|j	|�d|_d|_
|�t|j	|�W5|��XdS)Nr�r�r�rJr:r�)rrr�rr4r�rkr��UnicodeErrorr�r�r�r
r
r�test_unicode_filename_errors�z'UnicodeTest.test_unicode_filename_errorcCsxtjtdddd�}zV|D]L}|�t|j�t�|�t|j�t�|�t|j	�t�|�t|j
�t�qW5|��XdS)NrDr.r��r0rK)rrrr4�assertIsr�rkr�rcr�rQr�r
r
r�test_unicode_arguments�z!UnicodeTest.test_unicode_argumentcCs�t�d�}d|_d|_tjtd|jdd�}z|�|�W5|��Xtjtdd�}zr|�	d�}|�
|jd�|�
|jd�|jtjkr�|��tjtdd�}|�	d�}|�
|jd�|�
|jd�W5|��XdS)	Nr�r:r�r.)rrr0r�r�u	���)rr�r�rQrr�rr4r�r9r<r�)rr�r2r
r
r�test_uname_unicode)s*
�


zUnicodeTest.test_uname_unicodeN)
rrrrErGrIrDrMrPrQr
r
r
rrB�srBc@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�rr
r
r�test_unicode_name1Ls

z#UstarUnicodeTest.test_unicode_name1cCs|�d�|�dt�dS�Nud012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿrUrr
r
r�test_unicode_name2Rs
z#UstarUnicodeTest.test_unicode_name2cCs0|�d�|�dt�|�d�|�dt�dS)Na01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rUrr
r
r�test_unicode_longname1Xs

z'UstarUnicodeTest.test_unicode_longname1cCs|�dt�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rUrr
r
r�test_unicode_longname2^sz'UstarUnicodeTest.test_unicode_longname2cCs&|�dt�|�d�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿrUrr
r
r�test_unicode_longname3bs
z'UstarUnicodeTest.test_unicode_longname3cCs|�d�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿrUrr
r
r�test_unicode_longname4gs
z'UstarUnicodeTest.test_unicode_longname4Nc	Cs�tjtd|jdd��4}t�|�}|dkr4|�|�n|�||j|�W5QRX|dkr�tjtddd��"}|D]}|�||j�q�qlW5QRXdS)Nr�rHr@rDr�)	rrr�rr�r�r�r<rk�rrk�excr2r�r
r
rrVks
z!UstarUnicodeTest._test_ustar_namecCs0|�d�|�dt�|�d�|�dt�dSrS��_test_ustar_linkr�rr
r
r�test_unicode_link1zs

z#UstarUnicodeTest.test_unicode_link1cCs|�d�|�dt�dSrXr`rr
r
r�test_unicode_link2�s
z#UstarUnicodeTest.test_unicode_link2c	Cs�tjtd|jdd��:}t�d�}||_|dkr:|�|�n|�||j|�W5QRX|dkr�tjtddd��"}|D]}|�||j�q�qrW5QRXdS)Nr�rHr@r�rDr�)	rrr�rr�rcr�r�r<r^r
r
rra�s
z!UstarUnicodeTest._test_ustar_link)N)N)rrrr�USTAR_FORMATrrWrYrZr[r\r]rVrbrcrar
r
r
rrREs
rRc@seZdZejZdd�ZdS)�GNUUnicodeTestc
Cs\dD]R\}}tjt|dd��4}z|�|�}Wntk
rJ|�d�YnXW5QRXqdS)N))rHupax/bad-pax-���)r.upax/bad-pax-äöür�rNz%unable to read bad GNU tar pax header�rrrr9r�rh�rr0rkr2r�r
r
r�test_bad_pax_header�s�z"GNUUnicodeTest.test_bad_pax_headerN)rrrrrrrhr
r
r
rre�srec@seZdZejZdZdd�ZdS)�PAXUnicodeTestNc
Cs\dD]R\}}tjt|dd��4}z|�|�}Wntk
rJ|�d�YnXW5QRXqdS)N))rHupax/hdrcharset-���)r.upax/hdrcharset-äöür�rNz)unable to read POSIX.1-2008 binary headerrfrgr
r
r�test_binary_header�s�z!PAXUnicodeTest.test_binary_header)rrrrr�rrMrjr
r
r
rri�sric@s&eZdZdd�Zd	dd�Zdd�ZdS)
�AppendTestBasecCs$t|_tj�|j�r t�|j�dSr)r�rrIrJr�rr�rr
r
rr3�szAppendTestBase.setUpr�cCsjtjtdd��R}|�d�}d|_|�|��,}t�|j|��}|�||�W5QRXW5QRXW5QRXdS)Nr.r�r7r�)rrrr9rkr:r�)rr�srcr�r�r2r
r
r�_create_testtar�s
zAppendTestBase._create_testtarcCs(|�d|j�|�tjtjtd�dS)Nr�rm)rmrr�rr�rr�rr
r
r�test_append_compressed�sz%AppendTestBase.test_append_compressedN)r�)rrrr3rmrnr
r
r
rrk�s
rkc@s�eZdZdZddd�Zdgdfdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
AppendTestNc	Cs2tj|jd|d��}|�t�d��W5QRXdS)NrmrBr�)rrrr�r�)rr�r2r
r
r�
_add_testfile�szAppendTest._add_testfiler�c	Cs0tj|j|d��}|�|��|�W5QRXdS)NrB)rrrr<r�)rr r�r2r
r
rr�szAppendTest._testcCs|��|��dSr)rprrr
r
r�test_non_existing�szAppendTest.test_non_existingcCs&t�|jd���|��|��dS)Nr�)rrrr4rprrr
r
r�
test_empty�szAppendTest.test_emptycCs.t�d�}|�|�|�d�|j|d�dS)NsrrB)rr�rpr\rr�r
r
r�test_empty_fileobj�s


zAppendTest.test_empty_fileobjc	Cs\|��t|jd��}|��}W5QRXt�|�}|�|�|�d�|jddg|d�dS)NrUrr�r�)r r�)	rmrrr;rr�rpr\rrir
r
r�test_fileobj�s


zAppendTest.test_fileobjcCs$|��|��|jddgd�dS)Nr�r�)r )rmrprrr
r
r�
test_existing�szAppendTest.test_existingc	Cs6t|jd��}|�|�W5QRX|�tj|j�dSr�)rrr�r�rr�rp)rr	rBr
r
r�_test_error�szAppendTest._test_errorcCs|�d�dS)NrZ�rvrr
r
r�	test_null�szAppendTest.test_nullcCs|�d�dS)N�
rwrr
r
r�test_incompleteszAppendTest.test_incompletecCst�d���}|�|�dS�Nr��rr�r�rvr�r
r
r�test_premature_eofszAppendTest.test_premature_eofcCs t�d���}|�|d�dS)Nr�ryr|r�r
r
r�test_trailing_garbagesz AppendTest.test_trailing_garbagecCs|�d�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarwrr
r
r�test_invalidszAppendTest.test_invalid)N)rrrrnrprrqrrrsrtrurvrxrzr}r~rr
r
r
rro�s
	roc@seZdZdS)�GzipAppendTestNr|r
r
r
rr�sr�c@seZdZdS)�
Bz2AppendTestNr|r
r
r
rr�sr�c@seZdZdS)�LzmaAppendTestNr|r
r
r
rr�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�rTa123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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�rk� )rr�r�rdr�r�rcrOr�r
r
r�test_ustar_limitss 






zLimitsTest.test_ustar_limitscCsXt�d�}|�tj�t�d�}d|_|�tj�t�d�}d|_|�t|jtj�dS�Nr�r�rkl)rr�r�rrcrOr�r�r�r
r
r�test_gnu_limits9s


zLimitsTest.test_gnu_limitscCsRt�d�}|�tj�t�d�}d|_|�tj�t�d�}d|_|�tj�dSr�)rr�r�r�rcrOr�r
r
r�test_pax_limitsFs


zLimitsTest.test_pax_limitsN)rrrr�r�r�r
r
r
rr�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�sfooZfoobarrfr0sfoobar)r<r�stn�ntsrr
r
r�test_char_fieldsUs����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�0000001rV�7777777��� r�������������������r������������������r�rs       )r<r�ntirr
r
r�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)NrVr�r�r�r�r6r�r�r�r�r�r�r�r�r�gY�g0Bs�g��������r)r<r�itnrr�rr
r
r�test_write_number_fieldsss4����
����z!MiscTest.test_write_number_fieldsc	Cs�|�t��t�ddtj�W5QRX|�t��t�ddtj�W5QRX|�t��t�ddtj�W5QRX|�t��t�ddtj�W5QRXdS)Nr�r�r�l�����l)r�r�rr�rdrrr
r
r�test_number_field_limits�sz!MiscTest.test_number_field_limitsc8Cs�ddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8h8}tj|t|d9�dS):N�version�grp�pwdZsymlink_exceptionZNULr�r�Z	GNU_MAGICZPOSIX_MAGICrrZ
LENGTH_PREFIXr1ZAREGTYPEr�SYMTYPE�CHRTYPE�BLKTYPEr��FIFOTYPEZCONTTYPEr�ZGNUTYPE_LONGLINKZGNUTYPE_SPARSEr�ZXGLTYPEZSOLARIS_XHDTYPEZSUPPORTED_TYPESZ
REGULAR_TYPESZ	GNU_TYPESZ
PAX_FIELDSZPAX_NAME_FIELDSr<r�r�r�r�Zcalc_chksums�copyfileobj�filemodeZEmptyHeaderErrorZTruncatedHeaderErrorZEOFHeaderErrorZInvalidHeaderErrorZSubsequentHeaderErrorZExFileObject�main�fully_trusted_filter�data_filter�
tar_filter�FilterError�AbsoluteLinkError�OutsideDestinationError�SpecialFileError�AbsolutePathError�LinkOutsideDestinationError)�	blacklist)rZcheck__all__r)rr�r
r
r�test__all__�sn�zMiscTest.test__all__N)rrrr�r�r�r�r�r
r
r
rr�Ss


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),�CommandLineTestcOs(tjd|�|�\}}}|�tj��d�S)N�-mr�
)r�r)rZassert_python_okr�rI�lineseprf)r�argsrT�rcr��errr
r
r�
tarfilecmd�s
�
zCommandLineTest.tarfilecmdcGstjd|��S)Nr�r)r�r)rZassert_python_failure�rr�r
r
r�tarfilecmd_failure�sz"CommandLineTest.tarfilecmd_failurec	Cs^t�d�t�d�g}|�tj|�t�|d��&}|D]}|j|tj�	|�d�q4W5QRXdS)N�tokenize_tests.txt�9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr�r�)
rr�r�r�rrr�rIrJr�)r�tar_name�files�tfZtardatar
r
r�make_simple_tarfile�s�z#CommandLineTest.make_simple_tarfilec	Csrt�d�g}|�tj|�t�|d��B}t�d�}|j|t�	d�d�t�d�}|j|t�	d�d�W5QRXdS)Nr�r��benignrZrB�../evil)
rr�r�r�rrr�r�rr�)rr�r�r�r�Zevilr
r
r�make_evil_tarfile�s

z!CommandLineTest.make_evil_tarfilecCs||��\}}}|�|d�|�d|���|�d|���|�d|���|�dd�\}}}|�|d�|�|��d�dS)NrZsusageserrorsrequired�-lr)r�r<r��lowerr��strip)rr�r�r�r
r
r�test_bad_use�szCommandLineTest.test_bad_usecCs0tD]&}dD]}|�||�}|�|d�qqdS)N)�-tz--testrZ)�testtarnamesr�r<�rr��optr�r
r
r�test_test_command�sz!CommandLineTest.test_test_commandcCs2tD](}dD]}|�|d|�}|�d|�qqdS)N��-vz	--verboser�sis a tar archive.
)r�r�r�r�r
r
r�test_test_command_verbose�sz)CommandLineTest.test_test_command_verbosecCs�t�d�}|�d|�\}}}|�d|�|�|d�|�|d�tD]�}|j|d���t|d��}|��}W5QRXzVtt
d��}|�|dd	��W5QRX|�dt
�\}}}|�|d�|�|d�W5t�	t
�XW5QRXqDdS)
N�
zipdir.zipr�� is not a tar archive.rZrV)r�rUr�r)rr�r�r�r<r��subTestrr;r�r�r�)r�zipnamer�r�r�r�r�r	r
r
r�test_test_command_invalid_file�s 
z.CommandLineTest.test_test_command_invalid_filecCs|tD]r}t���*}t�|d��}|jdd�W5QRXW5QRX|���dd�}dD] }|j||dd�}|�	||�qTqdS)NrDFr�r�r�)r�z--list�ZPYTHONIOENCODING�
r�rZcaptured_stdoutrrrSr�rfr�r<�rr�r�r��expectedr�r�r
r
r�test_list_command�s
 �z!CommandLineTest.test_list_commandcCs~tD]t}t���*}t�|d��}|jdd�W5QRXW5QRX|���dd�}dD]"}|j|d|dd�}|�	||�qTqdS)	NrDTr�r�r�r�r�r�r�r�r
r
r�test_list_command_verbose�s
 
�z)CommandLineTest.test_list_command_verbosecCsDt�d�}|�d|�\}}}|�d|�|�|d�|�|d�dS)Nr�r�r�rZrV)rr�r�r�r<�rr�r�r�r�r
r
r�test_list_command_invalid_file	s

z.CommandLineTest.test_list_command_invalid_filec
Cspt�d�t�d�g}dD]R}z@|j|tf|��}|�|d�t�t��}|��W5QRXW5t�t�XqdS)Nr�r�)�-cz--createrZ)	rr�r�r�r�r<rrr��rr�r�r�r2r
r
r�test_create_command	s�z#CommandLineTest.test_create_commandc
Csrt�d�t�d�g}dD]T}zB|j|dtf|��}|�d|�t�t��}|��W5QRXW5t�t�XqdS)Nr�r�r�r�s file created.)	rr�r�r�r�r�rrr�r�r
r
r�test_create_command_verbose	s�z+CommandLineTest.test_create_command_verbosec	Cs^t�d�g}z@|jdtf|��}|�|d�t�t��}|��W5QRXW5t�t�XdS)Nr�r�rZ)	rr�r��dotlessnamer�r<rrr�)rr�r�r2r
r
r�$test_create_command_dotless_filename)	sz4CommandLineTest.test_create_command_dotless_filenamec	Csltj�td�}t�d�g}z@|jd|f|��}|�|d�t	�
|��}|��W5QRXW5t�|�XdS)Nz.testtarr�r�rZ)rIrJrKrHrr�r�r�r<rrr�)rr�r�r�r2r
r
r�(test_create_command_dot_started_filename3	sz8CommandLineTest.test_create_command_dot_started_filenamec
Cs�t�d�t�d�g}tttfD]\}|js*qzBtd|j}|j	d|f|��}|�
|��}|��W5QRXW5t�|�XqdS)Nr�r�r�r�)rr�rr#r'rr�r�rr�rr�)rr�Zfiletyper�r�r2r
r
r�test_create_command_compressed>	s�z.CommandLineTest.test_create_command_compressedc
CsX|�t�dD]D}z2t�t��|�|t�}W5QRX|�|d�W5t�t�XqdS)N)�-ez	--extractrZ�r�r�rr
�	tarextdir�temp_cwdr�r<�rr�r�r
r
r�test_extract_commandM	s
z$CommandLineTest.test_extract_commandc
CsZ|�t�dD]F}z4t�t��|�|dt�}W5QRX|�d|�W5t�t�XqdS)Nr�r�� file is extracted.)r�r�rr
r�r�r�r�r�r
r
r�test_extract_command_verboseW	s
z,CommandLineTest.test_extract_command_verbosec	Cs�|�t�tj�td�}t�t�zNt�	|��:|�
dtddd�|jdtddddd�}|�d	|�W5QRXW5t�t�XdS)
N�destr�r�z--filterr	�
fully_trustedrHr�r�)
r�r�rIrJrKr�r	rr
r�r�r�r�)r�destdirr�r
r
r�test_extract_command_filtera	s$

��z+CommandLineTest.test_extract_command_filterc	CsP|�t�z4t�t��|�dtd�}W5QRX|�|d�W5t�t�XdS)Nr�ZspamdirrZr�)rr�r
r
r�(test_extract_command_different_directoryt	s
z8CommandLineTest.test_extract_command_different_directoryc	CsZt�d�}t�t��|�d|�\}}}W5QRX|�d|�|�|d�|�|d�dS)Nr�r�r�rZrV)rr�r�r�r�r�r<r�r
r
r�!test_extract_command_invalid_file}	s
z1CommandLineTest.test_extract_command_invalid_fileN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr��s*		





	r�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextManagerTestc	Cs6t�t��}|�|jd�W5QRX|�|jd�dS)Nzclosed inside runtime context�context manager failed)rrrr�rrr�r
r
r�
test_basic�	szContextManagerTest.test_basicc
Cs<t�t�}|��|�t��|�W5QRXW5QRXdSr)rrrr4r�r�r�r
r
r�test_closed�	s

zContextManagerTest.test_closedc
CsR|�t�� }t�t��
}t�W5QRXW5QRX|�|jtd�|�|j	d�dS)Nz)wrong exception raised in context managerr�)
r��	Exceptionrrrr�r��	exceptionrr)rr_r2r
r
r�test_exception�	s
�z!ContextManagerTest.test_exceptionc	CsVz t�td��
}t�W5QRXWnYnX|�tj�t�dd�|�|j	d�dS)Nr�rz-context manager wrote an end-of-archive blockr�)
rrr�r�r<rIrJr�rrr�r
r
r�test_no_eof�	s�zContextManagerTest.test_no_eofc	Cs2t�td��W5QRX|�tj�t�dd�dS)Nr�rz-context manager wrote no end-of-archive block)rrr�r�rIrJr�rr
r
r�test_eof�	s

�zContextManagerTest.test_eofc
Csfttd��R}z"tj|dd��
}t�W5QRXWnYnX|�|jd�|�|jd�W5QRXdS)Nr�r�r�zexternal file object was closedr�)rr�rr�r�rrr�r
r
rrt�	szContextManagerTest.test_fileobjN)	rrrr�r�r�r�r�rtr
r
r
rr��	s		r�zrequires 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)�LinkEmulationTestc	CsJ|j�|t�ttj�t|�d��}|��}W5QRX|�t	|�t
�dS)NrU)r2rGrHrrIrJrKr;r<rr?)rrkr�r	r
r
r�_test_link_extraction�	sz'LinkEmulationTest._test_link_extraction�islinkz3Skip emulation - has os.path.islink but not os.linkcCs|�d�dS)Nrp�rrr
r
r�test_hardlink_extraction1�	sz+LinkEmulationTest.test_hardlink_extraction1cCs|�d�dS)Nrsrrr
r
r�test_hardlink_extraction2�	sz+LinkEmulationTest.test_hardlink_extraction2r�z Skip emulation if symlink existscCs|�d�dS)Nrvrrr
r
r�test_symlink_extraction1�	sz*LinkEmulationTest.test_symlink_extraction1cCs|�d�dS)Nrxrrr
r
r�test_symlink_extraction2�	sz*LinkEmulationTest.test_symlink_extraction2N)
rrrrr#�skipIfr%rIrJrrrrr
r
r
rr�	s"�
�
�
�rc@s$eZdZdd�Zdd�Zdd�ZdS)�Bz2PartialReadTestc	szG�fdd�dtj��t�t�d����}tt|�d�D]:}ztj	�|d|��|d�Wq:tj
k
rrYq:Xq: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;)rr8��	MyBytesIO�	__class__r
rr;�	sz>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readcsd|_t�|�j|�Sr�)r
rr\r�r
r
rr\�	sz>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)rrrr
r;r\�
__classcell__r
�r)rrr�	srr�rVr�)rr�r$�compressrr�r��ranger=rr�)rrr	r%r
rr�_test_partial_input�	sz&Bz2PartialReadTest._test_partial_inputcCs|�d�dS)NrD�rrr
r
r�test_partial_input�	sz%Bz2PartialReadTest.test_partial_inputcCs|�d�dS)Nzr:bz2rrr
r
r�test_partial_input_bz2�	sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrrrrr
r
r
rr	�	sr	cCs\zddl}ddl}Wntk
r*YdSX|�d�ddkrBdS|�d�ddkrXdSdS)NrF�rootT)r�r��ImportError�getpwuid�getgrgid)r�r�r
r
r�root_is_uid_gid_0
sr�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��N}|D]B\}}}}	}
t�|�}||_||_	d	|_
d	|_|	|_|�
||
�qJW5QRXtS)
Nscontent�c�b�M�L�X�Wr�r)rr�rr1r�rr�r�rOrPr�rQr�r�)�
filename_1�	dirname_1�
filename_2rBrR�tarflrkrOrP�typ�contentsr�r
r
r�_make_test_archive
s
�
z#NumericOwnerTest._make_test_archivec	csZd|_d}d}|}|}tj�||�}t�|||�}t�|��}||||fVW5QRXdS)Nrznumeric-owner-testfiler�)r�rIrJrKrr,rr)�mock_geteuidZfname�dirnamer&r'r(Ztar_filenamer)r
r
r�_setup_test.
s�zNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc
	Cs�|�|��.\}}}}|j|tdd�|j|tdd�W5QRXtj�t|�}tj�t|�}	|jtj�	|dd�tj�	|	dd�gdd�dS)NT�Z
numeric_ownerr r!r$r%�Z	any_order)
r/rGrHrIrJrK�assert_has_callsr#r��call)
rr-�
mock_chmod�
mock_chownr)r&�_r(�f_filename_1�f_filename_2r
r
r�test_extract_with_numeric_ownerD
s��z0NumericOwnerTest.test_extract_with_numeric_ownerc	Cs�|�|��\}}}}|jtdd�W5QRXtj�t|�}tj�t|�}	tj�t|�}
|jtj�	|dd�tj�	|	dd�tj�	|
dd�gdd	�dS)
NTr0r r!r"r#r$r%r1)
r/r�rHrIrJrKr2r#r�r3)rr-r4r5r)r&r'r(r7Zf_dirname_1r8r
r
r�"test_extractall_with_numeric_ownerW
s��z3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"c	CsN|�|��\}}}}|j|tdd�W5QRXtj�t|�}|�|dd�dS)NFr0r)r/rGrHrIrJrKZassert_called_with)rr-r4r5r)r&r6r7r
r
r�"test_extract_without_numeric_ownero
sz3NumericOwnerTest.test_extract_without_numeric_ownerc	Cs8|�|��$\}}}}|�t|j|tdd�W5QRXdS)NFT)r/r�r�rGrH)rr-r)r&r6r
r
r�test_keyword_only~
s�z"NumericOwnerTest.test_keyword_onlyN)rrrr�r,rr/r#r�r�r9r:r$rr;r<r
r
r
rr
s,	






�




rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�ReplaceTestscCsN|j�d�}|jdd�}|�|jd�|�|jd�|�|j�d�jd�dS)Nr7z
misc/other�rk)r2r9r�r<rk�rr�replacedr
r
r�test_replace_name�
s�zReplaceTests.test_replace_namecCsN|j�d�}|��}d|jd<|�|jdd�|�|j�d�jdd�dS)Nr��not-barrQr��r2r9r�r�r<r?r
r
r�test_replace_deep�
s
�zReplaceTests.test_replace_deepcCsR|j�d�}|jdd�}d|jd<|�|jdd�|�|j�d�jdd�dS)Nr�F)ZdeeprBrQrCr?r
r
r�test_replace_shallow�
s
�z!ReplaceTests.test_replace_shallowc
Csf|j�d�}dD]P}|j|d��:|jf|di�}|�t||�d�|�t||�d�W5QRXqdS)Nr7)rkr�rrcrOrPr�rQ��	attr_name)r2r9r�r�r<r�r�)rrrGr@r
r
r�test_replace_all�
szReplaceTests.test_replace_allc	Cs2|j�d�}|�t��|jdd�W5QRXdS)Nr7i�[)r�)r2r9r�r�r�)rrr
r
r�test_replace_internal�
sz"ReplaceTests.test_replace_internalN)rrrrArDrErHrIr
r
r
rr=�
s
	r=c@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)
NrDr.r/Zextractall_ctrlr�r�c3s|]}|��j�VqdSr)�relative_to�control_dir�r�prr
r�	<genexpr>�
s�z2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>�**/*)rrrr�r�rHrMr�r��extraction_filterr4�set�glob�
control_paths)rr2r
rrr�
s�zNoneInfoExtractTests.setUpClasscCst�|j�dSr)�shutilr
rMrr
r
rr�
sz"NoneInfoExtractTests.tearDownClasscs4t�fdd�t����d�D��}|�|j|�dS)Nc3s|]}|���VqdSr)rLrN�r�r
rrP�
s�z;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>rQ)rSr�r�rTr<rU)rr�Z	got_pathsr
rWr�check_files_present�
s�z(NoneInfoExtractTests.check_files_presentc	gsvt�t�d}d|j_|j��D]}|D]}t||d�q(q t�|��&|jj	|dd�|�
|�|VW5QRXdS)NZextractall_nonerr�rK)r�r�rHr2r�r��setattrrrr�rX)r�
attr_namesrrrGr
r
r�extract_with_none�
s
z&NoneInfoExtractTests.extract_with_nonecCs�t�t���j}|�d��t}t�|��d�D]\}|j|d��Fz|��j}Wntk
rj|�	�sf�YnX|�
|��j|�W5QRXq,W5QRXdS)Nr�rQr)r�r�rHr�st_mtimer[rTr�r��
is_symlinkZassertGreaterEqual)rZnowrrJr�r
r
r�test_extractall_none_mtime�
sz/NoneInfoExtractTests.test_extractall_none_mtimecCs�t�t���j}t�t�d}|�d�|��j}|�d��j}t�|��d�D]R}|j|d��<|�	�r||�
|��j|�n|��r�|�
|��j|�W5QRXqNW5QRXdS)N�regular_filerrrQr)r�r�rHrr
Z
write_textr[rTr��is_dirr<�is_file)rZdir_moder_Zregular_file_moderrJr
r
r�test_extractall_none_mode�
s

�z.NoneInfoExtractTests.test_extractall_none_modec	Cs|�d��W5QRXdS)NrO�r[rr
r
r�test_extractall_none_uid�
sz-NoneInfoExtractTests.test_extractall_none_uidc	Cs|�d��W5QRXdS)NrPrcrr
r
r�test_extractall_none_gid�
sz-NoneInfoExtractTests.test_extractall_none_gidc	Cs|�d��W5QRXdS)Nr�rcrr
r
r�test_extractall_none_uname�
sz/NoneInfoExtractTests.test_extractall_none_unamec	Cs|�d��W5QRXdS)NrQrcrr
r
r�test_extractall_none_gnamesz/NoneInfoExtractTests.test_extractall_none_gnamec	Cs |�dddd��W5QRXdS)NrOrPr�rQrcrr
r
r�test_extractall_none_ownershipsz3NoneInfoExtractTests.test_extractall_none_ownership)rrrrRr*rrrXrr[r^rbrdrerfrgrhr
r
r
rrJ�
s



rJc@seZdZdZdS)�NoneInfoExtractTests_Datar	N�rrrrRr
r
r
rrisric@seZdZdZdS)�!NoneInfoExtractTests_FullyTrustedr�Nrjr
r
r
rrksrkc@seZdZdZdS)�NoneInfoExtractTests_Tarr2Nrjr
r
r
rrlsrlc@seZdZdZdS)�NoneInfoExtractTests_DefaultNrjr
r
r
rrmsrmc@seZdZdd�Zdd�ZdS)�NoneInfoTests_Miscc
Cs�t��}tjtjtjfD]�}|j|d���tj|d|d�}|�t	�}z|�
|�Wn"tk
rt|tjkrnn�YnXXdD]P}|j|d��:|jf|di�}|�
t|���|�
|�W5QRXW5QRXqzW5QRXqdS)N)�	tarformatr�)r�rr)r�rrOrPr�rQrF)rr�rrdrr�r�rr�rr�r�r�r�r�)r�bioror2rArGr@r
r
r�test_adds(�

�zNoneInfoTests_Misc.test_addc
Cs�dhdhdhdhdhdhddhddhfD�]`}|j|d���Htjtdd	���,}tjt��d
dd�}t�t	d
|��|�
�W5QRX|��D]}|D]}t||d�q�q�tjt��d
dd�}t�t	d
|��|�
�W5QRXt
|������|�������D�]p\}}|dhk�r6t�d|��r6|�|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�r*|�d��r*|�d�\}	}
|�d�\}}|�||	�|�|d��q|dhk�rx|�d��rx|�d�\}	}
|�d�\}}|�||
�|�|d�n�|dhk�r�|�d��r�|�d�\}	}
|�d�\}}|�||	�|�|d�n�|ddhk�r|�d��r|�d�\}	}
|�d�\}}|�||
�|�|d�n\|ddhk�rf|�d��rf|�d�\}	}
|�d�\}}|�||	�|�|d�n|�||��qW5QRXW5QRXq(dS)Nr�rrOrPr�rQ)rZr.r�r�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)rrrsrtry)rvrwrxrz)r�rrrrrMr�rr�r�rSr�rYr!r�r�r��re�matchr<r�r��endswith)
rrZr2Ztio_prevrrGZtio_newr��gotZexp_userZ	exp_groupZgot_userZ	got_groupr
r
rr�4s��
��������zNoneInfoTests_Misc.test_listN)rrrrqr�r
r
r
rrnsrncCs�|dd�}tjdd�|dtjdd�|dBtjdtjtjBtjd�|dBtjdd�|dBtjdd�|dBtjdtjtjBtjd�|d	Btj	dd�|d
Btj
dd�|dBtjdtjtjBtjd�|d
B}|S)NrVr)rD�-)r�r)r%rr`�SrYrf��r��)r%rr��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�resultr
r
r�_filemode_to_intwsF�
�����
���
��
����r�c@sBeZdZdd�Zdd�Zdd�Zdddddd�d	d
�Zdd�ZdS)
�ArchiveMakercCst��|_dSr)rr�rprr
r
rr�szArchiveMaker.__init__cCstjd|jd�|_|S)Nr�r�)rrrp�tar_wrr
r
r�	__enter__�szArchiveMaker.__enter__cGs |j��|j��|_d|_dSr)r�r4rpr�r+)rr_r
r
r�__exit__�s
zArchiveMaker.__exit__N)r��
symlink_to�hardlink_torr>c
Ks�t|�}t�|�jf|�}|dk	r(||_|r6t|�|_|dk	rNtj}t|�|_|dk	rftj	}t|�|_|�
d�r~|dkr~tj}|dk	r�||_|�
�r�t�t|j��}	nd}	|j�||	�dS)Nr|)r�rr�r�r>r�rr�rcrr}r�r�r0rr�r�r�r�)
rrkr�r�r�rr>rTrAr�r
r
rr��s(


zArchiveMaker.addcKs t�|j�}tjfd|i|��S)Nr�)rr�r+rr)rrTrpr
r
rr�szArchiveMaker.open)rrrrr�r�r�rr
r
r
rr��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�outerdirr�ccs�t�|j���z|j|j|d�Wn0tk
rR}z||_t�|_W5d}~XYn(Xd|_t|j�	d��|_|j�
|j�z
dVW5|��X|jr�|j�|�|jt��W5QRXdS)NrKrQ)
rrr�r�r�r��raised_exceptionrS�expected_pathsrT�discardr4r<)rr2r�r_r
r
r�
check_context�s

z#TestExtractionFilters.check_contextNc
Csr|jr|j�t�tj�|j|��}|�||j�|j�	|�|dk	rrt
jdkrrt�
t�|��j��}|�||�|dkr�t|t�r�|�d�r�tj}|dk	r�t�t�|j|��}t�|�}||kr�|�|�|��nb|tjks�|dkr�|�|���n@|tjk�r|�|���n$|tjk�r0|�|���nt|��|dk	�rT|�|��j|�|j D]}	|j�!|	��qZdS)Nrr|)"r�r�r�rIrJ�normpathr�r�r��remover�rrr��S_IMODEr
r<rr�r}rr��readlinkr�samefiler1rar`r�Zis_fifo�NotImplementedErrorr��parentsr�)
rrkr�r�rr>rJr~r��parentr
r
r�expect_file�s4


z!TestExtractionFilters.expect_filer�c	Cs2|�||��|jdk	r|j�W5QRXd|_dSr)r�r�)r�exc_typeZ
message_rer
r
r�expect_exceptions
z&TestExtractionFilters.expect_exceptionc
CsPt��}|�d�W5QRXdD]*}|�|��|��|�d�W5QRXq dS)Nz
benign.txt)r�r2r	�r�r�r�rr��r�arcr�r
r
r�test_benign_files
z&TestExtractionFilters.test_benign_filec
Cs�t��}|�|jd�W5QRX|�|��d��|�d�W5QRXdD]`}|�|��|��Ft|j��d�r�t|j��d�}|�|�d��n|�	t
jd�W5QRXqLdS)Nzescaped.evilr�z../escaped.evil�r2r	r|z
/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r�r�r�r�rr�r�r��lstripr�rr�)rr�r�Zouterdir_strippedr
r
r�
test_absolute%s�z#TestExtractionFilters.test_absolutec	Cspt��,}|jddd�|jddd�|�d�W5QRXt��r�|�|��d��N|jdk	rt|�t�W5QR�dS|j	ddd�|j	ddd�|�	d�W5QRX|�|��d	��|�t
jd
�W5QRX|�|��d��|�t
jd�W5QRXnr|�|��d��|�	d�W5QRX|�|��d	��|�	d�W5QRX|�|��d��|�	d�W5QRXdS)
N�currentr��r�r�z
current/..�parent/evilr�r�r2�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�r
r
r�test_parent_symlink>s8

��z)TestExtractionFilters.test_parent_symlinkc	Cs�t��r�tj�td�}t�|�t�dtj�|d��ttj�|ddd�d��W5QRXtj�	tj�|d��rvd}n&tj�	tj�|dd��r�d}nt
d	��t��,}|jddd
�|jddd
�|�d�W5QRX|�
|��d
��Lt���r|jddd
�|jddd
�|�d�n|�d�|�d�W5QRX|�
|��d��4t���rb|�tjd�n|�d�|�d�W5QRX|�
|��d��Jt���r�|�r�|�tjd�n|�tjd�n|�d�|�d�W5QRXdS)NZresolution_testr�r�r�r�r�TFz#Could not determine link resolutionr�zcurrent/parentr�r�r�r�zcurrent/r2r�r	zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)rr�rIrJrKrHr	r�rr�rr�r�r�r�r�rr�r�)rZtestpathZdotdot_resolves_earlyr�r
r
r�test_parent_symlink2psV




�

��
z*TestExtractionFilters.test_parent_symlink2c	Cs�t�� }|jd|jd�|�d�W5QRX|�|��d��4t��rb|jd|jd�|�d�n
|�d�W5QRX|�|��d��(t��r�|�t	j
d�n
|�d�W5QRX|�|��d��|�t	jd	�W5QRXdS)
Nr�r�r�r�r�r2r�r	�&'parent' is a link to an absolute path)r�r�r�r�rrr�r�r�rr�r�r�r
r
r�test_absolute_symlink�s(��z+TestExtractionFilters.test_absolute_symlinkc	Cs�t��}|jd|jdd�W5QRX|�|��d��|�td�W5QRX|�|��d��|�td�W5QRX|�|��d��|�tjd�W5QRXdS)	Nr�r��r�r�z.*foo. not foundr2r	r�)	r�r�r�r�rr�r�rr�r�r
r
r�test_absolute_hardlink�s�z,TestExtractionFilters.test_absolute_hardlinkc
Cs�t��}|jddd�W5QRXzR|j|��dd��6t��rft|jt�rV|�	t�qf|j
ddd�nW5QRXWntk
r�YnXdD].}|�|��|��|�	tjd�W5QRXq�dS)N�../mooz..//tmp/moor�r�rKr�zH'../moo' would be extracted to '.*moo', which is outside the destination)
r�r�r�rrr�rr�r"r�r�rr�r�r
r
r�test_sly_relative0�s"�z(TestExtractionFilters.test_sly_relative0c
Cs�t��}|�d�|jddd�W5QRX|�|��d��,|jdtjd�t��rb|jdd	d�W5QRXd
D].}|�|��|��|�	tj
d�W5QRXqpdS)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�r
r
r�test_sly_relative2
s
�z(TestExtractionFilters.test_sly_relative2c
Cs�t��F}|jddd�|jdtj�dd�d�|jdtj�d	dd�d
�W5QRXdD]d}|�|��|��J|jddd�|jddd�t�	�r�|jdddd
�n|jddd�W5QRXqVdS)N�targetdir/targetrfr]�linkdir/hardlinkZ	targetdirr�r��linkdir/symlinkr�r��r2r	r�z../targetdir/target�r>r��
r�r�rIrJrKr�rr�rr�r�r
r
r�test_deep_symlink)
s(���z'TestExtractionFilters.test_deep_symlinkc
Cs�t��V}|jddd�|jdtj�dd�d�|jddd	�|jd
dd�|jddd�W5QRXd
D]�}|�|��|��v|jddd	�|jd
dd	�|jddd	�t�	�r�|jdddd�|jdddd�n|jddd	�|jddd	�W5QRXqfdS)Nr�Zhardlinkr�Zsymlink2ZlinkdirZ	hardlink2r�rfr]r�r�zlinkdir/hardlink2r�r�r�r�r
r
r�test_chains@
s.���z!TestExtractionFilters.test_chainsc	Cs�t��Z}|jddd�|jddd�|jddd�|jdd	d�|jd
dd�|jdd
d�W5QRXtj�td�}t|d��W5QRXt�|t�|�j	tj
B�t�|�j	tj
@}t�|�t�|�t�|t�|�j	tj
B�t�|�j	tj
@}t�
|�|�|��d���|�r(|jddd�n|jddd�|jddd�|jddd�|jdd	d�|jd
dd�|�r�|jdd
d�n|jddd�W5QRX|�|��d��Z|jddd�|jddd�|jddd�|jdd	d�|jd
dd�|jddd�W5QRX|�|��d��rt�t�|j��j	��}|jddd�|jddd�|jddd�|jddd�|jd
dd�|jd|d�W5QRXdS)NZall_bitsz
?rwsrwsrwtr�Z	perm_bitsz
?rwxrwxrwxZexec_group_otherz
?rw-rwxrwxZread_group_onlyz
?---r-----Zno_bitsz
?---------zdir/z
?---rwsrwtztmp.filer�r�z
?rwsrwsrwxz
?---rwsrwxr2z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr	z
?rw-r--r--z
?rw-r-----z
?rw-------)r�r�rIrJrKrHr�chmodrr
r�r�r	r�r�r�r�r�r�)rr�Ztmp_filenameZhave_sticky_filesZhave_sticky_dirsZnormal_dir_moder
r
r�
test_modesY
sZ




�z TestExtractionFilters.test_modesc
Cs�t��}|jdtjd�W5QRXdD]<}|�|��|��"ttd�rX|jdtjd�nW5QRXq&|�|��d��|�	tj
d�W5QRXdS)Nr�r�)r�r2�mkfifor	z'foo' is a special file)r�r�rr�r�rr%rIr�r�r�r�r
r
r�	test_pipe�
s
�zTestExtractionFilters.test_pipec
Cs�tjtjtjfD]�}t�d�}||_t�|d�}|�||�t�|d�}|�	|j|�|�
tj��}t�|d�W5QRX|�
|jjtj�|�	|jjjd�qdS)Nr�r)rr�r�r�r�r�r�rOr�r<r�r�r�r�r�rArk)rZspecial_typerAZtrustedr2�cmr
r
r�test_special_files�
s
z(TestExtractionFilters.test_special_filesc	CsBtj�t��,}|��D]}t�|d�}|�||�qW5QRXdS�Nr)rrrrr�r�rO�rr2rAZfilteredr
r
r�test_fully_trusted_filter�
sz/TestExtractionFilters.test_fully_trusted_filterc	CsVtj�t��@}|��D]0}t�|d�}|�|j|j�|�|j|j�qW5QRXdSr�)	rrrrr�r�rOrkr�r�r
r
r�test_tar_filter�
s
z%TestExtractionFilters.test_tar_filterc
Csvtj�t��`}|��D]P}zt�|d�}Wntjk
rDYqYnX|�|j|j�|�|j	|j	�qW5QRXdSr�)
rrrrr�r�r�rOrkr�r�r
r
r�test_data_filter�
s
z&TestExtractionFilters.test_data_filterc
Cs\t��}|�d�W5QRXt�|��,|�|��d��|�d�W5QRXW5QRXdSr{)r�r�rZcheck_no_warningsr�rr�r�r
r
r�test_default_filter_warns_not�
s
z3TestExtractionFilters.test_default_filter_warns_notc	Cs@t�td�}dd�}||_|�|d��|�d�W5QRXdS)NrDcSs|jdkr|SdSdS�Nr7r>�rArJr
r
r�
strict_filter�
s
zSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filterr7)rrrrRr�r�)rr2r�r
r
r�&test_change_default_filter_on_instance�
s
z<TestExtractionFilters.test_change_default_filter_on_instancec
CsZdd�}t�td�}t�tjdt|���(|�|d��|�d�W5QRXW5QRXdS)NcSs|jdkr|SdSdSr�r>r�r
r
rr��
s
zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filterrDrRr7)rrrrr�r�r�r�)rr�r2r
r
r�#test_change_default_filter_on_class�
s
�z9TestExtractionFilters.test_change_default_filter_on_classc	CsBGdd�dtj�}|td�}|�|d��|�d�W5QRXdS)Nc@seZdZdd�ZdS)zQTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclasscSs|jdkr|SdSdSr�r>�rrArJr
r
rrR�
s
zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filterNrjr
r
r
r�TarSubclass�
sr�rDr7)rrrr�r�)rr�r2r
r
r�&test_change_default_filter_on_subclass�
s
z<TestExtractionFilters.test_change_default_filter_on_subclassc	Cs8t�td�}d|_|�|d��|�t�W5QRXdS)NrDr	)rrrrRr�r�r�r�r
r
r�$test_change_default_filter_to_string�
sz:TestExtractionFilters.test_change_default_filter_to_stringc	sp�fdd�}t��$}|�d�|�d�|�d�W5QRX��|��|����d���d�W5QRXdS)Ncs6��|�j�|jdkr$|jdd�S|jdkr2dS|S)N�	move_this�movedr>�ignore_this)rOr�rkr�r�rr
r�
custom_filters

z?TestExtractionFilters.test_custom_filter.<locals>.custom_filterr�r�Zkeepr�r�)rr�r�r
rr�test_custom_filters


z(TestExtractionFilters.test_custom_filterc	CsFt��}|�d�W5QRX|�|��d��|�t�W5QRXdS)Nr�zbad filter name)r�r�r�rr�r�r�r
r
r�test_bad_filter_namesz*TestExtractionFilters.test_bad_filter_namec
Cs�Gdd�d�}t��(}|�d�|jddd�|�d�W5QRX|��,}|�|��|��|�d�W5QRXW5QRX|�|jd�|�|jd�dS)	Nc@s$eZdZdd�Zdd�Zdd�ZdS)zBTestExtractionFilters.test_stateful_filter.<locals>.StatefulFiltercSs
d|_|Sr4)�num_files_processedrr
r
rr�szLTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__enter__cSs<zt�||�}Wntjk
r(YdSX|jd7_|S)NrV)rr�r�r�r�r
r
r�__call__!szKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__cWs
d|_dS)NT)�done)r�exc_infor
r
rr�)szKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__N)rrrr�r�r�r
r
r
r�StatefulFiltersr�ZgoodZbadr|r�rYT)r�r�r�rr�r<r�r�)rr�r�r�r
r
r�test_stateful_filters
z*TestExtractionFilters.test_stateful_filterc	Cs�dd�}dd�}dd�}dd�}d	d
�}t��}|�d�W5QRX|�|jdd
�|��|�d�W5QRX|�|jdd
�|��|�d�W5QRX|�|jdd
�|��|�d�W5QRX|�|jdd
�|��|�tj�W5QRX|�|jdd
�|��|�t�W5QRX|�|jdd
�|��|�d�W5QRX|�|jdd
�|��|�tj	�W5QRX|�|jdd
�|��|�t
�W5QRX|�|jdd
�|��|�tj�W5QRX|�|jdd
�|��|�t�W5QRX|�|jdd
�|��|�tj�W5QRX|�|jdd
�|��|�tj	�W5QRX|�|jdd
�|��|�t
�W5QRX|�|jdd
�|��|�tj�W5QRX|�|jdd
�|��|�t�W5QRX|�|jdd
�|��|�t�W5QRXdS)NcSst�d��dS)Nzfailed with ExtractError)r�ExtractErrorr�r
r
r�extracterror_filter7szBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filtercSst�d��dS)Nzfailed with FilterError)rr�r�r
r
r�filtererror_filter9szATestExtractionFilters.test_errorlevel.<locals>.filtererror_filtercSstd��dS)Nzfailed with OSError)r�r�r
r
r�oserror_filter;sz=TestExtractionFilters.test_errorlevel.<locals>.oserror_filtercSst�d��dS)Nzfailed with base TarError)r�TarErrorr�r
r
r�tarerror_filter=sz>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filtercSstd��dS)Nzfailed with ValueError)r�r�r
r
r�valueerror_filter?sz@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filterr�rr�rVrYzboo!)
r�r�r�rr�r�rr�r�r�r�r�r�)rr�r�r�r�r�r�r
r
r�test_errorlevel6sNz%TestExtractionFilters.test_errorlevel)NNNN)r�)%rrrr�r�rHr�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr��sB
�
(
2V"9
r�c
Cs�t�t�t�t�tgattd��}|��}W5QRXt	t
tfD]F}|jrBt�|j�t�|j�|�|jd��}|�
|�W5QRXqBdS)NrUr�)rr�rHrI�makedirsrr�rr;rr#r'r�r�)rBr	�cr2r
r
r�setUpModule~s

r�cCstj�t�rt�t�dSr)rIrJr�rHrr
r
r
r
r�tearDownModule�sr��__main__)r�rIrZhashlibr�
contextlibr�randomrr�rVr{�warningsrr#Z
unittest.mockrr;rZtest.supportrr"rr$r*rrJr�ZTESTFNrHr�r�rrKr!r%r)r�r�r?rmr
Z
requires_gziprZrequires_bz2r#Z
requires_lzmar'r,ZTestCaser6r{r}r~rr�r�r�r�r�r'r(r)r-r.r<r=r>r?rHrIrLrMr{r�r�r�r�r�r�r�r�r�r�r�r�rr+r,r-r.r$r%r/r5rBrRrerirkror�r�r�r�r�r�r�rrr	rrr=rJrirkrlrmrnr�r�r�r�r�rr�r
r
r
r�<module>s



��
|PW{=(a*;,9'RZ*TQO@;Y[:!v(^��^6:


F1le Man4ger