B
    18™\‡„ ã               @   s~  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlZ
d dlZd dlmZ d dlmZ yd dlZW n ek
r˜   dZY nX yd dlZW n ek
r¾   dZY nX yd dlZW n ek
rä   dZY nX dd„ Zej ej¡d	 Zed
 Ze d¡Zej ed¡Zej ed¡Zej ed¡Z ej ed¡Z!ej ed¡Z"dZ#dZ$G dd„ dƒZ%ej&G dd„ dƒƒZ'ej(G dd„ dƒƒZ)ej*G dd„ dƒƒZ+G dd„ de%ƒZ,G dd„ de,e
j-ƒZ.G dd „ d e'e.ƒZ/G d!d"„ d"e)e.ƒZ0G d#d$„ d$e+e.ƒZ1G d%d&„ d&e,e
j-ƒZ2G d'd(„ d(e'e2ƒZ3G d)d*„ d*e)e2ƒZ4G d+d,„ d,e+e2ƒZ5G d-d.„ d.e,ƒZ6G d/d0„ d0e6ƒZ7G d1d2„ d2e7e
j-ƒZ8G d3d4„ d4e'e7e
j-ƒZ9G d5d6„ d6e)e7e
j-ƒZ:G d7d8„ d8e+e7e
j-ƒZ;G d9d:„ d:e6e
j-ƒZ<G d;d<„ d<e'e<ƒZ=G d=d>„ d>e)e<ƒZ>G d?d@„ d@e+e<ƒZ?G dAdB„ dBe%e
j-ƒZ@G dCdD„ dDe'e@ƒZAG dEdF„ dFe)e@ƒZBG dGdH„ dHe+e@ƒZCG dIdJ„ dJe,e
j-ƒZDG dKdL„ dLƒZEG dMdN„ dNeEe,e
j-ƒZFG dOdP„ dPeEe,e
j-ƒZGG dQdR„ dRe%ƒZHG dSdT„ dTeHe
j-ƒZIG dUdV„ dVe'eIƒZJG dWdX„ dXe)eIƒZKG dYdZ„ dZe+eIƒZLG d[d\„ d\eHe
j-ƒZMG d]d^„ d^e'eMƒZNG d_d`„ d`e)eMƒZOG dadb„ dbe+eMƒZPG dcdd„ dde
j-ƒZQG dedf„ dfeHe
j-ƒZRG dgdh„ dhe'eRƒZSG didj„ dje)eRƒZTG dkdl„ dle+eRƒZUG dmdn„ dneRƒZVe
 WeXedoƒdp¡G dqdr„ dre
j-ƒƒZYG dsdt„ dteQƒZZG dudv„ dvƒZ[G dwdx„ dxe[e
j-ƒZ\G dydz„ dze[e
j-ƒZ]G d{d|„ d|e[e
j-ƒZ^G d}d~„ d~ƒZ_G dd€„ d€e_e
j-ƒZ`G dd‚„ d‚e'e_e
j-ƒZaG dƒd„„ d„e)e_e
j-ƒZbG d…d†„ d†e+e_e
j-ƒZcG d‡dˆ„ dˆe
j-ƒZdG d‰dŠ„ dŠe
j-ƒZeG d‹dŒ„ dŒe
j-ƒZfG ddŽ„ dŽe
j-ƒZge
 heXedoƒd¡G dd‘„ d‘e,e
j-ƒƒZiG d’d“„ d“e)e
j-ƒZjd”d•„ Zke
 WeXed–ƒd—¡e
 WeXed˜ƒd™¡G dšd›„ d›e
j-ƒƒƒZldœd„ ZmdždŸ„ Zneod krze
 p¡  dS )¡é    N)Úmd5)Úcontextmanager)ÚRandom)Úsupport)Úscript_helperc             C   s   t | ƒ ¡ S )N)r   Ú	hexdigest)Údata© r	   úU/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_tarfile.pyÚmd5sum   s    r   z-tardirz-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ 65f477c818ad9e15f7feab0c6d37742fZ a54fbc4ca4f4399a90e1b27164012fc6c               @   s.   e Zd ZeZdZejZej	j
Z
edd„ ƒZdS )ÚTarTestÚ c             C   s   | j | j S )N)ÚprefixÚsuffix)Úselfr	   r	   r
   Úmode4   s    zTarTest.modeN)Ú__name__Ú
__module__Ú__qualname__Útarnamer   ÚioÚFileIOÚopenÚtarfileÚTarFileÚtaropenÚpropertyr   r	   r	   r	   r
   r   .   s
   r   c               @   s*   e Zd ZeZdZerejndZe	j
jZdS )ÚGzipTestÚgzN)r   r   r   Úgzipnamer   r   ÚgzipÚGzipFiler   r   r   Zgzopenr   r	   r	   r	   r
   r   8   s   r   c               @   s*   e Zd ZeZdZerejndZe	j
jZdS )ÚBz2TestÚbz2N)r   r   r   Úbz2namer   r   r#   ÚBZ2Filer   r   r   Zbz2openr   r	   r	   r	   r
   r"   ?   s   r"   c               @   s*   e Zd ZeZdZerejndZe	j
jZdS )ÚLzmaTestÚxzN)r   r   r   Úxznamer   r   ÚlzmaZLZMAFiler   r   r   Zxzopenr   r	   r	   r	   r
   r&   F   s   r&   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚReadTestzr:c             C   s   t j| j| jdd| _d S )Nz	iso8859-1)r   Úencoding)r   r   r   r   Útar)r   r	   r	   r
   ÚsetUpR   s    zReadTest.setUpc             C   s   | j  ¡  d S )N)r,   Úclose)r   r	   r	   r
   ÚtearDownV   s    zReadTest.tearDownN)r   r   r   r   r-   r/   r	   r	   r	   r
   r*   N   s   r*   c               @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚUstarReadTestc          	   C   sV   | j  d¡}| j  |¡4}| ¡ }|  t|ƒ|jd¡ |  t|ƒtd¡ W d Q R X d S )Nzustar/regtypezregular file extraction failed)	r,   Ú	getmemberÚextractfileÚreadÚassertEqualÚlenÚsizer   Úmd5_regtype)r   ÚtarinfoÚfobjr   r	   r	   r
   Útest_fileobj_regular_file\   s    z'UstarReadTest.test_fileobj_regular_filec          	   C   s¢   | j  dt¡ | j  d¡}ttj td¡dƒ}| ¡ }W d Q R X | j  	|¡J}t
 |¡}| ¡ }|  ||d¡ |  t|ƒdd¡ |  |d dd¡ W d Q R X d S )Nzustar/regtypeÚrzfileobj.readlines() failedér   éS   zOI will gladly admit that Python is not the fastest running scripting language.
)r,   ÚextractÚTEMPDIRr1   r   ÚosÚpathÚjoinÚ	readlinesr2   r   ÚTextIOWrapperr4   r5   )r   r8   Úfobj1Úlines1r9   Úfobj2Úlines2r	   r	   r
   Útest_fileobj_readlinese   s    

z$UstarReadTest.test_fileobj_readlinesc          	   C   sz   | j  dt¡ | j  d¡}ttj td¡dƒ}| ¡ }W d Q R X | j  	|¡"}t
t |¡ƒ}|  ||d¡ W d Q R X d S )Nzustar/regtyper;   zfileobj.__iter__() failed)r,   r>   r?   r1   r   r@   rA   rB   rC   r2   Úlistr   rD   r4   )r   r8   rE   rF   rG   rH   r	   r	   r
   Útest_fileobj_iterw   s    zUstarReadTest.test_fileobj_iterc       	   	   C   sú  | j  dt¡ ttj td¡dƒ}| ¡ }W d Q R X | j  d¡}| j  	|¡}| ¡ }| 
d¡ |  d| ¡ d¡ | 
dd¡ |  d| ¡ d¡ | 
dd¡ |  d	| ¡ d
¡ | 
d	d¡ |  d| ¡ d¡ | d¡}|  ||dd… d¡ | 
dd¡ |  |j| ¡ d¡ |  | ¡ dd¡ | 
|j d¡ |  d| ¡ d¡ | 
d¡ | ¡ }| 
d¡ | ¡ }|  ||d¡ | 
d¡ |  t| ¡ ƒ| ¡ d¡ | 
d¡ |  t| ¡ ƒd | ¡ d¡ | 
d¡ | ¡ }|  | ¡ |t|ƒd … d¡ | ¡  d S )Nzustar/regtypeÚrbr   zseek() to file's start failedi   z"seek() to absolute position failedi üÿÿé   i   z+seek() to negative relative position failedz+seek() to positive relative position failedé
   i
  zread() after seek failedé   zseek() to file's end failedó    z0read() at file's end did not return empty stringz$relative seek() to file's end failedi   zreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failed)r,   r>   r?   r   r@   rA   rB   r3   r1   r2   Úseekr4   Útellr6   rC   r5   Úreadliner.   )	r   r9   r   r8   ÚtextÚsÚs1Ús2Úliner	   r	   r
   Útest_fileobj_seek   s\    






zUstarReadTest.test_fileobj_seekc          	   C   sr   | j  d¡\}t |¡}| ¡  d¡}|  t|ƒt¡ y| 	d¡ W n t
k
rb   |  d¡ Y nX W d Q R X d S )Nzustar/regtypez	iso8859-1éd   zseeking failed in text mode)r,   r2   r   rD   r3   Úencoder4   r   r7   rQ   ÚAttributeErrorÚfail)r   r9   r   r	   r	   r
   Útest_fileobj_text³   s    
zUstarReadTest.test_fileobj_textc          
   C   sD   | j  |¡.}| j  |¡}|  |j|j¡ W d Q R X W d Q R X d S )N)r,   r2   r4   Úname)r   ZlnktypeÚregtypeÚaÚbr	   r	   r
   Ú_test_fileobj_linkÂ   s    z UstarReadTest._test_fileobj_linkc             C   s   |   dd¡ d S )Nzustar/lnktypezustar/regtype)rc   )r   r	   r	   r
   Útest_fileobj_link1Ç   s    z UstarReadTest.test_fileobj_link1c             C   s   |   dd¡ d S )Nz./ustar/linktest2/lnktypezustar/linktest1/regtype)rc   )r   r	   r	   r
   Útest_fileobj_link2Ê   s    z UstarReadTest.test_fileobj_link2c             C   s   |   dd¡ d S )Nzustar/symtypezustar/regtype)rc   )r   r	   r	   r
   Útest_fileobj_symlink1Î   s    z#UstarReadTest.test_fileobj_symlink1c             C   s   |   dd¡ d S )Nz./ustar/linktest2/symtypezustar/linktest1/regtype)rc   )r   r	   r	   r
   Útest_fileobj_symlink2Ñ   s    z#UstarReadTest.test_fileobj_symlink2c             C   s   |   dd¡ d S )NZsymtype2zustar/regtype)rc   )r   r	   r	   r
   Útest_issue14160Õ   s    zUstarReadTest.test_issue14160N)r   r   r   r:   rI   rK   rY   r^   rc   rd   re   rf   rg   rh   r	   r	   r	   r
   r0   Z   s   	
2r0   c               @   s   e Zd ZdS )ÚGzipUstarReadTestN)r   r   r   r	   r	   r	   r
   ri   Ø   s   ri   c               @   s   e Zd ZdS )ÚBz2UstarReadTestN)r   r   r   r	   r	   r	   r
   rj   Û   s   rj   c               @   s   e Zd ZdS )ÚLzmaUstarReadTestN)r   r   r   r	   r	   r	   r
   rk   Þ   s   rk   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚListTestc             C   s   t j| j| jd| _d S )N)r   )r   r   r   r   r,   )r   r	   r	   r
   r-   å   s    zListTest.setUpc          	      s,  t jt  ¡ ddd}t td|¡ ˆ jjdd W d Q R X | ¡  	¡ }ˆ  
d|¡ ˆ  
d|¡ ˆ  
d	|¡ ˆ  
d
|¡ ˆ  
d|¡ ˆ  
d|¡ ˆ  
d|¡ ˆ  
d|¡ ‡ fdd„}ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  |d¡ ˆ  d|¡ ˆ  d|¡ d S )NÚasciiÚ
)ÚnewlineÚstdoutF)Úverboses   ustar/conttypes   ustar/regtypes   ustar/lnktypes   ustar/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/lnktypes   ustar/dirtype/s   ustar/dirtype-with-size/c                s   |   ˆ jjd¡}| dd¡S )NÚsurrogateescaperm   Úbackslashreplace)Údecoder,   r+   r[   )rb   rU   )r   r	   r
   Úconv÷   s    z ListTest.test_list.<locals>.convs   ustar/umlauts-ÄÖÜäöüßs'   misc/regtype-hpux-signed-chksum-ÄÖÜäöüßs)   misc/regtype-old-v7-signed-chksum-ÄÖÜäöüßs   pax/bad-pax-äöüs   pax/hdrcharset-äöüs)   ustar/conttype ?\r?\nustar/regtype ?\r?\ns   link tos   ->)r   rD   ÚBytesIOr   Ú	swap_attrÚsysr,   rJ   ÚdetachÚgetvalueÚassertInÚassertRegexÚassertNotIn)r   ÚtioÚoutru   r	   )r   r
   Ú	test_listè   s.    

zListTest.test_listc          	   C   s”   t jt  ¡ ddd}t td|¡ | jjdd W d Q R X | ¡  	¡ }|  
|d¡ |  d|¡ |  d	|¡ |  d
|¡ |  d|¡ |  d|¡ d S )Nrm   rn   )ro   rp   T)rq   s°   \?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\ns   ustar/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)r   rD   rv   r   rw   rx   r,   rJ   ry   rz   r|   r{   )r   r~   r   r	   r	   r
   Útest_list_verbose  s    zListTest.test_list_verbosec          	   C   st   t jt  ¡ ddd}dd„ }t td|¡ | jjd|| jƒd W d Q R X | ¡  	¡ }|  
d	|¡ |  d
|¡ d S )Nrm   rn   )ro   c             s   s&   x |   ¡ D ]}d|jkr
|V  q
W d S )NZreg)Ú
getmembersr_   )r,   r8   r	   r	   r
   Úmembers'  s    
z+ListTest.test_list_members.<locals>.membersrp   F)rq   rƒ   s   ustar/regtypes   ustar/conttype)r   rD   rv   r   rw   rx   r,   rJ   ry   rz   r{   r}   )r   r~   rƒ   r   r	   r	   r
   Útest_list_members%  s     zListTest.test_list_membersN)r   r   r   r-   r€   r   r„   r	   r	   r	   r
   rl   â   s   %rl   c               @   s   e Zd ZdS )ÚGzipListTestN)r   r   r   r	   r	   r	   r
   r…   2  s   r…   c               @   s   e Zd ZdS )ÚBz2ListTestN)r   r   r   r	   r	   r	   r
   r†   6  s   r†   c               @   s   e Zd ZdS )ÚLzmaListTestN)r   r   r   r	   r	   r	   r
   r‡   :  s   r‡   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚCommonReadTestc          	   C   s‚   t  t| j dd¡¡ W d Q R X zPyt  t| j¡}| ¡  W n  t jk
r^   |  d¡ Y nX |  | 	¡ g ¡ W d | 
¡  X d S )Nr;   Úwz&tarfile.open() failed on empty archive)r   r   Útmpnamer   ÚreplaceÚgetnamesÚ	ReadErrorr]   ÚassertListEqualr‚   r.   )r   r,   r	   r	   r
   Útest_empty_tarfile@  s    
z!CommonReadTest.test_empty_tarfilec          	   C   s*   |   td¡ t d| j¡ W d Q R X d S )NZxxx)ÚassertRaisesRegexÚFileNotFoundErrorr   r   r   )r   r	   r	   r
   Útest_non_existent_tarfileQ  s    z(CommonReadTest.test_non_existent_tarfilec          	   C   sB   t tdƒ W d Q R X |  tjtj t| j¡ |  tjtj t¡ d S )NÚwb)r   rŠ   ÚassertRaisesr   r   r   )r   r	   r	   r
   Útest_null_tarfileW  s    
z CommonReadTest.test_null_tarfilec          
   C   s²   t dƒ d¡ dd¡}x–dD ]Ž}|  td¡@}| |d ¡ t d¡}t|ƒ|_	| | 
¡ ¡ | |¡ W d Q R X tjtd	d
d}z|  | ¡ dgd| ¡ W d | ¡  X qW d S )Nr   i   i   Úbig)ó    ó   ar‰   i   Úfoor;   T)r   Zignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   ÚgetrandbitsÚto_bytesr   rŠ   Úwriter   ÚTarInfor5   r6   ÚtobufrŽ   rŒ   r.   )r   r   Úcharr9   r8   r,   r	   r	   r
   Útest_ignore_zeros`  s    


z CommonReadTest.test_ignore_zerosc             C   s  xdD ]}t  td¡(}t  d¡}d|_| |t d¡¡ W d Q R X ttdƒ}| |¡ W d Q R X t  t¡.}|  	t j
d¡ x|D ]}qŠW W d Q R X W d Q R X t  t¡\}| ¡ }|  	t j
d¡ | |t¡ W d Q R X |  	t j
d¡ | |¡ ¡  W d Q R X W d Q R X qW d S )N)i   iX  i   i°  zw:r™   i   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)r   r   rŠ   r   r6   Úaddfiler   rv   Útruncater   r   Únextr>   r?   r2   r3   )r   r6   r,   Útr9   r	   r	   r
   Útest_premature_end_of_archivev  s"    

z,CommonReadTest.test_premature_end_of_archiveN)r   r   r   r   r’   r•   r    r¥   r	   r	   r	   r
   rˆ   >  s
   	rˆ   c               @   sÌ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze eedƒd¡ejdd „ ƒƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-S ).ÚMiscReadTestBasec             C   s   d S )Nr	   )r   r	   r	   r
   Úrequires_name_attribute  s    z(MiscReadTestBase.requires_name_attributec          
   C   st   |   ¡  t| jdƒV}|  |jt¡ tj|| jd,}|  |jt¡ |  |jt	j
 |j¡¡ W d Q R X W d Q R X d S )NrL   )Úfileobjr   )r§   r   r   ÚassertIsInstancer_   Ústrr   r   r4   r@   rA   Úabspath)r   r9   r,   r	   r	   r
   Útest_no_name_argument’  s    z&MiscReadTestBase.test_no_name_argumentc          	   C   sZ   t | jdƒ}| ¡ }W d Q R X t |¡}|  tt|d¡ tj || j	d}|  
|j¡ d S )NrL   r_   )r¨   r   )r   r   r3   r   rv   r”   r\   Úgetattrr   r   ÚassertIsNoner_   )r   r9   r   r,   r	   r	   r
   Útest_no_name_attributeš  s    
z'MiscReadTestBase.test_no_name_attributec          	   C   s\   t | jdƒ}| ¡ }W d Q R X t |¡}d|_tj || jd}|  |j¡ W d Q R X d S )NrL   r   )r¨   r   )	r   r   r3   r   rv   r_   r   r   r®   )r   r9   r   r,   r	   r	   r
   Útest_empty_name_attribute¢  s    
z*MiscReadTestBase.test_empty_name_attributec          
   C   s`   t  | jt j¡}t|dƒ<}|  |jt¡ tj|| jd}|  	|j¡ W d Q R X W d Q R X d S )NrL   )r¨   r   )
r@   r   r   ÚO_RDONLYr©   r_   Úintr   r   r®   )r   Úfdr9   r,   r	   r	   r
   Útest_int_name_attributeª  s
    z(MiscReadTestBase.test_int_name_attributec          
   C   s~   |   ¡  t | j¡}t|dƒV}|  |jt¡ tj|| j	d,}|  |jt¡ |  
|jtj |j¡¡ W d Q R X W d Q R X d S )NrL   )r¨   r   )r§   r@   Úfsencoder   r   r©   r_   Úbytesr   r   r4   rA   r«   )r   r   r9   r,   r	   r	   r
   Útest_bytes_name_attribute³  s    z*MiscReadTestBase.test_bytes_name_attributec          	   C   s.  t  | j¡}tj|| jd0}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d Q R X |  |¡0}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d Q R X tjj|| jd0}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d Q R X | jdkr*tj|dd0}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d Q R X d S )N)r   r   r;   )ÚpathlibÚPathr   r   r   r   r©   r_   rª   r4   r@   rA   r«   Úfspathr   r   r   )r   r   r,   r	   r	   r
   Útest_pathlike_name¼  s    &&&z#MiscReadTestBase.test_pathlike_namec          	   C   s†   t tdƒ W d Q R X |  td¡ |  td¡}W d Q R X |  td¡ |  td¡}W d Q R X |  td¡ |  td¡}W d Q R X d S )Nr“   zmode must be ÚqÚrwr   )r   rŠ   r   Ú
ValueErrorr   )r   r,   r	   r	   r
   Útest_illegal_mode_argÌ  s    
z&MiscReadTestBase.test_illegal_mode_argc          	   C   sÒ   t j| j| jd}z>| ¡  | ¡ }|j}|j}| |¡}| ¡ }W d Q R X W d | 	¡  X |  | j¡`}| 
|¡ |j| jd|d}| ¡ }|  |j|¡ | ¡  |  | |¡ ¡ |d¡ | 	¡  W d Q R X d S )N)r   zr:)r   r¨   zseek back did not work)r   r   r   r   r£   r_   Úoffsetr2   r3   r.   rQ   r4   r‚   )r   r,   r¤   r_   rÀ   Úfr   r9   r	   r	   r
   Útest_fileobj_with_offsetÖ  s$    

z)MiscReadTestBase.test_fileobj_with_offsetc          	   C   sH   |   tjtjt| j¡ ttdƒ}| j tjtj|| jd W d Q R X d S )NrL   )r¨   r   )r”   r   r   r   r   r   )r   r9   r	   r	   r
   Útest_fail_compó  s    zMiscReadTestBase.test_fail_compc             C   s"   | j  d¡}|  |jtjd¡ d S )Nzmisc/dirtype-old-v7zv7 dirtype failed)r,   r1   r4   Útyper   ÚDIRTYPE)r   r8   r	   r	   r
   Útest_v7_dirtypeú  s    z MiscReadTestBase.test_v7_dirtypec             C   s4   y| j  d¡ W n tk
r.   |  d¡ Y nX d S )Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r,   r1   ÚKeyErrorr]   )r   r	   r	   r
   Útest_xstar_type  s    z MiscReadTestBase.test_xstar_typec             C   sR   xL| j D ]B}|  t|jƒdd|j ¡ |j d¡s4q|  |jdd|j ¡ qW d S )Ni½>zwrong mtime for %szustar/r   zwrong uname for %s)r,   r4   r²   Úmtimer_   Ú
startswithÚuname)r   r8   r	   r	   r
   Útest_check_members  s    
z#MiscReadTestBase.test_check_membersc             C   s   |   | j ¡ d jdd¡ d S )Néÿÿÿÿzmisc/eofzcould not find all members)r4   r,   r‚   r_   )r   r	   r	   r
   Útest_find_members  s    z"MiscReadTestBase.test_find_membersÚlinkzMissing hardlink implementationc          
   C   sü   t jtdddâ}| dt¡ |  tjtj	 
td¡¡ | dt¡ |  tjtj	 
td¡¡ ttj	 
td¡dƒ}| ¡ }W d Q R X |  t|ƒt¡ | dt¡ |  tjtj	 
td¡¡ ttj	 
td¡dƒ}| ¡ }W d Q R X |  t|ƒt¡ W d Q R X d S )NrM   z	iso8859-1)Z
errorlevelr+   zustar/regtypezustar/lnktyperL   zustar/symtype)r   r   r   r>   r?   Ú
addCleanupr   Úunlinkr@   rA   rB   r3   r4   r   r7   )r   r,   rÁ   r   r	   r	   r
   Útest_extract_hardlink  s    z&MiscReadTestBase.test_extract_hardlinkc       	   	   C   sà   t jtdd}tj td¡}t |¡ z dd„ |D ƒ}| ||¡ x€|D ]x}tj ||j	¡}t
jdkr„|  |jd@ t |¡jd@ ¡ dd	„ }tj |¡}d
 ||jƒ||ƒ|¡}|  |j||¡ qHW W d | ¡  t |¡ X d S )Nz	iso8859-1)r+   Ú
extractallc             S   s   g | ]}|  ¡ r|‘qS r	   )Úisdir)Ú.0r¤   r	   r	   r
   ú
<listcomp>4  s    z4MiscReadTestBase.test_extractall.<locals>.<listcomp>Úwin32iÿ  c             S   s(   t | tƒrd | |  ¡ ¡S d | ¡S d S )Nz{} ({})z
{!r} (int))Ú
isinstanceÚfloatÚformatÚhex)rÉ   r	   r	   r
   Úformat_mtime<  s    
z6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})r   r   r   r@   rA   rB   r?   ÚmkdirrÓ   r_   rx   Úplatformr4   r   ÚstatÚst_modeÚgetmtimerÚ   rÉ   r.   r   Úrmtree)	r   r,   ÚDIRÚdirectoriesr8   rA   rÜ   Z
file_mtimeÚerrmsgr	   r	   r
   Útest_extractall-  s(    


z MiscReadTestBase.test_extractallc          	   C   sª   d}t j td¡}t  |¡ z|tjtddd}| |¡}|j	||d t j ||¡}|  
t j |¡|j¡ tjdkrŒ|  
t  |¡jd@ d¡ W d Q R X W d t |¡ X d S )	Nzustar/dirtypeZ
extractdirz	iso8859-1)r+   )rA   r×   iÿ  ií  )r@   rA   rB   r?   rÝ   r   r   r   r1   r>   r4   rá   rÉ   rx   rÞ   rß   rà   r   râ   )r   Údirtyperã   r,   r8   Ú	extractedr	   r	   r
   Útest_extract_directoryK  s    


&z'MiscReadTestBase.test_extract_directoryc          
   C   sŠ   t  t¡d }t |¡h tjtddN}dd„ |D ƒ}| ||¡ x,|D ]$}||j	 }|  
tj |¡|j¡ qJW W d Q R X W d Q R X d S )NrÓ   z	iso8859-1)r+   c             S   s   g | ]}|  ¡ r|‘qS r	   )rÔ   )rÕ   r¤   r	   r	   r
   rÖ   ^  s    zBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r¸   r¹   r?   r   Útemp_dirr   r   r   rÓ   r_   r4   r@   rA   rá   rÉ   )r   rã   r,   rä   r8   rA   r	   r	   r
   Útest_extractall_pathlike_nameZ  s    

z.MiscReadTestBase.test_extractall_pathlike_namec          
   C   s|   d}t  t¡d }t |¡V tjtdd<}| |¡}|j	||d || }|  
tj |¡|j¡ W d Q R X W d Q R X d S )Nzustar/dirtyperÓ   z	iso8859-1)r+   )rA   )r¸   r¹   r?   r   rê   r   r   r   r1   r>   r4   r@   rA   rá   rÉ   )r   rç   rã   r,   r8   rè   r	   r	   r
   Útest_extract_pathlike_named  s    
z+MiscReadTestBase.test_extract_pathlike_namec          	   C   sŽ   t j td¡}t|dƒ}| d¡ W d Q R X zNt tj	¡}y| 
|¡ W n$ tjk
rn   |  |jj¡ Y nX |  d¡ W d t |¡ X d S )NÚemptyr“   rP   zReadError not raised)r@   rA   rB   r?   r   rœ   ÚobjectÚ__new__r   r   Ú__init__r   Ú
assertTruer¨   Úclosedr]   r   rÑ   )r   rí   r9   r,   r	   r	   r
   Útest_init_close_fobjn  s    z%MiscReadTestBase.test_init_close_fobjc          	   C   sX   t  | j¡B}x:t||ƒD ],\}}|  |j|j¡ |  | ¡ | ¡ ¡ qW W d Q R X d S )N)r   r   r   Úzipr4   rÀ   Zget_info)r   r,   Úm1Úm2r	   r	   r
   Útest_parallel_iteration  s    z(MiscReadTestBase.test_parallel_iterationN)r   r   r   r§   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÷   r	   r	   r	   r
   r¦   Ž  s.   		
		

r¦   c               @   s   e Zd ZdZdS )ÚMiscReadTestN)r   r   r   rÃ   r	   r	   r	   r
   rü   ‰  s   rü   c               @   s   e Zd ZdS )ÚGzipMiscReadTestN)r   r   r   r	   r	   r	   r
   rý   Œ  s   rý   c               @   s   e Zd Zdd„ ZdS )ÚBz2MiscReadTestc             C   s   |   d¡ d S )NzBZ2File have no name attribute)ÚskipTest)r   r	   r	   r
   r§     s    z'Bz2MiscReadTest.requires_name_attributeN)r   r   r   r§   r	   r	   r	   r
   rþ     s   rþ   c               @   s   e Zd Zdd„ ZdS )ÚLzmaMiscReadTestc             C   s   |   d¡ d S )NzLZMAFile have no name attribute)rÿ   )r   r	   r	   r
   r§   ”  s    z(LzmaMiscReadTest.requires_name_attributeN)r   r   r   r§   r	   r	   r	   r
   r   “  s   r   c               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚStreamReadTestzr|c          
   C   sr   xl| j D ]b}| ¡ sq| j  |¡B}x:y| d¡}W n  tjk
rT   |  d¡ Y nX |s&P q&W W d Q R X qW d S )Ni   z6simple read-through using TarFile.extractfile() failed)r,   Zisregr2   r3   r   ÚStreamErrorr]   )r   r8   r9   Úbufr	   r	   r
   Útest_read_throughœ  s    z StreamReadTest.test_read_throughc          	   C   sT   | j  ¡ }| j  |¡}| ¡ }W d Q R X |  t|ƒ|jd¡ |  t|ƒtd¡ d S )Nzregular file extraction failed)	r,   r£   r2   r3   r4   r5   r6   r   r7   )r   r8   r9   r   r	   r	   r
   r:   ¬  s    
z(StreamReadTest.test_fileobj_regular_filec          	   C   s:   | j  ¡ }| j  |d ¡}|  tj|j¡ W d Q R X d S )Nr   )r,   r‚   r2   r”   r   r  r3   )r   ZtarinfosrÁ   r	   r	   r
   Útest_provoke_stream_errorµ  s    
z(StreamReadTest.test_provoke_stream_errorc          	   C   sÈ   t jtdd}zª| j}xž| ¡ }| ¡ }|d kr2P |  |d¡ | ¡ sN| ¡ rr|  t j	¡ | 
|¡ W d Q R X q| 
|¡}| 
|¡}|d krq|  |d¡ |  | ¡ | ¡ d¡ qW W d | ¡  X d S )Nz	iso8859-1)r+   zstream.next() failed.zstream.extractfile() failedzstream extraction failed)r   r   r   r,   r£   ÚassertIsNotNoneZislnkZissymr”   r  r2   r4   r3   r.   )r   Ztar1Ztar2Út1Út2Úv1Úv2r	   r	   r
   Útest_compare_membersº  s*    

z#StreamReadTest.test_compare_membersN)r   r   r   r   r  r:   r  r  r	   r	   r	   r
   r  ˜  s
   	r  c               @   s   e Zd ZdS )ÚGzipStreamReadTestN)r   r   r   r	   r	   r	   r
   r  Õ  s   r  c               @   s   e Zd ZdS )ÚBz2StreamReadTestN)r   r   r   r	   r	   r	   r
   r  Ø  s   r  c               @   s   e Zd ZdS )ÚLzmaStreamReadTestN)r   r   r   r	   r	   r	   r
   r  Û  s   r  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚDetectReadTestc          
   C   sJ   yt  ||¡}W n, t jk
r< } z|  ¡  W d d }~X Y n
X | ¡  d S )N)r   r   r   r]   r.   )r   r_   r   r,   Úer	   r	   r
   Ú_testfunc_fileà  s
    zDetectReadTest._testfunc_filec          
   C   sd   y*t |dƒ}tj |||d}W d Q R X W n, tjk
rV } z|  ¡  W d d }~X Y n
X | ¡  d S )NrL   )r¨   )r   r   r   r]   r.   )r   r_   r   rÁ   r,   r  r	   r	   r
   Ú_testfunc_fileobjè  s    z DetectReadTest._testfunc_fileobjc          	   C   sú   | j r®|  tj¡ tjtd| j  d W d Q R X |  tj¡ tjtd| j  d W d Q R X |  tj¡ tj| jdd W d Q R X |  tj¡ tj| jdd W d Q R X || jdƒ || jd| j  ƒ || jdƒ || jd| j  ƒ || jdƒ d S )Nzr:)r   zr|r;   zr:*zr|*)r   r”   r   r   r   r   )r   Ztestfuncr	   r	   r
   Ú_test_modesñ  s    zDetectReadTest._test_modesc             C   s   |   | j¡ d S )N)r  r  )r   r	   r	   r
   Útest_detect_file  s    zDetectReadTest.test_detect_filec             C   s   |   | j¡ d S )N)r  r  )r   r	   r	   r
   Útest_detect_fileobj  s    z"DetectReadTest.test_detect_fileobjN)r   r   r   r  r  r  r  r  r	   r	   r	   r
   r  ß  s
   	r  c               @   s   e Zd ZdS )ÚGzipDetectReadTestN)r   r   r   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd„ ZdS )ÚBz2DetectReadTestc          	   C   sT   t tdƒ}| ¡ }W d Q R X tjtddd}| |¡ W d Q R X |  td¡ d S )NrL   r“   rM   )Úcompresslevelzr|*)r   r   r3   r#   r%   rŠ   rœ   r  )r   r9   r   r	   r	   r
   Útest_detect_stream_bz2  s
    z(Bz2DetectReadTest.test_detect_stream_bz2N)r   r   r   r  r	   r	   r	   r
   r  
  s   r  c               @   s   e Zd ZdS )ÚLzmaDetectReadTestN)r   r   r   r	   r	   r	   r
   r    s   r  c               @   s¦   e Zd Zd(dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdS ))ÚMemberReadTestNc          	   K   s¦   |d k	r<| j  |¡"}|  t| ¡ ƒ|d|j ¡ W d Q R X d|d< d|d< d|d< d|jkrnd	|d
< d	|d< x2| ¡ D ]&\}}|  t||ƒ|d||jf ¡ qxW d S )Nzwrong md5sum for %si½>rÉ   iè  ÚuidrZ   Úgidzold-v7r   rË   Úgnamezwrong value in %s field of %s)r,   r2   r4   r   r3   r_   Úitemsr­   )r   r8   ÚchksumÚkwargsrÁ   ÚkÚvr	   r	   r
   Ú_test_member  s    
zMemberReadTest._test_memberc             C   s    | j  d¡}| j|dtd d S )Nzustar/regtypeic  )r6   r   )r,   r1   r$  r7   )r   r8   r	   r	   r
   Útest_find_regtype0  s    z MemberReadTest.test_find_regtypec             C   s    | j  d¡}| j|dtd d S )Nzustar/conttypeic  )r6   r   )r,   r1   r$  r7   )r   r8   r	   r	   r
   Útest_find_conttype4  s    z!MemberReadTest.test_find_conttypec             C   s   | j  d¡}| j|dd d S )Nzustar/dirtyper   )r6   )r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_dirtype8  s    z MemberReadTest.test_find_dirtypec             C   s   | j  d¡}| j|dd d S )Nzustar/dirtype-with-sizeéÿ   )r6   )r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_dirtype_with_size<  s    z*MemberReadTest.test_find_dirtype_with_sizec             C   s    | j  d¡}| j|ddd d S )Nzustar/lnktyper   zustar/regtype)r6   Úlinkname)r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_lnktype@  s    z MemberReadTest.test_find_lnktypec             C   s    | j  d¡}| j|ddd d S )Nzustar/symtyper   r`   )r6   r*  )r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_symtypeD  s    z MemberReadTest.test_find_symtypec             C   s"   | j  d¡}| j|dddd d S )Nzustar/blktyper   é   )r6   ÚdevmajorÚdevminor)r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_blktypeH  s    z MemberReadTest.test_find_blktypec             C   s"   | j  d¡}| j|dddd d S )Nzustar/chrtyper   rM   r-  )r6   r.  r/  )r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_chrtypeL  s    z MemberReadTest.test_find_chrtypec             C   s   | j  d¡}| j|dd d S )Nzustar/fifotyper   )r6   )r,   r1   r$  )r   r8   r	   r	   r
   Útest_find_fifotypeP  s    z!MemberReadTest.test_find_fifotypec             C   s    | j  d¡}| j|dtd d S )Nzustar/sparsei P )r6   r   )r,   r1   r$  Ú
md5_sparse)r   r8   r	   r	   r
   Útest_find_sparseT  s    zMemberReadTest.test_find_sparsec             C   s    | j  d¡}| j|dtd d S )Nz
gnu/sparsei P )r6   r   )r,   r1   r$  r3  )r   r8   r	   r	   r
   Útest_find_gnusparseX  s    z"MemberReadTest.test_find_gnusparsec             C   s    | j  d¡}| j|dtd d S )Nzgnu/sparse-0.0i P )r6   r   )r,   r1   r$  r3  )r   r8   r	   r	   r
   Útest_find_gnusparse_00\  s    z%MemberReadTest.test_find_gnusparse_00c             C   s    | j  d¡}| j|dtd d S )Nzgnu/sparse-0.1i P )r6   r   )r,   r1   r$  r3  )r   r8   r	   r	   r
   Útest_find_gnusparse_01`  s    z%MemberReadTest.test_find_gnusparse_01c             C   s    | j  d¡}| j|dtd d S )Nzgnu/sparse-1.0i P )r6   r   )r,   r1   r$  r3  )r   r8   r	   r	   r
   Útest_find_gnusparse_10d  s    z%MemberReadTest.test_find_gnusparse_10c             C   s    | j  d¡}| j|dtd d S )Nu   ustar/umlauts-Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸic  )r6   r   )r,   r1   r$  r7   )r   r8   r	   r	   r
   Útest_find_umlautsh  s    z MemberReadTest.test_find_umlautsc             C   s   d}|   || j ¡ ¡ d S )Na   ustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longname)r{   r,   rŒ   )r   r_   r	   r	   r
   Útest_find_ustar_longnamem  s    z'MemberReadTest.test_find_ustar_longnamec             C   s    | j  d¡}| j|dtd d S )Nzmisc/regtype-old-v7ic  )r6   r   )r,   r1   r$  r7   )r   r8   r	   r	   r
   Útest_find_regtype_oldv7q  s    z&MemberReadTest.test_find_regtype_oldv7c             C   s@   | j  ¡  tj| j| jdd| _ | j  d¡}| j|dtd d S )Nz	iso8859-1)r   r+   u   pax/umlauts-Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸic  )r6   r   )	r,   r.   r   r   r   r   r1   r$  r7   )r   r8   r	   r	   r
   Útest_find_pax_umlautsu  s
    

z$MemberReadTest.test_find_pax_umlauts)N)r   r   r   r$  r%  r&  r'  r)  r+  r,  r0  r1  r2  r4  r5  r6  r7  r8  r9  r:  r;  r<  r	   r	   r	   r
   r    s&   
r  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLongnameTestc             C   sX   | j d d d }y| j |¡}W n tk
r@   |  d¡ Y nX |  |jtjd¡ d S )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/Úlongnamezlongname not foundzread longname as dirtype)	Úsubdirr,   r1   rÇ   r]   ÚassertNotEqualrÄ   r   rÅ   )r   r?  r8   r	   r	   r
   Útest_read_longname€  s    zLongnameTest.test_read_longnamec             C   sh   | j d d d }| j d d d }y| j |¡}W n tk
rR   |  d¡ Y nX |  |j|d¡ d S )Nr>  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/r?  Úlonglinkzlonglink not foundzlinkname wrong)r@  r,   r1   rÇ   r]   r4   r*  )r   r?  rC  r8   r	   r	   r
   Útest_read_longlinkŠ  s    zLongnameTest.test_read_longlinkc          	   C   sp   | j d d d }| j |¡}|j}| jj |¡ t | jj d¡¡}|  	t
j¡ t
jd|d W d Q R X d S )Nr>  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/r?  i   zfoo.tar)r_   r¨   )r@  r,   r1   rÀ   r¨   rQ   r   rv   r3   r”   r   r   r   )r   r?  r8   rÀ   r9   r	   r	   r
   Útest_truncated_longname“  s    z$LongnameTest.test_truncated_longnamec          	   C   sj   | j d d d }| j |¡j}ttdƒ6}| |¡ tj 	| 
d¡dd¡}|  |j| j¡ W d Q R X d S )Nr>  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/r?  rL   i   z	iso8859-1Ústrict)r@  r,   r1   rÀ   r   r   rQ   r   r   Zfrombufr3   r4   rÄ   Úlongnametype)r   r?  rÀ   r9   r8   r	   r	   r
   Útest_header_offsetœ  s    
zLongnameTest.test_header_offsetN)r   r   r   rB  rD  rE  rH  r	   r	   r	   r
   r=  ~  s   
		r=  c               @   sJ   e Zd ZdZejZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ Zedd„ ƒZdS )ÚGNUReadTestZgnuc          	   C   sz   | j  |t¡ tj t|¡}t|dƒ}| ¡ }W d Q R X |  t	|ƒt
d| ¡ |  ¡ rvt |¡}|  |jd |j¡ d S )NrL   zwrong md5sum for %si   )r,   r>   r?   r@   rA   rB   r   r3   r4   r   r3  Ú_fs_supports_holesrß   Ú
assertLessÚ	st_blocksÚst_size)r   r_   Úfilenamer9   r   rU   r	   r	   r
   Ú_test_sparse_file´  s    

zGNUReadTest._test_sparse_filec             C   s   |   d¡ d S )Nz
gnu/sparse)rO  )r   r	   r	   r
   Útest_sparse_file_oldÀ  s    z GNUReadTest.test_sparse_file_oldc             C   s   |   d¡ d S )Nzgnu/sparse-0.0)rO  )r   r	   r	   r
   Útest_sparse_file_00Ã  s    zGNUReadTest.test_sparse_file_00c             C   s   |   d¡ d S )Nzgnu/sparse-0.1)rO  )r   r	   r	   r
   Útest_sparse_file_01Æ  s    zGNUReadTest.test_sparse_file_01c             C   s   |   d¡ d S )Nzgnu/sparse-1.0)rO  )r   r	   r	   r
   Útest_sparse_file_10É  s    zGNUReadTest.test_sparse_file_10c           	   C   sx   t j d¡rptj td¡} t| dƒ"}| d¡ | 	d¡ | 
¡  W d Q R X t | ¡}t | ¡ |jd |jk S dS d S )NÚlinuxzsparse-testr“   i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi   F)rx   rÞ   rÊ   r@   rA   rB   r?   r   rQ   rœ   r¢   rß   r   rÑ   rL  rM  )r_   r9   rU   r	   r	   r
   rJ  Ì  s    



zGNUReadTest._fs_supports_holesN)r   r   r   r@  r   ÚGNUTYPE_LONGNAMErG  rO  rP  rQ  rR  rS  ÚstaticmethodrJ  r	   r	   r	   r
   rI  ¨  s   	rI  c               @   s&   e Zd ZdZejZdd„ Zdd„ ZdS )ÚPaxReadTestZpaxc             C   sÐ   t jtdd}z²| d¡}|  |jd¡ |  |jd¡ |  |j d¡d¡ | d¡}|  |jd	¡ |  |jd¡ |  |j d¡d¡ | d
¡}|  |jd¡ |  |jd¡ |  |j d¡d¡ W d | 	¡  X d S )Nz	iso8859-1)r+   zpax/regtype1r™   ÚbarzVENDOR.umlautsu   Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸzpax/regtype2r   zpax/regtype3r   )
r   r   r   r1   r4   rË   r  Úpax_headersÚgetr.   )r   r,   r8   r	   r	   r
   Útest_pax_global_headersè  s$    



z#PaxReadTest.test_pax_global_headersc             C   s¢   t jtdd}z„| d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  t	|jƒt
¡ |  t
|jd ƒd¡ |  t
|jd ƒd¡ W d | ¡  X d S )	Nz	iso8859-1)r+   zpax/regtype4ic  é{   g  €Ç^ÏAZatimeÚctime)r   r   r   r1   r4   r6   r  r  rÉ   rÄ   rÙ   rY  r.   )r   r,   r8   r	   r	   r
   Útest_pax_number_fieldsÿ  s    
z"PaxReadTest.test_pax_number_fieldsN)	r   r   r   r@  r   ÚXHDTYPErG  r[  r^  r	   r	   r	   r
   rW  ã  s   rW  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚWriteTestBasec             C   sp   t  ¡ }tj|| jd}| t d¡¡ | ¡  |  |j	d¡ | 
¡ }~t ¡  |  |j	¡ |  || 
¡ ¡ d S )N)r¨   r   r™   z#external fileobjs must never closed)r   rv   r   r   r   r¡   r   r.   ÚassertFalserò   rz   r   Ú
gc_collectr4   )r   r9   r,   r   r	   r	   r
   Útest_fileobj_no_close  s    z#WriteTestBase.test_fileobj_no_closec          	   C   s€   t  t| j¡6}t  d¡}t jt j |_| |t	 
d|j ¡¡ W d Q R X |  td¡ }|  t| ¡ ƒt jd ¡ W d Q R X d S )Nr™   r˜   rL   rO   )r   r   rŠ   r   r   Ú
RECORDSIZEÚ	BLOCKSIZEr6   r¡   r   rv   r4   r5   r3   )r   r,   r¤   r9   r	   r	   r
   Útest_eof_marker   s    
"zWriteTestBase.test_eof_markerN)r   r   r   rc  rf  r	   r	   r	   r
   r`    s   r`  c               @   s°   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
 eedƒd¡dd„ ƒZejdd„ ƒZdd„ Zdd„ Zd&dd„Zejdd„ ƒZdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )'Ú	WriteTestzw:c             C   sj   d}t  t| j¡}zt  |¡}| |¡ W d | ¡  X t  t¡}z|  | ¡ d |d¡ W d | ¡  X d S )NÚd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r   r   rŠ   r   r   r¡   r.   r4   rŒ   )r   r_   r,   r¤   r	   r	   r
   Útest_100_char_name2  s    



zWriteTest.test_100_char_namec          	   C   sp   t  t| j¡}z<tj td¡}t|dƒ}| d¡ W d Q R X | 	|¡ W d | 
¡  X |  tj t¡dd¡ d S )NÚfiler“   s   aaar   ztarfile is empty)r   r   rŠ   r   r@   rA   rB   r?   rœ   Úaddr.   ÚassertGreaterÚgetsize)r   r,   rA   r9   r	   r	   r
   Útest_tar_sizeF  s    
zWriteTest.test_tar_sizec          	   C   s–   t  t| j¡}zxtj td¡}t|dƒ W d Q R X | |¡}|  	|j
d¡ t|dƒ}| d¡ W d Q R X | |¡}|  	|j
d¡ W d | ¡  X d S )Nrj  r“   r   s   aaar-  )r   r   rŠ   r   r@   rA   rB   r?   Ú
gettarinfor4   r6   rœ   r.   )r   r,   rA   r8   r9   r	   r	   r
   Útest_file_sizeT  s    


zWriteTest.test_file_sizec          	   C   sd   t j td¡}t  |¡ z:t t| j¡}z| 	|¡}|  
|jd¡ W d | ¡  X W d t |¡ X d S )NÚ	directoryr   )r@   rA   rB   r?   rÝ   r   r   rŠ   r   ro  r4   r6   r.   r   Úrmdir)r   rA   r,   r8   r	   r	   r
   Útest_directory_sized  s    

zWriteTest.test_directory_sizec             C   s  t j td¡}t  |¡ tt j |d¡dƒ ¡  tt j |d¡dƒ ¡  zŽt t| j	¡}zpt
j d¡}ddg|_| |¡ W d Q R X g }x(| ¡ D ]}| t j |j¡d ¡ q”W |  |dddg¡ W d | ¡  X W d t t j |d¡¡ t t j |d¡¡ t |¡ X d S )Nrq  Ú1ra   Ú2z
os.listdirrÍ   )r@   rA   rB   r?   rÝ   r   r.   r   rŠ   r   rø   ÚmockÚpatchÚreturn_valuerk  r‚   ÚappendÚsplitr_   r4   r   rÑ   rr  )r   rA   r,   Zmock_listdirÚpathsÚmr	   r	   r
   Útest_ordered_recursions  s$    

z WriteTest.test_ordered_recursionc          
   C   s’   t  t| j¡z}t t¡d }t|dƒ}| d¡ W d Q R X | |¡}| t	 
|¡¡}|  |jt¡ |  |j|j¡ |  |jd¡ W d Q R X d S )Nrj  r“   s   aaar-  )r   r   rŠ   r   r¸   r¹   r?   rœ   ro  r@   rº   r©   r_   rª   r4   r6   )r   r,   rA   r9   r8   Ztarinfo2r	   r	   r
   Útest_gettarinfo_pathlike_name‰  s    
z'WriteTest.test_gettarinfo_pathlike_namerÏ   zMissing hardlink implementationc          
   C   sÞ   t j td¡}t j td¡}t|dƒ}| d¡ W d Q R X yt  ||¡ W n0 tk
r| } z|  d| ¡ W d d }~X Y nX zDt	 t
| j¡}z&| |¡ | |¡}|  |jd¡ W d | ¡  X W d t |¡ t |¡ X d S )NrÏ   Úlink_targetr“   s   aaazos.link(): %sr   )r@   rA   rB   r?   r   rœ   rÏ   ÚPermissionErrorrÿ   r   rŠ   r   ro  r4   r6   r.   r   rÑ   )r   rÏ   Útargetr9   r  r,   r8   r	   r	   r
   Útest_link_size”  s"     


zWriteTest.test_link_sizec          	   C   sf   t j td¡}t  d|¡ z:t t| j¡}z| 	|¡}|  
|jd¡ W d | ¡  X W d t |¡ X d S )NÚsymlinkr  r   )r@   rA   rB   r?   rƒ  r   r   rŠ   r   ro  r4   r6   r.   r   rÑ   )r   rA   r,   r8   r	   r	   r
   Útest_symlink_size¬  s    
zWriteTest.test_symlink_sizec          	   C   sŒ   t j t¡}t t| j¡}zb|  |j|d¡ | 	|¡ |  | 
¡ g d¡ t t¡ | 	|¡ W d Q R X |  | 
¡ g d¡ W d | ¡  X d S )Nzarchive name must be absolutezadded the archive to itself)r@   rA   r«   rŠ   r   r   r   r4   r_   rk  rŒ   r   Ú
change_cwdr?   r.   )r   Údstnamer,   r	   r	   r
   Útest_add_selfº  s    


zWriteTest.test_add_selfc          	   C   s  t j td¡}t  |¡ zæx$dD ]}t j ||¡}t |¡ q W dd„ }tjt	| j
dd}z|j|d|d W d | ¡  X |  t¡ | |dd	d |¡ W d Q R X t t	d
¡}zBx(|D ] }|  |jd¡ |  |jd¡ q¶W |  t| ¡ ƒd¡ W d | ¡  X W d t |¡ X d S )NÚfilter)r™   rX  Zbazc             S   s&   t j | j¡dkrd S d| _d| _| S )NrX  r\  r™   )r@   rA   Úbasenamer_   r  rË   )r8   r	   r	   r
   rˆ  Ô  s
    z%WriteTest.test_filter.<locals>.filterz	iso8859-1)r+   Z	empty_dir)Úarcnamerˆ  Tr;   r\  r™   r-  )r@   rA   rB   r?   rÝ   r   Úcreate_empty_filer   r   rŠ   r   rk  r.   r”   Ú	TypeErrorr4   r  rË   r5   r‚   râ   )r   Útempdirr_   rˆ  r,   r8   r	   r	   r
   Útest_filterÌ  s*    



zWriteTest.test_filterNFc             C   s²   t j td¡}|st |¡ n
t  |¡ t t	| j
¡}z|j||d W d | ¡  X t t	d¡}z| ¡ }W d | ¡  X |sˆt |¡ n
t |¡ |  |j|pª| t jd¡¡ d S )Nr™   )rŠ  r;   r>  )r@   rA   rB   r?   r   r‹  rÝ   r   r   rŠ   r   rk  r.   r£   rÑ   rr  r4   r_   r‹   Úsep)r   rA   Zcmp_pathÚdirr™   r,   r¤   r	   r	   r
   Ú_test_pathnameô  s     



zWriteTest._test_pathnamec          	   C   s  t j td¡}t j td¡}t  |¡ zÀt j |d¡}t j |d¡}t|dƒ}| d¡ W d Q R X t  ||¡ t |d¡}| 	|¡ | 	|¡ | 
¡  t |d¡}z4y|j|d W n tk
rÔ   |  d	¡ Y nX W d | 
¡  X W d t |¡ t |¡ X d S )
NZtestsymlinksztestsymlinks.tarÚsourcerƒ  r‰   z
something
r;   )rA   z&extractall failed with symlinked files)r@   rA   rB   r?   rÝ   r   rœ   rƒ  r   rk  r.   rÓ   ÚOSErrorr]   r   rÑ   râ   )r   r  ZtemparchiveZsource_fileZtarget_filerÁ   r,   r	   r	   r
   Útest_extractall_symlinks  s*    



z"WriteTest.test_extractall_symlinksc             C   s<  |   d¡ |   tj ddd¡¡ |   tj ddd¡¡ |   tj dd¡¡ |   tj ddd¡¡ |   tj dddd¡¡ |   tj dddd¡¡ |   tj dddd¡¡ |   tj dd¡¡ |   tj ddd¡¡ |   tj dddd¡¡ |   tj dddd¡¡ |   dtj tj d ¡ | j dtj tj ddd d S )Nr™   Ú.rX  z..T)r  )r‘  r@   rA   rB   r  )r   r	   r	   r
   Útest_pathnames.  s    
zWriteTest.test_pathnamesc             C   s4   t jdkr|  dd¡ n|  dd¡ |  dd¡ d S )Nr×   zC:\foor™   z/fooz///foo)rx   rÞ   r‘  )r   r	   r	   r
   Útest_abs_pathnames?  s    
zWriteTest.test_abs_pathnamesc          	   C   sŒ   t  t¡x t t| j¡}z| d¡ W d | ¡  X t td¡}z2x,|D ]$}|j	dkrH|  
|j	 d¡|j	¡ qHW W d | ¡  X W d Q R X d S )Nr•  r;   z./)r   r…  r?   r   r   rŠ   r   rk  r.   r_   rñ   rÊ   )r   r,   r¤   r	   r	   r
   Útest_cwdF  s    


zWriteTest.test_cwdc          
      sr   xlt ttfD ]^‰ G ‡ fdd„dtjƒ}|ƒ }|  ˆ ¡" tjt| j	|tj
ddid}W d Q R X |  |j¡ qW d S )Nc                   s   e Zd ZdZ‡ fdd„ZdS )z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTc                s   | j rd| _ ˆ ‚d S )NF)Úfirst)r   r   )Úexctyper	   r
   rœ   [  s    z>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)r   r   r   r™  rœ   r	   )rš  r	   r
   ÚBadFileY  s   r›  Znonrí   )r¨   rÚ   rY  )r“  ÚEOFErrorÚRuntimeErrorr   rv   r”   r   r   rŠ   r   Ú
PAX_FORMATra  rò   )r   r›  rÁ   r,   r	   )rš  r
   Útest_open_nonwritable_fileobjW  s    z'WriteTest.test_open_nonwritable_fileobj)NF)r   r   r   r   ri  rn  rp  rs  r}  r~  rø   rù   rú   r@   r‚  r   rû   r„  r‡  rŽ  r‘  r”  r–  r—  r˜  rŸ  r	   r	   r	   r
   rg  .  s$   (
rg  c               @   s   e Zd ZdS )ÚGzipWriteTestN)r   r   r   r	   r	   r	   r
   r   g  s   r   c               @   s   e Zd ZdS )ÚBz2WriteTestN)r   r   r   r	   r	   r	   r
   r¡  j  s   r¡  c               @   s   e Zd ZdS )ÚLzmaWriteTestN)r   r   r   r	   r	   r	   r
   r¢  m  s   r¢  c               @   s@   e Zd ZdZdZdd„ Ze ej	dko.e
edƒd¡dd	„ ƒZdS )
ÚStreamWriteTestzw|Nc          	   C   s”   t  t| j¡}| ¡  | jr\|  ¡ }ttdƒ}| ¡ }W d Q R X | |¡}|  |j	d¡ n|  t¡}| ¡ }W d Q R X |  
| d¡t jd¡ d S )NrL   zfound trailing datar—   zincorrect zero padding)r   r   rŠ   r   r.   Údecompressorr3   Ú
decompressra  Úunused_datar4   Úcountrd  )r   r,   Údecr9   r   r	   r	   r
   Útest_stream_paddingv  s    
z#StreamWriteTest.test_stream_paddingr×   ÚumaskzMissing umask implementationc          	   C   sj   t j t¡rt t¡ t  d¡}z8t t| j	¡}| 
¡  t  t¡jd@ }|  |dd¡ W d t  |¡ X d S )Né   iÿ  i¤  zwrong file permissions)r@   rA   ÚexistsrŠ   r   rÑ   rª  r   r   r   r.   rß   rà   r4   )r   Zoriginal_umaskr,   r   r	   r	   r
   Útest_file_mode†  s    

zStreamWriteTest.test_file_mode)r   r   r   r   r¤  r©  rø   rù   rx   rÞ   rú   r@   r­  r	   r	   r	   r
   r£  q  s
   r£  c               @   s   e Zd ZdS )ÚGzipStreamWriteTestN)r   r   r   r	   r	   r	   r
   r®  —  s   r®  c               @   s   e Zd ZerejndZdS )ÚBz2StreamWriteTestN)r   r   r   r#   ÚBZ2Decompressorr¤  r	   r	   r	   r
   r¯  š  s   r¯  c               @   s   e Zd ZerejndZdS )ÚLzmaStreamWriteTestN)r   r   r   r)   ZLZMADecompressorr¤  r	   r	   r	   r
   r±    s   r±  c               @   sp   e Zd Zdd„ Zddd„Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚGNUWriteTestc             C   s   t |ƒd d }|d S )Ni   rM   )r5   )r   rU   Zblocksr	   r	   r
   Ú_length¥  s    zGNUWriteTest._lengthNc             C   sX   d}t |ƒtjkr(|d7 }||  |¡7 }|d k	rTt |ƒtjkrT|d7 }||  |¡7 }|S )Ni   )r5   r   ÚLENGTH_NAMEr³  ÚLENGTH_LINK)r   r_   rÏ   r§  r	   r	   r
   Ú
_calc_size©  s    zGNUWriteTest._calc_sizec             C   sÀ   t  |¡}|r||_t j|_t  td¡}z6t j|_| 	|¡ |  
||¡}|j}|  ||d¡ W d | ¡  X t  t¡}z<| ¡ }|  |d¡ |  |j|jd¡ |  |j|jd¡ W d | ¡  X d S )Nr‰   z%GNU longname/longlink creation failedzunable to read longname member)r   r   r*  ÚLNKTYPErÄ   r   rŠ   Ú
GNU_FORMATrÚ   r¡   r¶  rÀ   r4   r.   r£   r  r_   )r   r_   rÏ   r8   r,   r	  r
  Úmemberr	   r	   r
   Ú_test·  s,    




zGNUWriteTest._testc             C   s   |   d¡ d S )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º  )r   r	   r	   r
   Útest_longname_1023Ô  s    zGNUWriteTest.test_longname_1023c             C   s   |   d¡ d S )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/longname)rº  )r   r	   r	   r
   Útest_longname_1024×  s    zGNUWriteTest.test_longname_1024c             C   s   |   d¡ d S )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/longname_)rº  )r   r	   r	   r
   Útest_longname_1025Ú  s    zGNUWriteTest.test_longname_1025c             C   s   |   dd¡ d S )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º  )r   r	   r	   r
   Útest_longlink_1023Ý  s    zGNUWriteTest.test_longlink_1023c             C   s   |   dd¡ d S )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/longlink)rº  )r   r	   r	   r
   Útest_longlink_1024à  s    zGNUWriteTest.test_longlink_1024c             C   s   |   dd¡ d S )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/longlink_)rº  )r   r	   r	   r
   Útest_longlink_1025ã  s    zGNUWriteTest.test_longlink_1025c             C   s   |   dd¡ d S )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º  )r   r	   r	   r
   Útest_longnamelink_1023æ  s    z#GNUWriteTest.test_longnamelink_1023c             C   s   |   dd¡ d S )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/longnamea   longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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º  )r   r	   r	   r
   Útest_longnamelink_1024ê  s    z#GNUWriteTest.test_longnamelink_1024c             C   s   |   dd¡ d S )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/longname_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/longlink_)rº  )r   r	   r	   r
   Útest_longnamelink_1025î  s    z#GNUWriteTest.test_longnamelink_1025)N)N)r   r   r   r³  r¶  rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  r	   r	   r	   r
   r²  ¡  s   

r²  c               @   sn   e Zd ZdZej ed¡Zdd„ Z	e
dd„ ƒZe
dd„ ƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
CreateTestzx:Ú
spameggs42c             C   s   t  t¡ d S )N)r   rÑ   rŠ   )r   r	   r	   r
   r-   ù  s    zCreateTest.setUpc          	   C   s&   t | jdƒ}| d¡ W d Q R X d S )Nr“   s   aaa)r   Ú	file_pathrœ   )Úclsr9   r	   r	   r
   Ú
setUpClassü  s    zCreateTest.setUpClassc             C   s   t  | j¡ d S )N)r   rÑ   rÆ  )rÇ  r	   r	   r
   ÚtearDownClass  s    zCreateTest.tearDownClassc          	   C   sh   t  t| j¡}| | j¡ W d Q R X |  t¡}| ¡ }W d Q R X |  t	|ƒd¡ |  
d|d ¡ d S )NrM   rÅ  r   )r   r   rŠ   r   rk  rÆ  r   rŒ   r4   r5   r{   )r   ÚtobjÚnamesr	   r	   r
   Útest_create  s    zCreateTest.test_createc          	   C   sŒ   t  t| j¡}| | j¡ W d Q R X |  t¡ t  t| j¡}W d Q R X |  t¡}| 	¡ }W d Q R X |  
t|ƒd¡ |  d|d ¡ d S )NrM   rÅ  r   )r   r   rŠ   r   rk  rÆ  r”   ÚFileExistsErrorr   rŒ   r4   r5   r{   )r   rÊ  rË  r	   r	   r
   Útest_create_existing  s    zCreateTest.test_create_existingc          	   C   sf   |   td¡}| | j¡ W d Q R X |   t¡}| ¡ }W d Q R X |  t|ƒd¡ |  d|d ¡ d S )NÚxrM   rÅ  r   )r   rŠ   rk  rÆ  rŒ   r4   r5   r{   )r   rÊ  rË  r	   r	   r
   Útest_create_taropen  s    zCreateTest.test_create_taropenc          
   C   s”   |   td¡}| | j¡ W d Q R X |  t¡ |   td¡ W d Q R X W d Q R X |   t¡}| ¡ }W d Q R X |  t|ƒd¡ |  	d|d ¡ d S )NrÏ  rM   rÅ  r   )
r   rŠ   rk  rÆ  r”   rÍ  rŒ   r4   r5   r{   )r   rÊ  rË  r	   r	   r
   Útest_create_existing_taropen#  s    z'CreateTest.test_create_existing_taropenc          	   C   sÀ   t  t t¡| j¡D}|  |jt¡ |  	|jt
j t¡¡ | t | j¡¡ | ¡ }W d Q R X |  	t|ƒd¡ |  d|d ¡ |  t¡}| ¡ }W d Q R X |  	t|ƒd¡ |  d|d ¡ d S )NrM   rÅ  r   )r   r   r¸   r¹   rŠ   r   r©   r_   rª   r4   r@   rA   r«   rk  rÆ  rŒ   r5   r{   r   )r   rÊ  rË  r	   r	   r
   Útest_create_pathlike_name0  s    z$CreateTest.test_create_pathlike_namec          	   C   s¾   |   t t¡d¡D}|  |jt¡ |  |jtj	 
t¡¡ | t | j¡¡ | ¡ }W d Q R X |  t|ƒd¡ |  d|d ¡ |   t¡}| ¡ }W d Q R X |  t|ƒd¡ |  d|d ¡ d S )NrÏ  rM   rÅ  r   )r   r¸   r¹   rŠ   r©   r_   rª   r4   r@   rA   r«   rk  rÆ  rŒ   r5   r{   )r   rÊ  rË  r	   r	   r
   Ú!test_create_taropen_pathlike_name>  s    z,CreateTest.test_create_taropen_pathlike_nameN)r   r   r   r   r@   rA   rB   r?   rÆ  r-   ÚclassmethodrÈ  rÉ  rÌ  rÎ  rÐ  rÑ  rÒ  rÓ  r	   r	   r	   r
   rÄ  ó  s   		rÄ  c               @   s   e Zd ZdS )ÚGzipCreateTestN)r   r   r   r	   r	   r	   r
   rÕ  M  s   rÕ  c               @   s   e Zd ZdS )ÚBz2CreateTestN)r   r   r   r	   r	   r	   r
   rÖ  Q  s   rÖ  c               @   s   e Zd ZdS )ÚLzmaCreateTestN)r   r   r   r	   r	   r	   r
   r×  U  s   r×  c               @   s   e Zd ZdZdZdZdS )ÚCreateWithXModeTestrÏ  N)r   r   r   r   rÐ  rÑ  r	   r	   r	   r
   rØ  Y  s   rØ  rÏ   zMissing hardlink implementationc               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚHardlinkTestc          
   C   s¨   t j td¡| _t j td¡| _t| jdƒ}| d¡ W d Q R X yt  | j| j¡ W n0 t	k
r† } z|  
d| ¡ W d d }~X Y nX t td¡| _| j | j¡ d S )Nr™   rX  r“   s   foozos.link(): %sr‰   )r@   rA   rB   r?   r™   rX  r   rœ   rÏ   r€  rÿ   r   rŠ   r,   rk  )r   r9   r  r	   r	   r
   r-   e  s     zHardlinkTest.setUpc             C   s&   | j  ¡  t | j¡ t | j¡ d S )N)r,   r.   r   rÑ   r™   rX  )r   r	   r	   r
   r/   t  s    
zHardlinkTest.tearDownc             C   s$   | j  | j¡}|  |jtjd¡ d S )Nzadd file as regular failed)r,   ro  r™   r4   rÄ   r   ÚREGTYPE)r   r8   r	   r	   r
   Útest_add_twicey  s    zHardlinkTest.test_add_twicec             C   s$   | j  | j¡}|  |jtjd¡ d S )Nzadd file as hardlink failed)r,   ro  rX  r4   rÄ   r   r·  )r   r8   r	   r	   r
   Útest_add_hardlink€  s    zHardlinkTest.test_add_hardlinkc             C   s,   d| j _| j  | j¡}|  |jtjd¡ d S )NTzdereferencing hardlink failed)r,   Zdereferencero  rX  r4   rÄ   r   rÚ  )r   r8   r	   r	   r
   Útest_dereference_hardlink…  s    z&HardlinkTest.test_dereference_hardlinkN)r   r   r   r-   r/   rÛ  rÜ  rÝ  r	   r	   r	   r
   rÙ  a  s
   rÙ  c               @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚPaxWriteTestNc             C   s¤   t  |¡}|r||_t j|_t jtdt jd}z| |¡ W d | 	¡  X t  t¡}zB|rv| 
¡ d j}|  ||d¡ n| 
¡ d j}|  ||d¡ W d | 	¡  X d S )Nr‰   )rÚ   r   zPAX longlink creation failedzPAX longname creation failed)r   r   r*  r·  rÄ   r   rŠ   rž  r¡   r.   r‚   r4   r_   )r   r_   rÏ   r8   r,   ÚlÚnr	   r	   r
   rº  Ž  s     


zPaxWriteTest._testc          
   C   s  ddddddœ}t jtdt j|d}z| t  d¡¡ W d | ¡  X t jtd	d
}z |  |j|¡ |  | 	¡ d j|¡ xv|j 
¡ D ]h\}}|  t|ƒt¡ |  t|ƒt¡ |t jkr„yt j| |ƒ W q„ ttfk
rê   |  d¡ Y q„X q„W W d | ¡  X d S )NrX  Ú0z1.23u   Ã¤Ã¶Ã¼Útest)r™   r  rÉ   râ  u   Ã¤Ã¶Ã¼r‰   )rÚ   rY  z	iso8859-1)r+   r   z"unable to convert pax header field)r   r   rŠ   rž  r¡   r   r.   r4   rY  r‚   r  ÚassertIsNotrÄ   r¶   ÚPAX_NUMBER_FIELDSrŒ  r¾   r]   )r   rY  r,   ÚkeyÚvalr	   r	   r
   Útest_pax_global_header¦  s.    

z#PaxWriteTest.test_pax_global_headerc             C   sª   dddœ}t jtdt jdd}z(t  ¡ }d|_d|_||_| |¡ W d | 	¡  X t jtdd	}z:| 
¡ d
 }|  |j|¡ |  |jd¡ |  |jd¡ W d | 	¡  X d S )Nr™   Ú123)rA   r  r‰   z	iso8859-1)rÚ   r+   u   Ã¤Ã¶Ã¼i   )r+   r   r\  )r   r   rŠ   rž  r   r_   r  rY  r¡   r.   r‚   r4   )r   rY  r,   r¤   r	   r	   r
   Útest_pax_extended_headerÆ  s"    

z%PaxWriteTest.test_pax_extended_header)N)r   r   r   rº  rç  ré  r	   r	   r	   r
   rÞ  Œ  s   
 rÞ  c               @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚUnicodeTestc             C   s   |   d¡ d S )Nz	iso8859-1)Ú_test_unicode_filename)r   r	   r	   r
   Útest_iso8859_1_filenameâ  s    z#UnicodeTest.test_iso8859_1_filenamec             C   s   |   d¡ d S )NÚutf7)rë  )r   r	   r	   r
   Útest_utf7_filenameå  s    zUnicodeTest.test_utf7_filenamec             C   s   |   d¡ d S )Nzutf-8)rë  )r   r	   r	   r
   Útest_utf8_filenameè  s    zUnicodeTest.test_utf8_filenamec             C   sr   t jtd| j|dd}zd}| t  |¡¡ W d | ¡  X t jt|d}z|  | ¡ d j	|¡ W d | ¡  X d S )Nr‰   rF  )rÚ   r+   Úerrorsu   Ã¤Ã¶Ã¼)r+   r   )
r   r   rŠ   rÚ   r¡   r   r.   r4   r‚   r_   )r   r+   r,   r_   r	   r	   r
   rë  ë  s    

z"UnicodeTest._test_unicode_filenamec             C   sd   t jtd| jddd}z>t  ¡ }d|_|  t|j|¡ d|_d|_	|  t|j|¡ W d | 
¡  X d S )Nr‰   rm   rF  )rÚ   r+   rð  u   Ã¤Ã¶Ã¼r™   )r   r   rŠ   rÚ   r   r_   r”   ÚUnicodeErrorr¡   rË   r.   )r   r,   r8   r	   r	   r
   Útest_unicode_filename_errorú  s    
z'UnicodeTest.test_unicode_filename_errorc             C   s|   t jtdddd}zZxT|D ]L}|  t|jƒt¡ |  t|jƒt¡ |  t|jƒt¡ |  t|j	ƒt¡ qW W d | 
¡  X d S )Nr;   z	iso8859-1rF  )r+   rð  )r   r   r   ÚassertIsrÄ   r_   rª   r*  rË   r  r.   )r   r,   r¤   r	   r	   r
   Útest_unicode_argument	  s    

z!UnicodeTest.test_unicode_argumentc             C   sÔ   t  d¡}d|_d|_t jtd| jdd}z| |¡ W d | ¡  X t jtdd}zr| 	d¡}|  
|jd¡ |  
|jd¡ | jt jkrÂ| ¡  t jtdd}| 	d¡}|  
|jd¡ |  
|jd¡ W d | ¡  X d S )	Nr™   u   Ã¤Ã¶Ã¼r‰   z	iso8859-1)r   rÚ   r+   )r+   rm   u	   í³¤í³¶í³¼)r   r   rË   r  r   rŠ   rÚ   r¡   r.   r1   r4   rž  )r   r¤   r,   r	   r	   r
   Útest_uname_unicode  s(    



zUnicodeTest.test_uname_unicodeN)
r   r   r   rì  rî  rï  rë  rò  rô  rõ  r	   r	   r	   r
   rê  à  s   rê  c               @   sf   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zddd„Zdd„ Zdd„ Zddd„ZdS )ÚUstarUnicodeTestc             C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S )Nrh  Úe01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567Ã¿ue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678Ã¿)Ú_test_ustar_namer¾   )r   r	   r	   r
   Útest_unicode_name18  s    

z#UstarUnicodeTest.test_unicode_name1c             C   s   |   d¡ |   dt¡ d S )Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿ue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿)rø  r¾   )r   r	   r	   r
   Útest_unicode_name2>  s    
z#UstarUnicodeTest.test_unicode_name2c             C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S )Na   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789)rø  r¾   )r   r	   r	   r
   Útest_unicode_longname1D  s    

z'UstarUnicodeTest.test_unicode_longname1c             C   s   |   dt¡ |   dt¡ d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789)rø  r¾   )r   r	   r	   r
   Útest_unicode_longname2J  s    z'UstarUnicodeTest.test_unicode_longname2c             C   s&   |   dt¡ |   d¡ |   dt¡ d S )Nu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿Ã¿/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567Ã¿u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678Ã¿)rø  r¾   )r   r	   r	   r
   Útest_unicode_longname3N  s    
z'UstarUnicodeTest.test_unicode_longname3c             C   s   |   d¡ |   dt¡ d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿)rø  r¾   )r   r	   r	   r
   Útest_unicode_longname4S  s    
z'UstarUnicodeTest.test_unicode_longname4Nc          	   C   s”   t jtd| jdd4}t  |¡}|d kr4| |¡ n|  ||j|¡ W d Q R X |d krt jtddd$}x|D ]}|  ||j¡ P qnW W d Q R X d S )Nr‰   zutf-8)rÚ   r+   r;   )r+   )	r   r   rŠ   rÚ   r   r¡   r”   r4   r_   )r   r_   Úexcr,   r¤   r	   r	   r
   rø  W  s    

z!UstarUnicodeTest._test_ustar_namec             C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S )Nrh  r÷  ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567Ã¿ue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678Ã¿)Ú_test_ustar_linkr¾   )r   r	   r	   r
   Útest_unicode_link1f  s    

z#UstarUnicodeTest.test_unicode_link1c             C   s   |   d¡ |   dt¡ d S )Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿ue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿)r   r¾   )r   r	   r	   r
   Útest_unicode_link2l  s    
z#UstarUnicodeTest.test_unicode_link2c          	   C   sš   t jtd| jdd:}t  d¡}||_|d kr:| |¡ n|  ||j|¡ W d Q R X |d kr–t jtddd$}x|D ]}|  ||j¡ P qtW W d Q R X d S )Nr‰   zutf-8)rÚ   r+   r™   r;   )r+   )	r   r   rŠ   rÚ   r   r*  r¡   r”   r4   )r   r_   rÿ  r,   r¤   r	   r	   r
   r   p  s    

z!UstarUnicodeTest._test_ustar_link)N)N)r   r   r   r   ÚUSTAR_FORMATrÚ   rù  rú  rû  rü  rý  rþ  rø  r  r  r   r	   r	   r	   r
   rö  1  s   
rö  c               @   s   e Zd ZejZdd„ ZdS )ÚGNUUnicodeTestc          
   C   s`   xZdD ]R\}}t jt|dd4}y| |¡}W n tk
rL   |  d¡ Y nX W d Q R X qW d S )N))zutf-8u   pax/bad-pax-í³¤í³¶í³¼)z	iso8859-1u   pax/bad-pax-Ã¤Ã¶Ã¼rr   )r+   rð  z%unable to read bad GNU tar pax header)r   r   r   r1   rÇ   r]   )r   r+   r_   r,   r¤   r	   r	   r
   Útest_bad_pax_header„  s    
z"GNUUnicodeTest.test_bad_pax_headerN)r   r   r   r   r¸  rÚ   r  r	   r	   r	   r
   r  €  s   r  c               @   s   e Zd ZejZdZdd„ ZdS )ÚPAXUnicodeTestNc          
   C   s`   xZdD ]R\}}t jt|dd4}y| |¡}W n tk
rL   |  d¡ Y nX W d Q R X qW d S )N))zutf-8u   pax/hdrcharset-í³¤í³¶í³¼)z	iso8859-1u   pax/hdrcharset-Ã¤Ã¶Ã¼rr   )r+   rð  z)unable to read POSIX.1-2008 binary header)r   r   r   r1   rÇ   r]   )r   r+   r_   r,   r¤   r	   r	   r
   Útest_binary_header™  s    
z!PAXUnicodeTest.test_binary_header)r   r   r   r   rž  rÚ   rò  r  r	   r	   r	   r
   r  ’  s   r  c               @   s&   e Zd Zdd„ Zd	dd„Zdd„ ZdS )
ÚAppendTestBasec             C   s$   t | _tj | j¡r t | j¡ d S )N)rŠ   r   r@   rA   r¬  r   rÑ   )r   r	   r	   r
   r-   ©  s    zAppendTestBase.setUpúw:c             C   sj   t jtddR}| d¡}d|_| |¡,}t  | j|¡}| ||¡ W d Q R X W d Q R X W d Q R X d S )Nz	iso8859-1)r+   zustar/regtyper™   )r   r   r   r1   r_   r2   r¡   )r   r   Úsrcr¤   rÁ   r,   r	   r	   r
   Ú_create_testtar®  s    
zAppendTestBase._create_testtarc             C   s(   |   d| j ¡ |  tjtjtd¡ d S )Nzw:ra   )r  r   r”   r   r   r   rŠ   )r   r	   r	   r
   Útest_append_compressed¶  s    z%AppendTestBase.test_append_compressedN)r	  )r   r   r   r-   r  r  r	   r	   r	   r
   r  ¦  s   
r  c               @   s‚   e Zd ZdZddd„Zdgdfdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
AppendTestNc          	   C   s2   t j| jd|d}| t  d¡¡ W d Q R X d S )Nra   )r¨   rX  )r   r   r   r¡   r   )r   r¨   r,   r	   r	   r
   Ú_add_testfile½  s    zAppendTest._add_testfilerX  c          	   C   s0   t j| j|d}|  | ¡ |¡ W d Q R X d S )N)r¨   )r   r   r   r4   rŒ   )r   rË  r¨   r,   r	   r	   r
   rº  Á  s    zAppendTest._testc             C   s   |   ¡  |  ¡  d S )N)r  rº  )r   r	   r	   r
   Útest_non_existingÅ  s    zAppendTest.test_non_existingc             C   s&   t  | jd¡ ¡  |  ¡  |  ¡  d S )Nzw:)r   r   r   r.   r  rº  )r   r	   r	   r
   Ú
test_emptyÉ  s    zAppendTest.test_emptyc             C   s.   t  d¡}|  |¡ | d¡ | j|d d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   )r¨   )r   rv   r  rQ   rº  )r   r9   r	   r	   r
   Útest_empty_fileobjÎ  s    


zAppendTest.test_empty_fileobjc          	   C   s\   |   ¡  t| jdƒ}| ¡ }W d Q R X t |¡}|  |¡ | d¡ | jddg|d d S )NrL   r   r™   rX  )rË  r¨   )	r  r   r   r3   r   rv   r  rQ   rº  )r   r9   r   r	   r	   r
   Útest_fileobjÔ  s    


zAppendTest.test_fileobjc             C   s$   |   ¡  |  ¡  | jddgd d S )Nr™   rX  )rË  )r  r  rº  )r   r	   r	   r
   Útest_existingÝ  s    zAppendTest.test_existingc          	   C   s6   t | jdƒ}| |¡ W d Q R X |  tj| j¡ d S )Nr“   )r   r   rœ   r”   r   r   r  )r   r   r9   r	   r	   r
   Ú_test_errorä  s    zAppendTest._test_errorc             C   s   |   d¡ d S )NrP   )r  )r   r	   r	   r
   Ú	test_nullé  s    zAppendTest.test_nullc             C   s   |   d¡ d S )Ns                )r  )r   r	   r	   r
   Útest_incompleteì  s    zAppendTest.test_incompletec             C   s   t  d¡ ¡ }|  |¡ d S )Nr™   )r   r   rž   r  )r   r   r	   r	   r
   Útest_premature_eofï  s    zAppendTest.test_premature_eofc             C   s    t  d¡ ¡ }|  |d ¡ d S )Nr™   s                )r   r   rž   r  )r   r   r	   r	   r
   Útest_trailing_garbageó  s    z AppendTest.test_trailing_garbagec             C   s   |   d¡ d S )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)r  )r   r	   r	   r
   Útest_invalid÷  s    zAppendTest.test_invalid)N)r   r   r   r  r  rº  r  r  r  r  r  r  r  r  r  r  r  r	   r	   r	   r
   r  º  s   
	r  c               @   s   e Zd ZdS )ÚGzipAppendTestN)r   r   r   r	   r	   r	   r
   r  ú  s   r  c               @   s   e Zd ZdS )ÚBz2AppendTestN)r   r   r   r	   r	   r	   r
   r  ý  s   r  c               @   s   e Zd ZdS )ÚLzmaAppendTestN)r   r   r   r	   r	   r	   r
   r     s   r  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
LimitsTestc             C   sÈ   t  d¡}| t j¡ t  d¡}|  t|jt j¡ t  d¡}| t j¡ t  d¡}|  t|jt j¡ t  d¡}|  t|jt j¡ t  d¡}d|_|  t|jt j¡ t  d¡}d|_|  t|jt j¡ d S )	Nrh  r÷  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/longnamea   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/1234567/longnamea   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamerC  r_   i    )r   r   rž   r  r”   r¾   r*  r  )r   r8   r	   r	   r
   Útest_ustar_limits  s     






zLimitsTest.test_ustar_limitsc             C   sX   t  d¡}| t j¡ t  d¡}d|_| t j¡ t  d¡}d|_|  t|jt j¡ d S )Na   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamerC  r_   l          )r   r   rž   r¸  r*  r  r”   r¾   )r   r8   r	   r	   r
   Útest_gnu_limits%  s    


zLimitsTest.test_gnu_limitsc             C   sR   t  d¡}| t j¡ t  d¡}d|_| t j¡ t  d¡}d|_| t j¡ d S )Na   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamerC  r_   l          )r   r   rž   rž  r*  r  )r   r8   r	   r	   r
   Útest_pax_limits2  s    


zLimitsTest.test_pax_limitsN)r   r   r   r  r  r   r	   r	   r	   r
   r    s   r  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚMiscTestc             C   s`   |   t dddd¡d¡ |   t dddd¡d¡ |   t ddd¡d¡ |   t d	dd¡d¡ d S )
Nr™   é   rm   rF  s   foo     Zfoobarr-  s   foos   foo bar )r4   r   ÚstnÚnts)r   r	   r	   r
   Útest_char_fieldsA  s    zMiscTest.test_char_fieldsc             C   s¦   |   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¡ d S )Ns   0000001 rM   s   7777777 iÿÿ s   €       i    s   €   ÿÿÿÿl   ÿÿ s   ÿÿÿÿÿÿÿÿrÍ   s   ÿÿÿÿÿÿÿœiœÿÿÿs   ÿ       lüÿÿÿ       r—   r   s           )r4   r   Únti)r   r	   r	   r
   Útest_read_number_fieldsK  s    z MiscTest.test_read_number_fieldsc             C   sÐ   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d	¡d
¡ |   t d¡d¡ |   t d¡d¡ |   tjdtjdd¡ |   tjdtjdd¡ |   t tjdtjd¡d¡ d S )NrM   s   0000001 iÿÿ s   7777777 i    s   €       l   ÿÿ s   €   ÿÿÿÿrÍ   s   ÿÿÿÿÿÿÿÿiœÿÿÿs   ÿÿÿÿÿÿÿœlüÿÿÿ       s   ÿ       g      YÀ)rÚ   g      0Bs   €      gš™™™™™¹¿r   )r4   r   Úitnr¸  r&  )r   r	   r	   r
   Útest_write_number_fields_  s"    z!MiscTest.test_write_number_fieldsc          	   C   sœ   |   t¡ t ddtj¡ W d Q R X |   t¡ t ddtj¡ W d Q R X |   t¡ t ddtj¡ W d Q R X |   t¡ t ddtj¡ W d Q R X d S )NrÍ   r"  i    lýÿÿÿ    é   l        )r”   r¾   r   r(  r  r¸  )r   r	   r	   r
   Útest_number_field_limitsu  s    z!MiscTest.test_number_field_limitsc          /   C   sv   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/h/}t j| t|d0 d S )1NÚversionÚgrpÚpwdZsymlink_exceptionZNULre  rd  Z	GNU_MAGICZPOSIX_MAGICr´  rµ  ZLENGTH_PREFIXrÚ  ZAREGTYPEr·  ZSYMTYPEZCHRTYPEZBLKTYPErÅ   ZFIFOTYPEZCONTTYPErU  ZGNUTYPE_LONGLINKZGNUTYPE_SPARSEr_  ZXGLTYPEZSOLARIS_XHDTYPEZSUPPORTED_TYPESZREGULAR_TYPESZ	GNU_TYPESZ
PAX_FIELDSZPAX_NAME_FIELDSrä  r#  r$  r&  r(  Zcalc_chksumsÚcopyfileobjÚfilemodeZEmptyHeaderErrorZTruncatedHeaderErrorZEOFHeaderErrorZInvalidHeaderErrorZSubsequentHeaderErrorZExFileObjectÚmain)Ú	blacklist)r   Úcheck__all__r   )r   r2  r	   r	   r
   Útest__all__  s     
zMiscTest.test__all__N)r   r   r   r%  r'  r)  r+  r4  r	   r	   r	   r
   r!  ?  s
   

r!  c               @   s¤   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚCommandLineTestc             O   s(   t jd|ž|Ž\}}}| tj ¡ d¡S )Nú-mr   ó   
)r6  r   )r   Zassert_python_okr‹   r@   Úlinesepr[   )r   Úargsr!  Úrcr   Úerrr	   r	   r
   Ú
tarfilecmd”  s    
zCommandLineTest.tarfilecmdc             G   s   t jd|žŽ S )Nú-mr   )r=  r   )r   Zassert_python_failure)r   r9  r	   r	   r
   Útarfilecmd_failure™  s    z"CommandLineTest.tarfilecmd_failurec          	   C   sb   t  d¡t  d¡g}|  t j|¡ t |d¡*}x"|D ]}|j|tj 	|¡d q6W W d Q R X d S )Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr‰   )rŠ  )
r   ÚfindfilerÐ   rÑ   r   r   rk  r@   rA   r‰  )r   Útar_nameÚfilesÚtfZtardatar	   r	   r
   Úmake_simple_tarfileœ  s    
z#CommandLineTest.make_simple_tarfilec             C   s|   |   ¡ \}}}|  |d¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |   dd¡\}}}|  |d¡ |  | ¡ d¡ d S )NrP   s   usages   errors   requiredz-lr   )r>  r4   r{   ÚlowerrA  Ústrip)r   r:  r   r;  r	   r	   r
   Útest_bad_use¥  s    zCommandLineTest.test_bad_usec             C   s8   x2t D ]*}x$dD ]}|  ||¡}|  |d¡ qW qW d S )N)z-tz--testrP   )Útesttarnamesr<  r4   )r   r@  Úoptr   r	   r	   r
   Útest_test_command¯  s    

z!CommandLineTest.test_test_commandc             C   s:   x4t D ],}x&dD ]}|  |d|¡}|  d|¡ qW qW d S )N)z-vz	--verbosez-ts   is a tar archive.
)rG  r<  r{   )r   r@  rH  r   r	   r	   r
   Útest_test_command_verboseµ  s    

z)CommandLineTest.test_test_command_verbosec             C   sì   t  d¡}|  d|¡\}}}|  d|¡ |  |d¡ |  |d¡ x¦tD ]ž}| j|dˆ t|dƒ}| ¡ }W d Q R X zVtt	dƒ}| 
|d d	… ¡ W d Q R X |  dt	¡\}}}|  |d¡ |  |d¡ W d t  t	¡ X W d Q R X qFW d S )
Nz
zipdir.zipz-ts    is not a tar archive.rP   rM   )r@  rL   r“   iÿ  )r   r?  r>  r{   r4   rG  ÚsubTestr   r3   rŠ   rœ   rÑ   )r   Úzipnamer:  r   r;  r@  rÁ   r   r	   r	   r
   Útest_test_command_invalid_file»  s     

z.CommandLineTest.test_test_command_invalid_filec             C   s„   x~t D ]v}t ¡ *}t |d¡}|jdd W d Q R X W d Q R X | ¡  dd¡}x(dD ] }| j||dd}|  	||¡ qXW qW d S )Nr;   F)rq   rm   rs   )z-lz--list)ÚPYTHONIOENCODING)
rG  r   Úcaptured_stdoutr   r   rJ   rz   r[   r<  r4   )r   r@  r¤   rB  ÚexpectedrH  r   r	   r	   r
   Útest_list_commandÏ  s    

 
z!CommandLineTest.test_list_commandc             C   s†   x€t D ]x}t ¡ *}t |d¡}|jdd W d Q R X W d Q R X | ¡  dd¡}x*dD ]"}| j|d|dd}|  	||¡ qXW qW d S )	Nr;   T)rq   rm   rs   )z-vz	--verbosez-l)rN  )
rG  r   rO  r   r   rJ   rz   r[   r<  r4   )r   r@  r¤   rB  rP  rH  r   r	   r	   r
   Útest_list_command_verboseÚ  s    

 

z)CommandLineTest.test_list_command_verbosec             C   sD   t  d¡}|  d|¡\}}}|  d|¡ |  |d¡ |  |d¡ d S )Nz
zipdir.zipz-ls    is not a tar archive.rP   rM   )r   r?  r>  r{   r4   )r   rL  r:  r   r;  r	   r	   r
   Útest_list_command_invalid_fileå  s
    
z.CommandLineTest.test_list_command_invalid_filec          
   C   st   t  d¡t  d¡g}xZdD ]R}z@| j|tf|žŽ }|  |d¡ t t¡}| ¡  W d Q R X W d t  t¡ X qW d S )Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt)z-cz--createrP   )	r   r?  r<  rŠ   r4   r   r   r‚   rÑ   )r   rA  rH  r   r,   r	   r	   r
   Útest_create_commandì  s    
z#CommandLineTest.test_create_commandc          
   C   sv   t  d¡t  d¡g}x\dD ]T}zB| j|dtf|žŽ }|  d|¡ t t¡}| ¡  W d Q R X W d t  t¡ X qW d S )Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt)z-vz	--verbosez-cs    file created.)	r   r?  r<  rŠ   r{   r   r   r‚   rÑ   )r   rA  rH  r   r,   r	   r	   r
   Útest_create_command_verboseù  s    
z+CommandLineTest.test_create_command_verbosec          	   C   s^   t  d¡g}z@| jdtf|žŽ }|  |d¡ t t¡}| ¡  W d Q R X W d t  t¡ X d S )Nztokenize_tests.txtz-crP   )	r   r?  r<  Údotlessnamer4   r   r   r‚   rÑ   )r   rA  r   r,   r	   r	   r
   Ú$test_create_command_dotless_filename	  s    z4CommandLineTest.test_create_command_dotless_filenamec          	   C   sl   t j td¡}t d¡g}z@| jd|f|žŽ }|  |d¡ t 	|¡}| 
¡  W d Q R X W d t |¡ X d S )Nz.testtarztokenize_tests.txtz-crP   )r@   rA   rB   r?   r   r?  r<  r4   r   r   r‚   rÑ   )r   r@  rA  r   r,   r	   r	   r
   Ú(test_create_command_dot_started_filename	  s    z8CommandLineTest.test_create_command_dot_started_filenamec          
   C   s„   t  d¡t  d¡g}xjtttfD ]\}|js,q zBtd |j }| jd|f|žŽ }| 	|¡}| 
¡  W d Q R X W d t  |¡ X q W d S )Nztokenize_tests.txtz9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr•  z-c)r   r?  r   r"   r&   r   rŠ   r   r<  r   r‚   rÑ   )r   rA  Zfiletyper@  r   r,   r	   r	   r
   Útest_create_command_compressed	  s    z.CommandLineTest.test_create_command_compressedc          
   C   s\   |   t¡ xLdD ]D}z2t t¡ |  |t¡}W d Q R X |  |d¡ W d t t¡ X qW d S )N)z-ez	--extractrP   )rC  rŠ   r   Útemp_cwdÚ	tarextdirr<  r4   râ   )r   rH  r   r	   r	   r
   Útest_extract_command*	  s    

z$CommandLineTest.test_extract_commandc          
   C   s^   |   t¡ xNdD ]F}z4t t¡ |  |dt¡}W d Q R X |  d|¡ W d t t¡ X qW d S )N)z-vz	--verbosez-es    file is extracted.)rC  rŠ   r   rZ  r[  r<  r{   râ   )r   rH  r   r	   r	   r
   Útest_extract_command_verbose4	  s    

z,CommandLineTest.test_extract_command_verbosec          	   C   sP   |   t¡ z4t t¡ |  dtd¡}W d Q R X |  |d¡ W d t t¡ X d S )Nz-eZspamdirrP   )rC  rŠ   r   rZ  r[  r<  r4   râ   )r   r   r	   r	   r
   Ú(test_extract_command_different_directory>	  s    
z8CommandLineTest.test_extract_command_different_directoryc          	   C   sZ   t  d¡}t  t¡ |  d|¡\}}}W d Q R X |  d|¡ |  |d¡ |  |d¡ d S )Nz
zipdir.zipz-es    is not a tar archive.rP   rM   )r   r?  rZ  r[  r>  r{   r4   )r   rL  r:  r   r;  r	   r	   r
   Ú!test_extract_command_invalid_fileG	  s    
z1CommandLineTest.test_extract_command_invalid_fileN)r   r   r   r<  r>  rC  rF  rI  rJ  rM  rQ  rR  rS  rT  rU  rW  rX  rY  r\  r]  r^  r_  r	   r	   r	   r
   r5  ’  s&   	



	r5  c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚContextManagerTestc          	   C   s6   t  t¡}|  |jd¡ W d Q R X |  |jd¡ d S )Nzclosed inside runtime contextzcontext manager failed)r   r   r   ra  rò   rñ   )r   r,   r	   r	   r
   Ú
test_basicR	  s    zContextManagerTest.test_basicc          
   C   s<   t  t¡}| ¡  |  t¡ | W d Q R X W d Q R X d S )N)r   r   r   r.   r”   r“  )r   r,   r	   r	   r
   Útest_closedW	  s
    
zContextManagerTest.test_closedc          
   C   sR   |   t¡ }t t¡
}t‚W d Q R X W d Q R X |  |jtd¡ |  |j	d¡ d S )Nz)wrong exception raised in context managerzcontext manager failed)
r”   Ú	Exceptionr   r   r   r“  r©   Ú	exceptionrñ   rò   )r   rÿ  r,   r	   r	   r
   Útest_exception`	  s    
z!ContextManagerTest.test_exceptionc          	   C   sV   y t  td¡
}t‚W d Q R X W n   Y nX |  tj t¡dd¡ |  |j	d¡ d S )Nr‰   r   z-context manager wrote an end-of-archive blockzcontext manager failed)
r   r   rŠ   rc  r4   r@   rA   rm  rñ   rò   )r   r,   r	   r	   r
   Útest_no_eofi	  s    zContextManagerTest.test_no_eofc          	   C   s2   t  td¡ W d Q R X |  tj t¡dd¡ d S )Nr‰   r   z-context manager wrote no end-of-archive block)r   r   rŠ   rA  r@   rA   rm  )r   r	   r	   r
   Útest_eofu	  s    
zContextManagerTest.test_eofc          
   C   sf   t tdƒR}y"tj |dd
}t‚W d Q R X W n   Y nX |  |jd¡ |  |jd¡ W d Q R X d S )Nr“   r‰   )r¨   r   zexternal file object was closedzcontext manager failed)r   rŠ   r   rc  ra  rò   rñ   )r   r9   r,   r	   r	   r
   r  }	  s    zContextManagerTest.test_fileobjN)	r   r   r   ra  rb  re  rf  rg  r  r	   r	   r	   r
   r`  P	  s   		r`  zrequires os.link to be missingc               @   s€   e Zd Zdd„ Ze eejdƒd¡dd„ ƒZ	e eejdƒd¡dd„ ƒZ
e eed	ƒd
¡dd„ ƒZe eed	ƒd
¡dd„ ƒZdS )ÚLinkEmulationTestc          	   C   sJ   | j  |t¡ ttj t|¡dƒ}| ¡ }W d Q R X |  t	|ƒt
¡ d S )NrL   )r,   r>   r?   r   r@   rA   rB   r3   r4   r   r7   )r   r_   rÁ   r   r	   r	   r
   Ú_test_link_extraction	  s    z'LinkEmulationTest._test_link_extractionÚislinkz3Skip emulation - has os.path.islink but not os.linkc             C   s   |   d¡ d S )Nzustar/lnktype)ri  )r   r	   r	   r
   Útest_hardlink_extraction1—	  s    z+LinkEmulationTest.test_hardlink_extraction1c             C   s   |   d¡ d S )Nz./ustar/linktest2/lnktype)ri  )r   r	   r	   r
   Útest_hardlink_extraction2œ	  s    z+LinkEmulationTest.test_hardlink_extraction2rƒ  z Skip emulation if symlink existsc             C   s   |   d¡ d S )Nzustar/symtype)ri  )r   r	   r	   r
   Útest_symlink_extraction1¡	  s    z*LinkEmulationTest.test_symlink_extraction1c             C   s   |   d¡ d S )Nz./ustar/linktest2/symtype)ri  )r   r	   r	   r
   Útest_symlink_extraction2¦	  s    z*LinkEmulationTest.test_symlink_extraction2N)r   r   r   ri  rø   ÚskipIfrú   r@   rA   rk  rl  rm  rn  r	   r	   r	   r
   rh  Š	  s   rh  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBz2PartialReadTestc          	      s~   G ‡ fdd„dt jƒ‰ t t d¡ ¡ ¡}xNtt|ƒd ƒD ]:}ytj	ˆ |d |… ƒ|d W q< tj
k
rt   Y q<X q<W d S )Nc                   s0   e Zd ZdZ‡‡ fdd„Z‡‡ fdd„Z‡  ZS )z9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOFc                s4   | j rtdƒ‚|  ¡ t|  ¡ ƒk| _ tˆ | ƒ |¡S )Nz(infinite loop detected in tarfile.open())Úhit_eofÚAssertionErrorrR   r5   rz   Úsuperr3   )r   rà  )Ú	MyBytesIOÚ	__class__r	   r
   r3   ³	  s    z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readc                s   d| _ tˆ | ƒj|Ž S )NF)rq  rs  rQ   )r   r9  )rt  ru  r	   r
   rQ   ¹	  s    z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)r   r   r   rq  r3   rQ   Ú__classcell__r	   )rt  )ru  r
   rt  ±	  s   rt  r™   rM   )r¨   r   )r   rv   r#   Úcompressr   r   rž   Úranger5   r   r   )r   r   r   rÏ  r	   )rt  r
   Ú_test_partial_input°	  s    z&Bz2PartialReadTest._test_partial_inputc             C   s   |   d¡ d S )Nr;   )ry  )r   r	   r	   r
   Útest_partial_inputÄ	  s    z%Bz2PartialReadTest.test_partial_inputc             C   s   |   d¡ d S )Nzr:bz2)ry  )r   r	   r	   r
   Útest_partial_input_bz2Ç	  s    z)Bz2PartialReadTest.test_partial_input_bz2N)r   r   r   ry  rz  r{  r	   r	   r	   r
   rp  ¬	  s   rp  c              C   sZ   ydd l } dd l}W n tk
r(   dS X |  d¡d dkr@dS | d¡d dkrVdS dS )Nr   FÚrootT)r.  r-  ÚImportErrorÚgetpwuidÚgetgrgid)r.  r-  r	   r	   r
   Úroot_is_uid_gid_0Ë	  s    r€  Úchownzmissing os.chownÚgeteuidzmissing os.geteuidc               @   sÎ   e Zd Zedd„ ƒZeedd„ ƒƒZej 	d¡ej 	d¡ej 	d¡dd	„ ƒƒƒZ
ej 	d¡ej 	d¡ej 	d¡d
d„ ƒƒƒZe eƒ d¡ej 	d¡ej 	d¡ej 	d¡dd„ ƒƒƒƒZej 	d¡dd„ ƒZdS )ÚNumericOwnerTestc          	   C   s    t  d¡}| ddtj|f|ddtjd f|ddtj|fg}t td¡R}xJ|D ]B\}}}}	}
t |¡}||_||_	d	|_
d	|_|	|_| ||
¡ qLW W d Q R X tS )
Ns   contentéc   éb   éM   éL   éX   éW   r‰   r|  )r   rv   r   rÚ  rÅ   r   rŠ   r   r  r  rË   r  rÄ   r¡   )Ú
filename_1Ú	dirname_1Ú
filename_2r9   r  Útarflr_   r  r  ÚtypÚcontentsr¤   r	   r	   r
   Ú_make_test_archiveà	  s    

z#NumericOwnerTest._make_test_archivec          	   c   sZ   d| _ d}d}|}|}tj ||¡}t |||¡}t |¡}||||fV  W d Q R X d S )Nr   znumeric-owner-testfiler  )rx  r@   rA   rB   rƒ  r  r   r   )Úmock_geteuidÚfnameÚdirnamerŠ  r‹  rŒ  Ztar_filenamer  r	   r	   r
   Ú_setup_testø	  s    zNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc       
   	   C   sˆ   |   |¡.\}}}}|j|tdd |j|tdd W d Q R X tj t|¡}tj t|¡}	|jtj 	|dd¡tj 	|	dd¡gdd d S )NT)Únumeric_ownerr„  r…  rˆ  r‰  )Ú	any_order)
r”  r>   r?   r@   rA   rB   Úassert_has_callsrø   rv  Úcall)
r   r‘  Ú
mock_chmodÚ
mock_chownr  rŠ  Ú_rŒ  Úf_filename_1Úf_filename_2r	   r	   r
   Útest_extract_with_numeric_owner
  s    z0NumericOwnerTest.test_extract_with_numeric_ownerc          	   C   s’   |   |¡\}}}}|jtdd W d Q R X tj t|¡}tj t|¡}	tj t|¡}
|jtj 	|dd¡tj 	|	dd¡tj 	|
dd¡gdd	 d S )
NT)r•  r„  r…  r†  r‡  rˆ  r‰  )r–  )
r”  rÓ   r?   r@   rA   rB   r—  rø   rv  r˜  )r   r‘  r™  rš  r  rŠ  r‹  rŒ  rœ  Zf_dirname_1r  r	   r	   r
   Ú"test_extractall_with_numeric_owner!
  s    z3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"c          	   C   sN   |   |¡\}}}}|j|tdd W d Q R X tj t|¡}| |dd¡ d S )NF)r•  r   )r”  r>   r?   r@   rA   rB   Zassert_called_with)r   r‘  r™  rš  r  rŠ  r›  rœ  r	   r	   r
   Ú"test_extract_without_numeric_owner9
  s    z3NumericOwnerTest.test_extract_without_numeric_ownerc          	   C   s8   |   |¡$\}}}}|  t|j|tdd¡ W d Q R X d S )NFT)r”  r”   rŒ  r>   r?   )r   r‘  r  rŠ  r›  r	   r	   r
   Útest_keyword_onlyH
  s    z"NumericOwnerTest.test_keyword_onlyN)r   r   r   rV  r  r   r”  rø   rv  rw  rž  rŸ  rù   r€  r   r¡  r	   r	   r	   r
   rƒ  ×	  s   	





rƒ  c           
   C   s’   t  t¡ t t¡ tgattdƒ} |  ¡ }W d Q R X xTt	t
tfD ]F}|jrDt  |j¡ t |j¡ | |jd¡}| |¡ W d Q R X qDW d S )NrL   r“   )r   rÑ   r?   r@   Úmakedirsr   rG  r   r3   r   r"   r&   ry  rœ   )r9   r   Úcr,   r	   r	   r
   ÚsetUpModuleO
  s    

r¤  c               C   s   t j t¡rt t¡ d S )N)r@   rA   r¬  r?   r   râ   r	   r	   r	   r
   ÚtearDownModule`
  s    r¥  Ú__main__)qrx   r@   r   Úhashlibr   Ú
contextlibr   Úrandomr   r¸   rø   Zunittest.mockr   râ  r   Ztest.supportr   r    r}  r#   r)   r   rA   r«   ÚTESTFNr?   r[  r?  r   rB   r   r$   r(   rŠ   rV  r7   r3  r   Úrequires_gzipr   Úrequires_bz2r"   Úrequires_lzmar&   r*   ÚTestCaser0   ri   rj   rk   rl   r…   r†   r‡   rˆ   r¦   rü   rý   rþ   r   r  r  r  r  r  r  r  r  r  r=  rI  rW  r`  rg  r   r¡  r¢  r£  r®  r¯  r±  r²  rÄ  rÕ  rÖ  r×  rØ  rù   rú   rÙ  rÞ  rê  rö  r  r  r  r  r  r  r  r  r!  r5  r`  ro  rh  rp  r€  rƒ  r¤  r¥  r   r1  r	   r	   r	   r
   Ú<module>   sÞ   




~PP |=(a*;,  ;&RZ
*TQO@;S ?:!v
