HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_tarfile.cpython-37.pyc
B

��gم�@s~ddlZddlZddlZddlmZddlmZddlmZddl	Z	ddl
Z
ddlZ
ddlZddl
mZddlmZyddlZWnek
r�dZYnXyddlZWnek
r�dZYnXyddlZWnek
r�dZYnXdd�Zej�ej�d	Zed
Ze�d�Zej�ed�Zej�ed
�Zej�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%�Z,Gdd�de,e
j-�Z.Gdd �d e'e.�Z/Gd!d"�d"e)e.�Z0Gd#d$�d$e+e.�Z1Gd%d&�d&e,e
j-�Z2Gd'd(�d(e'e2�Z3Gd)d*�d*e)e2�Z4Gd+d,�d,e+e2�Z5Gd-d.�d.e,�Z6Gd/d0�d0e6�Z7Gd1d2�d2e7e
j-�Z8Gd3d4�d4e'e7e
j-�Z9Gd5d6�d6e)e7e
j-�Z:Gd7d8�d8e+e7e
j-�Z;Gd9d:�d:e6e
j-�Z<Gd;d<�d<e'e<�Z=Gd=d>�d>e)e<�Z>Gd?d@�d@e+e<�Z?GdAdB�dBe%e
j-�Z@GdCdD�dDe'e@�ZAGdEdF�dFe)e@�ZBGdGdH�dHe+e@�ZCGdIdJ�dJe,e
j-�ZDGdKdL�dL�ZEGdMdN�dNeEe,e
j-�ZFGdOdP�dPeEe,e
j-�ZGGdQdR�dRe%�ZHGdSdT�dTeHe
j-�ZIGdUdV�dVe'eI�ZJGdWdX�dXe)eI�ZKGdYdZ�dZe+eI�ZLGd[d\�d\eHe
j-�ZMGd]d^�d^e'eM�ZNGd_d`�d`e)eM�ZOGdadb�dbe+eM�ZPGdcdd�dde
j-�ZQGdedf�dfeHe
j-�ZRGdgdh�dhe'eR�ZSGdidj�dje)eR�ZTGdkdl�dle+eR�ZUGdmdn�dneR�ZVe
�WeXedo�dp�Gdqdr�dre
j-��ZYGdsdt�dteQ�ZZGdudv�dv�Z[Gdwdx�dxe[e
j-�Z\Gdydz�dze[e
j-�Z]Gd{d|�d|e[e
j-�Z^Gd}d~�d~�Z_Gdd��d�e_e
j-�Z`Gd�d��d�e'e_e
j-�ZaGd�d��d�e)e_e
j-�ZbGd�d��d�e+e_e
j-�ZcGd�d��d�e
j-�ZdGd�d��d�e
j-�ZeGd�d��d�e
j-�ZfGd�d��d�e
j-�Zge
�heXedo�d��Gd�d��d�e,e
j-��ZiGd�d��d�e)e
j-�Zjd�d��Zke
�WeXed��d��e
�WeXed��d��Gd�d��d�e
j-���Zld�d��Zmd�d��Zneod�k�rze
�p�dS)��N)�md5)�contextmanager)�Random)�support)�
script_helpercCst|���S)N)rZ	hexdigest)�data�r�-/usr/local/lib/python3.7/test/test_tarfile.py�md5sumsr
z-tardirz
-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ 65f477c818ad9e15f7feab0c6d37742fZ a54fbc4ca4f4399a90e1b27164012fc6c@s.eZdZeZdZejZej	j
Z
edd��ZdS)�TarTest�cCs|j|jS)N)�prefix�suffix)�selfrrr	�mode4szTarTest.modeN)
�__name__�
__module__�__qualname__�tarnamer�io�FileIO�open�tarfile�TarFile�taropen�propertyrrrrr	r.s
rc@s*eZdZeZdZerejndZe	j
jZdS)�GzipTestZgzN)
rrr�gzipnamerr�gzipZGzipFilerrrZgzopenrrrrr	r8src@s*eZdZeZdZerejndZe	j
jZdS)�Bz2Test�bz2N)
rrr�bz2namerrr �BZ2FilerrrZbz2openrrrrr	r?src@s*eZdZeZdZerejndZe	j
jZdS)�LzmaTestZxzN)
rrr�xznamerr�lzmaZLZMAFilerrrZxzopenrrrrr	r#Fsr#c@s eZdZdZdd�Zdd�ZdS)�ReadTestzr:cCstj|j|jdd�|_dS)Nz	iso8859-1)r�encoding)rrrr�tar)rrrr	�setUpRszReadTest.setUpcCs|j��dS)N)r(�close)rrrr	�tearDownVszReadTest.tearDownN)rrrr
r)r+rrrr	r&Nsr&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�WdQRXdS)Nz
ustar/regtypezregular file extraction failed)	r(�	getmember�extractfile�read�assertEqual�len�sizer
�md5_regtype)r�tarinfo�fobjrrrr	�test_fileobj_regular_file\sz'UstarReadTest.test_fileobj_regular_filec	Cs�|j�dt�|j�d�}ttj�td�d��}|��}WdQRX|j�	|��J}t
�|�}|��}|�||d�|�t
|�dd�|�|ddd�WdQRXdS)Nz
ustar/regtype�rzfileobj.readlines() failed�r�SzOI will gladly admit that Python is not the fastest running scripting language.
)r(�extract�TEMPDIRr-r�os�path�join�	readlinesr.r�
TextIOWrapperr0r1)rr4�fobj1�lines1r5�fobj2�lines2rrr	�test_fileobj_readlineses

z$UstarReadTest.test_fileobj_readlinesc	Csz|j�dt�|j�d�}ttj�td�d��}|��}WdQRX|j�	|��"}t
t�|��}|�
||d�WdQRXdS)Nz
ustar/regtyper7zfileobj.__iter__() failed)r(r:r;r-rr<r=r>r?r.�listrr@r0)rr4rArBrCrDrrr	�test_fileobj_iterwszUstarReadTest.test_fileobj_iterc		Cs�|j�dt�ttj�td�d��}|��}WdQRX|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�|��dS)Nz
ustar/regtype�rbrzseek() to file's start failediz"seek() to absolute position failedi����iz+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 failedizreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failed)r(r:r;rr<r=r>r/r-r.�seekr0�tellr2r?r1�readliner*)	rr5rr4�text�s�s1�s2�linerrr	�test_fileobj_seek�s\






zUstarReadTest.test_fileobj_seekc	Csr|j�d��\}t�|�}|���d�}|�t|�t�y|�	d�Wnt
k
rb|�d�YnXWdQRXdS)Nz
ustar/regtypez	iso8859-1�dzseeking failed in text mode)r(r.rr@r/�encoder0r
r3rM�AttributeError�fail)rr5rrrr	�test_fileobj_text�s
zUstarReadTest.test_fileobj_textc
CsD|j�|��.}|j�|��}|�|j|j�WdQRXWdQRXdS)N)r(r.r0�name)rZlnktype�regtype�a�brrr	�_test_fileobj_link�sz UstarReadTest._test_fileobj_linkcCs|�dd�dS)Nz
ustar/lnktypez
ustar/regtype)r_)rrrr	�test_fileobj_link1�sz UstarReadTest.test_fileobj_link1cCs|�dd�dS)Nz./ustar/linktest2/lnktypezustar/linktest1/regtype)r_)rrrr	�test_fileobj_link2�sz UstarReadTest.test_fileobj_link2cCs|�dd�dS)Nz
ustar/symtypez
ustar/regtype)r_)rrrr	�test_fileobj_symlink1�sz#UstarReadTest.test_fileobj_symlink1cCs|�dd�dS)Nz./ustar/linktest2/symtypezustar/linktest1/regtype)r_)rrrr	�test_fileobj_symlink2�sz#UstarReadTest.test_fileobj_symlink2cCs|�dd�dS)NZsymtype2z
ustar/regtype)r_)rrrr	�test_issue14160�szUstarReadTest.test_issue14160N)rrrr6rErGrUrZr_r`rarbrcrdrrrr	r,Zs	
2r,c@seZdZdS)�GzipUstarReadTestN)rrrrrrr	re�srec@seZdZdS)�Bz2UstarReadTestN)rrrrrrr	rf�srfc@seZdZdS)�LzmaUstarReadTestN)rrrrrrr	rg�srgc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�ListTestcCstj|j|jd�|_dS)N)r)rrrrr()rrrr	r)�szListTest.setUpc	s,tjt��ddd�}t�td|���jjdd�WdQRX|���	�}��
d|���
d|���
d	|���
d
|���
d|���
d|���
d
|���
d|��fdd�}��
|d�|���
|d�|���
|d�|���
|d�|���
|d�|���|d���d|���d|�dS)N�ascii�
)�newline�stdoutF)�verbosesustar/conttypes
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�surrogateescaperi�backslashreplace)�decoder(r'rW)r^rQ)rrr	�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->)
rr@�BytesIOr�	swap_attr�sysr(rF�detach�getvalue�assertIn�assertRegex�assertNotIn)r�tio�outrqr)rr	�	test_list�s.

zListTest.test_listc	Cs�tjt��ddd�}t�td|��|jjdd�WdQRX|���	�}|�
|d�|�d|�|�d	|�|�d
|�|�d|�|�d|�dS)
Nrirj)rkrlT)rms�\?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)rr@rrrrsrtr(rFrurvrxrw)rrzr{rrr	�test_list_verbose
szListTest.test_list_verbosec	Csttjt��ddd�}dd�}t�td|��|jjd||j�d�WdQRX|���	�}|�
d	|�|�d
|�dS)Nrirj)rkcss&x |��D]}d|jkr
|Vq
WdS)NZreg)�
getmembersr[)r(r4rrr	�members's
z+ListTest.test_list_members.<locals>.membersrlF)rmrs
ustar/regtypesustar/conttype)rr@rrrrsrtr(rFrurvrwry)rrzrr{rrr	�test_list_members%s zListTest.test_list_membersN)rrrr)r|r}r�rrrr	rh�s%rhc@seZdZdS)�GzipListTestN)rrrrrrr	r�2sr�c@seZdZdS)�Bz2ListTestN)rrrrrrr	r�6sr�c@seZdZdS)�LzmaListTestN)rrrrrrr	r�:sr�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CommonReadTestc	Cs�t�t|j�dd���WdQRXzPyt�t|j�}|��Wn tjk
r^|�d�YnX|�|�	�g�Wd|�
�XdS)Nr7�wz&tarfile.open() failed on empty archive)rr�tmpnamer�replace�getnames�	ReadErrorrY�assertListEqualr~r*)rr(rrr	�test_empty_tarfile@s
z!CommonReadTest.test_empty_tarfilec	Cs*|�td��t�d|j�WdQRXdS)NZxxx)�assertRaisesRegex�FileNotFoundErrorrrr)rrrr	�test_non_existent_tarfileQsz(CommonReadTest.test_non_existent_tarfilec	CsBttd��WdQRX|�tjtjt|j�|�tjtjt�dS)N�wb)rr��assertRaisesrr�r)rrrr	�test_null_tarfileWs
z CommonReadTest.test_null_tarfilec
Cs�td��d��dd�}x�dD]�}|�td��@}|�|d�t�d�}t|�|_	|�|�
��|�|�WdQRXtjtd	d
d�}z|�|��dgd|�Wd|�
�XqWdS)
NriiZbig)��ar�i�foor7T)rZignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)rZgetrandbits�to_bytesrr��writer�TarInfor1r2�tobufr�r�r*)rr�charr5r4r(rrr	�test_ignore_zeros`s


z CommonReadTest.test_ignore_zeroscCs�xdD�]}t�td��(}t�d�}d|_|�|t�d��WdQRXttd��}|�|�WdQRXt�t��.}|�	tj
d��x|D]}q�WWdQRXWdQRXt�t��\}|��}|�	tj
d��|�|t
�WdQRX|�	tj
d��|�|���WdQRXWdQRXqWdS)N)iiXii�zw:r�isaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)rrr�r�r2�addfilerrr�truncater�r��nextr:r;r.r/)rr2r(�tr5rrr	�test_premature_end_of_archivevs"

z,CommonReadTest.test_premature_end_of_archivec
Cs:|�tjd��"t�t�d���}WdQRXWdQRXdS)Nz%file could not be opened successfullyz
recursion.tar)r�rr�rr�findfile)rr(rrr	�test_length_zero_header�sz&CommonReadTest.test_length_zero_headerN)	rrrr�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,�Zd-S).�MiscReadTestBasecCsdS)Nr)rrrr	�requires_name_attribute�sz(MiscReadTestBase.requires_name_attributec
Cst|��t|jd��V}|�|jt�tj||jd��,}|�|jt�|�|jt	j
�|j��WdQRXWdQRXdS)NrH)�fileobjr)r�rr�assertIsInstancer[�strrrr0r<r=�abspath)rr5r(rrr	�test_no_name_argument�sz&MiscReadTestBase.test_no_name_argumentc	CsZt|jd��}|��}WdQRXt�|�}|�tt|d�tj||j	d�}|�
|j�dS)NrHr[)r�r)rrr/rrrr�rX�getattrrr�assertIsNoner[)rr5rr(rrr	�test_no_name_attribute�s
z'MiscReadTestBase.test_no_name_attributec	Cs\t|jd��}|��}WdQRXt�|�}d|_tj||jd��}|�|j�WdQRXdS)NrHr)r�r)	rrr/rrrr[rrr�)rr5rr(rrr	�test_empty_name_attribute�s
z*MiscReadTestBase.test_empty_name_attributec
Cs`t�|jtj�}t|d��<}|�|jt�tj||jd��}|�	|j�WdQRXWdQRXdS)NrH)r�r)
r<rr�O_RDONLYr�r[�intrrr�)r�fdr5r(rrr	�test_int_name_attribute�s
z(MiscReadTestBase.test_int_name_attributec
Cs~|��t�|j�}t|d��V}|�|jt�tj||j	d��,}|�|jt�|�
|jtj�|j��WdQRXWdQRXdS)NrH)r�r)
r�r<�fsencoderrr�r[�bytesrrr0r=r�)rrr5r(rrr	�test_bytes_name_attribute�sz*MiscReadTestBase.test_bytes_name_attributec	Cs.t�|j�}tj||jd��0}|�|jt�|�	|jt
j�t
�
|���WdQRX|�|��0}|�|jt�|�	|jt
j�t
�
|���WdQRXtjj||jd��0}|�|jt�|�	|jt
j�t
�
|���WdQRX|jdk�r*tj|dd��0}|�|jt�|�	|jt
j�t
�
|���WdQRXdS)N)rrr7)�pathlib�Pathrrrrr�r[r�r0r<r=r��fspathrrr)rrr(rrr	�test_pathlike_name�s&&&z#MiscReadTestBase.test_pathlike_namec	Cs�ttd��WdQRX|�td��|�td�}WdQRX|�td��|�td�}WdQRX|�td��|�td�}WdQRXdS)Nr�z
mode must be �q�rwr)rr�r��
ValueErrorr)rr(rrr	�test_illegal_mode_arg�s
z&MiscReadTestBase.test_illegal_mode_argc	Cs�tj|j|jd�}z>|��|��}|j}|j}|�|��}|��}WdQRXWd|�	�X|�|j��`}|�
|�|j|jd|d�}|��}|�|j|�|��|�|�|���|d�|�	�WdQRXdS)N)rzr:)rr�zseek back did not work)
rrrrr�r[�offsetr.r/r*rMr0r~)rr(r�r[r��frr5rrr	�test_fileobj_with_offset�s$

z)MiscReadTestBase.test_fileobj_with_offsetc	CsH|�tjtjt|j�ttd��}|jtjtj||jd�WdQRXdS)NrH)r�r)r�rr�rrr)rr5rrr	�test_fail_comp�szMiscReadTestBase.test_fail_compcCs"|j�d�}|�|jtjd�dS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r(r-r0�typer�DIRTYPE)rr4rrr	�test_v7_dirtypesz MiscReadTestBase.test_v7_dirtypecCs4y|j�d�Wntk
r.|�d�YnXdS)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r(r-�KeyErrorrY)rrrr	�test_xstar_type	sz MiscReadTestBase.test_xstar_typecCsRxL|jD]B}|�t|j�dd|j�|j�d�s4q|�|jdd|j�qWdS)Ni��>zwrong mtime for %szustar/rzwrong uname for %s)r(r0r��mtimer[�
startswith�uname)rr4rrr	�test_check_memberss
z#MiscReadTestBase.test_check_memberscCs|�|j��djdd�dS)N���zmisc/eofzcould not find all members)r0r(r~r[)rrrr	�test_find_memberssz"MiscReadTestBase.test_find_members�linkzMissing hardlink implementationc
Cs�tjtddd���}|�dt�|�tjtj	�
td��|�dt�|�tjtj	�
td��ttj	�
td�d��}|��}WdQRX|�t
|�t�|�dt�|�tjtj	�
td��ttj	�
td�d��}|��}WdQRX|�t
|�t�WdQRXdS)NrIz	iso8859-1)Z
errorlevelr'z
ustar/regtypez
ustar/lnktyperHz
ustar/symtype)rrrr:r;�
addCleanupr�unlinkr<r=r>r/r0r
r3)rr(r�rrrr	�test_extract_hardlinksz&MiscReadTestBase.test_extract_hardlinkc		Cs�tjtdd�}tj�td�}t�|�z�dd�|D�}|�||�x�|D]x}tj�||j	�}t
jdkr�|�|j
d@t�|�jd@�dd	�}tj�|�}d
�||j�||�|�}|�|j||�qHWWd|��t�|�XdS)Nz	iso8859-1)r'�
extractallcSsg|]}|��r|�qSr)�isdir)�.0r�rrr	�
<listcomp>;sz4MiscReadTestBase.test_extractall.<locals>.<listcomp>�win32i�cSs(t|t�rd�||���Sd�|�SdS)Nz{} ({})z
{!r} (int))�
isinstance�float�format�hex)r�rrr	�format_mtimeCs
z6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrr<r=r>r;�mkdirr�r[rt�platformr0r�stat�st_mode�getmtimer�r�r*r�rmtree)	rr(�DIR�directoriesr4r=r�Z
file_mtime�errmsgrrr	�test_extractall4s(


z MiscReadTestBase.test_extractallc	Cs�d}tj�td�}t�|�z|tjtdd��d}|�|�}|j	||d�tj�||�}|�
tj�|�|j�t
jdkr�|�
t�|�jd@d�WdQRXWdt�|�XdS)	Nz
ustar/dirtypeZ
extractdirz	iso8859-1)r')r=r�i�i�)r<r=r>r;r�rrrr-r:r0r�r�rtr�r�r�rr�)r�dirtyper�r(r4�	extractedrrr	�test_extract_directoryRs


&z'MiscReadTestBase.test_extract_directoryc
Cs�t�t�d}t�|��htjtdd��N}dd�|D�}|�||�x,|D]$}||j	}|�
tj�
|�|j�qJWWdQRXWdQRXdS)Nr�z	iso8859-1)r'cSsg|]}|��r|�qSr)r�)r�r�rrr	r�eszBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r�r�r;r�temp_dirrrrr�r[r0r<r=r�r�)rr�r(r�r4r=rrr	�test_extractall_pathlike_nameas

z.MiscReadTestBase.test_extractall_pathlike_namec
Cs|d}t�t�d}t�|��Vtjtdd��<}|�|�}|j	||d�||}|�
tj�
|�|j�WdQRXWdQRXdS)Nz
ustar/dirtyper�z	iso8859-1)r')r=)r�r�r;rr�rrrr-r:r0r<r=r�r�)rr�r�r(r4r�rrr	�test_extract_pathlike_nameks
z+MiscReadTestBase.test_extract_pathlike_namec	Cs�tj�td�}t|d��}|�d�WdQRXzNt�tj	�}y|�
|�Wn$tjk
rn|�|j
j�YnX|�d�Wdt�|�XdS)N�emptyr�rLzReadError not raised)r<r=r>r;rr��object�__new__rr�__init__r��
assertTruer��closedrYrr�)rr�r5r(rrr	�test_init_close_fobjusz%MiscReadTestBase.test_init_close_fobjc	CsXt�|j��B}x:t||�D],\}}|�|j|j�|�|��|���qWWdQRXdS)N)rrr�zipr0r�Zget_info)rr(Zm1Zm2rrr	�test_parallel_iteration�sz(MiscReadTestBase.test_parallel_iterationN)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r��unittest�
skipUnless�hasattrr<r�skip_unless_symlinkr�r�r�r�r�r�r�rrrr	r��s.		
		

r�c@seZdZdZdS)�MiscReadTestN)rrrr�rrrr	r��sr�c@seZdZdS)�GzipMiscReadTestN)rrrrrrr	r��sr�c@seZdZdd�ZdS)�Bz2MiscReadTestcCs|�d�dS)NzBZ2File have no name attribute)�skipTest)rrrr	r��sz'Bz2MiscReadTest.requires_name_attributeN)rrrr�rrrr	r��sr�c@seZdZdd�ZdS)�LzmaMiscReadTestcCs|�d�dS)NzLZMAFile have no name attribute)r�)rrrr	r��sz(LzmaMiscReadTest.requires_name_attributeN)rrrr�rrrr	r��sr�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�StreamReadTestzr|c
Csrxl|jD]b}|��sq|j�|��B}x:y|�d�}Wn tjk
rT|�d�YnX|s&Pq&WWdQRXqWdS)Niz6simple read-through using TarFile.extractfile() failed)r(Zisregr.r/r�StreamErrorrY)rr4r5�bufrrr	�test_read_through�sz StreamReadTest.test_read_throughc	CsT|j��}|j�|��}|��}WdQRX|�t|�|jd�|�t|�td�dS)Nzregular file extraction failed)	r(r�r.r/r0r1r2r
r3)rr4r5rrrr	r6�s
z(StreamReadTest.test_fileobj_regular_filec	Cs:|j��}|j�|d��}|�tj|j�WdQRXdS)Nr)r(r~r.r�rr�r/)rZtarinfosr�rrr	�test_provoke_stream_error�s
z(StreamReadTest.test_provoke_stream_errorc	Cs�tjtdd�}z�|j}x�|��}|��}|dkr2P|�|d�|��sN|��rr|�tj	��|�
|�WdQRXq|�
|�}|�
|�}|dkr�q|�|d�|�|��|��d�qWWd|�
�XdS)Nz	iso8859-1)r'zstream.next() failed.zstream.extractfile() failedzstream extraction failed)rrrr(r��assertIsNotNoneZislnkZissymr�r�r.r0r/r*)rZtar1Ztar2Zt1Zt2�v1�v2rrr	�test_compare_members�s*

z#StreamReadTest.test_compare_membersN)rrrr
r�r6r�rrrrr	r��s
	r�c@seZdZdS)�GzipStreamReadTestN)rrrrrrr	r�src@seZdZdS)�Bz2StreamReadTestN)rrrrrrr	r�src@seZdZdS)�LzmaStreamReadTestN)rrrrrrr	r�src@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�DetectReadTestc
CsJyt�||�}Wn,tjk
r<}z|��Wdd}~XYn
X|��dS)N)rrr�rYr*)rr[rr(�errr	�_testfunc_file�s
zDetectReadTest._testfunc_filec
Csdy*t|d��}tj|||d�}WdQRXWn,tjk
rV}z|��Wdd}~XYn
X|��dS)NrH)r�)rrr�rYr*)rr[rr�r(rrrr	�_testfunc_fileobj�sz DetectReadTest._testfunc_fileobjc	Cs�|jr�|�tj��tjtd|jd�WdQRX|�tj��tjtd|jd�WdQRX|�tj��tj|jdd�WdQRX|�tj��tj|jdd�WdQRX||jd�||jd|j�||jd�||jd|j�||jd�dS)Nzr:)rzr|r7zr:*zr|*)rr�rr�rr)rZtestfuncrrr	�_test_modes�szDetectReadTest._test_modescCs|�|j�dS)N)rr	)rrrr	�test_detect_fileszDetectReadTest.test_detect_filecCs|�|j�dS)N)rr
)rrrr	�test_detect_fileobjsz"DetectReadTest.test_detect_fileobjN)rrrr	r
rrr
rrrr	r�s
	rc@seZdZdS)�GzipDetectReadTestN)rrrrrrr	rsrc@seZdZdd�ZdS)�Bz2DetectReadTestc	CsTttd��}|��}WdQRXtjtddd��}|�|�WdQRX|�td�dS)NrHr�rI)Z
compresslevelzr|*)rrr/r r"r�r�r	)rr5rrrr	�test_detect_stream_bz2s
z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrrrrrr	rsrc@seZdZdS)�LzmaDetectReadTestN)rrrrrrr	r src@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�WdQRXd|d<d|d<d|d<d|jkrnd	|d
<d	|d<x2|��D]&\}}|�t||�|d||jf�qxWdS)
Nzwrong md5sum for %si��>r�i��uidrV�gidzold-v7rr��gnamezwrong value in %s field of %s)r(r.r0r
r/r[�itemsr�)rr4�chksum�kwargsr��k�vrrr	�_test_member&s
zMemberReadTest._test_membercCs |j�d�}|j|dtd�dS)Nz
ustar/regtypeic)r2r)r(r-rr3)rr4rrr	�test_find_regtype7sz MemberReadTest.test_find_regtypecCs |j�d�}|j|dtd�dS)Nzustar/conttypeic)r2r)r(r-rr3)rr4rrr	�test_find_conttype;sz!MemberReadTest.test_find_conttypecCs|j�d�}|j|dd�dS)Nz
ustar/dirtyper)r2)r(r-r)rr4rrr	�test_find_dirtype?sz MemberReadTest.test_find_dirtypecCs|j�d�}|j|dd�dS)Nzustar/dirtype-with-size�)r2)r(r-r)rr4rrr	�test_find_dirtype_with_sizeCsz*MemberReadTest.test_find_dirtype_with_sizecCs |j�d�}|j|ddd�dS)Nz
ustar/lnktyperz
ustar/regtype)r2�linkname)r(r-r)rr4rrr	�test_find_lnktypeGsz MemberReadTest.test_find_lnktypecCs |j�d�}|j|ddd�dS)Nz
ustar/symtyperr\)r2r!)r(r-r)rr4rrr	�test_find_symtypeKsz MemberReadTest.test_find_symtypecCs"|j�d�}|j|dddd�dS)Nz
ustar/blktyper�)r2�devmajor�devminor)r(r-r)rr4rrr	�test_find_blktypeOsz MemberReadTest.test_find_blktypecCs"|j�d�}|j|dddd�dS)Nz
ustar/chrtyperrIr$)r2r%r&)r(r-r)rr4rrr	�test_find_chrtypeSsz MemberReadTest.test_find_chrtypecCs|j�d�}|j|dd�dS)Nzustar/fifotyper)r2)r(r-r)rr4rrr	�test_find_fifotypeWsz!MemberReadTest.test_find_fifotypecCs |j�d�}|j|dtd�dS)Nzustar/sparseiP)r2r)r(r-r�
md5_sparse)rr4rrr	�test_find_sparse[szMemberReadTest.test_find_sparsecCs |j�d�}|j|dtd�dS)Nz
gnu/sparseiP)r2r)r(r-rr*)rr4rrr	�test_find_gnusparse_sz"MemberReadTest.test_find_gnusparsecCs |j�d�}|j|dtd�dS)Nzgnu/sparse-0.0iP)r2r)r(r-rr*)rr4rrr	�test_find_gnusparse_00csz%MemberReadTest.test_find_gnusparse_00cCs |j�d�}|j|dtd�dS)Nzgnu/sparse-0.1iP)r2r)r(r-rr*)rr4rrr	�test_find_gnusparse_01gsz%MemberReadTest.test_find_gnusparse_01cCs |j�d�}|j|dtd�dS)Nzgnu/sparse-1.0iP)r2r)r(r-rr*)rr4rrr	�test_find_gnusparse_10ksz%MemberReadTest.test_find_gnusparse_10cCs |j�d�}|j|dtd�dS)Nuustar/umlauts-ÄÖÜäöüßic)r2r)r(r-rr3)rr4rrr	�test_find_umlautsos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)rwr(r�)rr[rrr	�test_find_ustar_longnametsz'MemberReadTest.test_find_ustar_longnamecCs |j�d�}|j|dtd�dS)Nzmisc/regtype-old-v7ic)r2r)r(r-rr3)rr4rrr	�test_find_regtype_oldv7xsz&MemberReadTest.test_find_regtype_oldv7cCs@|j��tj|j|jdd�|_|j�d�}|j|dtd�dS)Nz	iso8859-1)rr'upax/umlauts-ÄÖÜäöüßic)r2r)	r(r*rrrrr-rr3)rr4rrr	�test_find_pax_umlauts|s


z$MemberReadTest.test_find_pax_umlauts)N)rrrrrrrr r"r#r'r(r)r+r,r-r.r/r0r1r2r3rrrr	r$s&
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LongnameTestcCsX|jddd}y|j�|�}Wntk
r@|�d�YnX|�|jtjd�dS)N�/a�123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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)	�subdirr(r-r�rY�assertNotEqualr�rr�)rr6r4rrr	�test_read_longname�szLongnameTest.test_read_longnamecCsh|jddd}|jddd}y|j�|�}Wntk
rR|�d�YnX|�|j|d�dS)Nr5a�123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/r6�longlinkzlonglink not foundzlinkname wrong)r7r(r-r�rYr0r!)rr6r:r4rrr	�test_read_longlink�szLongnameTest.test_read_longlinkc	Csp|jddd}|j�|�}|j}|jj�|�t�|jj�d��}|�	t
j��t
jd|d�WdQRXdS)Nr5a�123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/r6izfoo.tar)r[r�)
r7r(r-r�r�rMrrrr/r�rr�r)rr6r4r�r5rrr	�test_truncated_longname�sz$LongnameTest.test_truncated_longnamec	Csj|jddd}|j�|�j}ttd��6}|�|�tj�	|�
d�dd�}|�|j|j
�WdQRXdS)Nr5a�123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/r6rHiz	iso8859-1�strict)r7r(r-r�rrrMrr�Zfrombufr/r0r��longnametype)rr6r�r5r4rrr	�test_header_offset�s
zLongnameTest.test_header_offsetN)rrrr9r;r<r?rrrr	r4�s
		r4c@sJeZdZdZejZdd�Zdd�Zdd�Z	dd	�Z
d
d�Zedd
��Z
dS)�GNUReadTestZgnuc	Csz|j�|t�tj�t|�}t|d��}|��}WdQRX|�t	|�t
d|�|��rvt�|�}|�
|jd|j�dS)NrHzwrong md5sum for %si)r(r:r;r<r=r>rr/r0r
r*�_fs_supports_holesr�Z
assertLess�	st_blocks�st_size)rr[�filenamer5rrQrrr	�_test_sparse_file�s

zGNUReadTest._test_sparse_filecCs|�d�dS)Nz
gnu/sparse)rE)rrrr	�test_sparse_file_old�sz GNUReadTest.test_sparse_file_oldcCs|�d�dS)Nzgnu/sparse-0.0)rE)rrrr	�test_sparse_file_00�szGNUReadTest.test_sparse_file_00cCs|�d�dS)Nzgnu/sparse-0.1)rE)rrrr	�test_sparse_file_01�szGNUReadTest.test_sparse_file_01cCs|�d�dS)Nzgnu/sparse-1.0)rE)rrrr	�test_sparse_file_10�szGNUReadTest.test_sparse_file_10c	Csxtj�d�rptj�td�}t|d��"}|�d�|�	d�|�
�WdQRXt�|�}t�
|�|jd|jkSdSdS)NZlinuxzsparse-testr�isxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiF)rtr�r�r<r=r>r;rrMr�r�r�rr�rBrC)r[r5rQrrr	rA�s



zGNUReadTest._fs_supports_holesN)rrrr7r�GNUTYPE_LONGNAMEr>rErFrGrHrI�staticmethodrArrrr	r@�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�Wd|�	�XdS)Nz	iso8859-1)r'zpax/regtype1r��barzVENDOR.umlautsuÄÖÜäöüßzpax/regtype2rzpax/regtype3r)
rrrr-r0r�r�pax_headers�getr*)rr(r4rrr	�test_pax_global_headers�s$



z#PaxReadTest.test_pax_global_headerscCs�tjtdd�}z�|�d�}|�|jd�|�|jd�|�|jd�|�|jd�|�t	|j�t
�|�t
|jd�d�|�t
|jd�d�Wd|��XdS)	Nz	iso8859-1)r'zpax/regtype4ic�{g��^�AZatimeZctime)
rrrr-r0r2rrr�r�r�rNr*)rr(r4rrr	�test_pax_number_fieldss
z"PaxReadTest.test_pax_number_fieldsN)	rrrr7r�XHDTYPEr>rPrRrrrr	rL�srLc@seZdZdd�Zdd�ZdS)�
WriteTestBasecCspt��}tj||jd�}|�t�d��|��|�|j	d�|�
�}~t��|�|j	�|�
||�
��dS)N)r�rr�z#external fileobjs must never closed)rrrrrrr�r�r*�assertFalser�rvrZ
gc_collectr0)rr5r(rrrr	�test_fileobj_no_closesz#WriteTestBase.test_fileobj_no_closec	Cs�t�t|j��6}t�d�}tjtj|_|�|t	�
d|j��WdQRX|�td�� }|�t|�
��tjd�WdQRXdS)Nr�r�rHrK)rrr�rr��
RECORDSIZE�	BLOCKSIZEr2r�rrrr0r1r/)rr(r�r5rrr	�test_eof_marker's
"zWriteTestBase.test_eof_markerN)rrrrVrYrrrr	rTs
rTc@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)'�	WriteTestzw:cCsjd}t�t|j�}zt�|�}|�|�Wd|��Xt�t�}z|�|��d|d�Wd|��XdS)N�d0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rz!failed to store 100 char filename)	rrr�rr�r�r*r0r�)rr[r(r�rrr	�test_100_char_name9s



zWriteTest.test_100_char_namec	Cspt�t|j�}z<tj�td�}t|d��}|�d�WdQRX|�	|�Wd|�
�X|�tj�t�dd�dS)N�filer�saaarztarfile is empty)
rrr�rr<r=r>r;r��addr*Z
assertGreater�getsize)rr(r=r5rrr	�
test_tar_sizeMs
zWriteTest.test_tar_sizec	Cs�t�t|j�}zxtj�td�}t|d��WdQRX|�|�}|�	|j
d�t|d��}|�d�WdQRX|�|�}|�	|j
d�Wd|��XdS)Nr]r�rsaaar$)
rrr�rr<r=r>r;�
gettarinfor0r2r�r*)rr(r=r4r5rrr	�test_file_size[s


zWriteTest.test_file_sizec	Csdtj�td�}t�|�z:t�t|j�}z|�	|�}|�
|jd�Wd|��XWdt
�|�XdS)N�	directoryr)r<r=r>r;r�rrr�rrar0r2r*r�rmdir)rr=r(r4rrr	�test_directory_sizeks

zWriteTest.test_directory_sizecCstj�td�}t�|�ttj�|d�d���ttj�|d�d���z�t�t|j	�}zpt
j�d��}ddg|_
|�|�WdQRXg}x(|��D]}|�tj�|j�d�q�W|�|dddg�Wd|��XWdt�tj�|d��t�tj�|d��t�|�XdS)Nrc�1r]�2z
os.listdirr�)r<r=r>r;r�rr*rr�rr��mock�patch�return_valuer^r~�append�splitr[r0rr�rd)rr=r(Zmock_listdir�paths�mrrr	�test_ordered_recursionzs$

z WriteTest.test_ordered_recursionc
Cs�t�t|j��z}t�t�d}t|d��}|�d�WdQRX|�|�}|�t	�
|��}|�|jt
�|�|j|j�|�|jd�WdQRXdS)Nr]r�saaar$)rrr�rr�r�r;r�rar<r�r�r[r�r0r2)rr(r=r5r4Ztarinfo2rrr	�test_gettarinfo_pathlike_name�s
z'WriteTest.test_gettarinfo_pathlike_namer�zMissing hardlink implementationc
Cs�tj�td�}tj�td�}t|d��}|�d�WdQRXyt�||�Wn0tk
r|}z|�d|�Wdd}~XYnXzDt	�t
|j�}z&|�|�|�|�}|�
|jd�Wd|��XWdt�|�t�|�XdS)Nr��link_targetr�saaaz
os.link(): %sr)r<r=r>r;rr�r��PermissionErrorr�rr�rrar0r2r*rr�)rr��targetr5rr(r4rrr	�test_link_size�s" 


zWriteTest.test_link_sizec	Csftj�td�}t�d|�z:t�t|j�}z|�	|�}|�
|jd�Wd|��XWdt
�|�XdS)N�symlinkrqr)r<r=r>r;rurrr�rrar0r2r*rr�)rr=r(r4rrr	�test_symlink_size�s
zWriteTest.test_symlink_sizec	Cs�tj�t�}t�t|j�}zb|�|j|d�|�	|�|�|�
�gd�t�t
��|�	|�WdQRX|�|�
�gd�Wd|��XdS)Nzarchive name must be absolutezadded the archive to itself)r<r=r�r�rrrr0r[r^r�r�
change_cwdr;r*)rZdstnamer(rrr	�
test_add_self�s


zWriteTest.test_add_selfc	Cstj�td�}t�|�z�x$dD]}tj�||�}t�|�q Wdd�}tjt	|j
dd�}z|j|d|d�Wd|��X|�
t��|�|dd	d|�WdQRXt�t	d
�}zBx(|D] }|�|jd�|�|jd�q�W|�t|���d
�Wd|��XWdt�|�XdS)N�filter)r�rMZbazcSs&tj�|j�dkrdSd|_d|_|S)NrMrQr�)r<r=�basenamer[rr�)r4rrr	ry�s
z%WriteTest.test_filter.<locals>.filterz	iso8859-1)r'Z	empty_dir)�arcnameryTr7rQr�r$)r<r=r>r;r�r�create_empty_filerrr�rr^r*r��	TypeErrorr0rr�r1r~r�)r�tempdirr[ryr(r4rrr	�test_filter�s*



zWriteTest.test_filterNFcCs�tj�td�}|st�|�n
t�|�t�t	|j
�}z|j||d�Wd|��Xt�t	d�}z|�
�}Wd|��X|s�t�|�n
t�|�|�|j|p�|�tjd��dS)Nr�)r{r7r5)r<r=r>r;rr|r�rrr�rr^r*r�r�rdr0r[r��sep)rr=Zcmp_path�dirr�r(r�rrr	�_test_pathname�s 



zWriteTest._test_pathnamec	Cstj�td�}tj�td�}t�|�z�tj�|d�}tj�|d�}t|d��}|�d�WdQRXt�||�t�|d�}|�	|�|�	|�|�
�t�|d�}z4y|j|d�Wntk
r�|�
d	�YnXWd|�
�XWdt�|�t�|�XdS)
NZtestsymlinksztestsymlinks.tar�sourcerur�z
something
r7)r=z&extractall failed with symlinked files)r<r=r>r;r�rr�rurr^r*r��OSErrorrYrr�r�)rr~ZtemparchiveZsource_fileZtarget_filer�r(rrr	�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��.rMz..T)r�)r�r<r=r>r�)rrrr	�test_pathnames5s
zWriteTest.test_pathnamescCs4tjdkr|�dd�n|�dd�|�dd�dS)Nr�zC:\foor�z/fooz///foo)rtr�r�)rrrr	�test_abs_pathnamesFs
zWriteTest.test_abs_pathnamesc	Cs�t�t��xt�t|j�}z|�d�Wd|��Xt�td�}z2x,|D]$}|j	dkrH|�
|j	�d�|j	�qHWWd|��XWdQRXdS)Nr�r7z./)rrwr;rrr�rr^r*r[r�r�)rr(r�rrr	�test_cwdMs


zWriteTest.test_cwdc
srxltttfD]^�G�fdd�dtj�}|�}|����"tjt|j	|tj
ddid�}WdQRX|�|j�qWdS)NcseZdZdZ�fdd�ZdS)z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTcs|jrd|_��dS)NF)�first)rr)�exctyperr	r�bsz>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)rrrr�r�r)r�rr	�BadFile`sr�Znonr�)r�r�rN)
r��EOFError�RuntimeErrorrrrr�rrr�r�
PAX_FORMATrUr�)rr�r�r(r)r�r	�test_open_nonwritable_fileobj^sz'WriteTest.test_open_nonwritable_fileobj)NF)rrrr
r\r`rbrerorpr�r�r�r<rtrr�rvrxrr�r�r�r�r�r�rrrr	rZ5s$(
rZc@seZdZdS)�
GzipWriteTestN)rrrrrrr	r�nsr�c@seZdZdS)�Bz2WriteTestN)rrrrrrr	r�qsr�c@seZdZdS)�
LzmaWriteTestN)rrrrrrr	r�tsr�c@s@eZdZdZdZdd�Ze�ej	dko.e
ed�d�dd	��ZdS)
�StreamWriteTestzw|Nc	Cs�t�t|j�}|��|jr\|��}ttd��}|��}WdQRX|�|�}|�|j	d�n|�t��}|��}WdQRX|�
|�d�tjd�dS)NrHzfound trailing datar�zincorrect zero padding)
rrr�rr*�decompressorr/Z
decompressrUZunused_datar0�countrW)rr(Zdecr5rrrr	�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�Wdt�|�XdS)N�i�i�zwrong file permissions)r<r=�existsr�rr�r�rrrr*r�r�r0)rZoriginal_umaskr(rrrr	�test_file_mode�s

zStreamWriteTest.test_file_mode)
rrrr
r�r�r�r�rtr�r�r<r�rrrr	r�xs
r�c@seZdZdS)�GzipStreamWriteTestN)rrrrrrr	r��sr�c@seZdZerejndZdS)�Bz2StreamWriteTestN)rrrr ZBZ2Decompressorr�rrrr	r��sr�c@seZdZerejndZdS)�LzmaStreamWriteTestN)rrrr%ZLZMADecompressorr�rrrr	r��sr�c@speZdZdd�Zddd�Zddd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�GNUWriteTestcCst|�dd}|dS)NirI)r1)rrQZblocksrrr	�_length�szGNUWriteTest._lengthNcCsXd}t|�tjkr(|d7}||�|�7}|dk	rTt|�tjkrT|d7}||�|�7}|S)Ni)r1r�LENGTH_NAMEr��LENGTH_LINK)rr[r�r�rrr	�
_calc_size�szGNUWriteTest._calc_sizecCs�t�|�}|r||_tj|_t�td�}z6tj|_|�	|�|�
||�}|j}|�||d�Wd|�
�Xt�t�}z<|��}|�|d�|�|j|jd�|�|j|jd�Wd|�
�XdS)Nr�z%GNU longname/longlink creation failedzunable to read longname member)rr�r!�LNKTYPEr�rr��
GNU_FORMATr�r�r�r�r0r*r�rr[)rr[r�r4r(rr�memberrrr	�_test�s,




zGNUWriteTest._testcCs|�d�dS)Na�longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam)r�)rrrr	�test_longname_1023�szGNUWriteTest.test_longname_1023cCs|�d�dS)Nalongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/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)r�)rrrr	�test_longname_1024�szGNUWriteTest.test_longname_1024cCs|�d�dS)Nalongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/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_)r�)rrrr	�test_longname_1025�szGNUWriteTest.test_longname_1025cCs|�dd�dS)Nr[a�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk)r�)rrrr	�test_longlink_1023�szGNUWriteTest.test_longlink_1023cCs|�dd�dS)Nr[alonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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)r�)rrrr	�test_longlink_1024�szGNUWriteTest.test_longlink_1024cCs|�dd�dS)Nr[alonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_)r�)rrrr	�test_longlink_1025�szGNUWriteTest.test_longlink_1025cCs|�dd�dS)Na�longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnama�longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk)r�)rrrr	�test_longnamelink_1023�sz#GNUWriteTest.test_longnamelink_1023cCs|�dd�dS)Nalongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamealonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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)r�)rrrr	�test_longnamelink_1024�sz#GNUWriteTest.test_longnamelink_1024cCs|�dd�dS)Nalongnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/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_alonglnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_)r�)rrrr	�test_longnamelink_1025�sz#GNUWriteTest.test_longnamelink_1025)N)N)rrrr�r�r�r�r�r�r�r�r�r�r�r�rrrr	r��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�dS)N)rr�r�)rrrr	r)szCreateTest.setUpc	Cs&t|jd��}|�d�WdQRXdS)Nr�saaa)r�	file_pathr�)�clsr5rrr	�
setUpClassszCreateTest.setUpClasscCst�|j�dS)N)rr�r�)r�rrr	�
tearDownClassszCreateTest.tearDownClassc	Csht�t|j��}|�|j�WdQRX|�t��}|��}WdQRX|�t	|�d�|�
d|d�dS)NrIr�r)rrr�rr^r�rr�r0r1rw)r�tobj�namesrrr	�test_createszCreateTest.test_createc	Cs�t�t|j��}|�|j�WdQRX|�t��t�t|j�}WdQRX|�t��}|�	�}WdQRX|�
t|�d�|�d|d�dS)NrIr�r)
rrr�rr^r�r��FileExistsErrorrr�r0r1rw)rr�r�rrr	�test_create_existingszCreateTest.test_create_existingc	Csf|�td��}|�|j�WdQRX|�t��}|��}WdQRX|�t|�d�|�d|d�dS)N�xrIr�r)rr�r^r�r�r0r1rw)rr�r�rrr	�test_create_taropen!szCreateTest.test_create_taropenc
Cs�|�td��}|�|j�WdQRX|�t��|�td��WdQRXWdQRX|�t��}|��}WdQRX|�t|�d�|�	d|d�dS)Nr�rIr�r)
rr�r^r�r�r�r�r0r1rw)rr�r�rrr	�test_create_existing_taropen*sz'CreateTest.test_create_existing_taropenc	Cs�t�t�t�|j��D}|�|jt�|�	|jt
j�t��|�
t�|j��|��}WdQRX|�	t|�d�|�d|d�|�t��}|��}WdQRX|�	t|�d�|�d|d�dS)NrIr�r)rrr�r�r�rr�r[r�r0r<r=r�r^r�r�r1rwr)rr�r�rrr	�test_create_pathlike_name7sz$CreateTest.test_create_pathlike_namec	Cs�|�t�t�d��D}|�|jt�|�|jtj	�
t��|�t�|j��|�
�}WdQRX|�t|�d�|�d|d�|�t��}|�
�}WdQRX|�t|�d�|�d|d�dS)Nr�rIr�r)rr�r�r�r�r[r�r0r<r=r�r^r�r�r1rw)rr�r�rrr	�!test_create_taropen_pathlike_nameEsz,CreateTest.test_create_taropen_pathlike_nameN)rrrr
r<r=r>r;r�r)�classmethodr�r�r�r�r�r�r�r�rrrr	r��s		
r�c@seZdZdS)�GzipCreateTestN)rrrrrrr	r�Tsr�c@seZdZdS)�
Bz2CreateTestN)rrrrrrr	r�Xsr�c@seZdZdS)�LzmaCreateTestN)rrrrrrr	r�\sr�c@seZdZdZdZdZdS)�CreateWithXModeTestr�N)rrrr
r�r�rrrr	r�`sr�r�zMissing hardlink implementationc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�HardlinkTestc
Cs�tj�td�|_tj�td�|_t|jd��}|�d�WdQRXyt�|j|j�Wn0t	k
r�}z|�
d|�Wdd}~XYnXt�td�|_
|j
�|j�dS)Nr�rMr�sfooz
os.link(): %sr�)r<r=r>r;r�rMrr�r�rrr�rr�r(r^)rr5rrrr	r)ls zHardlinkTest.setUpcCs&|j��t�|j�t�|j�dS)N)r(r*rr�r�rM)rrrr	r+{s
zHardlinkTest.tearDowncCs$|j�|j�}|�|jtjd�dS)Nzadd file as regular failed)r(rar�r0r�r�REGTYPE)rr4rrr	�test_add_twice�szHardlinkTest.test_add_twicecCs$|j�|j�}|�|jtjd�dS)Nzadd file as hardlink failed)r(rarMr0r�rr�)rr4rrr	�test_add_hardlink�szHardlinkTest.test_add_hardlinkcCs,d|j_|j�|j�}|�|jtjd�dS)NTzdereferencing hardlink failed)r(ZdereferencerarMr0r�rr�)rr4rrr	�test_dereference_hardlink�sz&HardlinkTest.test_dereference_hardlinkN)rrrr)r+r�r�r�rrrr	r�hs
r�c@s&eZdZddd�Zdd�Zdd�ZdS)	�PaxWriteTestNcCs�t�|�}|r||_tj|_tjtdtjd�}z|�|�Wd|�	�Xt�t�}zB|rv|�
�dj}|�||d�n|�
�dj}|�||d�Wd|�	�XdS)Nr�)r�rzPAX longlink creation failedzPAX longname creation failed)
rr�r!r�r�rr�r�r�r*r~r0r[)rr[r�r4r(�l�nrrr	r��s 


zPaxWriteTest._testc
Csdddddd�}tjtdtj|d�}z|�t�d��Wd|��Xtjtd	d
�}z�|�|j|�|�|�	�dj|�xv|j�
�D]h\}}|�t|�t
�|�t|�t
�|tjkr�ytj||�Wq�ttfk
r�|�d�Yq�Xq�WWd|��XdS)
NrM�0z1.23uäöü�test)r�rr�r�uäöür�)r�rNz	iso8859-1)r'rz"unable to convert pax header field)rrr�r�r�r�r*r0rNr~rZassertIsNotr�r��PAX_NUMBER_FIELDSr}r�rY)rrNr(�key�valrrr	�test_pax_global_header�s.

z#PaxWriteTest.test_pax_global_headercCs�ddd�}tjtdtjdd�}z(t��}d|_d|_||_|�|�Wd|�	�Xtjtdd	�}z:|�
�d
}|�|j|�|�|jd�|�|jd�Wd|�	�XdS)Nr�Z123)r=rr�z	iso8859-1)r�r'uäöüi)r'rrQ)rrr�r�r�r[rrNr�r*r~r0)rrNr(r�rrr	�test_pax_extended_header�s"

z%PaxWriteTest.test_pax_extended_header)N)rrrr�r�r�rrrr	r��s
 r�c@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�UnicodeTestcCs|�d�dS)Nz	iso8859-1)�_test_unicode_filename)rrrr	�test_iso8859_1_filename�sz#UnicodeTest.test_iso8859_1_filenamecCs|�d�dS)N�utf7)r�)rrrr	�test_utf7_filename�szUnicodeTest.test_utf7_filenamecCs|�d�dS)Nzutf-8)r�)rrrr	�test_utf8_filename�szUnicodeTest.test_utf8_filenamecCsrtjtd|j|dd�}zd}|�t�|��Wd|��Xtjt|d�}z|�|��dj	|�Wd|��XdS)Nr�r=)r�r'�errorsuäöü)r'r)
rrr�r�r�r�r*r0r~r[)rr'r(r[rrr	r��s

z"UnicodeTest._test_unicode_filenamecCsdtjtd|jddd�}z>t��}d|_|�t|j|�d|_d|_	|�t|j|�Wd|�
�XdS)Nr�rir=)r�r'r�uäöür�)rrr�r�r�r[r��UnicodeErrorr�r�r*)rr(r4rrr	�test_unicode_filename_errors
z'UnicodeTest.test_unicode_filename_errorcCs|tjtdddd�}zZxT|D]L}|�t|j�t�|�t|j�t�|�t|j�t�|�t|j	�t�qWWd|�
�XdS)Nr7z	iso8859-1r=)r'r�)rrrZassertIsr�r[r�r!r�rr*)rr(r�rrr	�test_unicode_arguments

z!UnicodeTest.test_unicode_argumentcCs�t�d�}d|_d|_tjtd|jdd�}z|�|�Wd|��Xtjtdd�}zr|�	d�}|�
|jd�|�
|jd�|jtjkr�|��tjtdd�}|�	d�}|�
|jd�|�
|jd�Wd|��XdS)	Nr�uäöür�z	iso8859-1)rr�r')r'riu	���)rr�r�rrr�r�r�r*r-r0r�)rr�r(rrr	�test_uname_unicodes(



zUnicodeTest.test_uname_unicodeN)
rrrr�r�r�r�r�r�r�rrrr	r��sr�c@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�r�)rrrr	�test_unicode_name2Es
z#UstarUnicodeTest.test_unicode_name2cCs0|�d�|�dt�|�d�|�dt�dS)Na01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789)r�r�)rrrr	�test_unicode_longname1Ks

z'UstarUnicodeTest.test_unicode_longname1cCs|�dt�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789)r�r�)rrrr	�test_unicode_longname2Qsz'UstarUnicodeTest.test_unicode_longname2cCs&|�dt�|�d�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901ÿÿ/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ)r�r�)rrrr	�test_unicode_longname3Us
z'UstarUnicodeTest.test_unicode_longname3cCs|�d�|�dt�dS)Nu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿ)r�r�)rrrr	�test_unicode_longname4Zs
z'UstarUnicodeTest.test_unicode_longname4Nc	Cs�tjtd|jdd��4}t�|�}|dkr4|�|�n|�||j|�WdQRX|dkr�tjtddd��$}x|D]}|�||j�PqnWWdQRXdS)Nr�zutf-8)r�r'r7)r')	rrr�r�r�r�r�r0r[)rr[�excr(r�rrr	r�^s

z!UstarUnicodeTest._test_ustar_namecCs0|�d�|�dt�|�d�|�dt�dS)Nr[r�ud01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ)�_test_ustar_linkr�)rrrr	�test_unicode_link1ms

z#UstarUnicodeTest.test_unicode_link1cCs|�d�|�dt�dS)Nud012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿ)r�r�)rrrr	�test_unicode_link2ss
z#UstarUnicodeTest.test_unicode_link2c	Cs�tjtd|jdd��:}t�d�}||_|dkr:|�|�n|�||j|�WdQRX|dkr�tjtddd��$}x|D]}|�||j�PqtWWdQRXdS)Nr�zutf-8)r�r'r�r7)r')	rrr�r�r�r!r�r�r0)rr[r�r(r�rrr	r�ws

z!UstarUnicodeTest._test_ustar_link)N)N)rrrr�USTAR_FORMATr�r�r�r�r�r�r�r�r�r�r�rrrr	r�8s
r�c@seZdZejZdd�ZdS)�GNUUnicodeTestc
Cs`xZdD]R\}}tjt|dd��4}y|�|�}Wntk
rL|�d�YnXWdQRXqWdS)N))zutf-8upax/bad-pax-���)z	iso8859-1upax/bad-pax-äöürn)r'r�z%unable to read bad GNU tar pax header)rrrr-r�rY)rr'r[r(r�rrr	�test_bad_pax_header�s
z"GNUUnicodeTest.test_bad_pax_headerN)rrrrr�r�r�rrrr	r��sr�c@seZdZejZdZdd�ZdS)�PAXUnicodeTestNc
Cs`xZdD]R\}}tjt|dd��4}y|�|�}Wntk
rL|�d�YnXWdQRXqWdS)N))zutf-8upax/hdrcharset-���)z	iso8859-1upax/hdrcharset-äöürn)r'r�z)unable to read POSIX.1-2008 binary header)rrrr-r�rY)rr'r[r(r�rrr	�test_binary_header�s
z!PAXUnicodeTest.test_binary_header)rrrrr�r�r�r�rrrr	r��sr�c@s&eZdZdd�Zd	dd�Zdd�ZdS)
�AppendTestBasecCs$t|_tj�|j�r t�|j�dS)N)r�rr<r=r�rr�)rrrr	r)�szAppendTestBase.setUp�w:cCsjtjtdd��R}|�d�}d|_|�|��,}t�|j|��}|�||�WdQRXWdQRXWdQRXdS)Nz	iso8859-1)r'z
ustar/regtyper�)rrrr-r[r.r�)rr�srcr�r�r(rrr	�_create_testtar�s
zAppendTestBase._create_testtarcCs(|�d|j�|�tjtjtd�dS)Nzw:r])r�rr�rr�rr�)rrrr	�test_append_compressed�sz%AppendTestBase.test_append_compressedN)r�)rrrr)r�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)�
AppendTestNc	Cs2tj|jd|d��}|�t�d��WdQRXdS)Nr])r�rM)rrrr�r�)rr�r(rrr	�
_add_testfile�szAppendTest._add_testfilerMc	Cs0tj|j|d��}|�|��|�WdQRXdS)N)r�)rrrr0r�)rr�r�r(rrr	r��szAppendTest._testcCs|��|��dS)N)r�r�)rrrr	�test_non_existing�szAppendTest.test_non_existingcCs&t�|jd���|��|��dS)Nzw:)rrrr*r�r�)rrrr	�
test_empty�szAppendTest.test_emptycCs.t�d�}|�|�|�d�|j|d�dS)Nsr)r�)rrrr�rMr�)rr5rrr	�test_empty_fileobj�s


zAppendTest.test_empty_fileobjc	Cs\|��t|jd��}|��}WdQRXt�|�}|�|�|�d�|jddg|d�dS)NrHrr�rM)r�r�)	r�rrr/rrrr�rMr�)rr5rrrr	�test_fileobj�s


zAppendTest.test_fileobjcCs$|��|��|jddgd�dS)Nr�rM)r�)r�r�r�)rrrr	�
test_existing�szAppendTest.test_existingc	Cs6t|jd��}|�|�WdQRX|�tj|j�dS)Nr�)rrr�r�rr�r�)rrr5rrr	�_test_error�szAppendTest._test_errorcCs|�d�dS)NrL)r�)rrrr	�	test_null�szAppendTest.test_nullcCs|�d�dS)Ns
)r�)rrrr	�test_incomplete�szAppendTest.test_incompletecCst�d���}|�|�dS)Nr�)rr�r�r�)rrrrr	�test_premature_eof�szAppendTest.test_premature_eofcCs t�d���}|�|d�dS)Nr�s
)rr�r�r�)rrrrr	�test_trailing_garbage�sz AppendTest.test_trailing_garbagecCs|�d�dS)Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r�)rrrr	�test_invalid�szAppendTest.test_invalid)N)rrrr�r�r�r�r�r�r�r�r�r�rrrrrrrr	r��s
	r�c@seZdZdS)�GzipAppendTestN)rrrrrrr	rsrc@seZdZdS)�
Bz2AppendTestN)rrrrrrr	rsrc@seZdZdS)�LzmaAppendTestN)rrrrrrr	rsrc@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/longnamea123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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:r[i )rr�r�r�r�r�r!r)rr4rrr	�test_ustar_limits
s 






zLimitsTest.test_ustar_limitscCsXt�d�}|�tj�t�d�}d|_|�tj�t�d�}d|_|�t|jtj�dS)Na123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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:r[l)rr�r�r�r!rr�r�)rr4rrr	�test_gnu_limits,s


zLimitsTest.test_gnu_limitscCsRt�d�}|�tj�t�d�}d|_|�tj�t�d�}d|_|�tj�dS)Na123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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:r[l)rr�r�r�r!r)rr4rrr	�test_pax_limits9s


zLimitsTest.test_pax_limitsN)rrrrr	r
rrrr	rs
rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�MiscTestcCs`|�t�dddd�d�|�t�dddd�d�|�t�ddd�d�|�t�d	dd�d�dS)
Nr��rir=sfooZfoobarr$sfoosfoobar)r0r�stn�nts)rrrr	�test_char_fieldsHszMiscTest.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)Ns0000001rIs7777777i��s� i s�����l��s��������r�s��������i����s�l����r�rs       )r0r�nti)rrrr	�test_read_number_fieldsRsz MiscTest.test_read_number_fieldscCs�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d�d�|�t�d	�d
�|�t�d�d�|�t�d
�d�|�tjdtjd�d�|�tjdtjd�d�|�t�tjdtjd��d�dS)NrIs0000001i��s7777777i s� l��s�����r�s��������i����s��������l����s�gY�)r�g0Bs�g��������r)r0r�itnr�r)rrrr	�test_write_number_fieldsfs"z!MiscTest.test_write_number_fieldsc	Cs�|�t��t�ddtj�WdQRX|�t��t�ddtj�WdQRX|�t��t�ddtj�WdQRX|�t��t�ddtj�WdQRXdS)Nr�ri l�����l)r�r�rrr�r�)rrrr	�test_number_field_limits|sz!MiscTest.test_number_field_limitsc/Csvddddddddd	d
ddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/h/}tj|t|d0�dS)1N�version�grp�pwdZsymlink_exceptionZNULrXrWZ	GNU_MAGICZPOSIX_MAGICr�r�Z
LENGTH_PREFIXr�ZAREGTYPEr�ZSYMTYPEZCHRTYPEZBLKTYPEr�ZFIFOTYPEZCONTTYPErJZGNUTYPE_LONGLINKZGNUTYPE_SPARSErSZXGLTYPEZSOLARIS_XHDTYPEZSUPPORTED_TYPESZ
REGULAR_TYPESZ	GNU_TYPESZ
PAX_FIELDSZPAX_NAME_FIELDSr�r
rrrZcalc_chksumsZcopyfileobj�filemodeZEmptyHeaderErrorZTruncatedHeaderErrorZEOFHeaderErrorZInvalidHeaderErrorZSubsequentHeaderErrorZExFileObject�main)�	blacklist)rZcheck__all__r)rrrrr	�test__all__�s 
zMiscTest.test__all__N)rrrrrrrrrrrr	rFs


rc@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'S)(�CommandLineTestcOs(tjd|�|�\}}}|�tj��d�S)N�-mr�
)rr)rZassert_python_okr�r<�lineseprW)r�argsr�rcr{�errrrr	�
tarfilecmd�s
zCommandLineTest.tarfilecmdcGstjd|��S)N�-mr)r%r)rZassert_python_failure)rr!rrr	�tarfilecmd_failure�sz"CommandLineTest.tarfilecmd_failurec	Csbt�d�t�d�g}|�tj|�t�|d��*}x"|D]}|j|tj�	|�d�q6WWdQRXdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr�)r{)
rr�r�r�rrr^r<r=rz)r�tar_name�files�tfZtardatarrr	�make_simple_tarfile�s
z#CommandLineTest.make_simple_tarfilecCs||��\}}}|�|d�|�d|���|�d|���|�d|���|�dd�\}}}|�|d�|�|��d�dS)NrLsusageserrorsrequiredz-lr)r&r0rw�lowerr8�strip)rr"r{r#rrr	�test_bad_use�szCommandLineTest.test_bad_usecCs8x2tD]*}x$dD]}|�||�}|�|d�qWqWdS)N)z-tz--testrL)�testtarnamesr$r0)rr'�optr{rrr	�test_test_command�s

z!CommandLineTest.test_test_commandcCs:x4tD],}x&dD]}|�|d|�}|�d|�qWqWdS)N)z-vz	--verbosez-tsis a tar archive.
)r.r$rw)rr'r/r{rrr	�test_test_command_verbose�s

z)CommandLineTest.test_test_command_verbosecCs�t�d�}|�d|�\}}}|�d|�|�|d�|�|d�x�tD]�}|j|d���t|d��}|��}WdQRXzVtt	d��}|�
|dd	��WdQRX|�dt	�\}}}|�|d�|�|d�Wdt�t	�XWdQRXqFWdS)
Nz
zipdir.zipz-ts is not a tar archive.rLrI)r'rHr�i�)rr�r&rwr0r.ZsubTestrr/r�r�r�)r�zipnamer"r{r#r'r�rrrr	�test_test_command_invalid_file�s 

z.CommandLineTest.test_test_command_invalid_filecCs�x~tD]v}t���*}t�|d��}|jdd�WdQRXWdQRX|���dd�}x(dD] }|j||dd�}|�	||�qXWqWdS)Nr7F)rmriro)z-lz--list)�PYTHONIOENCODING)
r.r�captured_stdoutrrrFrvrWr$r0)rr'r�r)�expectedr/r{rrr	�test_list_command�s

 
z!CommandLineTest.test_list_commandcCs�x�tD]x}t���*}t�|d��}|jdd�WdQRXWdQRX|���dd�}x*dD]"}|j|d|dd�}|�	||�qXWqWdS)	Nr7T)rmriro)z-vz	--verbosez-l)r4)
r.rr5rrrFrvrWr$r0)rr'r�r)r6r/r{rrr	�test_list_command_verbose�s

 

z)CommandLineTest.test_list_command_verbosecCsDt�d�}|�d|�\}}}|�d|�|�|d�|�|d�dS)Nz
zipdir.zipz-ls is not a tar archive.rLrI)rr�r&rwr0)rr2r"r{r#rrr	�test_list_command_invalid_file�s

z.CommandLineTest.test_list_command_invalid_filec
Cstt�d�t�d�g}xZdD]R}z@|j|tf|��}|�|d�t�t��}|��WdQRXWdt�t�XqWdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt)z-cz--createrL)	rr�r$r�r0rrr~r�)rr(r/r{r(rrr	�test_create_command�s
z#CommandLineTest.test_create_commandc
Csvt�d�t�d�g}x\dD]T}zB|j|dtf|��}|�d|�t�t��}|��WdQRXWdt�t�XqWdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt)z-vz	--verbosez-cs file created.)	rr�r$r�rwrrr~r�)rr(r/r{r(rrr	�test_create_command_verbose	s
z+CommandLineTest.test_create_command_verbosec	Cs^t�d�g}z@|jdtf|��}|�|d�t�t��}|��WdQRXWdt�t�XdS)Nztokenize_tests.txtz-crL)	rr�r$�dotlessnamer0rrr~r�)rr(r{r(rrr	�$test_create_command_dotless_filename
	sz4CommandLineTest.test_create_command_dotless_filenamec	Csltj�td�}t�d�g}z@|jd|f|��}|�|d�t�	|��}|�
�WdQRXWdt�|�XdS)Nz.testtarztokenize_tests.txtz-crL)r<r=r>r;rr�r$r0rrr~r�)rr'r(r{r(rrr	�(test_create_command_dot_started_filename	sz8CommandLineTest.test_create_command_dot_started_filenamec
Cs�t�d�t�d�g}xjtttfD]\}|js,q zBtd|j}|jd|f|��}|�	|��}|�
�WdQRXWdt�|�Xq WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr�z-c)rr�rrr#rr�rr$rr~r�)rr(Zfiletyper'r{r(rrr	�test_create_command_compressed"	sz.CommandLineTest.test_create_command_compressedc
Cs\|�t�xLdD]D}z2t�t��|�|t�}WdQRX|�|d�Wdt�t�XqWdS)N)z-ez	--extractrL)r*r�r�temp_cwd�	tarextdirr$r0r�)rr/r{rrr	�test_extract_command1	s

z$CommandLineTest.test_extract_commandc
Cs^|�t�xNdD]F}z4t�t��|�|dt�}WdQRX|�d|�Wdt�t�XqWdS)N)z-vz	--verbosez-es file is extracted.)r*r�rr@rAr$rwr�)rr/r{rrr	�test_extract_command_verbose;	s

z,CommandLineTest.test_extract_command_verbosec	CsP|�t�z4t�t��|�dtd�}WdQRX|�|d�Wdt�t�XdS)Nz-eZspamdirrL)r*r�rr@rAr$r0r�)rr{rrr	�(test_extract_command_different_directoryE	s
z8CommandLineTest.test_extract_command_different_directoryc	CsZt�d�}t�t��|�d|�\}}}WdQRX|�d|�|�|d�|�|d�dS)Nz
zipdir.zipz-es is not a tar archive.rLrI)rr�r@rAr&rwr0)rr2r"r{r#rrr	�!test_extract_command_invalid_fileN	s
z1CommandLineTest.test_extract_command_invalid_fileN)rrrr$r&r*r-r0r1r3r7r8r9r:r;r=r>r?rBrCrDrErrrr	r�s&	





	rc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextManagerTestc	Cs6t�t��}|�|jd�WdQRX|�|jd�dS)Nzclosed inside runtime contextzcontext manager failed)rrrrUr�r�)rr(rrr	�
test_basicY	szContextManagerTest.test_basicc
Cs<t�t�}|��|�t��|�WdQRXWdQRXdS)N)rrrr*r�r�)rr(rrr	�test_closed^	s

zContextManagerTest.test_closedc
CsR|�t�� }t�t��
}t�WdQRXWdQRX|�|jtd�|�|j	d�dS)Nz)wrong exception raised in context managerzcontext manager failed)
r��	Exceptionrrrr�r�Z	exceptionr�r�)rr�r(rrr	�test_exceptiong	s
z!ContextManagerTest.test_exceptionc	CsVy t�td��
}t�WdQRXWnYnX|�tj�t�dd�|�|j	d�dS)Nr�rz-context manager wrote an end-of-archive blockzcontext manager failed)
rrr�rIr0r<r=r_r�r�)rr(rrr	�test_no_eofp	szContextManagerTest.test_no_eofc	Cs2t�td��WdQRX|�tj�t�dd�dS)Nr�rz-context manager wrote no end-of-archive block)rrr�r8r<r=r_)rrrr	�test_eof|	s
zContextManagerTest.test_eofc
Csfttd��R}y"tj|dd��
}t�WdQRXWnYnX|�|jd�|�|jd�WdQRXdS)Nr�r�)r�rzexternal file object was closedzcontext manager failed)rr�rrIrUr�r�)rr5r(rrr	r��	szContextManagerTest.test_fileobjN)	rrrrGrHrJrKrLr�rrrr	rFW	s		rFzrequires 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��}|��}WdQRX|�t	|�t
�dS)NrH)r(r:r;rr<r=r>r/r0r
r3)rr[r�rrrr	�_test_link_extraction�	sz'LinkEmulationTest._test_link_extraction�islinkz3Skip emulation - has os.path.islink but not os.linkcCs|�d�dS)Nz
ustar/lnktype)rN)rrrr	�test_hardlink_extraction1�	sz+LinkEmulationTest.test_hardlink_extraction1cCs|�d�dS)Nz./ustar/linktest2/lnktype)rN)rrrr	�test_hardlink_extraction2�	sz+LinkEmulationTest.test_hardlink_extraction2ruz Skip emulation if symlink existscCs|�d�dS)Nz
ustar/symtype)rN)rrrr	�test_symlink_extraction1�	sz*LinkEmulationTest.test_symlink_extraction1cCs|�d�dS)Nz./ustar/linktest2/symtype)rN)rrrr	�test_symlink_extraction2�	sz*LinkEmulationTest.test_symlink_extraction2N)
rrrrNr��skipIfr�r<r=rPrQrRrSrrrr	rM�	srMc@s$eZdZdd�Zdd�Zdd�ZdS)�Bz2PartialReadTestc	s~G�fdd�dtj��t�t�d����}xNtt|�d�D]:}ytj	�|d|��|d�Wq<tj
k
rtYq<Xq<WdS)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�AssertionErrorrNr1rv�superr/)rr�)�	MyBytesIO�	__class__rr	r/�	sz>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readcsd|_t�|�j|�S)NF)rVrXrM)rr!)rYrZrr	rM�	sz>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)rrrrVr/rM�
__classcell__r)rY)rZr	rY�	srYr�rI)r�r)rrrr �compressrr�r��ranger1rr�)rrrr�r)rYr	�_test_partial_input�	sz&Bz2PartialReadTest._test_partial_inputcCs|�d�dS)Nr7)r^)rrrr	�test_partial_input�	sz%Bz2PartialReadTest.test_partial_inputcCs|�d�dS)Nzr:bz2)r^)rrrr	�test_partial_input_bz2�	sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrr^r_r`rrrr	rU�	srUcCsZyddl}ddl}Wntk
r(dSX|�d�ddkr@dS|�d�ddkrVdSdS)NrF�rootT)rr�ImportError�getpwuidZgetgrgid)rrrrr	�root_is_uid_gid_0�	srd�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��R}xJ|D]B\}}}}	}
t�|�}||_||_	d	|_
d	|_|	|_|�
||
�qLWWdQRXtS)
Nscontent�c�b�M�L�X�Wr�ra)rrrrr�r�rr�r�rrr�rr�r�)�
filename_1�	dirname_1�
filename_2r5r�tarflr[rr�typ�contentsr�rrr	�_make_test_archive�	s

z#NumericOwnerTest._make_test_archivec	csZd|_d}d}|}|}tj�||�}t�|||�}t�|��}||||fVWdQRXdS)Nrznumeric-owner-testfiler�)rjr<r=r>rgrtrr)�mock_geteuidZfname�dirnamernrorpZtar_filenamerqrrr	�_setup_test�	szNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc
	Cs�|�|��.\}}}}|j|tdd�|j|tdd�WdQRXtj�t|�}tj�t|�}	|jtj�	|dd�tj�	|	dd�gdd�dS)NT)�
numeric_ownerrhrirlrm)�	any_order)
rwr:r;r<r=r>�assert_has_callsr�rh�call)
rru�
mock_chmod�
mock_chownrqrn�_rp�f_filename_1�f_filename_2rrr	�test_extract_with_numeric_owner
sz0NumericOwnerTest.test_extract_with_numeric_ownerc	Cs�|�|��\}}}}|jtdd�WdQRXtj�t|�}tj�t|�}	tj�t|�}
|jtj�	|dd�tj�	|	dd�tj�	|
dd�gdd	�dS)
NT)rxrhrirjrkrlrm)ry)
rwr�r;r<r=r>rzr�rhr{)rrur|r}rqrnrorprZf_dirname_1r�rrr	�"test_extractall_with_numeric_owner(
sz3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"c	CsN|�|��\}}}}|j|tdd�WdQRXtj�t|�}|�|dd�dS)NF)rxr)rwr:r;r<r=r>Zassert_called_with)rrur|r}rqrnr~rrrr	�"test_extract_without_numeric_owner@
sz3NumericOwnerTest.test_extract_without_numeric_ownerc	Cs8|�|��$\}}}}|�t|j|tdd�WdQRXdS)NFT)rwr�r}r:r;)rrurqrnr~rrr	�test_keyword_onlyO
sz"NumericOwnerTest.test_keyword_onlyN)rrrrKrtrrwr�rhrir�r�r�rdr�r�rrrr	rg�	s	





rgc
Cs�t�t�t�t�tgattd��}|��}WdQRXxTt	t
tfD]F}|jrDt�|j�t�|j�|�|jd��}|�
|�WdQRXqDWdS)NrHr�)rr�r;r<�makedirsrr.rr/rrr#rkr�)r5r�cr(rrr	�setUpModuleV
s

r�cCstj�t�rt�t�dS)N)r<r=r�r;rr�rrrr	�tearDownModuleg
sr��__main__)qrtr<rZhashlibr�
contextlibrZrandomrr�r�Z
unittest.mockrr�rZtest.supportrrrbr r%r
r=r�ZTESTFNr;rAr�rr>rr!r$r�r<r3r*rZ
requires_gziprZrequires_bz2rZ
requires_lzmar#r&ZTestCaser,rerfrgrhr�r�r�r�r�r�r�r�r�r�rrrrrrrrr4r@rLrTrZr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrFrTrMrUrdrgr�r�rrrrrr	�<module>s�




~PW|=(a*;,;&RZ
*TQO@;S?:!v