Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_tarfile.cpython-34.pyc

�
g fp<�@s�ddlZddlZddlZddlmZddlZddlZddlmZm	Z	yddl
Z
Wnek
r�dZ
YnXyddlZWnek
r�dZYnXyddl
Z
Wnek
r�dZ
YnXdd�Zejjej�dZedZejd�Zejjed	�Zejjed
�Zejjed�Zejjed�Zejjed
�ZdZdZGdd�d�ZejGdd�d��Z ej!Gdd�d��Z"ej#Gdd�d��Z$Gdd�de�Z%Gdd�de%ej&�Z'Gdd�de e'�Z(Gdd�de"e'�Z)Gd d!�d!e$e'�Z*Gd"d#�d#e%ej&�Z+Gd$d%�d%e e+�Z,Gd&d'�d'e"e+�Z-Gd(d)�d)e$e+�Z.Gd*d+�d+e%�Z/Gd,d-�d-e/�Z0Gd.d/�d/e0ej&�Z1Gd0d1�d1e e0ej&�Z2Gd2d3�d3e"e0ej&�Z3Gd4d5�d5e$e0ej&�Z4Gd6d7�d7e/ej&�Z5Gd8d9�d9e e5�Z6Gd:d;�d;e"e5�Z7Gd<d=�d=e$e5�Z8Gd>d?�d?eej&�Z9Gd@dA�dAe e9�Z:GdBdC�dCe"e9�Z;GdDdE�dEe$e9�Z<GdFdG�dGe%ej&�Z=GdHdI�dI�Z>GdJdK�dKe>e%ej&�Z?GdLdM�dMe>e%ej&�Z@GdNdO�dOe�ZAGdPdQ�dQeAej&�ZBGdRdS�dSe eB�ZCGdTdU�dUe"eB�ZDGdVdW�dWe$eB�ZEGdXdY�dYeAej&�ZFGdZd[�d[e eF�ZGGd\d]�d]e"eF�ZHGd^d_�d_e$eF�ZIGd`da�daej&�ZJejKeLedb�dc�Gddde�deej&��ZMGdfdg�dgeJ�ZNGdhdi�diej&�ZOGdjdk�dkeO�ZPGdldm�dmeO�ZQGdndo�do�ZRGdpdq�dqeRej&�ZSGdrds�dse eRej&�ZTGdtdu�due"eRej&�ZUGdvdw�dwe$eRej&�ZVGdxdy�dyej&�ZWGdzd{�d{ej&�ZXGd|d}�d}ej&�ZYGd~d�dej&�ZZej[eLedb�d��Gd�d��d�e%ej&��Z\Gd�d��d�e"ej&�Z]d�d��Z^d�d��Z_e`d�kr�eja�ndS)��N)�md5)�support�
script_helpercCst|�j�S)N)rZ	hexdigest)�data�r�6/opt/alt/python34/lib64/python3.4/test/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)�selfrrr�mode/szTarTest.modeN)
�__name__�
__module__�__qualname__�tarnamer�io�FileIO�open�tarfile�TarFile�taropen�propertyrrrrrr	)s
	r	c@s=eZdZeZdZer'ejndZe	j
jZdS)�GzipTestZgzN)
rrr�gzipnamerr�gzipZGzipFilerrrZgzopenrrrrrr3src@s=eZdZeZdZer'ejndZe	j
jZdS)�Bz2Test�bz2N)
rrr�bz2namerrr�BZ2FilerrrZbz2openrrrrrr:src@s=eZdZeZdZer'ejndZe	j
jZdS)�LzmaTestZxzN)
rrr�xznamerr�lzmaZLZMAFilerrrZxzopenrrrrrr!Asr!c@s.eZdZdZdd�Zdd�ZdS)�ReadTestzr:cCs(tj|jd|jdd�|_dS)Nr�encodingz	iso8859-1)rrrr�tar)r
rrr�setUpMszReadTest.setUpcCs|jj�dS)N)r&�close)r
rrr�tearDownQszReadTest.tearDownN)rrrrr'r)rrrrr$Isr$c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�
UstarReadTestcCsr|jjd�}|jj|��H}|j�}|jt|�|jd�|jt|�td�WdQXdS)Nz
ustar/regtypezregular file extraction failed)	r&�	getmember�extractfile�read�assertEqual�len�sizer�md5_regtype)r
�tarinfo�fobjrrrr�test_fileobj_regular_fileWsz'UstarReadTest.test_fileobj_regular_filecCs�|jjdt�|jjd�}ttjjtd�d��}|j�}WdQX|jj	|��e}t
j|�}|j�}|j||d�|jt
|�dd�|j|ddd�WdQXdS)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�
TextIOWrapperr.r/)r
r2�fobj1�lines1r3�fobj2�lines2rrr�test_fileobj_readlines`s!
z$UstarReadTest.test_fileobj_readlinescCs�|jjdt�|jjd�}ttjjtd�d��}|j�}WdQX|jj	|��/}t
tj|��}|j
||d�WdQXdS)Nz
ustar/regtyper5zfileobj.__iter__() failed)r&r8r9r+rr:r;r<r=r,�listrr>r.)r
r2r?r@rArBrrr�test_fileobj_iterrs!zUstarReadTest.test_fileobj_iterc	Cs�|jjdt�ttjjtd�d��}|j�}WdQX|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&r8r9rr:r;r<r-r+r,�seekr.�tellr0r=r/�readliner()	r
r3rr2�text�s�s1�s2�linerrr�test_fileobj_seek|s\!




"
"zUstarReadTest.test_fileobj_seekcCs�|jjd��t}tj|�}|j�jd�}|jt|�t�y|j	d�Wnt
k
r�|jd�YnXWdQXdS)Nz
ustar/regtypez	iso8859-1�dzseeking failed in text mode)r&r,rr>r-�encoder.rr1rK�AttributeError�fail)r
r3rrrr�test_fileobj_text�s
zUstarReadTest.test_fileobj_textcCsP|jj|��8}|jj|��}|j|j|j�WdQXWdQXdS)N)r&r,r.�name)r
Zlnktype�regtype�a�brrr�_test_fileobj_link�sz UstarReadTest._test_fileobj_linkcCs|jdd�dS)Nz
ustar/lnktypez
ustar/regtype)r])r
rrr�test_fileobj_link1�sz UstarReadTest.test_fileobj_link1cCs|jdd�dS)Nz./ustar/linktest2/lnktypezustar/linktest1/regtype)r])r
rrr�test_fileobj_link2�s	z UstarReadTest.test_fileobj_link2cCs|jdd�dS)Nz
ustar/symtypez
ustar/regtype)r])r
rrr�test_fileobj_symlink1�sz#UstarReadTest.test_fileobj_symlink1cCs|jdd�dS)Nz./ustar/linktest2/symtypezustar/linktest1/regtype)r])r
rrr�test_fileobj_symlink2�s	z#UstarReadTest.test_fileobj_symlink2cCs|jdd�dS)NZsymtype2z
ustar/regtype)r])r
rrr�test_issue14160�szUstarReadTest.test_issue14160N)rrrr4rCrErSrXr]r^r_r`rarbrrrrr*Us	
2r*c@seZdZdS)�GzipUstarReadTestN)rrrrrrrrc�srcc@seZdZdS)�Bz2UstarReadTestN)rrrrrrrrd�srdc@seZdZdS)�LzmaUstarReadTestN)rrrrrrrre�srec@s4eZdZdd�Zdd�Zdd�ZdS)�ListTestcCs"tj|jd|j�|_dS)Nr)rrrrr&)r
rrrr'�szListTest.setUpc
s�tjtj�ddd�}tjtd|���jjdd�WdQX|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�surrogateescaperg�backslashreplace)�decoder&r%rU)r\rO)r
rr�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&rD�detach�getvalue�assertIn�assertRegexZassertNotIn)r
�tio�outrpr)r
r�	test_list�s.zListTest.test_listc
Cs�tjtj�ddd�}tjtd|��|jjdd�WdQX|j�j	�}|j
|dd�|jd	|�|jd
|�|jd|�|jdd
ddd
dd|�|jdd
ddd
dd|�dS)NrgrhrirjrkTsX\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\nrIsustar/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)rr>rqrrrrsr&rDrtrurwrv)r
rxryrrr�test_list_verboses	"zListTest.test_list_verboseN)rrrr'rzr|rrrrrf�s%rfc@seZdZdS)�GzipListTestN)rrrrrrrr}!sr}c@seZdZdS)�Bz2ListTestN)rrrrrrrr~%sr~c@seZdZdS)�LzmaListTestN)rrrrrrrr)src@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�CommonReadTestcCs�tjt|jjdd���WdQXzby#tjt|j�}|j�Wn"tjk
rr|jd�YnX|j|j	�g�Wd|j
�XdS)Nr5�wz&tarfile.open() failed on empty archive)rr�tmpnamer�replace�getnames�	ReadErrorrW�assertListEqual�
getmembersr()r
r&rrr�test_empty_tarfile/s"z!CommonReadTest.test_empty_tarfilec
Cs0|jtd��tjd|j�WdQXdS)NZxxx)�assertRaisesRegex�FileNotFoundErrorrrr)r
rrr�test_non_existent_tarfile@sz(CommonReadTest.test_non_existent_tarfilecCsRttd��WdQX|jtjtjt|j�|jtjtjt�dS)N�wb)rr��assertRaisesrr�r)r
rrr�test_null_tarfileFsz CommonReadTest.test_null_tarfilecCs�x�dD]�}|jtd��4}|j|d�|jtjd�j��WdQXtjtdddd	�}z$|j|j�dgd
|�Wd|j�XqWdS)N��ar�i�foorr5Zignore_zerosTz3ignore_zeros=True should have skipped the %r-blocks)r�r�)	rr��writer�TarInfo�tobufr�r�r()r
�charr3r&rrr�test_ignore_zerosOs
"z CommonReadTest.test_ignore_zerosc/CsNxGd
D]?}tjtd��<}tjd�}d|_|j|tjdd��WdQXttd��}|j|�WdQXtjt��4}|j	tj
d	��x|D]}q�WWdQXWdQXtjt��n}|j�}|j	tj
d	��|j|t
�WdQX|j	tj
d	��|j|�j�WdQXWdQXqWdS)N��X��zw:r�r�zr+bzunexpected end of data)r�r�r�r�)rrr�r�r0�addfilerrq�truncater�r��nextr8r9r,r-)r
r0r&�tr3rrr�test_premature_end_of_archive`s"
	#
z,CommonReadTest.test_premature_end_of_archiveN)rrrr�r�r�r�r�rrrrr�-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)r
rrr�requires_name_attributeysz(MiscReadTestBase.requires_name_attributecCs�|j�t|jd��s}|j|jt�tjd|d|j��<}|j|jt�|j|jt	j
j|j��WdQXWdQXdS)NrF�fileobjr)r�rr�assertIsInstancerY�strrrr.r:r;�abspath)r
r3r&rrr�test_no_name_argument|s
z&MiscReadTestBase.test_no_name_argumentcCs{t|jd��}|j�}WdQXtj|�}|jtt|d�tjd|d|j	�}|j
|j�dS)NrFrYr�r)rrr-rrqr�rV�getattrrr�assertIsNonerY)r
r3rr&rrr�test_no_name_attribute�sz'MiscReadTestBase.test_no_name_attributecCswt|jd��}|j�}WdQXtj|�}d|_tjd|d|j��}|j|j�WdQXdS)NrFr
r�r)	rrr-rrqrYrrr�)r
r3rr&rrr�test_empty_name_attribute�s	z*MiscReadTestBase.test_empty_name_attributecCs{tj|jtj�}t|d��N}|j|jt�tjd|d|j��}|j	|j�WdQXWdQXdS)NrFr�r)
r:rr�O_RDONLYr�rY�intrrr�)r
�fdr3r&rrr�test_int_name_attribute�s
z(MiscReadTestBase.test_int_name_attributecCs�|j�tj|j�}t|d��s}|j|jt�tjd|d|j	��<}|j|jt�|j
|jtjj|j��WdQXWdQXdS)NrFr�r)
r�r:�fsencoderrr�rY�bytesrrr.r;r�)r
rr3r&rrr�test_bytes_name_attribute�s
z*MiscReadTestBase.test_bytes_name_attributecCs�ttd��WdQX|jtd��|jtd�}WdQX|jtd��|jtd�}WdQX|jtd��|jtd�}WdQXdS)Nr�z
mode must be �qZrwr
)rr�r��
ValueErrorr)r
r&rrr�test_illegal_mode_arg�sz&MiscReadTestBase.test_illegal_mode_argcCstj|jd|j�}zP|j�|j�}|j}|j}|j|��}|j�}WdQXWd|j	�X|j|j���}|j
|�|j|jddd|�}|j�}|j|j|�|j�|j|j|�j�|d�|j	�WdQXdS)Nrzr:r�zseek back did not work)
rrrrr�rY�offsetr,r-r(rKr.r�)r
r&r�rYr��frr3rrr�test_fileobj_with_offset�s$
		

z)MiscReadTestBase.test_fileobj_with_offsetcCs`|jtjtjt|j�ttd��,}|jtjtjd|d|j�WdQXdS)NrFr�r)r�rr�rrr)r
r3rrr�test_fail_comp�szMiscReadTestBase.test_fail_compcCs/|jjd�}|j|jtjd�dS)Nzmisc/dirtype-old-v7zv7 dirtype failed)r&r+r.�typer�DIRTYPE)r
r2rrr�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&r+�KeyErrorrW)r
rrr�test_xstar_type�s
z MiscReadTestBase.test_xstar_typecCspxi|jD]^}|jt|j�dd|j�|jjd�sKq
n|j|jdd|j�q
WdS)Ni��>zwrong mtime for %szustar/rzwrong uname for %s)r&r.r��mtimerY�
startswith�uname)r
r2rrr�test_check_members�sz#MiscReadTestBase.test_check_memberscCs'|j|jj�djdd�dS)NrGzmisc/eofzcould not find all members���)r.r&r�rY)r
rrr�test_find_members�sz"MiscReadTestBase.test_find_members�linkzMissing hardlink implementationcCsPtjtdddd��/}|jdt�|jtjtj	j
td��|jdt�|jtjtj	j
td��ttj	j
td�d��}|j�}WdQX|jt
|�t�|jdt�|jtjtj	j
td��ttj	j
td�d��}|j�}WdQX|jt
|�t�WdQXdS)	NZ
errorlevelrGr%z	iso8859-1z
ustar/regtypez
ustar/lnktyperFz
ustar/symtype)rrrr8r9�
addCleanupr�unlinkr:r;r<r-r.rr1)r
r&r�rrrr�test_extract_hardlink�s""!"!z&MiscReadTestBase.test_extract_hardlinkc	Cs7tjtdd�}tjjtd�}tj|�z�dd�|D�}|j||�x�|D]�}tjj||j	�}t
jdkr�|j|j
d@tj|�jd@�ndd	�}tjj|�}d
j||j�||�|�}|j|j||�qdWWd|j�tj|�XdS)Nr%z	iso8859-1�
extractallcSs"g|]}|j�r|�qSr)�isdir)�.0r�rrr�
<listcomp>s	z4MiscReadTestBase.test_extractall.<locals>.<listcomp>�win32i�cSs6t|t�r%dj||j��Sdj|�SdS)Nz{} ({})z
{!r} (int))�
isinstance�float�format�hex)r�rrr�format_mtimesz6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})rrrr:r;r<r9�mkdirr�rYrs�platformr.r�stat�st_mode�getmtimer�r�r(r�rmtree)	r
r&�DIRZdirectoriesr2r;r�Z
file_mtime�errmsgrrr�test_extractalls(

		
z MiscReadTestBase.test_extractallcCs�d}tjjtd�}tj|�z�tjtdd���}|j|�}|j	|d|�tjj||�}|j
tjj|�|j�t
jdkr�|j
tj|�jd@d�nWdQXWdtj|�XdS)	Nz
ustar/dirtypeZ
extractdirr%z	iso8859-1r;r�i�i�)r:r;r<r9r�rrrr+r8r.r�r�rsr�r�r�rr�)r
Zdirtyper�r&r2Z	extractedrrr�test_extract_directory%s
-z'MiscReadTestBase.test_extract_directorycCs�tjjtd�}t|d��}|jd�WdQXz_tjtj	�}y|j
|�Wn(tjk
r�|j|j
j�YnX|jd�Wdtj|�XdS)N�emptyr�rJzReadError not raised)r:r;r<r9rr��object�__new__rr�__init__r��
assertTruer��closedrWrr�)r
r�r3r&rrr�test_init_close_fobj4sz%MiscReadTestBase.test_init_close_fobjcCsqtj|j��Y}xOt||�D]>\}}|j|j|j�|j|j�|j��q%WWdQXdS)N)rrr�zipr.r�Zget_info)r
r&Zm1Zm2rrr�test_parallel_iterationGsz(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�rrrrr�xs(		
		r�c@seZdZdZdS)�MiscReadTestN)rrrr�rrrrr�Osr�c@seZdZdS)�GzipMiscReadTestN)rrrrrrrr�Rsr�c@seZdZdd�ZdS)�Bz2MiscReadTestcCs|jd�dS)NzBZ2File have no name attribute)�skipTest)r
rrrr�Vsz'Bz2MiscReadTest.requires_name_attributeN)rrrr�rrrrr�Usr�c@seZdZdd�ZdS)�LzmaMiscReadTestcCs|jd�dS)NzLZMAFile have no name attribute)r�)r
rrrr�Zsz(LzmaMiscReadTest.requires_name_attributeN)rrrr�rrrrr�Ysr�c@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�StreamReadTestzr|cCs�x�|jD]|}|j�s"q
n|jj|��P}xFy|jd�}Wn"tjk
rq|jd�YnX|s:Pq:q:WWdQXq
WdS)Niz6simple read-through using TarFile.extractfile() failed)r&Zisregr,r-r�StreamErrorrW)r
r2r3Zbufrrr�test_read_throughbsz StreamReadTest.test_read_throughc
Cso|jj�}|jj|��}|j�}WdQX|jt|�|jd�|jt|�td�dS)Nzregular file extraction failed)	r&r�r,r-r.r/r0rr1)r
r2r3rrrrr4rsz(StreamReadTest.test_fileobj_regular_filec
CsH|jj�}|jj|d��}|jtj|j�WdQXdS)Nr)r&r�r,r�rr�r-)r
Ztarinfosr�rrr�test_provoke_stream_error{sz(StreamReadTest.test_provoke_stream_errorcCstjtdd�}z�|j}x�|j�}|j�}|dkrLPn|j|d�|j�st|j�r�|jtj	��|j
|�WdQXq$n|j
|�}|j
|�}|dkr�q$n|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�r,r.r-r()r
Ztar1Ztar2Zt1Zt2�v1�v2rrr�test_compare_members�s*	z#StreamReadTest.test_compare_membersN)rrrrr�r4r�r�rrrrr�^s
	r�c@seZdZdS)�GzipStreamReadTestN)rrrrrrrr��sr�c@seZdZdS)�Bz2StreamReadTestN)rrrrrrrr��sr�c@seZdZdS)�LzmaStreamReadTestN)rrrrrrrr��sr�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�DetectReadTestcCsYytj||�}Wn2tjk
rJ}z|j�WYdd}~XnX|j�dS)N)rrr�rWr()r
rYrr&�errr�_testfunc_file�s
zDetectReadTest._testfunc_filecCswy4t|d��}tj||d|�}WdQXWn2tjk
rh}z|j�WYdd}~XnX|j�dS)NrFr�)rrr�rWr()r
rYrr�r&r�rrr�_testfunc_fileobj�s"z DetectReadTest._testfunc_fileobjcCs2|jr�|jtj��tjtdd|j�WdQX|jtj��tjtdd|j�WdQX|jtj��tj|jdd�WdQX|jtj��tj|jdd�WdQXn||jd�||jd|j�||jd�||jd|j�||jd�dS)Nrzr:zr|r5zr:*zr|*)rr�rr�rr)r
Ztestfuncrrr�_test_modes�s	  zDetectReadTest._test_modescCs|j|j�dS)N)r�r�)r
rrr�test_detect_file�szDetectReadTest.test_detect_filecCs|j|j�dS)N)r�r�)r
rrr�test_detect_fileobj�sz"DetectReadTest.test_detect_fileobjN)rrrr�r�r�r�r�rrrrr��s
	r�c@seZdZdS)�GzipDetectReadTestN)rrrrrrrr�src@seZdZdd�ZdS)�Bz2DetectReadTestcCsfttd��}|j�}WdQXtjtddd��}|j|�WdQX|jtd�dS)NrFr�Z
compresslevelrGzr|*)rrr-rr r�r�r�)r
r3rrrr�test_detect_stream_bz2�s
z(Bz2DetectReadTest.test_detect_stream_bz2N)rrrrrrrrr�src@seZdZdS)�LzmaDetectReadTestN)rrrrrrrr�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)(�MemberReadTestNc
Ks�|dk	rP|jj|��-}|jt|j��|d|j�WdQXnd|d<d|d<d|d<d|jkr�d	|d
<d	|d<nxC|j�D]5\}}|jt||�|d||jf�q�WdS)
Nzwrong md5sum for %si��>r�i��uidrT�gidzold-v7rr��gnamezwrong value in %s field of %s)r&r,r.rr-rY�itemsr�)r
r2�chksum�kwargsr��k�vrrr�_test_member�s




zMemberReadTest._test_membercCs/|jjd�}|j|dddt�dS)Nz
ustar/regtyper0icr	)r&r+r
r1)r
r2rrr�test_find_regtype�sz MemberReadTest.test_find_regtypecCs/|jjd�}|j|dddt�dS)Nzustar/conttyper0icr	)r&r+r
r1)r
r2rrr�test_find_conttype�sz!MemberReadTest.test_find_conttypecCs)|jjd�}|j|dd�dS)Nz
ustar/dirtyper0r)r&r+r
)r
r2rrr�test_find_dirtype�sz MemberReadTest.test_find_dirtypecCs)|jjd�}|j|dd�dS)Nzustar/dirtype-with-sizer0�)r&r+r
)r
r2rrr�test_find_dirtype_with_sizesz*MemberReadTest.test_find_dirtype_with_sizecCs/|jjd�}|j|dddd�dS)Nz
ustar/lnktyper0r�linknamez
ustar/regtype)r&r+r
)r
r2rrr�test_find_lnktypesz MemberReadTest.test_find_lnktypecCs/|jjd�}|j|dddd�dS)Nz
ustar/symtyper0rrrZ)r&r+r
)r
r2rrr�test_find_symtype
sz MemberReadTest.test_find_symtypecCs5|jjd�}|j|dddddd�dS)Nz
ustar/blktyper0r�devmajor��devminor)r&r+r
)r
r2rrr�test_find_blktypesz MemberReadTest.test_find_blktypecCs5|jjd�}|j|dddddd�dS)Nz
ustar/chrtyper0rrrGrr)r&r+r
)r
r2rrr�test_find_chrtypesz MemberReadTest.test_find_chrtypecCs)|jjd�}|j|dd�dS)Nzustar/fifotyper0r)r&r+r
)r
r2rrr�test_find_fifotypesz!MemberReadTest.test_find_fifotypecCs/|jjd�}|j|dddt�dS)Nzustar/sparser0iPr	)r&r+r
�
md5_sparse)r
r2rrr�test_find_sparseszMemberReadTest.test_find_sparsecCs/|jjd�}|j|dddt�dS)Nz
gnu/sparser0iPr	)r&r+r
r)r
r2rrr�test_find_gnusparsesz"MemberReadTest.test_find_gnusparsecCs/|jjd�}|j|dddt�dS)Nzgnu/sparse-0.0r0iPr	)r&r+r
r)r
r2rrr�test_find_gnusparse_00"sz%MemberReadTest.test_find_gnusparse_00cCs/|jjd�}|j|dddt�dS)Nzgnu/sparse-0.1r0iPr	)r&r+r
r)r
r2rrr�test_find_gnusparse_01&sz%MemberReadTest.test_find_gnusparse_01cCs/|jjd�}|j|dddt�dS)Nzgnu/sparse-1.0r0iPr	)r&r+r
r)r
r2rrr�test_find_gnusparse_10*sz%MemberReadTest.test_find_gnusparse_10cCs/|jjd�}|j|dddt�dS)Nuustar/umlauts-ÄÖÜäöüßr0icr	)r&r+r
r1)r
r2rrr�test_find_umlauts.sz MemberReadTest.test_find_umlautscCs/dddd}|j||jj��dS)Nzustar/z12345/�'z1234567/longname)rvr&r�)r
rYrrr�test_find_ustar_longname3sz'MemberReadTest.test_find_ustar_longnamecCs/|jjd�}|j|dddt�dS)Nzmisc/regtype-old-v7r0icr	)r&r+r
r1)r
r2rrr�test_find_regtype_oldv77sz&MemberReadTest.test_find_regtype_oldv7cCs`|jj�tj|jd|jdd�|_|jjd�}|j|dddt�dS)Nrr%z	iso8859-1upax/umlauts-ÄÖÜäöüßr0icr	)	r&r(rrrrr+r
r1)r
r2rrr�test_find_pax_umlauts;s

z$MemberReadTest.test_find_pax_umlauts)rrrr
rrrrrrrrrrrrr r!r"r$r%r&rrrrr�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&r+r�rW�assertNotEqualr�rr�)r
r)r2rrr�test_read_longnameFs
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&r+r�rWr.r)r
r)r-r2rrr�test_read_longlinkPs
zLongnameTest.test_read_longlinkcCs�|jdddd}|jj|�}|j}|jjj|�tj|jjjd
��}|j	t
j��t
jddd	|�WdQXdS)Nr(z123/r{r)rirYzfoo.tarr�i)
r*r&r+r�r�rKrrqr-r�rr�r)r
r)r2r�r3rrr�test_truncated_longnameYs	z$LongnameTest.test_truncated_longnamecCs�|jdddd}|jj|�j}ttd��K}|j|�tjj	|j
d�dd�}|j|j|j
�WdQXdS)	Nr(z123/r{r)rFiz	iso8859-1�strict)r*r&r+r�rrrKrr�Zfrombufr-r.r��longnametype)r
r)r�r3r2rrr�test_header_offsetbs
zLongnameTest.test_header_offsetN)rrrr,r.r/r2rrrrr'Ds
		r'c@smeZdZdZejZdd�Zdd�Zdd�Z	dd	�Z
d
d�Zedd
��Z
dS)�GNUReadTestZgnucCs�|jj|t�tjjt|�}t|d��}|j�}WdQX|jt	|�t
d|�|j�r�tj|�}|j
|jd|j�ndS)NrFzwrong md5sum for %si)r&r8r9r:r;r<rr-r.rr�_fs_supports_holesr�Z
assertLess�	st_blocks�st_size)r
rY�filenamer3rrOrrr�_test_sparse_filezszGNUReadTest._test_sparse_filecCs|jd�dS)Nz
gnu/sparse)r8)r
rrr�test_sparse_file_old�sz GNUReadTest.test_sparse_file_oldcCs|jd�dS)Nzgnu/sparse-0.0)r8)r
rrr�test_sparse_file_00�szGNUReadTest.test_sparse_file_00cCs|jd�dS)Nzgnu/sparse-0.1)r8)r
rrr�test_sparse_file_01�szGNUReadTest.test_sparse_file_01cCs|jd�dS)Nzgnu/sparse-1.0)r8)r
rrr�test_sparse_file_10�szGNUReadTest.test_sparse_file_10c	Cs�tjjd�rtjjtd�}t|d��}|jd�|j	�WdQXtj
|�}tj|�|j
dkSdSdS)N�linuxzsparse-testr�irF)rsr�r�r:r;r<r9rrKr�r�rr�r5)rYr3rOrrrr4�s


zGNUReadTest._fs_supports_holesN)rrrr*rZGNUTYPE_LONGNAMEr1r8r9r:r;r<�staticmethodr4rrrrr3ns		r3c@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)
rrrr+r.r�r�pax_headers�getr()r
r&r2rrr�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��^�AZatimeZctime)
rrrr+r.r0rrr�r�r�rAr()r
r&r2rrr�test_pax_number_fields�s!z"PaxReadTest.test_pax_number_fieldsN)	rrrr*rZXHDTYPEr1rCrErrrrr?�s	r?c@seZdZdd�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)rrqrrrr�r�r(�assertFalser�rurZ
gc_collectr.)r
r3r&rrrr�test_fileobj_no_close�s

z#WriteTestBase.test_fileobj_no_closeN)rrrrHrrrrrF�srFc@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�
0123456789rHrz!failed to store 100 char filename)	rrr�rr�r�r(r.r�)r
rYr&r�rrr�test_100_char_name�s
zWriteTest.test_100_char_namecCs�tjt|j�}zKtjjtd�}t|d��}|jd�WdQX|j	|�Wd|j
�X|jtjjt�dd�dS)N�filer�saaarztarfile is empty)
rrr�rr:r;r<r9r��addr(Z
assertGreater�getsize)r
r&r;r3rrr�
test_tar_size�szWriteTest.test_tar_sizecCs�tjt|j�}z�tjjtd�}t|d��WdQX|j|�}|j	|j
d�t|d��}|jd�WdQX|j|�}|j	|j
d�Wd|j�XdS)NrLr�rsaaar)
rrr�rr:r;r<r9�
gettarinfor.r0r�r()r
r&r;r2r3rrr�test_file_sizeszWriteTest.test_file_sizecCs�tjjtd�}tj|�zMtjt|j�}z&|j	|�}|j
|jd�Wd|j�XWdt
j|�XdS)NZ	directoryr)r:r;r<r9r�rrr�rrPr.r0r(r�rmdir)r
r;r&r2rrr�test_directory_sizes
zWriteTest.test_directory_sizer�zMissing hardlink implementationcCs�tjjtd�}tjjtd�}t|d��}|jd�WdQXtj||�zZtjt|j	�}z3|j
|�|j
|�}|j|jd�Wd|j
�XWdtj|�tj|�XdS)Nr��link_targetr�saaar)r:r;r<r9rr�r�rr�rrPr.r0r(rr�)r
r��targetr3r&r2rrr�test_link_size%s

zWriteTest.test_link_sizecCs�tjjtd�}tjd|�zMtjt|j�}z&|j	|�}|j
|jd�Wd|j�XWdt
j|�XdS)N�symlinkrTr)r:r;r<r9rWrrr�rrPr.r0r(rr�)r
r;r&r2rrr�test_symlink_size:szWriteTest.test_symlink_sizecCs�tjjt�}tjt|j�}z||j|j|d�|j	|�|j|j
�gd�tjt
��|j	|�WdQX|j|j
�gd�Wd|j�XdS)Nzarchive name must be absolutezadded the archive to itself)r:r;r�r�rrrr.rYrMr�r�
change_cwdr9r()r
Zdstnamer&rrr�
test_add_selfHs
zWriteTest.test_add_selfcCs6tjjtd�}tj|�z�x0d
D](}tjj||�}tj|�q,Wtjj}tj	t
|jdd�}z9tjdt
f��|j|dd	d|�WdQXWd|j�Xtj	t
d
�}z:|jt|j��d�|j|j�dd	�Wd|j�XWdtj|�XdS)N�excluder�r@�bazr%z	iso8859-1zuse the filter argument�arcname�	empty_dirr5rGr)zfoozbarr\)r:r;r<r9r�r�create_empty_file�isfilerrr�rZcheck_warnings�DeprecationWarningrMr(r.r/r�r�r�)r
�tempdirrYr[r&rrr�test_excludeZs&

	
#zWriteTest.test_excludecCsftjjtd�}tj|�z/x0dD](}tjj||�}tj|�q,Wdd�}tjt	|j
dd�}z|j|d	d
d|�Wd|j�X|j
t��|j|d
dd|�WdQXtjt	d�}zWx4|D],}|j|jd
�|j|jd�q�W|jt|j��d�Wd|j�XWdtj|�XdS)N�filterr�r@r\cSs5tjj|j�dkrdSd|_d|_|S)Nr@rDr�)r:r;�basenamerYrr�)r2rrrrd}s
		z%WriteTest.test_filter.<locals>.filterr%z	iso8859-1r]r^Tr5rDr)zfoozbarzbaz)r:r;r<r9r�rr_rrr�rrMr(r��	TypeErrorr.rr�r/r�r�)r
rbrYrdr&r2rrr�test_filterus*


 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�r]r5r()r:r;r<r9rr_r�rrr�rrMr(r�r�rRr.rYr��sep)r
r;Zcmp_path�dirr�r&r�rrr�_test_pathname�s 

zWriteTest._test_pathnamecCsLtjjtd�}tjjtd�}tj|�z�tjj|d�}tjj|d�}t|d��}|jd�WdQXtj||�tj|d�}|j	|�|j	|�|j
�tj|d�}z:y|jd|�Wntk
r|j
d	�YnXWd|j
�XWdtj|�tj|�XdS)
NZtestsymlinksztestsymlinks.tar�sourcerWr�z
something
r5r;z&extractall failed with symlinked files)r:r;r<r9r�rr�rWrrMr(r��OSErrorrWrr�r�)r
rbZtemparchiveZsource_fileZtarget_filer�r&rrr�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��.r@z..riT)rjr:r;r<rh)r
rrr�test_pathnames�s
"""""zWriteTest.test_pathnamescCsFtjdkr"|jdd�n |jdd�|jdd�dS)Nr�zC:\foor�z/fooz///foo)rsr�rj)r
rrr�test_abs_pathnames�szWriteTest.test_abs_pathnamescCs�tjt���tjt|j�}z|jd�Wd|j�Xtjtd�}zFx?|D]7}|j	dkr`|j
|j	jd�|j	�q`q`WWd|j�XWdQXdS)Nrnr5z./)rrYr9rrr�rrMr(rYr�r�)r
r&r�rrr�test_cwd�s
*zWriteTest.test_cwdcs�x�tttfD]��G�fdd�dtj�}|�}|j���6tjt|j	d|dtj
didd6�}WdQX|j|j�qWdS)Ncs(eZdZdZ�fdd�ZdS)z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTcs|jrd|_��ndS)NF)�first)r
r)�exctyperrr�s		z>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)rrrrrr�r)rsrr�BadFilesrtr�r�rAr�Znon)
rl�EOFError�RuntimeErrorrrqr�rrr�r�
PAX_FORMATrGr�)r
rtr�r&r)rsr�test_open_nonwritable_fileobjs		z'WriteTest.test_open_nonwritable_fileobj)rrrrrKrOrQrSr�r�r�r:rVrr�rXrZrcrgrjrmrorprqrxrrrrrI�s"
(rIc@seZdZdS)�
GzipWriteTestN)rrrrrrrrysryc@seZdZdS)�Bz2WriteTestN)rrrrrrrrzsrzc@seZdZdS)�
LzmaWriteTestN)rrrrrrrr{sr{c@s^eZdZdZdZdd�Zejej	dkoEe
ed�d�dd	��ZdS)
�StreamWriteTestzw|Nc
Cs�tjt|j�}|j�|jr}|j�}ttd��}|j�}WdQX|j|�}|j|j	d�n$|jt��}|j�}WdQX|j
|jd�tjd�dS)NrFzfound trailing dataszincorrect zero padding)
rrr�rr(�decompressorr-Z
decompressrGZunused_datar.�countZ
RECORDSIZE)r
r&Zdecr3rrrr�test_stream_paddings
	z#StreamWriteTest.test_stream_paddingr��umaskzMissing umask implementationcCs�tjjt�r"tjt�ntjd�}zLtjt|j	�}|j
�tjt�jd@}|j
|dd�Wdtj|�XdS)N�i�i�zwrong file permissions)r:r;�existsr�rr�r�rrrr(r�r�r.)r
Zoriginal_umaskr&rrrr�test_file_mode/s
zStreamWriteTest.test_file_mode)
rrrrr}rr�r�rsr�r�r:r�rrrrr|s
!r|c@seZdZdS)�GzipStreamWriteTestN)rrrrrrrr�@sr�c@s%eZdZerejndZdS)�Bz2StreamWriteTestN)rrrrZBZ2Decompressorr}rrrrr�Csr�c@s%eZdZerejndZdS)�LzmaStreamWriteTestN)rrrr#ZLZMADecompressorr}rrrrr�Fs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)NirG)r/)r
rOZblocksrrr�_lengthNszGNUWriteTest._lengthNcCs�d}t|�tjkr;|d7}||j|�7}n|dk	r|t|�tjkr||d7}||j|�7}n|S)Ni)r/rZLENGTH_NAMEr�ZLENGTH_LINK)r
rYr�r~rrr�
_calc_sizeRs
!
zGNUWriteTest._calc_sizecCstj|�}|r-||_tj|_ntjtd�}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�r.r(r�r�rY)r
rYr�r2r&r�r�Zmemberrrr�_test`s,	
		zGNUWriteTest._testcCs|jddd�dS)Nzlongnam/��longnam)r�)r
rrr�test_longname_1023}szGNUWriteTest.test_longname_1023cCs|jddd�dS)Nzlongnam/r�r))r�)r
rrr�test_longname_1024�szGNUWriteTest.test_longname_1024cCs|jddd�dS)Nzlongnam/r��	longname_)r�)r
rrr�test_longname_1025�szGNUWriteTest.test_longname_1025cCs|jdddd�dS)NrYzlonglnk/r��longlnk)r�)r
rrr�test_longlink_1023�szGNUWriteTest.test_longlink_1023cCs|jdddd�dS)NrYzlonglnk/r�r-)r�)r
rrr�test_longlink_1024�szGNUWriteTest.test_longlink_1024cCs|jdddd�dS)NrYzlonglnk/r��	longlink_)r�)r
rrr�test_longlink_1025�szGNUWriteTest.test_longlink_1025cCs$|jdddddd�dS)Nzlongnam/r�r�zlonglnk/r�)r�)r
rrr�test_longnamelink_1023�sz#GNUWriteTest.test_longnamelink_1023cCs$|jdddddd�dS)Nzlongnam/r�r)zlonglnk/r-)r�)r
rrr�test_longnamelink_1024�sz#GNUWriteTest.test_longnamelink_1024cCs$|jdddddd�dS)Nzlongnam/r�r�zlonglnk/r�)r�)r
rrr�test_longnamelink_1025�sz#GNUWriteTest.test_longnamelink_1025)rrrr�r�r�r�r�r�r�r�r�r�r�r�rrrrr�Jsr�r�zMissing hardlink implementationc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�HardlinkTestc	Cs�tjjtd�|_tjjtd�|_t|jd��}|jd�WdQXtj|j|j�t	jt
d�|_|jj|j�dS)Nr�r@r�sfoor�)
r:r;r<r9r�r@rr�r�rr�r&rM)r
r3rrrr'�szHardlinkTest.setUpcCs1|jj�tj|j�tj|j�dS)N)r&r(rr�r�r@)r
rrrr)�s
zHardlinkTest.tearDowncCs2|jj|j�}|j|jtjd�dS)Nzadd file as regular failed)r&rPr�r.r�r�REGTYPE)r
r2rrr�test_add_twice�szHardlinkTest.test_add_twicecCs2|jj|j�}|j|jtjd�dS)Nzadd file as hardlink failed)r&rPr@r.r�rr�)r
r2rrr�test_add_hardlink�szHardlinkTest.test_add_hardlinkcCs>d|j_|jj|j�}|j|jtjd�dS)NTzdereferencing hardlink failed)r&ZdereferencerPr@r.r�rr�)r
r2rrr�test_dereference_hardlink�sz&HardlinkTest.test_dereference_hardlinkN)rrrr'r)r�r�r�rrrrr��s
r�c@s7eZdZddd�Zdd�Zdd�ZdS)�PaxWriteTestNcCs�tj|�}|r-||_tj|_ntjtddtj�}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�rr�r�rr�rwr�r(r�r.rY)r
rYr�r2r&�l�nrrrr��s 	zPaxWriteTest._testcCshidd6dd6dd6dd6dd6}tjtd	d
tjd|�}z|jtjd��Wd|j�Xtjtdd
�}z�|j|j|�|j|j	�dj|�x�|jj
�D]�\}}|jt|�t
�|jt|�t
�|tjkr�ytj||�WqQttfk
rM|jd�YqQXq�q�WWd|j�XdS)Nr@r��0rz1.23r�uäöü�testr�r�rAr%z	iso8859-1rz"unable to convert pax header field)rrr�rwr�r�r(r.rAr�rZassertIsNotr�r�ZPAX_NUMBER_FIELDSrfr�rW)r
rAr&�key�valrrr�test_pax_global_header�s0
	z#PaxWriteTest.test_pax_global_headercCs�idd6dd6}tjtddtjdd�}z8tj�}d	|_d
|_||_|j|�Wd|j	�Xtjtdd�}zM|j
�d}|j|j|�|j|jd�|j|jd�Wd|j	�XdS)Nr�r;Z123rr�r�r%z	iso8859-1uäöü�rrDi)rrr�rwr�rYrrAr�r(r�r.)r
rAr&r�rrr�test_pax_extended_header�s"				z%PaxWriteTest.test_pax_extended_header)rrrr�r�r�rrrrr��s r�c@smeZdZejZdd�Zdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�ZdS)�UstarUnicodeTestcCs|jd�dS)Nz	iso8859-1)�_test_unicode_filename)r
rrr�test_iso8859_1_filenamesz(UstarUnicodeTest.test_iso8859_1_filenamecCs|jd�dS)N�utf7)r�)r
rrr�test_utf7_filenamesz#UstarUnicodeTest.test_utf7_filenamecCs|jd�dS)Nzutf-8)r�)r
rrr�test_utf8_filename"sz#UstarUnicodeTest.test_utf8_filenamecCs�tjtdd|jd|dd�}z d}|jtj|��Wd|j�Xtjtd|�}z!|j|j�dj	|�Wd|j�XdS)Nr�r�r%�errorsr0uäöür)
rrr�r�r�r�r(r.r�rY)r
r%r&rYrrrr�%s!z'UstarUnicodeTest._test_unicode_filenamec
Cs�tjtdd|jdddd�}zWtj�}d|_|jt|j|�d|_d|_	|jt|j|�Wd|j
�XdS)	Nr�r�r%rgr�r0uäöür�)rrr�r�r�rYr��UnicodeErrorr�r�r()r
r&r2rrr�test_unicode_filename_error4s			z,UstarUnicodeTest.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)Nr5r%z	iso8859-1r�r0)rrrZassertIsr�rYr�rr�rr()r
r&r�rrr�test_unicode_argumentCs
!z&UstarUnicodeTest.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	�nWd|j�XdS)
Nr�uäöürr�r�r%z	iso8859-1rgu	���)rr�r�rrr�r�r�r(r+r.rw)r
r�r&rrr�test_uname_unicodeOs(			
z#UstarUnicodeTest.test_uname_unicodeN)
rrrr�USTAR_FORMATr�r�r�r�r�r�r�r�rrrrr�s	r�c@s%eZdZejZdd�ZdS)�GNUUnicodeTestcCstxmdD]e\}}tjtd|dd��<}y|j|�}Wntk
re|jd�YnXWdQXqWdS)N�utf-8�pax/bad-pax-����	iso8859-1�pax/bad-pax-äöür%r�rmz%unable to read bad GNU tar pax header�r�r��r�r�)r�r�)rrrr+r�rW)r
r%rYr&r�rrr�test_bad_pax_headeros
z"GNUUnicodeTest.test_bad_pax_headerN)rrrrr�r�r�rrrrr�ks	r�c@s+eZdZejZdZdd�ZdS)�PAXUnicodeTestNcCstxmdD]e\}}tjtd|dd��<}y|j|�}Wntk
re|jd�YnXWdQXqWdS)N�utf-8�pax/hdrcharset-����	iso8859-1�pax/hdrcharset-äöür%r�rmz)unable to read POSIX.1-2008 binary header�r�r��r�r�)r�r�)rrrr+r�rW)r
r%rYr&r�rrr�test_binary_header�s
z!PAXUnicodeTest.test_binary_header)rrrrrwr�r�r�rrrrr�}s	r�c@s7eZdZdd�Zddd�Zdd�ZdS)	�AppendTestBasecCs5t|_tjj|j�r1tj|j�ndS)N)r�rr:r;r�rr�)r
rrrr'�s	zAppendTestBase.setUpzw:cCs�tjtdd��e}|jd�}d|_|j|��5}tj|j|��}|j||�WdQXWdQXWdQXdS)Nr%z	iso8859-1z
ustar/regtyper�)rrrr+rYr,r�)r
r�srcr�r�r&rrr�_create_testtar�s	zAppendTestBase._create_testtarcCs4|jd|j�|jtjtjtd�dS)Nzw:r[)r�rr�rr�rr�)r
rrr�test_append_compressed�sz%AppendTestBase.test_append_compressedN)rrrr'r�r�rrrrr��sr�c@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��WdQXdS)Nr[r�r@)rrrr�r�)r
r�r&rrr�
_add_testfile�szAppendTest._add_testfiler@c
Cs;tj|jd|��}|j|j�|�WdQXdS)Nr�)rrrr.r�)r
�namesr�r&rrrr��szAppendTest._testcCs|j�|j�dS)N)r�r�)r
rrr�test_non_existing�s
zAppendTest.test_non_existingcCs1tj|jd�j�|j�|j�dS)Nzw:)rrrr(r�r�)r
rrr�
test_empty�s
zAppendTest.test_emptycCsAtjdd�}|j|�|jd�|jd|�dS)Nsirr�)rrqr�rKr�)r
r3rrr�test_empty_fileobj�s

zAppendTest.test_empty_fileobjcCsz|j�t|jd��}|j�}WdQXtj|�}|j|�|jd�|jdddgd|�dS)NrFrr�r�r@r�)	r�rrr-rrqr�rKr�)r
r3rrrr�test_fileobj�s


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

zAppendTest.test_existingc	CsBt|jd��}|j|�WdQX|jtj|j�dS)Nr�)rrr�r�rr�r�)r
rr3rrr�_test_error�szAppendTest._test_errorcCs|jd�dS)NrJ)r�)r
rrr�	test_null�szAppendTest.test_nullcCs|jd�dS)Ns�
s
)r�)r
rrr�test_incomplete�szAppendTest.test_incompletecCs&tjd�j�}|j|�dS)Nr�)rr�r�r�)r
rrrr�test_premature_eof�szAppendTest.test_premature_eofcCs*tjd�j�}|j|d�dS)Nr�sr�s
)rr�r�r�)r
rrrr�test_trailing_garbage�sz AppendTest.test_trailing_garbagecCs|jdd�dS)Nr�i)r�)r
rrr�test_invalid�szAppendTest.test_invalid)rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s	r�c@seZdZdS)�GzipAppendTestN)rrrrrrrr��sr�c@seZdZdS)�
Bz2AppendTestN)rrrrrrrr��sr�c@seZdZdS)�LzmaAppendTestN)rrrrrrrr��sr�c@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)
NrJrHr�z123/�>r)z1234567/��~r-rYi )rr�r�r�r�r�rr)r
r2rrr�test_ustar_limits�s 	zLimitsTest.test_ustar_limitscCs�tjddd�}|jtj�tjd�}ddd|_|jtj�tjd�}d|_|jt|jtj�dS)Nz123/r�r)r-rYl)rr�r�r�rrr�r�)r
r2rrr�test_gnu_limitss	zLimitsTest.test_gnu_limitscCs�tjddd�}|jtj�tjd�}ddd|_|jtj�tjd�}d|_|jtj�dS)Nz123/r�r)r-rYl)rr�r�rwrr)r
r2rrr�test_pax_limitss	zLimitsTest.test_pax_limitsN)rrrr�r�r�rrrrr��s
r�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�MiscTestcCs�|jtjdddd�d�|jtjdddd�d�|jtjddd�d�|jtjd	dd�d�dS)
Nr�r�rgr0sfooZfoobarrsfoosfoobar)r.rZstnZnts)r
rrr�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)Ns0000001rGs7777777i��s� i s�����l��s��������s��������rTs�lsrs       r�i����l����)r.rZnti)r
rrr�test_read_number_fields6sz MiscTest.test_read_number_fieldscCs�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d	�|jtjd�d�|jtjd�d
�dS)NrGs0000001i��s7777777i s� l��s�����s��������rTs��������ls�r�i����l����)r.r�itn)r
rrr�test_write_number_fieldsJsz!MiscTest.test_write_number_fieldscCs�|jt��tjddtj�WdQX|jt��tjddtj�WdQX|jt��tjddtj�WdQX|jt��tjddtj�WdQXdS)	NrGr�i l�lr�l����)r�r�rr�r�r�)r
rrr�test_number_field_limitsXsz!MiscTest.test_number_field_limitsN)rrrr�r�r�r�rrrrr�*s
r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%S)&�CommandLineTestcOs:tjdd||�\}}}|jtjj�d�S)Nz-mrs
)rZassert_python_okr�r:�lineseprU)r
�argsr
�rcry�errrrr�
tarfilecmdeszCommandLineTest.tarfilecmdcGstjdd|�S)Nz-mr)rZassert_python_failure)r
r�rrr�tarfilecmd_failurejsz"CommandLineTest.tarfilecmd_failurec
Cs�tjd�tjd�g}|jtj|�tj|d��7}x-|D]%}|j|dtjj	|��qMWWdQXdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr�r])
r�findfiler�r�rrrMr:r;re)r
�tar_name�files�tfZtardatarrr�make_simple_tarfilems
z#CommandLineTest.make_simple_tarfilecCsHxAtD]9}x0dD](}|j||�}|j|d�qWqWdS)N�-t�--testrJ)r�r�)�testtarnamesr�r.)r
r��optryrrr�test_test_commandvs

z!CommandLineTest.test_test_commandcCsKxDtD]<}x3dD]+}|j|d|�}|jd|�qWqWdS)N�-v�	--verbosez-tsis a tar archive.
)r�r�)r�r�rv)r
r�r�ryrrr�test_test_command_verbose|s

z)CommandLineTest.test_test_command_verbosecCs+tjd�}|jd|�\}}}|jd|�|j|d�|j|d�x�tD]�}|jd|���t|d��}|j�}WdQXzntt	d��}|j
|dd	��WdQX|jdt	�\}}}|j|d�|j|d�Wdtjt	�XWdQXqaWdS)
Nz
zipdir.zipz-ts is not a tar archive.rJrGr�rFr�i�)rr�r�rvr.r�ZsubTestrr-r�r�r�)r
�zipnamer�ryr�r�r�rrrr�test_test_command_invalid_file�s 
z.CommandLineTest.test_test_command_invalid_filecCs�x�tD]�}tj��2}tj|d��}|jdd�WdQXWdQX|j�jdd�}x6d	D].}|j||dd�}|j	||�qlWqWdS)
Nr5rkFrgrn�-l�--list�PYTHONIOENCODING)rr)
r�r�captured_stdoutrrrDrurUr�r.)r
r�r�r��expectedr�ryrrr�test_list_command�s

	z!CommandLineTest.test_list_commandcCs�x�tD]�}tj��2}tj|d��}|jdd�WdQXWdQX|j�jdd�}x9d
D]1}|j|d|d	d�}|j	||�qlWqWdS)Nr5rkTrgrn�-v�	--verbosez-lr)rr)
r�rrrrrDrurUr�r.)r
r�r�r�rr�ryrrr�test_list_command_verbose�s

	z)CommandLineTest.test_list_command_verbosecCs^tjd�}|jd|�\}}}|jd|�|j|d�|j|d�dS)Nz
zipdir.zipz-ls is not a tar archive.rJrG)rr�r�rvr.)r
r�r�ryr�rrr�test_list_command_invalid_file�s
z.CommandLineTest.test_list_command_invalid_filecCs�tjd�tjd�g}xjdD]b}zK|j|t|�}|j|d�tjt��}|j�WdQXWdtjt�Xq%WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt�-c�--createrJ)r
r)	rr�r�r�r.rrr�r�)r
r�r�ryr&rrr�test_create_command�s
z#CommandLineTest.test_create_commandcCs�tjd�tjd�g}xmdD]e}zN|j|dt|�}|jd|�tjt��}|j�WdQXWdtjt�Xq%WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt�-v�	--verbosez-cs file created.)r
r)	rr�r�r�rvrrr�r�)r
r�r�ryr&rrr�test_create_command_verbose�s
z+CommandLineTest.test_create_command_verbosecCsrtjd�g}zK|jdt|�}|j|d�tjt��}|j�WdQXWdtjt�XdS)Nztokenize_tests.txtz-crJ)	rr�r��dotlessnamer.rrr�r�)r
r�ryr&rrr�$test_create_command_dotless_filename�sz4CommandLineTest.test_create_command_dotless_filenamecCs�tjjtd�}tjd�g}zK|jd||�}|j|d�tj	|��}|j
�WdQXWdtj|�XdS)Nz.testtarztokenize_tests.txtz-crJ)r:r;r<r9rr�r�r.rrr�r�)r
r�r�ryr&rrr�(test_create_command_dot_started_filename�sz8CommandLineTest.test_create_command_dot_started_filenamecCs�tjd�tjd�g}x�tttfD]r}|jsCq.nzLtd|j}|jd||�}|j	|��}|j
�WdQXWdtj|�Xq.WdS)Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtrnz-c)rr�rrr!rr�rr�rr�r�)r
r�Zfiletyper�ryr&rrr�test_create_command_compressed�s	z.CommandLineTest.test_create_command_compressedcCso|jt�x[dD]S}z<tjt��|j|t�}WdQX|j|d�Wdtjt�XqWdS)N�-e�	--extractrJ)rr)r�r�r�temp_cwd�	tarextdirr�r.r�)r
r�ryrrr�test_extract_command�s

z$CommandLineTest.test_extract_commandcCsr|jt�x^dD]V}z?tjt��|j|dt�}WdQX|jd|�Wdtjt�XqWdS)N�-v�	--verbosez-es file is extracted.)rr)r�r�rrrr�rvr�)r
r�ryrrr�test_extract_command_verbose�s

z,CommandLineTest.test_extract_command_verbosecCsa|jt�z?tjt��|jdtd�}WdQX|j|d�Wdtjt�XdS)Nz-eZspamdirrJ)r�r�rrrr�r.r�)r
ryrrr�(test_extract_command_different_directorys
z8CommandLineTest.test_extract_command_different_directoryc
Csttjd�}tjt�� |jd|�\}}}WdQX|jd|�|j|d�|j|d�dS)Nz
zipdir.zipz-es is not a tar archive.rJrG)rr�rrr�rvr.)r
r�r�ryr�rrr�!test_extract_command_invalid_files!z1CommandLineTest.test_extract_command_invalid_fileN)rrrr�r�r�r�r�r�rrr	rrrrrrrrrrrrrr�cs$	




	r�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextManagerTestc
CsBtjt��}|j|jd�WdQX|j|jd�dS)Nzclosed inside runtime contextzcontext manager failed)rrrrGr�r�)r
r&rrr�
test_basicszContextManagerTest.test_basiccCs@tjt�}|j�|jt��|�WdQXWdQXdS)N)rrrr(r�rl)r
r&rrr�test_closeds

zContextManagerTest.test_closedcCsc|jt��%}tjt��
}t�WdQXWdQX|j|jtd�|j|j	d�dS)Nz)wrong exception raised in context managerzcontext manager failed)
r��	Exceptionrrrrlr�Z	exceptionr�r�)r
�excr&rrr�test_exception'sz!ContextManagerTest.test_exceptioncCsfy%tjtd��
}t�WdQXWnYnX|jtjjt�dd�|j|j	d�dS)Nr�rz-context manager wrote an end-of-archive blockzcontext manager failed)
rrr�r!r.r:r;rNr�r�)r
r&rrr�test_no_eof0szContextManagerTest.test_no_eofc
Cs<tjtd��WdQX|jtjjt�dd�dS)Nr�rz-context manager wrote no end-of-archive block)rrr�r+r:r;rN)r
rrr�test_eof<szContextManagerTest.test_eofcCsxttd��c}y+tjd|dd��
}t�WdQXWnYnX|j|jd�|j|jd�WdQXdS)Nr�r�rr�zexternal file object was closedzcontext manager failed)rr�rr!rGr�r�)r
r3r&rrrr�DszContextManagerTest.test_fileobjN)	rrrrr r#r$r%r�rrrrrs		rzrequires 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	Cs`|jj|t�ttjjt|�d��}|j�}WdQX|jt	|�t
�dS)NrF)r&r8r9rr:r;r<r-r.rr1)r
rYr�rrrr�_test_link_extractionWs!z'LinkEmulationTest._test_link_extraction�islinkz3Skip emulation - has os.path.islink but not os.linkcCs|jd�dS)Nz
ustar/lnktype)r')r
rrr�test_hardlink_extraction1^sz+LinkEmulationTest.test_hardlink_extraction1cCs|jd�dS)Nz./ustar/linktest2/lnktype)r')r
rrr�test_hardlink_extraction2csz+LinkEmulationTest.test_hardlink_extraction2rWz Skip emulation if symlink existscCs|jd�dS)Nz
ustar/symtype)r')r
rrr�test_symlink_extraction1hsz*LinkEmulationTest.test_symlink_extraction1cCs|jd�dS)Nz./ustar/linktest2/symtype)r')r
rrr�test_symlink_extraction2msz*LinkEmulationTest.test_symlink_extraction2N)
rrrr'r��skipIfr�r:r;r)r*r+r,rrrrr&Qsr&c@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>.MyBytesIOFcsO|jrtd��n|j�t|j��k|_t�|�j|�S)Nz(infinite loop detected in tarfile.open())�hit_eof�AssertionErrorrLr/ru�superr-)r
r�)�	MyBytesIO�	__class__rrr-zs	!z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readcsd|_t�|�j|�S)NF)r/r1rK)r
r�)r2r3rrrK�s	z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)rrrr/r-rKr)r2)r3rr2xsr2r�rGr�r)rrqr�compressrr�r��ranger/rr�)r
rr�xr)r2r�_test_partial_inputws*z&Bz2PartialReadTest._test_partial_inputcCs|jd�dS)Nr5)r7)r
rrr�test_partial_input�sz%Bz2PartialReadTest.test_partial_inputcCs|jd�dS)Nzr:bz2)r7)r
rrr�test_partial_input_bz2�sz)Bz2PartialReadTest.test_partial_input_bz2N)rrrr7r8r9rrrrr.ssr.cCs�tjt�tjt�tgattd��}|j�}WdQXxnt	t
tfD]]}|jrWtj|j�tj|j�|j|jd��}|j
|�WdQXqWqWWdS)NrFr�)rr�r9r:�makedirsrr�rr-rrr!�appendr�)r3r�cr&rrr�setUpModule�s

		r=cCs&tjjt�r"tjt�ndS)N)r:r;r�r9rr�rrrr�tearDownModule�sr>�__main__)brsr:rZhashlibrr�rr�rrr�ImportErrorrr#rr;r�ZTESTFNr9rr�rr<rrr"r�rr1rr	Z
requires_gziprZrequires_bz2rZ
requires_lzmar!r$ZTestCaser*rcrdrerfr}r~rr�r�r�r�r�r�r�r�r�r�r�rrrrr'r3r?rFrIryrzr{r|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr-r&r.r=r>r�mainrrrr�<module>s�




~DK�=(a*6,�/&R%'TS@;9�:%!