Your IP : 216.73.216.60


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_tarfile.cpython-35.opt-2.pyc



���]n�@s�ddlZddlZddlZddlmZddlmZddlmZddl	Z	ddl
Z	ddlZddlm
Z
ddlmZyddlZWnek
r�dZYnXyddlZWnek
r�dZYnXyddlZWnek
rdZYnXdd�Zejje
j�d	Zed
Ze
jd�Zejjed�Zejjed
�Zejjed�Zejjed�Z ejjed�Z!dZ"dZ#Gdd�d�Z$e
j%Gdd�d��Z&e
j'Gdd�d��Z(e
j)Gdd�d��Z*Gdd�de$�Z+Gdd�de+e	j,�Z-Gdd �d e&e-�Z.Gd!d"�d"e(e-�Z/Gd#d$�d$e*e-�Z0Gd%d&�d&e+e	j,�Z1Gd'd(�d(e&e1�Z2Gd)d*�d*e(e1�Z3Gd+d,�d,e*e1�Z4Gd-d.�d.e+�Z5Gd/d0�d0e5�Z6Gd1d2�d2e6e	j,�Z7Gd3d4�d4e&e6e	j,�Z8Gd5d6�d6e(e6e	j,�Z9Gd7d8�d8e*e6e	j,�Z:Gd9d:�d:e5e	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?�Z@GdEdF�dFe(e?�ZAGdGdH�dHe*e?�ZBGdIdJ�dJe+e	j,�ZCGdKdL�dL�ZDGdMdN�dNeDe+e	j,�ZEGdOdP�dPeDe+e	j,�ZFGdQdR�dRe$�ZGGdSdT�dTeGe	j,�ZHGdUdV�dVe&eH�ZIGdWdX�dXe(eH�ZJGdYdZ�dZe*eH�ZKGd[d\�d\eGe	j,�ZLGd]d^�d^e&eL�ZMGd_d`�d`e(eL�ZNGdadb�dbe*eL�ZOGdcdd�dde	j,�ZPGdedf�dfeGe	j,�ZQGdgdh�dhe&eQ�ZRGdidj�dje(eQ�ZSGdkdl�dle*eQ�ZTGdmdn�dneQ�ZUe	jVeWedo�dp�Gdqdr�dre	j,��ZXGdsdt�dteP�ZYGdudv�dv�ZZGdwdx�dxeZe	j,�Z[Gdydz�dzeZe	j,�Z\Gd{d|�d|eZe	j,�Z]Gd}d~�d~�Z^Gdd��d�e^e	j,�Z_Gd�d��d�e&e^e	j,�Z`Gd�d��d�e(e^e	j,�ZaGd�d��d�e*e^e	j,�ZbGd�d��d�e	j,�ZcGd�d��d�e	j,�ZdGd�d��d�e	j,�ZeGd�d��d�e	j,�Zfe	jgeWedo�d��Gd�d��d�e+e	j,��ZhGd�d��d�e(e	j,�Zid�d��Zje	jVeWed��d��e	jVeWed��d��Gd�d��d�e	j,���Zkd�d��Zld�d��Zmend�kr�e	jo�dS)��N)�md5)�contextmanager)�Random)�support)�
script_helpercCst|�j�S)N)r�	hexdigest)�data�r	�1/opt/alt/python35/lib64/python3.5/test_tarfile.py�md5sumsrz-tardirz
-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ 65f477c818ad9e15f7feab0c6d37742fZ a54fbc4ca4f4399a90e1b27164012fc6c@sCeZdZeZdZejZej	j
Z
edd��ZdS)�TarTest�cCs|j|jS)N)�prefix�suffix)�selfr	r	r
�mode3szTarTest.modeN)
�__name__�
__module__�__qualname__�tarnamer�io�FileIO�open�tarfile�TarFile�taropen�propertyrr	r	r	r
r-s
	rc@s=eZdZeZdZer'ejndZe	j
jZdS)�GzipTest�gzN)
rrr�gzipnamerr�gzipZGzipFilerrrZgzopenrr	r	r	r
r7src@s=eZdZeZdZer'ejndZe	j
jZdS)�Bz2Test�bz2N)
rrr�bz2namerrr"�BZ2FilerrrZbz2openrr	r	r	r
r!>sr!c@s=eZdZeZdZer'ejndZe	j
jZdS)�LzmaTest�xzN)
rrr�xznamerr�lzma�LZMAFilerrrZxzopenrr	r	r	r
r%Esr%c@s.eZdZdZdd�Zdd�ZdS)�ReadTestzr:cCs(tj|jd|jdd�|_dS)Nr�encodingz	iso8859-1)rrrr�tar)rr	r	r
�setUpQszReadTest.setUpcCs|jj�dS)N)r,�close)rr	r	r
�tearDownUszReadTest.tearDownN)rrrrr-r/r	r	r	r
r*Msr*c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�
UstarReadTestcCss|jjd�}|jj|��H}|j�}|jt|�|jd�|jt|�td�WdQRXdS)Nz
ustar/regtypezregular file extraction failed)	r,�	getmember�extractfile�read�assertEqual�len�sizer�md5_regtype)r�tarinfo�fobjrr	r	r
�test_fileobj_regular_file[sz'UstarReadTest.test_fileobj_regular_filecCs�|jjdt�|jjd�}ttjjtd�d��}|j�}WdQRX|jj	|��e}t
j|�}|j�}|j||d�|jt
|�dd�|j|ddd�WdQRXdS)Nz
ustar/regtype�rzfileobj.readlines() failed�r�SzOI will gladly admit that Python is not the fastest running scripting language.
)r,�extract�TEMPDIRr1r�os�path�join�	readlinesr2r�
TextIOWrapperr4r5)rr8�fobj1�lines1r9�fobj2�lines2r	r	r
�test_fileobj_readlinesds!
z$UstarReadTest.test_fileobj_readlinescCs�|jjdt�|jjd�}ttjjtd�d��}|j�}WdQRX|jj	|��/}t
tj|��}|j
||d�WdQRXdS)Nz
ustar/regtyper;zfileobj.__iter__() failed)r,r>r?r1rr@rArBrCr2�listrrDr4)rr8rErFrGrHr	r	r
�test_fileobj_itervs!zUstarReadTest.test_fileobj_iterc	Cs�|jjdt�ttjjtd�d��}|j�}WdQRX|jjd�}|jj	|�}|j�}|j
d�|jd|j�d�|j
dd�|jd|j�d�|j
dd�|jd|j�d	�|j
dd�|jd|j�d
�|jd�}|j||dd�d
�|j
dd�|j|j
|j�d�|j|j�dd�|j
|j
d�|jd|j�d�|j
d�|j�}|j
d�|j�}|j||d�|j
d�|jt|j��|j�d�|j
d�|jt|j��d|j�d�|j
d�|j�}|j|j�|t|�d�d�|j�dS)Nz
ustar/regtype�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 failedizreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failedi���)r,r>r?rr@rArBr3r1r2�seekr4�tellr6rCr5�readliner.)	rr9rr8�text�s�s1�s2�liner	r	r
�test_fileobj_seek�s\!




"
"zUstarReadTest.test_fileobj_seekcCs�|jjd��t}tj|�}|j�jd�}|jt|�t�y|j	d�Wnt
k
r�|jd�YnXWdQRXdS)Nz
ustar/regtypez	iso8859-1�dzseeking failed in text mode)r,r2rrDr3�encoder4rr7rQ�AttributeError�fail)rr9rr	r	r
�test_fileobj_text�s
zUstarReadTest.test_fileobj_textcCsR|jj|��9}|jj|��}|j|j|j�WdQRXWdQRXdS)N)r,r2r4�name)rZlnktype�regtype�a�br	r	r
�_test_fileobj_link�sz UstarReadTest._test_fileobj_linkcCs|jdd�dS)Nz
ustar/lnktypez
ustar/regtype)rc)rr	r	r
�test_fileobj_link1�sz UstarReadTest.test_fileobj_link1cCs|jdd�dS)Nz./ustar/linktest2/lnktypezustar/linktest1/regtype)rc)rr	r	r
�test_fileobj_link2�s	z UstarReadTest.test_fileobj_link2cCs|jdd�dS)Nz
ustar/symtypez
ustar/regtype)rc)rr	r	r
�test_fileobj_symlink1�sz#UstarReadTest.test_fileobj_symlink1cCs|jdd�dS)Nz./ustar/linktest2/symtypezustar/linktest1/regtype)rc)rr	r	r
�test_fileobj_symlink2�s	z#UstarReadTest.test_fileobj_symlink2cCs|jdd�dS)NZsymtype2z
ustar/regtype)rc)rr	r	r
�test_issue14160�szUstarReadTest.test_issue14160N)rrrr:rIrKrYr^rcrdrerfrgrhr	r	r	r
r0Ys	
2r0c@seZdZdS)�GzipUstarReadTestN)rrrr	r	r	r
ri�sric@seZdZdS)�Bz2UstarReadTestN)rrrr	r	r	r
rj�srjc@seZdZdS)�LzmaUstarReadTestN)rrrr	r	r	r
rk�srkc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�ListTestcCs"tj|jd|j�|_dS)Nr)rrrrr,)rr	r	r
r-�szListTest.setUpcs�tjtj�ddd�}tjtd|���jjdd�WdQRX|j�j	�}�j
d|��j
d|��j
d	|��j
d
ddd
|��j
d|��j
d|��j
d|��j
d|��fdd�}�j
|d�|��j
|d�|��j
|d�|��j
|d�|��j
|d�|��j|d��jd|��jd|�dS)N�ascii�newline�
�stdout�verboseFsustar/conttypes
ustar/regtypes
ustar/lnktypesustars/12345�(s67/longnames./ustar/linktest2/symtypes./ustar/linktest2/lnktypesustar/dirtype/sustar/dirtype-with-size/cs(|j�jjd�}|jdd�S)N�surrogateescaperm�backslashreplace)�decoder,r+r[)rbrU)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->)
rrD�BytesIOr�	swap_attr�sysr,rJ�detach�getvalue�assertIn�assertRegex�assertNotIn)r�tio�outrvr	)rr
�	test_list�s.zListTest.test_listcCs�tjtj�ddd�}tjtd|��|jjdd�WdQRX|j�j	�}|j
|dd�|jd	|�|jd
|�|jd|�|jdd
ddd
dd|�|jdd
ddd
dd|�dS)NrmrnrorprqTsX\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\nrOsustar/symtype -> regtypes1./ustar/linktest2/symtype -> ../linktest1/regtypes;./ustar/linktest2/lnktype link to ./ustar/linktest1/regtypesgnus/123�}s/longlink link to gnus	/longnamespaxs/longlink link to pax)rrDrwrrxryr,rJrzr{r}r|)rrr�r	r	r
�test_list_verboses	"zListTest.test_list_verbosec
Cs�tjtj�ddd�}dd�}tjtd|��'|jjddd	||j��WdQRX|j�j	�}|j
d
|�|jd|�dS)Nrmrnrocss/x(|j�D]}d|jkr
|Vq
WdS)NZreg)�
getmembersr_)r,r8r	r	r
�members&sz+ListTest.test_list_members.<locals>.membersrprqFr�s
ustar/regtypesustar/conttype)rrDrwrrxryr,rJrzr{r|r~)rrr�r�r	r	r
�test_list_members$s)zListTest.test_list_membersN)rrrr-r�r�r�r	r	r	r
rl�s%rlc@seZdZdS)�GzipListTestN)rrrr	r	r	r
r�1sr�c@seZdZdS)�Bz2ListTestN)rrrr	r	r	r
r�5sr�c@seZdZdS)�LzmaListTestN)rrrr	r	r	r
r�9sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�CommonReadTestcCs�tjt|jjdd���WdQRXzby#tjt|j�}|j�Wn"tjk
rs|jd�YnX|j|j	�g�Wd|j
�XdS)Nr;�wz&tarfile.open() failed on empty archive)rr�tmpnamer�replace�getnames�	ReadErrorr]�assertListEqualr�r.)rr,r	r	r
�test_empty_tarfile?s"z!CommonReadTest.test_empty_tarfilec
Cs1|jtd��tjd|j�WdQRXdS)NZxxx)�assertRaisesRegex�FileNotFoundErrorrrr)rr	r	r
�test_non_existent_tarfilePsz(CommonReadTest.test_non_existent_tarfilecCsSttd��WdQRX|jtjtjt|j�|jtjtjt�dS)N�wb)rr��assertRaisesrr�r)rr	r	r
�test_null_tarfileVsz CommonReadTest.test_null_tarfilecCs�td�jd�jdd�}x�dD]�}|jtd��V}|j|d�tjd	�}t|�|_	|j|j
��|j|�WdQRXtjtd
ddd
�}z$|j|j�d	gd|�Wd|j
�Xq(WdS)Nri��big��ar�i�foorr;Zignore_zerosTz3ignore_zeros=True should have skipped the %r-blocksi)r�r�)r�getrandbits�to_bytesrr��writer�TarInfor5r6�tobufr�r�r.)rr�charr9r8r,r	r	r
�test_ignore_zeros_s!
z CommonReadTest.test_ignore_zerosc4CsUxNd
D]F}tjtd��<}tjd�}d|_|j|tjdd��WdQRXttd��}|j|�WdQRXtjt��5}|j	tj
d	��x|D]}q�WWdQRXWdQRXtjt��p}|j�}|j	tj
d	��|j|t
�WdQRX|j	tj
d	��|j|�j�WdQRXWdQRXqWdS)N��X��zw:r�r�zr+bzunexpected end of data)r�r�r�r�)rrr�r�r6�addfilerrw�truncater�r��nextr>r?r2r3)rr6r,�tr9r	r	r
�test_premature_end_of_archiveus"
	$
z,CommonReadTest.test_premature_end_of_archiveN)rrrr�r�r�r�r�r	r	r	r
r�=s
	r�c@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zejeed�d�ejdd���Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'S)(�MiscReadTestBasecCsdS)Nr	)rr	r	r
�requires_name_attribute�sz(MiscReadTestBase.requires_name_attributecCs�|j�t|jd��t}|j|jt�tjd|d|j��<}|j|jt�|j|jt	j
j|j��WdQRXWdQRXdS)NrL�fileobjr)r�rr�assertIsInstancer_�strrrr4r@rA�abspath)rr9r,r	r	r
�test_no_name_argument�s
z&MiscReadTestBase.test_no_name_argumentcCs|t|jd��}|j�}WdQRXtj|�}|jtt|d�tjd|d|j	�}|j
|j�dS)NrLr_r�r)rrr3rrwr�r\�getattrrr�assertIsNoner_)rr9rr,r	r	r
�test_no_name_attribute�sz'MiscReadTestBase.test_no_name_attributecCsyt|jd��}|j�}WdQRXtj|�}d|_tjd|d|j��}|j|j�WdQRXdS)NrLr
r�r)	rrr3rrwr_rrr�)rr9rr,r	r	r
�test_empty_name_attribute�s	z*MiscReadTestBase.test_empty_name_attributecCs}tj|jtj�}t|d��O}|j|jt�tjd|d|j��}|j	|j�WdQRXWdQRXdS)NrLr�r)
r@rr�O_RDONLYr�r_�intrrr�)r�fdr9r,r	r	r
�test_int_name_attribute�s
z(MiscReadTestBase.test_int_name_attributecCs�|j�tj|j�}t|d��t}|j|jt�tjd|d|j	��<}|j|jt�|j
|jtjj|j��WdQRXWdQRXdS)NrLr�r)
r�r@�fsencoderrr�r_�bytesrrr4rAr�)rrr9r,r	r	r
�test_bytes_name_attribute�s
z*MiscReadTestBase.test_bytes_name_attributecCs�ttd��WdQRX|jtd��|jtd�}WdQRX|jtd��|jtd�}WdQRX|jtd��|jtd�}WdQRXdS)Nr�z
mode must be �q�rwr
)rr�r��
ValueErrorr)rr,r	r	r
�test_illegal_mode_arg�sz&MiscReadTestBase.test_illegal_mode_argcCstj|jd|j�}zQ|j�|j�}|j}|j}|j|��}|j�}WdQRXWd|j	�X|j|j���}|j
|�|j|jddd|�}|j�}|j|j|�|j�|j|j|�j�|d�|j	�WdQRXdS)Nrzr:r�zseek back did not work)
rrrrr�r_�offsetr2r3r.rQr4r�)rr,r�r_r��frr9r	r	r
�test_fileobj_with_offset�s$
		

z)MiscReadTestBase.test_fileobj_with_offsetcCsa|jtjtjt|j�ttd��,}|jtjtjd|d|j�WdQRXdS)NrLr�r)r�rr�rrr)rr9r	r	r
�test_fail_comp�szMiscReadTestBase.test_fail_compcCs/|jjd�}|j|jtjd�dS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r,r1r4�typer�DIRTYPE)rr8r	r	r
�test_v7_dirtype�sz MiscReadTestBase.test_v7_dirtypecCs:y|jjd�Wntk
r5|jd�YnXdS)Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r,r1�KeyErrorr])rr	r	r
�test_xstar_type�s
z MiscReadTestBase.test_xstar_typecCsmxf|jD][}|jt|j�dd|j�|jjd�sHq
|j|jdd|j�q
WdS)Ni��>zwrong mtime for %szustar/rzwrong uname for %s)r,r4r��mtimer_�
startswith�uname)rr8r	r	r
�test_check_members�sz#MiscReadTestBase.test_check_memberscCs'|j|jj�djdd�dS)NrMzmisc/eofzcould not find all members���)r4r,r�r_)rr	r	r
�test_find_memberssz"MiscReadTestBase.test_find_members�linkzMissing hardlink implementationcCsStjtdddd��1}|jdt�|jtjtj	j
td��|jdt�|jtjtj	j
td��ttj	j
td�d��}|j�}WdQRX|jt
|�t�|jdt�|jtjtj	j
td��ttj	j
td�d��}|j�}WdQRX|jt
|�t�WdQRXdS)	NZ
errorlevelrMr+z	iso8859-1z
ustar/regtypez
ustar/lnktyperLz
ustar/symtype)rrrr>r?�
addCleanupr�unlinkr@rArBr3r4rr7)rr,r�rr	r	r
�test_extract_hardlinks""!"!z&MiscReadTestBase.test_extract_hardlinkc	Cs4tjtdd�}tjjtd�}tj|�z�dd�|D�}|j||�x�|D]�}tjj||j	�}t
jdkr�|j|j
d@tj|�jd@�dd	�}tjj|�}d
j||j�||�|�}|j|j||�qdWWd|j�tj|�XdS)Nr+z	iso8859-1�
extractallcSs"g|]}|j�r|�qSr	)�isdir)�.0r�r	r	r
�
<listcomp>#s	z4MiscReadTestBase.test_extractall.<locals>.<listcomp>�win32i�cSs6t|t�r%dj||j��Sdj|�SdS)Nz{} ({})z
{!r} (int))�
isinstance�float�format�hex)r�r	r	r
�format_mtime+sz6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrr@rArBr?�mkdirr�r_ry�platformr4r�stat�st_mode�getmtimer�r�r.r�rmtree)	rr,�DIRZdirectoriesr8rAr�Z
file_mtime�errmsgr	r	r
�test_extractalls(

		
z MiscReadTestBase.test_extractallcCs�d}tjjtd�}tj|�z�tjtdd���}|j|�}|j	|d|�tjj||�}|j
tjj|�|j�t
jdkr�|j
tj|�jd@d�WdQRXWdtj|�XdS)	Nz
ustar/dirtypeZ
extractdirr+z	iso8859-1rAr�i�i�)r@rArBr?r�rrrr1r>r4r�r�ryr�r�r�rr�)rZdirtyper�r,r8Z	extractedr	r	r
�test_extract_directory:s
+z'MiscReadTestBase.test_extract_directorycCs�tjjtd�}t|d��}|jd�WdQRXz_tjtj	�}y|j
|�Wn(tjk
r�|j|j
j�YnX|jd�Wdtj|�XdS)N�emptyr�rPzReadError not raised)r@rArBr?rr��object�__new__rr�__init__r��
assertTruer��closedr]rr�)rr�r9r,r	r	r
�test_init_close_fobjIsz%MiscReadTestBase.test_init_close_fobjcCsrtj|j��Y}xOt||�D]>\}}|j|j|j�|j|j�|j��q%WWdQRXdS)N)rrr�zipr4r�Zget_info)rr,�m1�m2r	r	r
�test_parallel_iteration\sz(MiscReadTestBase.test_parallel_iterationN)rrrr�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	r	r
r��s(		
		r�c@seZdZdZdS)�MiscReadTestN)rrrr�r	r	r	r
r�dsr�c@seZdZdS)�GzipMiscReadTestN)rrrr	r	r	r
r�gsr�c@seZdZdd�ZdS)�Bz2MiscReadTestcCs|jd�dS)NzBZ2File have no name attribute)�skipTest)rr	r	r
r�ksz'Bz2MiscReadTest.requires_name_attributeN)rrrr�r	r	r	r
r�jsr�c@seZdZdd�ZdS)�LzmaMiscReadTestcCs|jd�dS)NzLZMAFile have no name attribute)r�)rr	r	r
r�osz(LzmaMiscReadTest.requires_name_attributeN)rrrr�r	r	r	r
r�nsr�c@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�StreamReadTestzr|cCs�x�|jD]w}|j�sq
|jj|��M}xCy|jd�}Wn"tjk
rn|jd�YnX|s7Pq7WWdQRXq
WdS)Niz6simple read-through using TarFile.extractfile() failed)r,Zisregr2r3r�StreamErrorr])rr8r9�bufr	r	r
�test_read_throughwsz StreamReadTest.test_read_throughcCsp|jj�}|jj|��}|j�}WdQRX|jt|�|jd�|jt|�td�dS)Nzregular file extraction failed)	r,r�r2r3r4r5r6rr7)rr8r9rr	r	r
r:�sz(StreamReadTest.test_fileobj_regular_filec
CsI|jj�}|jj|d��}|jtj|j�WdQRXdS)Nr)r,r�r2r�rr�r3)rZtarinfosr�r	r	r
�test_provoke_stream_error�sz(StreamReadTest.test_provoke_stream_errorcCstjtdd�}z�|j}x�|j�}|j�}|dkrIP|j|d�|j�sq|j�r�|jtj	��|j
|�WdQRXq$|j
|�}|j
|�}|dkr�q$|j|d�|j|j�|j�d�q$WWd|j
�XdS)Nr+z	iso8859-1zstream.next() failed.zstream.extractfile() failedzstream extraction failed)rrrr,r��assertIsNotNoneZislnkZissymr�r�r2r4r3r.)rZtar1Ztar2�t1Zt2�v1�v2r	r	r
�test_compare_members�s*	z#StreamReadTest.test_compare_membersN)rrrrrr:rrr	r	r	r
r�ss
	r�c@seZdZdS)�GzipStreamReadTestN)rrrr	r	r	r
r�src@seZdZdS)�Bz2StreamReadTestN)rrrr	r	r	r
r	�sr	c@seZdZdS)�LzmaStreamReadTestN)rrrr	r	r	r
r
�sr
c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�DetectReadTestcCsYytj||�}Wn2tjk
rJ}z|j�WYdd}~XnX|j�dS)N)rrr�r]r.)rr_rr,�er	r	r
�_testfunc_file�s
zDetectReadTest._testfunc_filecCsxy5t|d��}tj||d|�}WdQRXWn2tjk
ri}z|j�WYdd}~XnX|j�dS)NrLr�)rrr�r]r.)rr_rr�r,rr	r	r
�_testfunc_fileobj�s#z DetectReadTest._testfunc_fileobjc Cs3|jr�|jtj��tjtdd|j�WdQRX|jtj��tjtdd|j�WdQRX|jtj��tj|jdd�WdQRX|jtj��tj|jdd�WdQRX||jd�||jd|j�||jd�||jd|j�||jd�dS)Nrzr:zr|r;zr:*zr|*)rr�rr�rr)rZtestfuncr	r	r
�_test_modes�s	!!zDetectReadTest._test_modescCs|j|j�dS)N)rr
)rr	r	r
�test_detect_file�szDetectReadTest.test_detect_filecCs|j|j�dS)N)rr)rr	r	r
�test_detect_fileobj�sz"DetectReadTest.test_detect_fileobjN)rrrr
rrrrr	r	r	r
r�s
	rc@seZdZdS)�GzipDetectReadTestN)rrrr	r	r	r
r�src@seZdZdd�ZdS)�Bz2DetectReadTestcCshttd��}|j�}WdQRXtjtddd��}|j|�WdQRX|jtd�dS)NrLr��
compresslevelrMzr|*)rrr3r"r$r�r�r
)rr9rr	r	r
�test_detect_stream_bz2�s
z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrrr	r	r	r
r�src@seZdZdS)�LzmaDetectReadTestN)rrrr	r	r	r
r�src@s�eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�ZdS)(�MemberReadTestNcKs�|dk	rN|jj|��-}|jt|j��|d|j�WdQRXd|d<d|d<d|d<d|jkr�d	|d
<d	|d<xC|j�D]5\}}|jt||�|d||jf�q�WdS)
Nzwrong md5sum for %si��>r�i��uidrZ�gidzold-v7rr��gnamezwrong value in %s field of %s)r,r2r4rr3r_�itemsr�)rr8�chksum�kwargsr��k�vr	r	r
�_test_member�s




zMemberReadTest._test_membercCs/|jjd�}|j|dddt�dS)Nz
ustar/regtyper6icr)r,r1r r7)rr8r	r	r
�test_find_regtypesz MemberReadTest.test_find_regtypecCs/|jjd�}|j|dddt�dS)Nzustar/conttyper6icr)r,r1r r7)rr8r	r	r
�test_find_conttypesz!MemberReadTest.test_find_conttypecCs)|jjd�}|j|dd�dS)Nz
ustar/dirtyper6r)r,r1r )rr8r	r	r
�test_find_dirtypesz MemberReadTest.test_find_dirtypecCs)|jjd�}|j|dd�dS)Nzustar/dirtype-with-sizer6�)r,r1r )rr8r	r	r
�test_find_dirtype_with_sizesz*MemberReadTest.test_find_dirtype_with_sizecCs/|jjd�}|j|dddd�dS)Nz
ustar/lnktyper6r�linknamez
ustar/regtype)r,r1r )rr8r	r	r
�test_find_lnktypesz MemberReadTest.test_find_lnktypecCs/|jjd�}|j|dddd�dS)Nz
ustar/symtyper6rr&r`)r,r1r )rr8r	r	r
�test_find_symtypesz MemberReadTest.test_find_symtypecCs5|jjd�}|j|dddddd�dS)Nz
ustar/blktyper6r�devmajor��devminor)r,r1r )rr8r	r	r
�test_find_blktype#sz MemberReadTest.test_find_blktypecCs5|jjd�}|j|dddddd�dS)Nz
ustar/chrtyper6rr)rMr+r*)r,r1r )rr8r	r	r
�test_find_chrtype'sz MemberReadTest.test_find_chrtypecCs)|jjd�}|j|dd�dS)Nzustar/fifotyper6r)r,r1r )rr8r	r	r
�test_find_fifotype+sz!MemberReadTest.test_find_fifotypecCs/|jjd�}|j|dddt�dS)Nzustar/sparser6iPr)r,r1r �
md5_sparse)rr8r	r	r
�test_find_sparse/szMemberReadTest.test_find_sparsecCs/|jjd�}|j|dddt�dS)Nz
gnu/sparser6iPr)r,r1r r/)rr8r	r	r
�test_find_gnusparse3sz"MemberReadTest.test_find_gnusparsecCs/|jjd�}|j|dddt�dS)Nzgnu/sparse-0.0r6iPr)r,r1r r/)rr8r	r	r
�test_find_gnusparse_007sz%MemberReadTest.test_find_gnusparse_00cCs/|jjd�}|j|dddt�dS)Nzgnu/sparse-0.1r6iPr)r,r1r r/)rr8r	r	r
�test_find_gnusparse_01;sz%MemberReadTest.test_find_gnusparse_01cCs/|jjd�}|j|dddt�dS)Nzgnu/sparse-1.0r6iPr)r,r1r r/)rr8r	r	r
�test_find_gnusparse_10?sz%MemberReadTest.test_find_gnusparse_10cCs/|jjd�}|j|dddt�dS)Nuustar/umlauts-ÄÖÜäöüßr6icr)r,r1r r7)rr8r	r	r
�test_find_umlautsCsz MemberReadTest.test_find_umlautscCs/dddd}|j||jj��dS)Nzustar/z12345/�'z1234567/longname)r|r,r�)rr_r	r	r
�test_find_ustar_longnameHsz'MemberReadTest.test_find_ustar_longnamecCs/|jjd�}|j|dddt�dS)Nzmisc/regtype-old-v7r6icr)r,r1r r7)rr8r	r	r
�test_find_regtype_oldv7Lsz&MemberReadTest.test_find_regtype_oldv7cCs`|jj�tj|jd|jdd�|_|jjd�}|j|dddt�dS)Nrr+z	iso8859-1upax/umlauts-ÄÖÜäöüßr6icr)	r,r.rrrrr1r r7)rr8r	r	r
�test_find_pax_umlautsPs

z$MemberReadTest.test_find_pax_umlauts)rrrr r!r"r#r%r'r(r,r-r.r0r1r2r3r4r5r7r8r9r	r	r	r
r�s&rc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�LongnameTestcCsn|jdddd}y|jj|�}Wntk
rP|jd�YnX|j|jtjd�dS)N�/z123/r��longnamezlongname not foundzread longname as dirtype)	�subdirr,r1r�r]�assertNotEqualr�rr�)rr<r8r	r	r
�test_read_longname[s
zLongnameTest.test_read_longnamecCs�|jdddd}|jdddd}y|jj|�}Wntk
ri|jd�YnX|j|j|d�dS)Nr;z123/r�r<�longlinkzlonglink not foundzlinkname wrong)r=r,r1r�r]r4r&)rr<r@r8r	r	r
�test_read_longlinkes
zLongnameTest.test_read_longlinkcCs�|jdddd}|jj|�}|j}|jjj|�tj|jjjd
��}|j	t
j��t
jddd	|�WdQRXdS)Nr;z123/r�r<r*ir_zfoo.tarr�i)
r=r,r1r�r�rQrrwr3r�rr�r)rr<r8r�r9r	r	r
�test_truncated_longnamens	z$LongnameTest.test_truncated_longnamecCs�|jdddd}|jj|�j}ttd��K}|j|�tjj	|j
d�dd�}|j|j|j
�WdQRXdS)	Nr;z123/r�r<rLiz	iso8859-1�strict)r=r,r1r�rrrQrr�Zfrombufr3r4r��longnametype)rr<r�r9r8r	r	r
�test_header_offsetws
zLongnameTest.test_header_offsetN)rrrr?rArBrEr	r	r	r
r:Ys
		r:c@smeZdZdZejZdd�Zdd�Zdd�Z	dd	�Z
d
d�Zedd
��Z
dS)�GNUReadTestZgnucCs�|jj|t�tjjt|�}t|d��}|j�}WdQRX|jt	|�t
d|�|j�r�tj|�}|j
|jd|j�dS)NrLzwrong md5sum for %si)r,r>r?r@rArBrr3r4rr/�_fs_supports_holesr�Z
assertLess�	st_blocks�st_size)rr_�filenamer9rrUr	r	r
�_test_sparse_file�szGNUReadTest._test_sparse_filecCs|jd�dS)Nz
gnu/sparse)rK)rr	r	r
�test_sparse_file_old�sz GNUReadTest.test_sparse_file_oldcCs|jd�dS)Nzgnu/sparse-0.0)rK)rr	r	r
�test_sparse_file_00�szGNUReadTest.test_sparse_file_00cCs|jd�dS)Nzgnu/sparse-0.1)rK)rr	r	r
�test_sparse_file_01�szGNUReadTest.test_sparse_file_01cCs|jd�dS)Nzgnu/sparse-1.0)rK)rr	r	r
�test_sparse_file_10�szGNUReadTest.test_sparse_file_10c	Cs�tjjd�r�tjjtd�}t|d��}|jd�|j	�WdQRXtj
|�}tj|�|j
dkSdSdS)N�linuxzsparse-testr�irF)ryr�r�r@rArBr?rrQr�r�rr�rH)r_r9rUr	r	r
rG�s


zGNUReadTest._fs_supports_holesN)rrrr=rZGNUTYPE_LONGNAMErDrKrLrMrNrO�staticmethodrGr	r	r	r
rF�s		rFc@s7eZdZdZejZdd�Zdd�ZdS)�PaxReadTestZpaxc
Cstjtdd�}z�|jd�}|j|jd�|j|jd�|j|jjd�d�|jd�}|j|jd	�|j|jd�|j|jjd�d�|jd
�}|j|jd�|j|jd�|j|jjd�d�Wd|j	�XdS)Nr+z	iso8859-1zpax/regtype1r��barzVENDOR.umlautsuÄÖÜäöüßzpax/regtype2r
zpax/regtype3r)
rrrr1r4r�r�pax_headers�getr.)rr,r8r	r	r
�test_pax_global_headers�s$z#PaxReadTest.test_pax_global_headersc
Cs�tjtdd�}z�|jd�}|j|jd�|j|jd�|j|jd�|j|jd�|jt	|j�t
�|jt
|jd�d�|jt
|jd�d�Wd|j�XdS)	Nr+z	iso8859-1zpax/regtype4ic�{g��^�AZatime�ctime)
rrrr1r4r6rrr�r�r�rTr.)rr,r8r	r	r
�test_pax_number_fields�s!z"PaxReadTest.test_pax_number_fieldsN)	rrrr=rZXHDTYPErDrVrYr	r	r	r
rR�s	rRc@s(eZdZdd�Zdd�ZdS)�
WriteTestBasecCs�tj�}tjd|d|j�}|jtjd��|j�|j|j	d�|j
�}~tj�|j|j	�|j
||j
��dS)Nr�rr�z#external fileobjs must never closed)rrwrrrr�r�r.�assertFalser�r{rZ
gc_collectr4)rr9r,rr	r	r
�test_fileobj_no_close�s

z#WriteTestBase.test_fileobj_no_closecCs�tjt|j��I}tjd�}tjtj|_|j|t	j
d|j��WdQRX|jtd��*}|jt|j
��tjd�WdQRXdS)Nr�r�rLrO)rrr�rr��
RECORDSIZEZ	BLOCKSIZEr6r�rrwr4r5r3)rr,r�r9r	r	r
�test_eof_marker�s'zWriteTestBase.test_eof_markerN)rrrr\r^r	r	r	r
rZ�s
rZc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zej	e
ed
�d�dd
��Ze
jdd��Zdd�Zdd�Zdd�Zdddd�Ze
jdd��Zdd�Zdd�Zd d!�Zd"d#�ZdS)$�	WriteTestzw:cCs�dd}tjt|j�}z tj|�}|j|�Wd|j�Xtjt�}z!|j|j�d|d�Wd|j�XdS)N�
0123456789rNrz!failed to store 100 char filename)	rrr�rr�r�r.r4r�)rr_r,r�r	r	r
�test_100_char_names
zWriteTest.test_100_char_namecCs�tjt|j�}zLtjjtd�}t|d��}|jd�WdQRX|j	|�Wd|j
�X|jtjjt�dd�dS)N�filer�saaarztarfile is empty)
rrr�rr@rArBr?r��addr.Z
assertGreater�getsize)rr,rAr9r	r	r
�
test_tar_sizeszWriteTest.test_tar_sizecCs�tjt|j�}z�tjjtd�}t|d��WdQRX|j|�}|j	|j
d�t|d��}|jd�WdQRX|j|�}|j	|j
d�Wd|j�XdS)Nrbr�rsaaar*)
rrr�rr@rArBr?�
gettarinfor4r6r�r.)rr,rAr8r9r	r	r
�test_file_size*szWriteTest.test_file_sizecCs�tjjtd�}tj|�zMtjt|j�}z&|j	|�}|j
|jd�Wd|j�XWdt
j|�XdS)NZ	directoryr)r@rArBr?r�rrr�rrfr4r6r.r�rmdir)rrAr,r8r	r	r
�test_directory_size:s
zWriteTest.test_directory_sizer�zMissing hardlink implementationcCs�tjjtd�}tjjtd�}t|d��}|jd�WdQRXtj||�zZtjt|j	�}z3|j
|�|j
|�}|j|jd�Wd|j
�XWdtj|�tj|�XdS)Nr��link_targetr�saaar)r@rArBr?rr�r�rr�rrfr4r6r.rr�)rr��targetr9r,r8r	r	r
�test_link_sizeGs

zWriteTest.test_link_sizecCs�tjjtd�}tjd|�zMtjt|j�}z&|j	|�}|j
|jd�Wd|j�XWdt
j|�XdS)N�symlinkrjr)r@rArBr?rmrrr�rrfr4r6r.rr�)rrAr,r8r	r	r
�test_symlink_size\szWriteTest.test_symlink_sizecCs�tjjt�}tjt|j�}z}|j|j|d�|j	|�|j|j
�gd�tjt
��|j	|�WdQRX|j|j
�gd�Wd|j�XdS)Nzarchive name must be absolutezadded the archive to itself)r@rAr�r�rrrr4r_rcr�r�
change_cwdr?r.)r�dstnamer,r	r	r
�
test_add_selfjs
zWriteTest.test_add_selfcCs7tjjtd�}tj|�zx0d
D](}tjj||�}tj|�q,Wtjj}tj	t
|jdd�}z:tjdt
f��|j|dd	d|�WdQRXWd|j�Xtj	t
d
�}z:|jt|j��d�|j|j�dd	�Wd|j�XWdtj|�XdS)N�excluder�rS�bazr+z	iso8859-1zuse the filter argument�arcname�	empty_dirr;rMr)r�rSrs)r@rArBr?r�r�create_empty_file�isfilerrr�rZcheck_warnings�DeprecationWarningrcr.r4r5r�r�r�)r�tempdirr_rrr,r	r	r
�test_exclude|s&

	
$zWriteTest.test_excludec Csgtjjtd�}tj|�z0x0dD](}tjj||�}tj|�q,Wdd�}tjt	|j
dd�}z|j|d	d
d|�Wd|j�X|j
t��|j|d
dd|�WdQRXtjt	d�}zWx4|D],}|j|jd
�|j|jd�q�W|jt|j��d�Wd|j�XWdtj|�XdS)N�filterr�rSrscSs5tjj|j�dkrdSd|_d|_|S)NrSrWr�)r@rA�basenamer_rr�)r8r	r	r
r{�s
		z%WriteTest.test_filter.<locals>.filterr+z	iso8859-1rtruTr;rWr*)r�rSrs)r@rArBr?r�rrvrrr�rrcr.r��	TypeErrorr4rr�r5r�r�)rryr_r{r,r8r	r	r
�test_filter�s*

 
 zWriteTest.test_filterNFcCs�tjjtd�}|s+tj|�n
tj|�tjt	|j
�}z|j|d|�Wd|j�Xtjt	d�}z|j
�}Wd|j�X|s�tj|�n
tj|�|j|j|p�|jtjd��dS)Nr�rtr;r;)r@rArBr?rrvr�rrr�rrcr.r�r�rhr4r_r��sep)rrAZcmp_path�dirr�r,r�r	r	r
�_test_pathname�s 

zWriteTest._test_pathnamecCsMtjjtd�}tjjtd�}tj|�z�tjj|d�}tjj|d�}t|d��}|jd�WdQRXtj||�tj|d�}|j	|�|j	|�|j
�tj|d�}z:y|jd|�Wntk
r|j
d	�YnXWd|j
�XWdtj|�tj|�XdS)
NZtestsymlinksztestsymlinks.tar�sourcermr�z
something
r;rAz&extractall failed with symlinked files)r@rArBr?r�rr�rmrrcr.r��OSErrorr]rr�r�)rryZtemparchiveZsource_fileZtarget_filer�r,r	r	r
�test_extractall_symlinks�s*





z"WriteTest.test_extractall_symlinkscCs�|jd�|jtjjddd��|jtjjddd��|jtjjdd��|jtjjddd��|jtjjdddd��|jtjjdddd��|jtjjdddd��|jtjjdd��|jtjjddd��|jtjjdddd��|jtjjdddd��|jdtjtjd�|jdtjtjddd�dS)Nr��.rSz..r�T)r�r@rArBr)rr	r	r
�test_pathnames�s
"""""zWriteTest.test_pathnamescCsFtjdkr"|jdd�n |jdd�|jdd�dS)Nr�zC:\foor�z/fooz///foo)ryr�r�)rr	r	r
�test_abs_pathnames
szWriteTest.test_abs_pathnamescCs�tjt���tjt|j�}z|jd�Wd|j�Xtjtd�}zCx<|D]4}|j	dkr`|j
|j	jd�|j	�q`WWd|j�XWdQRXdS)Nr�r;z./)rror?rrr�rrcr.r_r�r�)rr,r�r	r	r
�test_cwds
'zWriteTest.test_cwdcs�x�tttfD]��G�fdd�dtj�}|�}|j���5tjt|j	d|dtj
dddi�}WdQRX|j|j�qWdS)Ncs(eZdZdZ�fdd�ZdS)z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTcs|jrd|_��dS)NF)�first)rr)�exctyper	r
r�&s		z>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)rrrr�r�r	)r�r	r
�BadFile$sr�r�r�rTZnonr�)
r��EOFError�RuntimeErrorrrwr�rrr�r�
PAX_FORMATr[r�)rr�r�r,r	)r�r
�test_open_nonwritable_fileobj"s		z'WriteTest.test_open_nonwritable_fileobj)rrrrrarergrir�r�r�r@rlrr�rnrqrzr~r�r�r�r�r�r�r	r	r	r
r_s"
(r_c@seZdZdS)�
GzipWriteTestN)rrrr	r	r	r
r�2sr�c@seZdZdS)�Bz2WriteTestN)rrrr	r	r	r
r�5sr�c@seZdZdS)�
LzmaWriteTestN)rrrr	r	r	r
r�8sr�c@s^eZdZdZdZdd�Zejej	dkoEe
ed�d�dd	��ZdS)
�StreamWriteTestzw|NcCs�tjt|j�}|j�|jr~|j�}ttd��}|j�}WdQRX|j|�}|j|j	d�n%|jt��}|j�}WdQRX|j
|jd�tjd�dS)NrLzfound trailing dataszincorrect zero padding)
rrr�rr.�decompressorr3�
decompressr[�unused_datar4�countr])rr,Zdecr9rr	r	r
�test_stream_paddingAs
	z#StreamWriteTest.test_stream_paddingr��umaskzMissing umask implementationcCs�tjjt�rtjt�tjd�}zLtjt|j	�}|j
�tjt�jd@}|j
|dd�Wdtj|�XdS)N�i�i�zwrong file permissions)r@rA�existsr�rr�r�rrrr.r�r�r4)rZoriginal_umaskr,rr	r	r
�test_file_modeQs

zStreamWriteTest.test_file_mode)
rrrrr�r�r�r�ryr�r�r@r�r	r	r	r
r�<s
!r�c@seZdZdS)�GzipStreamWriteTestN)rrrr	r	r	r
r�bsr�c@s%eZdZerejndZdS)�Bz2StreamWriteTestN)rrrr"�BZ2Decompressorr�r	r	r	r
r�esr�c@s%eZdZerejndZdS)�LzmaStreamWriteTestN)rrrr(�LZMADecompressorr�r	r	r	r
r�hsr�c@s�eZdZdd�Zddd�Zddd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�GNUWriteTestcCst|�dd}|dS)NirM)r5)rrUZblocksr	r	r
�_lengthpszGNUWriteTest._lengthNcCszd}t|�tjkr8|d7}||j|�7}|dk	rvt|�tjkrv|d7}||j|�7}|S)Ni)r5rZLENGTH_NAMEr�ZLENGTH_LINK)rr_r�r�r	r	r
�
_calc_sizets
!
zGNUWriteTest._calc_sizecCstj|�}|r*||_tj|_tjtd�}zKtj|_|j	|�|j
||�}|j}|j||d�Wd|j
�Xtjt�}zR|j�}|j|d�|j|j|jd�|j|j|jd�Wd|j
�XdS)Nr�z%GNU longname/longlink creation failedzunable to read longname member)rr�r&�LNKTYPEr�rr��
GNU_FORMATr�r�r�r�r4r.r�rr_)rr_r�r8r,rr�memberr	r	r
�_test�s,	
		zGNUWriteTest._testcCs|jddd�dS)Nzlongnam/��longnam)r�)rr	r	r
�test_longname_1023�szGNUWriteTest.test_longname_1023cCs|jddd�dS)Nzlongnam/r�r<)r�)rr	r	r
�test_longname_1024�szGNUWriteTest.test_longname_1024cCs|jddd�dS)Nzlongnam/r��	longname_)r�)rr	r	r
�test_longname_1025�szGNUWriteTest.test_longname_1025cCs|jdddd�dS)Nr_zlonglnk/r��longlnk)r�)rr	r	r
�test_longlink_1023�szGNUWriteTest.test_longlink_1023cCs|jdddd�dS)Nr_zlonglnk/r�r@)r�)rr	r	r
�test_longlink_1024�szGNUWriteTest.test_longlink_1024cCs|jdddd�dS)Nr_zlonglnk/r��	longlink_)r�)rr	r	r
�test_longlink_1025�szGNUWriteTest.test_longlink_1025cCs$|jdddddd�dS)Nzlongnam/r�r�zlonglnk/r�)r�)rr	r	r
�test_longnamelink_1023�sz#GNUWriteTest.test_longnamelink_1023cCs$|jdddddd�dS)Nzlongnam/r�r<zlonglnk/r@)r�)rr	r	r
�test_longnamelink_1024�sz#GNUWriteTest.test_longnamelink_1024cCs$|jdddddd�dS)Nzlongnam/r�r�zlonglnk/r�)r�)rr	r	r
�test_longnamelink_1025�sz#GNUWriteTest.test_longnamelink_1025)rrrr�r�r�r�r�r�r�r�r�r�r�r�r	r	r	r
r�lsr�c@s�eZdZdZejjed�Zdd�Z	e
dd��Ze
dd��Zd	d
�Z
dd�Zd
d�Zdd�ZdS)�
CreateTestzx:�
spameggs42cCstjt�dS)N)rr�r�)rr	r	r
r-�szCreateTest.setUpc	Cs-t|jd��}|jd�WdQRXdS)Nr�saaa)r�	file_pathr�)�clsr9r	r	r
�
setUpClass�szCreateTest.setUpClasscCstj|j�dS)N)rr�r�)r�r	r	r
�
tearDownClass�szCreateTest.tearDownClasscCs�tjt|j��}|j|j�WdQRX|jt��}|j�}WdQRX|jt	|�d�|j
d|d�dS)NrMr�r)rrr�rrcr�rr�r4r5r|)r�tobj�namesr	r	r
�test_create�szCreateTest.test_createcCs�tjt|j��}|j|j�WdQRX|jt��tjt|j�}WdQRX|jt��}|j	�}WdQRX|j
t|�d�|jd|d�dS)NrMr�r)
rrr�rrcr�r��FileExistsErrorrr�r4r5r|)rr�r�r	r	r
�test_create_existing�szCreateTest.test_create_existingcCs|jtd��}|j|j�WdQRX|jt��}|j�}WdQRX|jt|�d�|jd|d�dS)N�xrMr�r)rr�rcr�r�r4r5r|)rr�r�r	r	r
�test_create_taropen�szCreateTest.test_create_taropenc Cs�|jtd��}|j|j�WdQRX|jt��|jtd��WdQRXWdQRX|jt��}|j�}WdQRX|jt|�d�|j	d|d�dS)Nr�rMr�r)
rr�rcr�r�r�r�r4r5r|)rr�r�r	r	r
�test_create_existing_taropen�sz'CreateTest.test_create_existing_taropenN)rrrrr@rArBr?r�r-�classmethodr�r�r�r�r�r�r	r	r	r
r��s		r�c@seZdZdS)�GzipCreateTestN)rrrr	r	r	r
r��sr�c@seZdZdS)�
Bz2CreateTestN)rrrr	r	r	r
r�sr�c@seZdZdS)�LzmaCreateTestN)rrrr	r	r	r
r�sr�c@s"eZdZdZdZdZdS)�CreateWithXModeTestr�N)rrrrr�r�r	r	r	r
r�sr�r�zMissing hardlink implementationc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�HardlinkTestc
Cs�tjjtd�|_tjjtd�|_t|jd��}|jd�WdQRXtj|j|j�t	jt
d�|_|jj|j�dS)Nr�rSr�sfoor�)
r@rArBr?r�rSrr�r�rr�r,rc)rr9r	r	r
r-szHardlinkTest.setUpcCs1|jj�tj|j�tj|j�dS)N)r,r.rr�r�rS)rr	r	r
r/ s
zHardlinkTest.tearDowncCs2|jj|j�}|j|jtjd�dS)Nzadd file as regular failed)r,rfr�r4r�r�REGTYPE)rr8r	r	r
�test_add_twice%szHardlinkTest.test_add_twicecCs2|jj|j�}|j|jtjd�dS)Nzadd file as hardlink failed)r,rfrSr4r�rr�)rr8r	r	r
�test_add_hardlink,szHardlinkTest.test_add_hardlinkcCs>d|j_|jj|j�}|j|jtjd�dS)NTzdereferencing hardlink failed)r,ZdereferencerfrSr4r�rr�)rr8r	r	r
�test_dereference_hardlink1sz&HardlinkTest.test_dereference_hardlinkN)rrrr-r/r�r�r�r	r	r	r
r�s
r�c@s7eZdZddd�Zdd�Zdd�ZdS)�PaxWriteTestNcCs�tj|�}|r*||_tj|_tjtddtj�}z|j|�Wd|j	�Xtjt�}zY|r�|j
�dj}|j||d�n&|j
�dj}|j||d�Wd|j	�XdS)Nr�r�rzPAX longlink creation failedzPAX longname creation failed)
rr�r&r�r�rr�r�r�r.r�r4r_)rr_r�r8r,�l�nr	r	r
r�:s 	zPaxWriteTest._testcCs`ddddddddddi}tjtd	d
tjd|�}z|jtjd��Wd|j�Xtjtdd
�}z�|j|j|�|j|j	�dj|�x�|jj
�D]�\}}|jt|�t
�|jt|�t
�|tjkr�ytj||�Wq�ttfk
rH|jd�Yq�Xq�WWd|j�XdS)Nr�rSr�0r�z1.23�testuäöür�r�rTr+z	iso8859-1rz"unable to convert pax header field)rrr�r�r�r�r.r4rTr�rZassertIsNotr�r�ZPAX_NUMBER_FIELDSr}r�r])rrTr,�key�valr	r	r
�test_pax_global_headerRs.	z#PaxWriteTest.test_pax_global_headercCs�ddddi}tjtddtjdd�}z8tj�}d	|_d
|_||_|j|�Wd|j	�Xtjtdd�}zM|j
�d}|j|j|�|j|jd�|j|jd�Wd|j	�XdS)NrAr�rZ123r�r�r+z	iso8859-1uäöür�rrWi)rrr�r�r�r_rrTr�r.r�r4)rrTr,r�r	r	r
�test_pax_extended_headerrs"				z%PaxWriteTest.test_pax_extended_header)rrrr�r�r�r	r	r	r
r�8s r�c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�UnicodeTestcCs|jd�dS)Nz	iso8859-1)�_test_unicode_filename)rr	r	r
�test_iso8859_1_filename�sz#UnicodeTest.test_iso8859_1_filenamecCs|jd�dS)N�utf7)r�)rr	r	r
�test_utf7_filename�szUnicodeTest.test_utf7_filenamecCs|jd�dS)Nzutf-8)r�)rr	r	r
�test_utf8_filename�szUnicodeTest.test_utf8_filenamecCs�tjtdd|jd|dd�}z d}|jtj|��Wd|j�Xtjtd|�}z!|j|j�dj	|�Wd|j�XdS)Nr�r�r+�errorsrCuäöür)
rrr�r�r�r�r.r4r�r_)rr+r,r_r	r	r
r��s!z"UnicodeTest._test_unicode_filenamec
Cs�tjtdd|jdddd�}zWtj�}d|_|jt|j|�d|_d|_	|jt|j|�Wd|j
�XdS)	Nr�r�r+rmr�rCuäöür�)rrr�r�r�r_r��UnicodeErrorr�r�r.)rr,r8r	r	r
�test_unicode_filename_error�s			z'UnicodeTest.test_unicode_filename_errorc
Cs�tjtddddd�}zyxr|D]j}|jt|j�t�|jt|j�t�|jt|j�t�|jt|j	�t�q(WWd|j
�XdS)Nr;r+z	iso8859-1r�rC)rrrZassertIsr�r_r�r&r�rr.)rr,r�r	r	r
�test_unicode_argument�s
!z!UnicodeTest.test_unicode_argumentcCs*tjd�}d|_d|_tjtddd|jdd�}z|j|�Wd|j�Xtjtdd�}z�|j	d�}|j
|jd�|j
|jd�|jtjkr|j�tjtdd�}|j	d�}|j
|jd	�|j
|jd	�Wd|j�XdS)
Nr�uäöürr�r�r+z	iso8859-1rmu	���)rr�r�rrr�r�r�r.r1r4r�)rr�r,r	r	r
�test_uname_unicode�s(			
zUnicodeTest.test_uname_unicodeN)
rrrr�r�r�r�r�r�r�r	r	r	r
r��sr�c@s�eZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
dd�Zdd�Z
dd�Zd
dd�Zd
S)�UstarUnicodeTestcCsZ|jdd�|jdddt�|jddd�|jdddt�dS)Nr`rNr��	u
01234567ÿu012345678ÿ)�_test_ustar_namer�)rr	r	r
�test_unicode_name1�sz#UstarUnicodeTest.test_unicode_name1cCs1|jddd�|jdddt�dS)Nr`r�u
012345ÿÿu0123456ÿÿ)r�r�)rr	r	r
�test_unicode_name2�sz#UstarUnicodeTest.test_unicode_name2cCs~|jddddd�|jdddddt�|jddddd�|jdddddt�dS)Nr`�z01234/rNz0123/4u012ÿ/u0123ÿ/)r�r�)rr	r	r
�test_unicode_longname1�s z'UstarUnicodeTest.test_unicode_longname1cCsD|jdddddt�|jdddddt�dS)Nr`r�u01ÿ/2rNu01ÿÿ/)r�r�)rr	r	r
�test_unicode_longname2�s z'UstarUnicodeTest.test_unicode_longname2cCsi|jdddddt�|jdddddd�|jddddddt�dS)	Nr`r�u01ÿÿ/2rNz01234/r�u
01234567ÿu012345678ÿ)r�r�)rr	r	r
�test_unicode_longname3�s !z'UstarUnicodeTest.test_unicode_longname3cCsI|jdddddd�|jddddddt�dS)Nr`r�z01234/r�u
012345ÿÿu0123456ÿÿ)r�r�)rr	r	r
�test_unicode_longname4�s!z'UstarUnicodeTest.test_unicode_longname4NcCs�tjtdd|jdd��H}tj|�}|dkrO|j|�n|j||j|�WdQRX|dkr�tjtddd��,}x"|D]}|j||j�Pq�WWdQRXdS)Nr�r�r+zutf-8r;)	rrr�r�r�r�r�r4r_)rr_�excr,r�r	r	r
r�s$
z!UstarUnicodeTest._test_ustar_namecCsZ|jdd�|jdddt�|jddd�|jdddt�dS)Nr`rNr�r�u
01234567ÿu012345678ÿ)�_test_ustar_linkr�)rr	r	r
�test_unicode_link1sz#UstarUnicodeTest.test_unicode_link1cCs1|jddd�|jdddt�dS)Nr`r�u
012345ÿÿu0123456ÿÿ)r�r�)rr	r	r
�test_unicode_link2sz#UstarUnicodeTest.test_unicode_link2cCs�tjtdd|jdd��Q}tjd�}||_|dkrX|j|�n|j||j|�WdQRX|dkr�tjtddd��,}x"|D]}|j||j�Pq�WWdQRXdS)Nr�r�r+zutf-8r�r;)	rrr�r�r�r&r�r�r4)rr_r�r,r�r	r	r
r�s$	
z!UstarUnicodeTest._test_ustar_link)rrrr�USTAR_FORMATr�r�r�r�r�r�r�r�r�r�r�r	r	r	r
r��s	r�c@s%eZdZejZdd�ZdS)�GNUUnicodeTestcCsuxndD]f\}}tjtd|dd��<}y|j|�}Wntk
re|jd�YnXWdQRXqWdS)N�utf-8�pax/bad-pax-����	iso8859-1�pax/bad-pax-äöür+r�rsz%unable to read bad GNU tar pax header�r�r��r�r�)r�r�)rrrr1r�r])rr+r_r,r�r	r	r
�test_bad_pax_header0s
z"GNUUnicodeTest.test_bad_pax_headerN)rrrrr�r�r�r	r	r	r
r�,s	r�c@s+eZdZejZdZdd�ZdS)�PAXUnicodeTestNcCsuxndD]f\}}tjtd|dd��<}y|j|�}Wntk
re|jd�YnXWdQRXqWdS)N�utf-8�pax/hdrcharset-����	iso8859-1�pax/hdrcharset-äöür+r�rsz)unable to read POSIX.1-2008 binary header�r�r��r�r�)r�r)rrrr1r�r])rr+r_r,r�r	r	r
�test_binary_headerEs
z!PAXUnicodeTest.test_binary_header)rrrrr�r�r�rr	r	r	r
r�>s	r�c@s7eZdZdd�Zddd�Zdd�ZdS)	�AppendTestBasecCs2t|_tjj|j�r.tj|j�dS)N)r�rr@rAr�rr�)rr	r	r
r-Us	zAppendTestBase.setUpzw:cCs�tjtdd��g}|jd�}d|_|j|��6}tj|j|��}|j||�WdQRXWdQRXWdQRXdS)Nr+z	iso8859-1z
ustar/regtyper�)rrrr1r_r2r�)rr�srcr�r�r,r	r	r
�_create_testtarZs	zAppendTestBase._create_testtarcCs4|jd|j�|jtjtjtd�dS)Nzw:ra)rrr�rr�rr�)rr	r	r
�test_append_compressedbsz%AppendTestBase.test_append_compressedN)rrrr-rrr	r	r	r
rRsrc@s�eZdZdZddd�Zdgddd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
AppendTestNc
Cs?tj|jdd|��}|jtjd��WdQRXdS)Nrar�rS)rrrr�r�)rr�r,r	r	r
�
_add_testfileiszAppendTest._add_testfilerSc
Cs<tj|jd|��}|j|j�|�WdQRXdS)Nr�)rrrr4r�)rr�r�r,r	r	r
r�mszAppendTest._testcCs|j�|j�dS)N)rr�)rr	r	r
�test_non_existingqs
zAppendTest.test_non_existingcCs1tj|jd�j�|j�|j�dS)Nzw:)rrrr.rr�)rr	r	r
�
test_emptyus
zAppendTest.test_emptycCsAtjdd�}|j|�|jd�|jd|�dS)Nsirr�)rrwrrQr�)rr9r	r	r
�test_empty_fileobjzs

zAppendTest.test_empty_fileobjcCs{|j�t|jd��}|j�}WdQRXtj|�}|j|�|jd�|jdddgd|�dS)NrLrr�r�rSr�)	rrrr3rrwrrQr�)rr9rr	r	r
�test_fileobj�s


zAppendTest.test_fileobjcCs.|j�|j�|jdddg�dS)Nr�r�rS)rrr�)rr	r	r
�
test_existing�s

zAppendTest.test_existingc
CsCt|jd��}|j|�WdQRX|jtj|j�dS)Nr�)rrr�r�rr�r)rrr9r	r	r
�_test_error�szAppendTest._test_errorcCs|jd�dS)NrP)r
)rr	r	r
�	test_null�szAppendTest.test_nullcCs|jd�dS)Ns�
s
)r
)rr	r	r
�test_incomplete�szAppendTest.test_incompletecCs&tjd�j�}|j|�dS)Nr�)rr�r�r
)rrr	r	r
�test_premature_eof�szAppendTest.test_premature_eofcCs*tjd�j�}|j|d�dS)Nr�srs
)rr�r�r
)rrr	r	r
�test_trailing_garbage�sz AppendTest.test_trailing_garbagecCs|jdd�dS)Nr�i)r
)rr	r	r
�test_invalid�szAppendTest.test_invalid)rrrrrr�rr	r
rrr
rrrrrr	r	r	r
rfs	rc@seZdZdS)�GzipAppendTestN)rrrr	r	r	r
r�src@seZdZdS)�
Bz2AppendTestN)rrrr	r	r	r
r�src@seZdZdS)�LzmaAppendTestN)rrrr	r	r	r
r�src@s4eZdZdd�Zdd�Zdd�ZdS)�
LimitsTestcCsHtjdd�}|jtj�tjddd�}|jt|jtj�tjddd�}|jtj�tjddd�}|jt|jtj�tjdd	d�}|jt|jtj�tjd
�}dd	d|_|jt|jtj�tjd�}d|_|jt|jtj�dS)
Nr`rNr�z123/�>r<z1234567/��~r@r_i )rr�r�r�r�r�r&r)rr8r	r	r
�test_ustar_limits�s 	zLimitsTest.test_ustar_limitscCs�tjddd�}|jtj�tjd�}ddd|_|jtj�tjd�}d|_|jt|jtj�dS)Nz123/rr<r@r_l)rr�r�r�r&rr�r�)rr8r	r	r
�test_gnu_limits�s	zLimitsTest.test_gnu_limitscCs�tjddd�}|jtj�tjd�}ddd|_|jtj�tjd�}d|_|jtj�dS)Nz123/rr<r@r_l)rr�r�r�r&r)rr8r	r	r
�test_pax_limits�s	zLimitsTest.test_pax_limitsN)rrrrrrr	r	r	r
r�s
rc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�MiscTestcCs�|jtjdddd�d�|jtjdddd�d�|jtjddd�d�|jtjd	dd�d�dS)
Nr�r�rmrCsfooZfoobarr*sfoosfoobar)r4rZstnZnts)rr	r	r
�test_char_fields�szMiscTest.test_char_fieldscCs�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd	�d�|jtjd
�d�|jtjd�d�|jtjd�d�|jtjd�d�dS)Ns0000001rMs7777777i��s� i s�����l��s��������s��������rZs�lsrs       r�i����l����)r4rZnti)rr	r	r
�test_read_number_fields�sz MiscTest.test_read_number_fieldscCs�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d	�|jtjd�d�|jtjd�d
�dS)NrMs0000001i��s7777777i s� l��s�����s��������rZs��������ls�r�i����l����)r4r�itn)rr	r	r
�test_write_number_fieldssz!MiscTest.test_write_number_fieldsc Cs�|jt��tjddtj�WdQRX|jt��tjddtj�WdQRX|jt��tjddtj�WdQRX|jt��tjddtj�WdQRXdS)	NrMr�i l�lr�l����)r�r�rr!r�r�)rr	r	r
�test_number_field_limitssz!MiscTest.test_number_field_limitsN)rrrrr r"r$r	r	r	r
r�s
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%S)&�CommandLineTestcOs:tjdd||�\}}}|jtjj�d�S)Nz-mrs
)rZassert_python_okr�r@�linesepr[)r�argsr�rcr��errr	r	r
�
tarfilecmd&szCommandLineTest.tarfilecmdcGstjdd|�S)Nz-mr)rZassert_python_failure)rr'r	r	r
�tarfilecmd_failure+sz"CommandLineTest.tarfilecmd_failurec
Cs�tjd�tjd�g}|jtj|�tj|d��7}x-|D]%}|j|dtjj	|��qMWWdQRXdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr�rt)
r�findfiler�r�rrrcr@rAr|)r�tar_name�files�tfZtardatar	r	r
�make_simple_tarfile.s
z#CommandLineTest.make_simple_tarfilecCsHxAtD]9}x0dD](}|j||�}|j|d�qWqWdS)N�-t�--testrP)r1r2)�testtarnamesr*r4)rr-�optr�r	r	r
�test_test_command7s

z!CommandLineTest.test_test_commandcCsKxDtD]<}x3dD]+}|j|d|�}|jd|�qWqWdS)N�-v�	--verbosez-tsis a tar archive.
)r6r7)r3r*r|)rr-r4r�r	r	r
�test_test_command_verbose=s

z)CommandLineTest.test_test_command_verbosec Cs.tjd�}|jd|�\}}}|jd|�|j|d�|j|d�x�tD]�}|jd|���t|d��}|j�}WdQRXzott	d��}|j
|dd	��WdQRX|jdt	�\}}}|j|d�|j|d�Wdtjt	�XWdQRXqaWdS)
Nz
zipdir.zipz-ts is not a tar archive.rPrMr-rLr�i�)rr,r+r|r4r3ZsubTestrr3r�r�r�)r�zipnamer(r�r)r-r�rr	r	r
�test_test_command_invalid_fileCs 
z.CommandLineTest.test_test_command_invalid_filecCs�x�tD]�}tj��3}tj|d��}|jdd�WdQRXWdQRX|j�jdd�}x6d	D].}|j||dd�}|j	||�qnWqWdS)
Nr;rqFrmrt�-l�--list�PYTHONIOENCODING)r;r<)
r3r�captured_stdoutrrrJr{r[r*r4)rr-r�r/�expectedr4r�r	r	r
�test_list_commandWs

	z!CommandLineTest.test_list_commandcCs�x�tD]�}tj��3}tj|d��}|jdd�WdQRXWdQRX|j�jdd�}x9d
D]1}|j|d|d	d�}|j	||�qnWqWdS)Nr;rqTrmrt�-v�	--verbosez-lr=)rArB)
r3rr>rrrJr{r[r*r4)rr-r�r/r?r4r�r	r	r
�test_list_command_verbosebs

	z)CommandLineTest.test_list_command_verbosecCs^tjd�}|jd|�\}}}|jd|�|j|d�|j|d�dS)Nz
zipdir.zipz-ls is not a tar archive.rPrM)rr,r+r|r4)rr9r(r�r)r	r	r
�test_list_command_invalid_filems
z.CommandLineTest.test_list_command_invalid_filecCs�tjd�tjd�g}xkdD]c}zL|j|t|�}|j|d�tjt��}|j�WdQRXWdtjt�Xq%WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt�-c�--createrP)rErF)	rr,r*r�r4rrr�r�)rr.r4r�r,r	r	r
�test_create_commandts
z#CommandLineTest.test_create_commandcCs�tjd�tjd�g}xndD]f}zO|j|dt|�}|jd|�tjt��}|j�WdQRXWdtjt�Xq%WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt�-v�	--verbosez-cs file created.)rHrI)	rr,r*r�r|rrr�r�)rr.r4r�r,r	r	r
�test_create_command_verbose�s
z+CommandLineTest.test_create_command_verbosecCsstjd�g}zL|jdt|�}|j|d�tjt��}|j�WdQRXWdtjt�XdS)Nztokenize_tests.txtz-crP)	rr,r*�dotlessnamer4rrr�r�)rr.r�r,r	r	r
�$test_create_command_dotless_filename�sz4CommandLineTest.test_create_command_dotless_filenamecCs�tjjtd�}tjd�g}zL|jd||�}|j|d�tj	|��}|j
�WdQRXWdtj|�XdS)Nz.testtarztokenize_tests.txtz-crP)r@rArBr?rr,r*r4rrr�r�)rr-r.r�r,r	r	r
�(test_create_command_dot_started_filename�sz8CommandLineTest.test_create_command_dot_started_filenamecCs�tjd�tjd�g}x�tttfD]p}|js@q.zMtd|j}|jd||�}|j	|��}|j
�WdQRXWdtj|�Xq.WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr�z-c)rr,rr!r%rr�rr*rr�r�)rr.Zfiletyper-r�r,r	r	r
�test_create_command_compressed�s	z.CommandLineTest.test_create_command_compressedcCsp|jt�x\dD]T}z=tjt��|j|t�}WdQRX|j|d�Wdtjt�XqWdS)N�-e�	--extractrP)rOrP)r0r�r�temp_cwd�	tarextdirr*r4r�)rr4r�r	r	r
�test_extract_command�s

z$CommandLineTest.test_extract_commandcCss|jt�x_dD]W}z@tjt��|j|dt�}WdQRX|jd|�Wdtjt�XqWdS)N�-v�	--verbosez-es file is extracted.)rTrU)r0r�rrQrRr*r|r�)rr4r�r	r	r
�test_extract_command_verbose�s

z,CommandLineTest.test_extract_command_verbosecCsb|jt�z@tjt��|jdtd�}WdQRX|j|d�Wdtjt�XdS)Nz-eZspamdirrP)r0r�rrQrRr*r4r�)rr�r	r	r
�(test_extract_command_different_directory�s
z8CommandLineTest.test_extract_command_different_directoryc
Csutjd�}tjt�� |jd|�\}}}WdQRX|jd|�|j|d�|j|d�dS)Nz
zipdir.zipz-es is not a tar archive.rPrM)rr,rQrRr+r|r4)rr9r(r�r)r	r	r
�!test_extract_command_invalid_file�s"z1CommandLineTest.test_extract_command_invalid_fileN)rrrr*r+r0r5r8r:r@rCrDrGrJrLrMrNrSrVrWrXr	r	r	r
r%$s$	




	r%c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextManagerTestc
CsCtjt��}|j|jd�WdQRX|j|jd�dS)Nzclosed inside runtime contextzcontext manager failed)rrrr[r�r�)rr,r	r	r
�
test_basic�szContextManagerTest.test_basiccCsBtjt�}|j�|jt��|�WdQRXWdQRXdS)N)rrrr.r�r�)rr,r	r	r
�test_closed�s

zContextManagerTest.test_closedcCse|jt��&}tjt��
}t�WdQRXWdQRX|j|jtd�|j|j	d�dS)Nz)wrong exception raised in context managerzcontext manager failed)
r��	Exceptionrrrr�r��	exceptionr�r�)rr�r,r	r	r
�test_exception�sz!ContextManagerTest.test_exceptioncCsgy&tjtd��
}t�WdQRXWnYnX|jtjjt�dd�|j|j	d�dS)Nr�rz-context manager wrote an end-of-archive blockzcontext manager failed)
rrr�r\r4r@rArdr�r�)rr,r	r	r
�test_no_eof�szContextManagerTest.test_no_eofcCs=tjtd��WdQRX|jtjjt�dd�dS)Nr�rz-context manager wrote no end-of-archive block)rrr�r>r@rArd)rr	r	r
�test_eof�szContextManagerTest.test_eofcCszttd��d}y,tjd|dd��
}t�WdQRXWnYnX|j|jd�|j|jd�WdQRXdS)Nr�r�rr�zexternal file object was closedzcontext manager failed)rr�rr\r[r�r�)rr9r,r	r	r
r	szContextManagerTest.test_fileobjN)	rrrrZr[r^r_r`rr	r	r	r
rY�s		rYzrequires os.link to be missingc@s�eZdZdd�Zejeejd�d�dd��Z	ejeejd�d�dd��Z
ejeed	�d
�dd��Zejeed	�d
�d
d��ZdS)�LinkEmulationTestc
Csa|jj|t�ttjjt|�d��}|j�}WdQRX|jt	|�t
�dS)NrL)r,r>r?rr@rArBr3r4rr7)rr_r�rr	r	r
�_test_link_extraction	s!z'LinkEmulationTest._test_link_extraction�islinkz3Skip emulation - has os.path.islink but not os.linkcCs|jd�dS)Nz
ustar/lnktype)rb)rr	r	r
�test_hardlink_extraction1	sz+LinkEmulationTest.test_hardlink_extraction1cCs|jd�dS)Nz./ustar/linktest2/lnktype)rb)rr	r	r
�test_hardlink_extraction2$	sz+LinkEmulationTest.test_hardlink_extraction2rmz Skip emulation if symlink existscCs|jd�dS)Nz
ustar/symtype)rb)rr	r	r
�test_symlink_extraction1)	sz*LinkEmulationTest.test_symlink_extraction1cCs|jd�dS)Nz./ustar/linktest2/symtype)rb)rr	r	r
�test_symlink_extraction2.	sz*LinkEmulationTest.test_symlink_extraction2N)
rrrrbr��skipIfr�r@rArdrerfrgr	r	r	r
ra	srac@s4eZdZdd�Zdd�Zdd�ZdS)�Bz2PartialReadTestc
s�G�fdd�dtj��tjtjd�j��}x`tt|�d�D]H}y*tj	d�|d|��d|�WqTtj
k
r�YqTXqTWdS)Ncs@eZdZdZ��fdd�Z��fdd�Z�S)z9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOFcsL|jrtd��|j�t|j��k|_t�|�j|�S)Nz(infinite loop detected in tarfile.open())�hit_eof�AssertionErrorrRr5r{�superr3)rr�)�	MyBytesIO�	__class__r	r
r3;	s	!z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readcsd|_t�|�j|�S)NF)rjrlrQ)rr')rmrnr	r
rQA	s	z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)rrrrjr3rQr	)rm)rnr
rm9	srmr�rMr�r)rrwr"�compressrr�r��ranger5rr�)rrrr�r	)rmr
�_test_partial_input8	s*z&Bz2PartialReadTest._test_partial_inputcCs|jd�dS)Nr;)rq)rr	r	r
�test_partial_inputL	sz%Bz2PartialReadTest.test_partial_inputcCs|jd�dS)Nzr:bz2)rq)rr	r	r
�test_partial_input_bz2O	sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrrqrrrsr	r	r	r
ri4	sricCssyddl}ddl}Wntk
r4dSYnX|jd�ddkrRdS|jd�ddkrodSdS)NrF�rootT)�pwd�grp�ImportError�getpwuid�getgrgid)rurvr	r	r
�root_is_uid_gid_0S	s
	rz�chownzmissing os.chown�geteuidzmissing os.geteuidc@s3eZdZedd��Zeedd���Zejj	d�ejj	d�ejj	d�dd	����Z
ejj	d�ejj	d�ejj	d�d
d����Zeje
�d�ejj	d�ejj	d�ejj	d�d
d�����Zejj	d�dd��ZdS)�NumericOwnerTestc
Cs�tjd�}|ddtj|f|ddtjdf|ddtj|fg}tjtd��s}xi|D]a\}}}}	}
tj|�}||_||_	d	|_
d	|_|	|_|j
||
�qpWWdQRXtS)
Nscontent�c�b�M�L�X�Wr�rt)rrwrr�r�rr�r�rrr�rr�r�)�
filename_1�	dirname_1�
filename_2r9r�tarflr_rr�typ�contentsr�r	r	r
�_make_test_archiveh	s					z#NumericOwnerTest._make_test_archiveccsyd|_d}d}|}|}tjj||�}tj|||�}tj|��}||||fVWdQRXdS)Nrznumeric-owner-testfiler�)Zreturn_valuer@rArBr}r�rr)�mock_geteuidZfname�dirnamer�r�r�Ztar_filenamer�r	r	r
�_setup_test�	s			zNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc

Cs�|j|��?\}}}}|j|tdd�|j|tdd�WdQRXtjjt|�}tjjt|�}	|jtjj	|dd�tjj	|	dd�gdd�dS)N�
numeric_ownerTr~rr�r��	any_order)
r�r>r?r@rArB�assert_has_callsr��mock�call)
rr��
mock_chmod�
mock_chownr�r��_r��f_filename_1�f_filename_2r	r	r
�test_extract_with_numeric_owner�	sz0NumericOwnerTest.test_extract_with_numeric_ownercCs�|j|��&\}}}}|jtdd�WdQRXtjjt|�}tjjt|�}	tjjt|�}
|jtjj	|dd�tjj	|	dd�tjj	|
dd�gd	d�dS)
Nr�Tr~rr�r�r�r�r�)
r�r�r?r@rArBr�r�r�r�)rr�r�r�r�r�r�r�r�Zf_dirname_1r�r	r	r
�"test_extractall_with_numeric_owner�	sz3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"cCsg|j|��)\}}}}|j|tdd�WdQRXtjjt|�}|j|dd�dS)Nr�Fr)r�r>r?r@rArBZassert_called_with)rr�r�r�r�r�r�r�r	r	r
�"test_extract_without_numeric_owner�	sz3NumericOwnerTest.test_extract_without_numeric_ownercCsH|j|��2\}}}}|jt|j|tdd�WdQRXdS)NFT)r�r�r}r>r?)rr�r�r�r�r	r	r
�test_keyword_only�	s	z"NumericOwnerTest.test_keyword_onlyN)rrrrQr�rr�r�r�Zpatchr�r�r�rzr�r�r	r	r	r
r}_	s	$$'r}cCs�tjt�tjt�tgattd��}|j�}WdQRXxlt	t
tfD][}|jrXtj|j�tj|j�|j|jd��}|j
|�WdQRXqXWdS)NrLr�)rr�r?r@�makedirsrr3rr3rr!r%�appendr�)r9r�cr,r	r	r
�setUpModule�	s

		r�cCs#tjjt�rtjt�dS)N)r@rAr�r?rr�r	r	r	r
�tearDownModule�	sr��__main__)pryr@r�hashlibr�
contextlibr�randomrr�Z
unittest.mockrr�rZtest.supportrr rwr"r(rrAr�ZTESTFNr?rRr,rrBrr#r'r�rKr7r/rZ
requires_gziprZrequires_bz2r!Z
requires_lzmar%r*ZTestCaser0rirjrkrlr�r�r�r�r�r�r�r�r�r�rr	r
rrrrrr:rFrRrZr_r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr%rYrhrarirzr}r�r�r�mainr	r	r	r
�<module>s�




~PP�=(a*6,�/&R>%'TQO@;9�:%!%v