a
    äzeX ã                   @   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Z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 zd dlZW n eyÂ   dZY n0 zd dlZW n eyæ   dZY n0 zd dlZW n ey   dZY n0 zd dlZW n ey2   dZY n0 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 ,¡ G dd„ dƒƒZ-e .¡ G dd„ dƒƒZ/e 0¡ G dd„ dƒƒZ1G dd„ de+ƒZ2G dd„ de2ej3ƒZ4G d d!„ d!e-e4ƒZ5G d"d#„ d#e/e4ƒZ6G d$d%„ d%e1e4ƒZ7G d&d'„ d'e2ej3ƒZ8G d(d)„ d)e-e8ƒZ9G d*d+„ d+e/e8ƒZ:G d,d-„ d-e1e8ƒZ;G d.d/„ d/e2ƒZ<G d0d1„ d1e<ƒZ=G d2d3„ d3e=ej3ƒZ>G d4d5„ d5e-e=ej3ƒZ?G d6d7„ d7e/e=ej3ƒZ@G d8d9„ d9e1e=ej3ƒZAG d:d;„ d;e<ej3ƒZBG d<d=„ d=e-eBƒZCG d>d?„ d?e/eBƒZDG d@dA„ dAe1eBƒZEG dBdC„ dCe+ej3ƒZFG dDdE„ dEe-eFƒZGG dFdG„ dGe/eFƒZHG dHdI„ dIe1eFƒZIG dJdK„ dKe2ej3ƒZJG dLdM„ dMƒZKG dNdO„ dOeKe2ej3ƒZLG dPdQ„ dQeKe2ej3ƒZMG dRdS„ dSe+ƒZNG dTdU„ dUeNej3ƒZOG dVdW„ dWe-eOƒZPG dXdY„ dYe/eOƒZQG dZd[„ d[e1eOƒZRG d\d]„ d]eNej3ƒZSG d^d_„ d_e-eSƒZTG d`da„ dae/eSƒZUG dbdc„ dce1eSƒZVG ddde„ deej3ƒZWG dfdg„ dgeNej3ƒZXG dhdi„ dieNej3ƒZYG djdk„ dke-eYƒZZG dldm„ dme/eYƒZ[G dndo„ doe1eYƒZ\G dpdq„ dqeYƒZ]e ^e_edrƒds¡G dtdu„ duej3ƒƒZ`G dvdw„ dweWƒZaG dxdy„ dyƒZbG dzd{„ d{ebej3ƒZcG d|d}„ d}ebej3ƒZdG d~d„ debej3ƒZeG d€d„ dƒZfG d‚dƒ„ dƒefej3ƒZgG d„d…„ d…e-efej3ƒZhG d†d‡„ d‡e/efej3ƒZiG dˆd‰„ d‰e1efej3ƒZjG dŠd‹„ d‹ej3ƒZkG dŒd„ dej3ƒZlG dŽd„ dej3ƒZmG dd‘„ d‘ej3ƒZne oe_edrƒd’¡G d“d”„ d”e2ej3ƒƒZpG d•d–„ d–e/ej3ƒZqd—d˜„ Zre ^e_ed™ƒdš¡e ^e_ed›ƒdœ¡G ddž„ džej3ƒƒƒZsG dŸd „ d e2ej3ƒZtG d¡d¢„ d¢e2ƒZuG d£d¤„ d¤euej3ƒZvG d¥d¦„ d¦euej3ƒZwG d§d¨„ d¨euej3ƒZxG d©dª„ dªeuej3ƒZyG d«d¬„ d¬ej3ƒZzd­d®„ Z{G d¯d°„ d°ƒZ|G d±d²„ d²ej3ƒZ}d³d´„ Z~dµd¶„ Ze€d·kre ¡  dS )¸é    N)Úsha256)Úcontextmanager)ÚRandom)Úsupport)Úscript_helper)Úwarnings_helperc                 C   s   t | ƒ ¡ S ©N)r   Ú	hexdigest)Údata© r   ú'/usr/lib/python3.9/test/test_tarfile.pyÚ	sha256sum'   s    r   z-tardirz-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttarZ@e09e4bc8b3c9d9177e77256353b36c159f5f040531bbd4b024a8f9b9196c71ceZ@4f05a776071146756345ceee937b33fc5644f5a96b9780d1c7d6a32cdf164d7bc                   @   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 r   )ÚprefixÚsuffix©Úselfr   r   r   ÚmodeA   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   ÚgzipZGzipFiler   r   r   Zgzopenr   r   r   r   r   r    E   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$   L   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   ÚlzmaÚLZMAFiler   r   r   Zxzopenr   r   r   r   r   r(   S   s   r(   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚReadTestúr:c                 C   s   t j| j| jdd| _d S )Nú	iso8859-1©r   Úencoding©r   r   r   r   Útarr   r   r   r   ÚsetUp_   s    ÿzReadTest.setUpc                 C   s   | j  ¡  d S r   )r3   Úcloser   r   r   r   ÚtearDownc   s    zReadTest.tearDownN)r   r   r   r   r4   r6   r   r   r   r   r-   [   s   r-   c                   @   st   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S )ÚUstarReadTestc                 C   sj   | j  d¡}| j  |¡>}| ¡ }|  t|ƒ|jd¡ |  t|ƒtd¡ W d   ƒ n1 s\0    Y  d S )Núustar/regtypeúregular file extraction failed)	r3   Ú	getmemberÚextractfileÚreadÚassertEqualÚlenÚsizer   Úsha256_regtype©r   ÚtarinfoÚfobjr
   r   r   r   Útest_fileobj_regular_filei   s    ÿÿz'UstarReadTest.test_fileobj_regular_filec                 C   sÊ   | j  dt¡ | j  d¡}ttj td¡dƒ}| ¡ }W d   ƒ n1 sL0    Y  | j  	|¡T}t
 |¡}| ¡ }|  ||d¡ |  t|ƒdd¡ |  |d dd¡ W d   ƒ n1 s¼0    Y  d S )Nr8   Úrzfileobj.readlines() failedér   éS   zOI will gladly admit that Python is not the fastest running scripting language.
)r3   ÚextractÚTEMPDIRr:   r   ÚosÚpathÚjoinÚ	readlinesr;   r   ÚTextIOWrapperr=   r>   )r   rB   Úfobj1Úlines1rC   Úfobj2Úlines2r   r   r   Útest_fileobj_readlinesr   s"    &
ÿÿ
ýz$UstarReadTest.test_fileobj_readlinesc                 C   s¢   | j  dt¡ | j  d¡}ttj td¡dƒ}| ¡ }W d   ƒ n1 sL0    Y  | j  	|¡,}t
t |¡ƒ}|  ||d¡ W d   ƒ n1 s”0    Y  d S )Nr8   rE   zfileobj.__iter__() failed)r3   rH   rI   r:   r   rJ   rK   rL   rM   r;   Úlistr   rN   r=   )r   rB   rO   rP   rQ   rR   r   r   r   Útest_fileobj_iter„   s    &ÿzUstarReadTest.test_fileobj_iterc           	      C   s*  | j  dt¡ ttj td¡dƒ}| ¡ }W d   ƒ n1 s@0    Y  | 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¡ W d   ƒ n1 s0    Y  d S )Nr8   Úrbr   zseek() to file's start failedi   z"seek() to absolute position failedi üÿÿé   é   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 failedé   zreadlines() after seek failedztell() after readline() failedz)tell() after seek() and readline() failedzread() after readline() failed)r3   rH   rI   r   rJ   rK   rL   r<   r:   r;   Úseekr=   Útellr?   rM   r>   Úreadline)	r   rC   r
   rB   ÚtextÚsÚs1Ús2Úliner   r   r   Útest_fileobj_seekŽ   sr    &
ÿÿÿÿ
ÿÿÿÿ

ÿ
ÿ
ÿ
ÿzUstarReadTest.test_fileobj_seekc              	   C   s„   | j  d¡d}t |¡}| ¡  d¡}|  t|ƒt¡ z| 	d¡ W n t
y`   |  d¡ Y n0 W d   ƒ n1 sv0    Y  d S )Nr8   r/   éd   zseeking failed in text mode)r3   r;   r   rN   r<   Úencoder=   r   r@   r]   ÚAttributeErrorÚfail©r   rC   r
   r   r   r   Útest_fileobj_text¾   s    
zUstarReadTest.test_fileobj_textc              	   C   sl   | j  |¡L}| j  |¡ }|  |j|j¡ W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  d S r   )r3   r;   r=   Úname)r   ZlnktypeÚregtypeÚaÚbr   r   r   Ú_test_fileobj_linkÍ   s
    
ÿz UstarReadTest._test_fileobj_linkc                 C   s   |   dd¡ d S )Núustar/lnktyper8   ©rp   r   r   r   r   Útest_fileobj_link1Ò   s    z UstarReadTest.test_fileobj_link1c                 C   s   |   dd¡ d S )Nú./ustar/linktest2/lnktypeúustar/linktest1/regtyperr   r   r   r   r   Útest_fileobj_link2Õ   s    ÿz UstarReadTest.test_fileobj_link2c                 C   s   |   dd¡ d S )Núustar/symtyper8   rr   r   r   r   r   Útest_fileobj_symlink1Ù   s    z#UstarReadTest.test_fileobj_symlink1c                 C   s   |   dd¡ d S )Nú./ustar/linktest2/symtyperu   rr   r   r   r   r   Útest_fileobj_symlink2Ü   s    ÿz#UstarReadTest.test_fileobj_symlink2c                 C   s   |   dd¡ d S )NZsymtype2r8   rr   r   r   r   r   Útest_issue14160à   s    zUstarReadTest.test_issue14160c                 C   s   |   d¡ |   d¡ d S )NÚbarZeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)Úadd_dir_and_getmemberr   r   r   r   Útest_add_dir_getmemberã   s    
z$UstarReadTest.test_add_dir_getmemberc                 C   sÎ   t  ¡ ² t td¡@}z"t |¡ | |¡ W t |¡ nt |¡ 0 W d   ƒ n1 s\0    Y  t t¡,}|  	| 
|¡| 
|d ¡¡ W d   ƒ n1 s¢0    Y  W d   ƒ n1 sÀ0    Y  d S )NÚwú/)r   Útemp_cwdr   r   ÚtmpnamerJ   ÚmkdirÚaddÚrmdirr=   r:   )r   rl   r3   r   r   r   r}   è   s    

6þz#UstarReadTest.add_dir_and_getmemberN)r   r   r   rD   rS   rU   re   rk   rp   rs   rv   rx   rz   r{   r~   r}   r   r   r   r   r7   g   s   	
0r7   c                   @   s   e Zd ZdS )ÚGzipUstarReadTestN©r   r   r   r   r   r   r   r†   ö   s   r†   c                   @   s   e Zd ZdS )ÚBz2UstarReadTestNr‡   r   r   r   r   rˆ   ù   s   rˆ   c                   @   s   e Zd ZdS )ÚLzmaUstarReadTestNr‡   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 )
ÚListTestc                 C   s   t j| j| jd| _d S )N©r   r2   r   r   r   r   r4     s    zListTest.setUpc                    s@  t jt  ¡ ddd}t td|¡ ˆ jjdd W d   ƒ n1 sF0    Y  | ¡  	¡ }ˆ  
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©Úverboseó   ustar/conttypeó   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ÚsurrogateescaperŒ   Úbackslashreplace)Údecoder3   r1   rg   )ro   ra   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   rN   ÚBytesIOr   Ú	swap_attrÚsysr3   rT   ÚdetachÚgetvalueÚassertInÚassertRegexÚassertNotIn)r   ÚtioÚoutr˜   r   r   r   Ú	test_list  s2    ,
ÿ
ÿzListTest.test_listc                 C   s¨   t jt  ¡ ddd}t td|¡ | jjdd W d   ƒ n1 sF0    Y  | ¡  	¡ }|  
|d¡ |  d|¡ |  d	|¡ |  d
|¡ |  d|¡ |  d|¡ d S )NrŒ   r   rŽ   r   Tr‘   s°   \?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\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   rN   r™   r   rš   r›   r3   rT   rœ   r   rŸ   rž   )r   r¡   r¢   r   r   r   Útest_list_verbose+  s     ,ÿÿÿzListTest.test_list_verbosec                 C   sˆ   t jt  ¡ ddd}dd„ }t td|¡& | jjd|| jƒd W d   ƒ n1 sV0    Y  | ¡  	¡ }|  
d	|¡ |  d
|¡ d S )NrŒ   r   rŽ   c                 s   s"   |   ¡ D ]}d|jv r|V  qd S )NZreg)Ú
getmembersrl   )r3   rB   r   r   r   ÚmembersE  s    
z+ListTest.test_list_members.<locals>.membersr   F)r’   r¦   r”   r“   )r   rN   r™   r   rš   r›   r3   rT   rœ   r   rž   r    )r   r¡   r¦   r¢   r   r   r   Útest_list_membersC  s    4zListTest.test_list_membersN)r   r   r   r4   r£   r¤   r§   r   r   r   r   rŠ      s   %rŠ   c                   @   s   e Zd ZdS )ÚGzipListTestNr‡   r   r   r   r   r¨   P  s   r¨   c                   @   s   e Zd ZdS )ÚBz2ListTestNr‡   r   r   r   r   r©   T  s   r©   c                   @   s   e Zd ZdS )ÚLzmaListTestNr‡   r   r   r   r   rª   X  s   rª   c                   @   sL   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S )ÚCommonReadTestc                 C   s¤   t tdƒ W d   ƒ n1 s 0    Y  |  t t¡¡ |  t t t¡¡¡ t tdƒ }|  t |¡¡ W d   ƒ n1 s€0    Y  |  t t d¡¡¡ d S )NÚwbrV   s   invalid)	r   r‚   ÚassertFalser   Ú
is_tarfileÚpathlibÚPathr   r™   ©r   rC   r   r   r   Útest_is_tarfile_erroneous^  s    .z(CommonReadTest.test_is_tarfile_erroneousc              	   C   s°   |   t | j¡¡ |   t t | j¡¡¡ t| jdƒ }|   t |¡¡ W d   ƒ n1 s\0    Y  t| jdƒ*}|   t t | 	¡ ¡¡¡ W d   ƒ n1 s¢0    Y  d S ©NrV   )
Ú
assertTruer   r®   r   r¯   r°   r   r   r™   r<   r±   r   r   r   Útest_is_tarfile_valido  s    .z$CommonReadTest.test_is_tarfile_validc                 C   sœ   t  t| j dd¡¡ W d   ƒ n1 s,0    Y  zVzt  t| j¡}| ¡  W n t jyp   |  d¡ Y n0 |  | 	¡ g ¡ W | 
¡  n
| 
¡  0 d S )NrE   r   z&tarfile.open() failed on empty archive)r   r   r‚   r   ÚreplaceÚgetnamesÚ	ReadErrorri   ÚassertListEqualr¥   r5   ©r   r3   r   r   r   Útest_empty_tarfile~  s    z!CommonReadTest.test_empty_tarfilec                 C   s>   |   td¡ t d| j¡ W d   ƒ n1 s00    Y  d S )NZxxx)ÚassertRaisesRegexÚFileNotFoundErrorr   r   r   r   r   r   r   Útest_non_existent_tarfile  s    z(CommonReadTest.test_non_existent_tarfilec                 C   sV   t tdƒ W d   ƒ n1 s 0    Y  |  tjtj t| j¡ |  tjtj t¡ d S ©Nr¬   )r   r‚   ÚassertRaisesr   r¸   r   r   r   r   r   Útest_null_tarfile•  s    z CommonReadTest.test_null_tarfilec              	   C   sÂ   t dƒ d¡}dD ]ª}|  td¡J}| |d ¡ t d¡}t|ƒ|_| | 	¡ ¡ | |¡ W d   ƒ n1 sr0    Y  tjtddd	}z$|  
| ¡ dgd
| ¡ W | ¡  q| ¡  0 qd S )Nr   r\   )ó    ó   ar   rX   ÚfoorE   T)r   Zignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   Ú	randbytesr   r‚   Úwriter   ÚTarInfor>   r?   Útobufr¹   r·   r5   )r   r
   ÚcharrC   rB   r3   r   r   r   Útest_ignore_zerosž  s     

(ÿÿz CommonReadTest.test_ignore_zerosc              
   C   s¢  dD ]–}t  td¡2}t  d¡}d|_| |t d¡¡ W d   ƒ n1 sN0    Y  ttdƒ}| |¡ W d   ƒ n1 s‚0    Y  t  t¡H}|  	t j
d¡ |D ]}q¬W d   ƒ n1 sÆ0    Y  W d   ƒ n1 sä0    Y  t  t¡’}| ¡ }|  	t j
d¡ | |t¡ W d   ƒ n1 s40    Y  |  	t j
d¡ | |¡ ¡  W d   ƒ n1 sr0    Y  W d   ƒ q1 s’0    Y  qd S )N)r\   iX  rX   i°  úw:rÄ   rX   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)r   r   r‚   rÇ   r?   Úaddfiler   r™   Útruncater¼   r¸   ÚnextrH   rI   r;   r<   )r   r?   r3   ÚtrC   r   r   r   Útest_premature_end_of_archive´  s"    

0(>,z,CommonReadTest.test_premature_end_of_archivec              	   C   sb   |   tjd¡@ t t d¡¡}W d   ƒ n1 s60    Y  W d   ƒ n1 sT0    Y  d S )Nz%file could not be opened successfullyzrecursion.tar)r¼   r   r¸   r   r   Úfindfilerº   r   r   r   Útest_length_zero_headerÌ  s    z&CommonReadTest.test_length_zero_headerN)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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e ed-u d.¡d/d0„ ƒZ d-S )1ÚMiscReadTestBasec                 C   s   d S r   r   r   r   r   r   Úrequires_name_attributeÔ  s    z(MiscReadTestBase.requires_name_attributec              	   C   sœ   |   ¡  t| jdƒt}|  |jt¡ tj|| jd6}|  |jt¡ |  |jt	j
 |j¡¡ W d   ƒ n1 sp0    Y  W d   ƒ n1 sŽ0    Y  d S ©NrV   ©Úfileobjr   )rÔ   r   r   ÚassertIsInstancerl   Ústrr   r   r=   rJ   rK   Úabspath©r   rC   r3   r   r   r   Útest_no_name_argument×  s    z&MiscReadTestBase.test_no_name_argumentc                 C   sn   t | jdƒ}| ¡ }W d   ƒ n1 s*0    Y  t |¡}|  tt|d¡ tj || j	d}|  
|j¡ d S )NrV   rl   rÖ   )r   r   r<   r   r™   rÀ   rh   Úgetattrr   r   ÚassertIsNonerl   ©r   rC   r
   r3   r   r   r   Útest_no_name_attributeß  s    &
z'MiscReadTestBase.test_no_name_attributec                 C   s„   t | jdƒ}| ¡ }W d   ƒ n1 s*0    Y  t |¡}d|_tj || jd}|  |j¡ W d   ƒ n1 sv0    Y  d S )NrV   r   rÖ   )	r   r   r<   r   r™   rl   r   r   rÞ   rß   r   r   r   Útest_empty_name_attributeç  s    &
z*MiscReadTestBase.test_empty_name_attributec              	   C   sˆ   t  | jt j¡}t|dƒZ}|  |jt¡ tj|| jd}|  	|j¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  d S rÕ   )
rJ   r   r   ÚO_RDONLYrØ   rl   Úintr   r   rÞ   )r   ÚfdrC   r3   r   r   r   Útest_int_name_attributeï  s
    z(MiscReadTestBase.test_int_name_attributec              	   C   s¦   |   ¡  t | j¡}t|dƒt}|  |jt¡ tj|| j	d6}|  |jt¡ |  
|jtj |j¡¡ W d   ƒ n1 sz0    Y  W d   ƒ n1 s˜0    Y  d S rÕ   )rÔ   rJ   Úfsencoder   r   rØ   rl   Úbytesr   r   r=   rK   rÚ   )r   r   rC   r3   r   r   r   Útest_bytes_name_attributeø  s    z*MiscReadTestBase.test_bytes_name_attributec              	   C   s‚  t  | j¡}tj|| jd:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 s\0    Y  |  |¡:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 s°0    Y  tjj|| jd:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 s0    Y  | jdkr~tj|dd:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 st0    Y  d S )Nr‹   r   rE   )r¯   r°   r   r   r   r   rØ   rl   rÙ   r=   rJ   rK   rÚ   Úfspathr   r   r   )r   r   r3   r   r   r   Útest_pathlike_name  s    ::<z#MiscReadTestBase.test_pathlike_namec                 C   sÖ   t tdƒ W d   ƒ n1 s 0    Y  |  td¡ |  td¡}W d   ƒ n1 sX0    Y  |  td¡ |  td¡}W d   ƒ n1 s0    Y  |  td¡ |  td¡}W d   ƒ n1 sÈ0    Y  d S )Nr¬   zmode must be ÚqÚrwr   )r   r‚   r¼   Ú
ValueErrorr   rº   r   r   r   Útest_illegal_mode_arg  s    **z&MiscReadTestBase.test_illegal_mode_argc              	   C   s  t j| j| jd}zZ| ¡  | ¡ }|j}|j}| |¡}| ¡ }W d   ƒ n1 sX0    Y  W | 	¡  n
| 	¡  0 |  | j¡‚}| 
|¡ |j| jd|dF}| ¡ }|  |j|¡ | ¡  |  | |¡ ¡ |d¡ W d   ƒ n1 sî0    Y  W d   ƒ n1 s0    Y  d S )Nr‹   r.   ©r   r×   zseek back did not work)r   r   r   r   rÎ   rl   Úoffsetr;   r<   r5   r]   r=   r¥   )r   r3   rÏ   rl   rð   Úfr
   rC   r   r   r   Útest_fileobj_with_offset  s$    (
ÿz)MiscReadTestBase.test_fileobj_with_offsetc                 C   s\   |   tjtjt| j¡ ttdƒ(}| j tjtj|| jd W d   ƒ n1 sN0    Y  d S rÕ   )rÀ   r   r¸   r   r   r   r±   r   r   r   Útest_fail_comp7  s
    ÿzMiscReadTestBase.test_fail_compc                 C   s"   | j  d¡}|  |jtjd¡ d S )Nzmisc/dirtype-old-v7zv7 dirtype failed)r3   r:   r=   Útyper   ÚDIRTYPE©r   rB   r   r   r   Útest_v7_dirtype>  s    ÿz MiscReadTestBase.test_v7_dirtypec                 C   s2   z| j  d¡ W n ty,   |  d¡ Y n0 d S )Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r3   r:   ÚKeyErrorri   r   r   r   r   Útest_xstar_typeF  s    z MiscReadTestBase.test_xstar_typec                 C   sN   | j D ]B}|  t|jƒdd|j ¡ |j d¡s2q|  |jdd|j ¡ qd S )Né½>zwrong mtime for %szustar/r   zwrong uname for %s)r3   r=   rã   Úmtimerl   Ú
startswithÚunamerö   r   r   r   Útest_check_membersO  s    
ÿ
ÿz#MiscReadTestBase.test_check_membersc                 C   s   |   | j ¡ d jdd¡ d S )Néÿÿÿÿzmisc/eofzcould not find all members)r=   r3   r¥   rl   r   r   r   r   Útest_find_membersX  s    ÿz"MiscReadTestBase.test_find_membersÚlinkú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   ƒ n1 sŽ0    Y  |  t|ƒt¡ | dt¡ |  tjtj	 
td¡¡ ttj	 
td¡dƒ}| ¡ }W d   ƒ n1 sþ0    Y  |  t|ƒt¡ W d   ƒ n1 s.0    Y  d S )NrW   r/   )Ú
errorlevelr1   r8   rq   rV   rw   )r   r   r   rH   rI   Ú
addCleanupr   ÚunlinkrJ   rK   rL   r<   r=   r   r@   )r   r3   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 ƒ}| ||¡ |D ]x}tj ||j	¡}t
jdkr‚|  |jd@ t |¡jd@ ¡ dd	„ }tj |¡}d
 ||jƒ||ƒ|¡}|  |j||¡ qFW | ¡  t |¡ n| ¡  t |¡ 0 d S )Nr/   ©r1   Ú
extractallc                 S   s   g | ]}|  ¡ r|‘qS r   ©Úisdir©Ú.0rÏ   r   r   r   Ú
<listcomp>x  r[   z4MiscReadTestBase.test_extractall.<locals>.<listcomp>Úwin32éÿ  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   rJ   rK   rL   rI   rƒ   r  rl   r›   Úplatformr=   r   ÚstatÚst_modeÚgetmtimer  rû   r5   r   Úrmtree)	r   r3   ÚDIRÚdirectoriesrB   rK   r  Z
file_mtimeÚerrmsgr   r   r   Útest_extractallq  s0    

ÿýÿz MiscReadTestBase.test_extractallc              	   C   sÈ   d}t j td¡}t  |¡ zštjtddn}| |¡}|j	||d t j ||¡}|  
t j |¡|j¡ tjdkrŒ|  
t  |¡jd@ d¡ W d   ƒ n1 s 0    Y  W t |¡ nt |¡ 0 d S )	Núustar/dirtypeZ
extractdirr/   r  ©rK   r  r  ií  )rJ   rK   rL   rI   rƒ   r   r   r   r:   rH   r=   r  rû   r›   r  r  r  r   r  ©r   Zdirtyper  r3   rB   Z	extractedr   r   r   Útest_extract_directory  s    


8z'MiscReadTestBase.test_extract_directoryc              	   C   s®   t  t¡d }t |¡‚ tjtddT}dd„ |D ƒ}| ||¡ |D ]$}||j	 }|  
tj |¡|j¡ qHW d   ƒ n1 s‚0    Y  W d   ƒ n1 s 0    Y  d S )Nr  r/   r  c                 S   s   g | ]}|  ¡ r|‘qS r   r	  r  r   r   r   r  ¢  r[   zBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r¯   r°   rI   r   Útemp_dirr   r   r   r  rl   r=   rJ   rK   r  rû   )r   r  r3   r  rB   rK   r   r   r   Útest_extractall_pathlike_namež  s    ÿ
z.MiscReadTestBase.test_extractall_pathlike_namec              	   C   s¤   d}t  t¡d }t |¡t tjtddF}| |¡}|j	||d || }|  
tj |¡|j¡ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  d S )Nr  r  r/   r  r  )r¯   r°   rI   r   r"  r   r   r   r:   rH   r=   rJ   rK   r  rû   r   r   r   r   Útest_extract_pathlike_name¨  s    ÿ
z+MiscReadTestBase.test_extract_pathlike_namec              	   C   sª   t j td¡}t|dƒ}| d¡ W d   ƒ n1 s80    Y  zVt tj	¡}z| 
|¡ W n" tjy€   |  |jj¡ Y n0 |  d¡ W t |¡ nt |¡ 0 d S )NÚemptyr¬   r[   zReadError not raised)rJ   rK   rL   rI   r   rÆ   ÚobjectÚ__new__r   r   Ú__init__r¸   r´   r×   Úclosedri   r   r  )r   r%  rC   r3   r   r   r   Útest_init_close_fobj²  s    (z%MiscReadTestBase.test_init_close_fobjc                 C   sh   t  | j¡H}t||ƒD ],\}}|  |j|j¡ |  | ¡ | ¡ ¡ qW d   ƒ n1 sZ0    Y  d S r   )r   r   r   Úzipr=   rð   Úget_info)r   r3   Zm1Zm2r   r   r   Útest_parallel_iterationÅ  s    z(MiscReadTestBase.test_parallel_iterationNzrequires zlibc              	   C   sp   t j d¡P}tj|_|  tj¡ t 	| j
¡ W d   ƒ n1 sD0    Y  W d   ƒ n1 sb0    Y  d S )Nztarfile.TarInfo.fromtarfile)ÚunittestÚmockÚpatchÚzlibÚerrorZside_effectrÀ   r   r¸   r   r   )r   r/  r   r   r   Útest_zlib_error_does_not_leakÍ  s    z.MiscReadTestBase.test_zlib_error_does_not_leak)!r   r   r   rÔ   rÜ   rà   rá   rå   rè   rê   rî   rò   ró   r÷   rù   rþ   r   r.  Ú
skipUnlessÚhasattrrJ   r   Úskip_unless_symlinkr  r  r!  r#  r$  r*  r-  ÚskipIfr1  r3  r   r   r   r   rÓ   Ó  s6   		
		ÿ

rÓ   c                   @   s   e Zd ZdZdS )ÚMiscReadTestN)r   r   r   ró   r   r   r   r   r8  ×  s   r8  c                   @   s   e Zd ZdS )ÚGzipMiscReadTestNr‡   r   r   r   r   r9  Ú  s   r9  c                   @   s   e Zd Zdd„ ZdS )ÚBz2MiscReadTestc                 C   s   |   d¡ d S )NzBZ2File have no name attribute©ÚskipTestr   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 attributer;  r   r   r   r   rÔ   â  s    z(LzmaMiscReadTest.requires_name_attributeNr=  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 )ÚStreamReadTestúr|c              
   C   s|   | j D ]p}| ¡ sq| j  |¡F}z| d¡}W n tjyN   |  d¡ Y n0 |s"qXq"W d   ƒ q1 sl0    Y  qd S )Nr\   z6simple read-through using TarFile.extractfile() failed)r3   Úisregr;   r<   r   ÚStreamErrorri   )r   rB   rC   Úbufr   r   r   Útest_read_throughê  s    
z StreamReadTest.test_read_throughc                 C   sh   | j  ¡ }| j  |¡}| ¡ }W d   ƒ n1 s40    Y  |  t|ƒ|jd¡ |  t|ƒtd¡ d S )Nr9   )	r3   rÎ   r;   r<   r=   r>   r?   r   r@   rA   r   r   r   rD   ú  s    
&ÿÿz(StreamReadTest.test_fileobj_regular_filec                 C   sN   | j  ¡ }| j  |d ¡ }|  tj|j¡ W d   ƒ n1 s@0    Y  d S ©Nr   )r3   r¥   r;   rÀ   r   rB  r<   )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}| ¡ }| ¡ }|d u r0qÆ|  |d¡ | ¡ sL| ¡ r„|  t j	¡ | 
|¡ W d   ƒ q1 sx0    Y  q| 
|¡}| 
|¡}|d u r¢q|  |d¡ |  | ¡ | ¡ d¡ qW | ¡  n
| ¡  0 d S )Nr/   r  zstream.next() failed.zstream.extractfile() failedzstream extraction failed)r   r   r   r3   rÎ   ÚassertIsNotNoneZislnkZissymrÀ   rB  r;   r=   r<   r5   )r   Ztar1Ztar2Út1Út2Úv1Úv2r   r   r   Útest_compare_members  s*    (

ÿz#StreamReadTest.test_compare_membersN)r   r   r   r   rD  rD   rF  rL  r   r   r   r   r?  æ  s
   	r?  c                   @   s   e Zd ZdS )ÚGzipStreamReadTestNr‡   r   r   r   r   rM  #  s   rM  c                   @   s   e Zd ZdS )ÚBz2StreamReadTestNr‡   r   r   r   r   rN  &  s   rN  c                   @   s   e Zd ZdS )ÚLzmaStreamReadTestNr‡   r   r   r   r   rO  )  s   rO  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   sL   zt  ||¡}W n. t jy> } z|  ¡  W Y d }~nd }~0 0 | ¡  d S r   )r   r   r¸   ri   r5   )r   rl   r   r3   Úer   r   r   Ú_testfunc_file.  s
    zDetectReadTest._testfunc_filec              
   C   sz   z>t |dƒ }tj |||d}W d   ƒ n1 s20    Y  W n. tjyl } z|  ¡  W Y d }~nd }~0 0 | ¡  d S )NrV   ©r×   )r   r   r¸   ri   r5   )r   rl   r   rñ   r3   rQ  r   r   r   Ú_testfunc_fileobj6  s    2z DetectReadTest._testfunc_fileobjc                 C   sJ  | j rþ|  tj¡$ tjtd| j  d W d   ƒ n1 s<0    Y  |  tj¡$ tjtd| j  d W d   ƒ n1 s|0    Y  |  tj¡  tj| jdd W d   ƒ n1 s¸0    Y  |  tj¡  tj| jdd W d   ƒ n1 sô0    Y  || jdƒ || jd| j  ƒ || jdƒ || jd| j  ƒ || jdƒ d S )Nr.   r‹   r@  rE   zr:*úr|*)r   rÀ   r   r¸   r   r   )r   Ztestfuncr   r   r   Ú_test_modes?  s    22..zDetectReadTest._test_modesc                 C   s   |   | j¡ d S r   )rV  rR  r   r   r   r   Útest_detect_fileO  s    zDetectReadTest.test_detect_filec                 C   s   |   | j¡ d S r   )rV  rT  r   r   r   r   Útest_detect_fileobjR  s    z"DetectReadTest.test_detect_fileobjN)r   r   r   rR  rT  rV  rW  rX  r   r   r   r   rP  -  s
   	rP  c                   @   s   e Zd ZdS )ÚGzipDetectReadTestNr‡   r   r   r   r   rY  U  s   rY  c                   @   s   e Zd Zdd„ ZdS )ÚBz2DetectReadTestc                 C   s|   t tdƒ}| ¡ }W d   ƒ n1 s(0    Y  tjtddd}| |¡ W d   ƒ n1 sb0    Y  |  td¡ d S )NrV   r¬   rW   ©ÚcompresslevelrU  )r   r   r<   r%   r'   r‚   rÆ   rR  rj   r   r   r   Útest_detect_stream_bz2Y  s
    &(z(Bz2DetectReadTest.test_detect_stream_bz2N)r   r   r   r]  r   r   r   r   rZ  X  s   rZ  c                   @   s   e Zd ZdS )ÚLzmaDetectReadTestNr‡   r   r   r   r   r^  g  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 urP| j  |¡,}|  t| ¡ ƒ|d|j ¡ W d   ƒ n1 sF0    Y  d|d< d|d< d|d< d|jvr‚d	|d
< d	|d< | ¡ D ]&\}}|  t||ƒ|d||jf ¡ qŠd S )Núwrong sha256sum for %srú   rû   éè  Úuidrf   Úgidzold-v7r   rý   Úgnamezwrong value in %s field of %s)r3   r;   r=   r   r<   rl   ÚitemsrÝ   )r   rB   ÚchksumÚkwargsrñ   ÚkÚvr   r   r   Ú_test_memberm  s    ÿ"
ÿzMemberReadTest._test_memberc                 C   s    | j  d¡}| j|dtd d S )Nr8   éc  ©r?   rf  ©r3   r:   rj  r@   rö   r   r   r   Útest_find_regtype~  s    z MemberReadTest.test_find_regtypec                 C   s    | j  d¡}| j|dtd d S )Nzustar/conttyperk  rl  rm  rö   r   r   r   Útest_find_conttype‚  s    z!MemberReadTest.test_find_conttypec                 C   s   | j  d¡}| j|dd d S )Nr  r   ©r?   ©r3   r:   rj  rö   r   r   r   Útest_find_dirtype†  s    z MemberReadTest.test_find_dirtypec                 C   s   | j  d¡}| j|dd d S )Nzustar/dirtype-with-sizeéÿ   rp  rq  rö   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 )Nrq   r   r8   ©r?   Úlinknamerq  rö   r   r   r   Útest_find_lnktypeŽ  s    z MemberReadTest.test_find_lnktypec                 C   s    | j  d¡}| j|ddd d S )Nrw   r   rm   ru  rq  rö   r   r   r   Útest_find_symtype’  s    z MemberReadTest.test_find_symtypec                 C   s"   | j  d¡}| j|dddd d S )Nzustar/blktyper   é   ©r?   ÚdevmajorÚdevminorrq  rö   r   r   r   Útest_find_blktype–  s    z MemberReadTest.test_find_blktypec                 C   s"   | j  d¡}| j|dddd d S )Nzustar/chrtyper   rW   ry  rz  rq  rö   r   r   r   Útest_find_chrtypeš  s    z MemberReadTest.test_find_chrtypec                 C   s   | j  d¡}| j|dd d S )Nzustar/fifotyper   rp  rq  rö   r   r   r   Útest_find_fifotypež  s    z!MemberReadTest.test_find_fifotypec                 C   s    | j  d¡}| j|dtd d S )Nzustar/sparseé P rl  ©r3   r:   rj  Úsha256_sparserö   r   r   r   Útest_find_sparse¢  s    zMemberReadTest.test_find_sparsec                 C   s    | j  d¡}| j|dtd d S )Nú
gnu/sparser€  rl  r  rö   r   r   r   Útest_find_gnusparse¦  s    z"MemberReadTest.test_find_gnusparsec                 C   s    | j  d¡}| j|dtd d S )Núgnu/sparse-0.0r€  rl  r  rö   r   r   r   Útest_find_gnusparse_00ª  s    z%MemberReadTest.test_find_gnusparse_00c                 C   s    | j  d¡}| j|dtd d S )Núgnu/sparse-0.1r€  rl  r  rö   r   r   r   Útest_find_gnusparse_01®  s    z%MemberReadTest.test_find_gnusparse_01c                 C   s    | j  d¡}| j|dtd d S )Núgnu/sparse-1.0r€  rl  r  rö   r   r   r   Útest_find_gnusparse_10²  s    z%MemberReadTest.test_find_gnusparse_10c                 C   s    | j  d¡}| j|dtd d S )Nu   ustar/umlauts-Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸrk  rl  rm  rö   r   r   r   Útest_find_umlauts¶  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ž   r3   r·   )r   rl   r   r   r   Útest_find_ustar_longname»  s    z'MemberReadTest.test_find_ustar_longnamec                 C   s    | j  d¡}| j|dtd d S )Nzmisc/regtype-old-v7rk  rl  rm  rö   r   r   r   Útest_find_regtype_oldv7¿  s    z&MemberReadTest.test_find_regtype_oldv7c                 C   s@   | j  ¡  tj| j| jdd| _ | j  d¡}| j|dtd d S )Nr/   r0   u   pax/umlauts-Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸrk  rl  )	r3   r5   r   r   r   r   r:   rj  r@   rö   r   r   r   Útest_find_pax_umlautsÃ  s    
ÿz$MemberReadTest.test_find_pax_umlauts)N)r   r   r   rj  rn  ro  rr  rt  rw  rx  r}  r~  r  rƒ  r…  r‡  r‰  r‹  rŒ  r  rŽ  r  r   r   r   r   r_  k  s&   
r_  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLongnameTestc                 C   sV   | j d d d }z| j |¡}W n ty>   |  d¡ Y n0 |  |jtjd¡ d S )Nr€   áô  123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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)	Úsubdirr3   r:   rø   ri   ÚassertNotEqualrô   r   rõ   )r   r’  rB   r   r   r   Útest_read_longnameÎ  s    ÿzLongnameTest.test_read_longnamec                 C   sf   | j d d d }| j d d d }z| j |¡}W n tyP   |  d¡ Y n0 |  |j|d¡ d S )Nr€   r‘  r’  Úlonglinkzlonglink not foundzlinkname wrong)r“  r3   r:   rø   ri   r=   rv  )r   r’  r–  rB   r   r   r   Útest_read_longlinkØ  s    zLongnameTest.test_read_longlinkc                 C   s„   | j d d d }| j |¡}|j}| jj |¡ t | jj d¡¡}|  	t
j¡ t
jd|d W d   ƒ n1 sv0    Y  d S )Nr€   r‘  r’  i   zfoo.tar)rl   r×   )r“  r3   r:   rð   r×   r]   r   r™   r<   rÀ   r   r¸   r   )r   r’  rB   rð   rC   r   r   r   Útest_truncated_longnameá  s    z$LongnameTest.test_truncated_longnamec                 C   s~   | j d d d }| j |¡j}ttdƒ@}| |¡ tj 	| 
d¡dd¡}|  |j| j¡ W d   ƒ n1 sp0    Y  d S )Nr€   r‘  r’  rV   r\   r/   Ústrict)r“  r3   r:   rð   r   r   r]   r   rÇ   Zfrombufr<   r=   rô   Úlongnametype)r   r’  rð   rC   rB   r   r   r   Útest_header_offsetê  s    
ÿzLongnameTest.test_header_offsetN)r   r   r   r•  r—  r˜  r›  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   sŽ   | j  |t¡ tj t|¡}t|dƒ}| ¡ }W d   ƒ n1 sD0    Y  |  t	|ƒt
d| ¡ |  ¡ rŠt |¡}|  |jd |j¡ d S )NrV   r`  r\   )r3   rH   rI   rJ   rK   rL   r   r<   r=   r   r‚  Ú_fs_supports_holesr  Z
assertLessÚ	st_blocksÚst_size)r   rl   ÚfilenamerC   r
   ra   r   r   r   Ú_test_sparse_file  s    &ÿ
zGNUReadTest._test_sparse_filec                 C   s   |   d¡ d S )Nr„  ©r¡  r   r   r   r   Útest_sparse_file_old  s    z GNUReadTest.test_sparse_file_oldc                 C   s   |   d¡ d S )Nr†  r¢  r   r   r   r   Útest_sparse_file_00  s    zGNUReadTest.test_sparse_file_00c                 C   s   |   d¡ d S )Nrˆ  r¢  r   r   r   r   Útest_sparse_file_01  s    zGNUReadTest.test_sparse_file_01c                 C   s   |   d¡ d S )NrŠ  r¢  r   r   r   r   Útest_sparse_file_10  s    zGNUReadTest.test_sparse_file_10c                  C   sŒ   t j d¡r„tj td¡} t| dƒ,}| d¡ | 	d¡ | 
¡  W d   ƒ n1 sV0    Y  t | ¡}t | ¡ |jd |jk S dS d S )NÚlinuxzsparse-testr¬   i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr\   F)r›   r  rü   rJ   rK   rL   rI   r   r]   rÆ   rÍ   r  r   r  rž  rŸ  )rl   rC   ra   r   r   r   r    s    

&

zGNUReadTest._fs_supports_holesN)r   r   r   r“  r   ÚGNUTYPE_LONGNAMErš  r¡  r£  r¤  r¥  r¦  Ústaticmethodr  r   r   r   r   rœ  ö  s   	rœ  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 | 	¡  n
| 	¡  0 d S )Nr/   r  úpax/regtype1rÄ   r|   zVENDOR.umlautsu   Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸzpax/regtype2r   zpax/regtype3r   )
r   r   r   r:   r=   rý   rd  Úpax_headersÚgetr5   ©r   r3   rB   r   r   r   Útest_pax_global_headers6  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 | ¡  n
| ¡  0 d S )	Nr/   r  zpax/regtype4rk  é{   g  €Ç^ÏAZatimeÚctime)r   r   r   r:   r=   r?   rb  rc  rû   rô   r  r¬  r5   r®  r   r   r   Útest_pax_number_fieldsM  s    
z"PaxReadTest.test_pax_number_fieldsN)	r   r   r   r“  r   ÚXHDTYPErš  r¯  r²  r   r   r   r   rª  1  s   rª  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚWriteTestBasec                 C   sˆ   t  ¡ }tj|| jd }| t d¡¡ W d   ƒ n1 s>0    Y  |  |jd¡ | 	¡ }~t
 ¡  |  |j¡ |  || 	¡ ¡ d S )NrÖ   rÄ   z#external fileobjs must never closed)r   r™   r   r   r   rÌ   rÇ   r­   r)  r   r   Ú
gc_collectr=   )r   rC   r3   r
   r   r   r   Útest_fileobj_no_closea  s    .z#WriteTestBase.test_fileobj_no_closec                 C   s¨   t  t| j¡@}t  d¡}t jt j |_| |t	 
d|j ¡¡ W d   ƒ n1 sT0    Y  |  td¡*}|  t| ¡ ƒt jd ¡ W d   ƒ n1 sš0    Y  d S )NrÄ   rÃ   rV   rZ   )r   r   r‚   r   rÇ   Ú
RECORDSIZEÚ	BLOCKSIZEr?   rÌ   r   r™   r=   r>   r<   )r   r3   rÏ   rC   r   r   r   Útest_eof_markerm  s    
6zWriteTestBase.test_eof_markerN)r   r   r   r¶  r¹  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 )'Ú	WriteTestrË   c                 C   sz   d}t  t| j¡}z t  |¡}| |¡ W | ¡  n
| ¡  0 t  t¡}z"|  | ¡ d |d¡ W | ¡  n
| ¡  0 d S )NÚd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r   r   r‚   r   rÇ   rÌ   r5   r=   r·   )r   rl   r3   rÏ   r   r   r   Útest_100_char_name  s    

ÿzWriteTest.test_100_char_namec                 C   sŒ   t  t| j¡}zXtj td¡}t|dƒ}| d¡ W d   ƒ n1 sH0    Y  | 	|¡ W | 
¡  n
| 
¡  0 |  tj t¡dd¡ d S )NÚfiler¬   ó   aaar   ztarfile is empty)r   r   r‚   r   rJ   rK   rL   rI   rÆ   r„   r5   ZassertGreaterÚgetsize)r   r3   rK   rC   r   r   r   Útest_tar_size“  s    (ÿzWriteTest.test_tar_sizec                 C   sÆ   t  t| j¡}z¨tj td¡}t|dƒ W d   ƒ n1 s>0    Y  | |¡}|  	|j
d¡ t|dƒ}| d¡ W d   ƒ n1 sŠ0    Y  | |¡}|  	|j
d¡ W | ¡  n
| ¡  0 d S )Nr½  r¬   r   r¾  ry  )r   r   r‚   r   rJ   rK   rL   rI   Ú
gettarinfor=   r?   rÆ   r5   )r   r3   rK   rB   rC   r   r   r   Útest_file_size¡  s    
(
zWriteTest.test_file_sizec              	   C   sv   t j td¡}t  |¡ zLt t| j¡}z$| 	|¡}|  
|jd¡ W | ¡  n
| ¡  0 W t |¡ nt |¡ 0 d S )NÚ	directoryr   )rJ   rK   rL   rI   rƒ   r   r   r‚   r   rÁ  r=   r?   r5   r   r…   ©r   rK   r3   rB   r   r   r   Útest_directory_size±  s    

zWriteTest.test_directory_sizec                 C   sX  t j td¡}t  |¡ tt j |d¡dƒ ¡  tt j |d¡dƒ ¡  zÖt t| j	¡}z†t
j d¡$}ddg|_| |¡ W d   ƒ n1 s0    Y  g }| ¡ D ]}| t j |j¡d ¡ q¦|  |g d¢¡ W | ¡  n
| ¡  0 W t t j |d¡¡ t t j |d¡¡ t |¡ n4t t j |d¡¡ t t j |d¡¡ t |¡ 0 d S )NrÃ  Ú1rn   Ú2z
os.listdirrÿ   )rÃ  rÆ  rÇ  )rJ   rK   rL   rI   rƒ   r   r5   r   r‚   r   r.  r/  r0  Úreturn_valuer„   r¥   ÚappendÚsplitrl   r=   r   r  r…   )r   rK   r3   Zmock_listdirÚpathsÚmr   r   r   Útest_ordered_recursionÀ  s*    

(þz WriteTest.test_ordered_recursionc              	   C   sº   t  t| j¡˜}t t¡d }t|dƒ}| d¡ W d   ƒ n1 sH0    Y  | |¡}| t	 
|¡¡}|  |jt¡ |  |j|j¡ |  |jd¡ W d   ƒ n1 s¬0    Y  d S )Nr½  r¬   r¾  ry  )r   r   r‚   r   r¯   r°   rI   rÆ   rÁ  rJ   ré   rØ   rl   rÙ   r=   r?   )r   r3   rK   rC   rB   Ztarinfo2r   r   r   Útest_gettarinfo_pathlike_nameÖ  s    (
z'WriteTest.test_gettarinfo_pathlike_namer  r  c              
   C   s  t j td¡}t j td¡}t|dƒ}| d¡ W d   ƒ n1 sF0    Y  zt  ||¡ W n2 ty’ } z|  d| ¡ W Y d }~n
d }~0 0 z`t	 t
| j¡}z.| |¡ | |¡}|  |jd¡ W | ¡  n
| ¡  0 W t |¡ t |¡ nt |¡ t |¡ 0 d S )Nr  Úlink_targetr¬   r¾  úos.link(): %sr   )rJ   rK   rL   rI   r   rÆ   r  ÚPermissionErrorr<  r   r‚   r   rÁ  r=   r?   r5   r   r  )r   r  ÚtargetrC   rQ  r3   rB   r   r   r   Útest_link_sizeá  s&    ($


ÿ
zWriteTest.test_link_sizec              	   C   sx   t j td¡}t  d|¡ zLt t| j¡}z$| 	|¡}|  
|jd¡ W | ¡  n
| ¡  0 W t |¡ nt |¡ 0 d S )NÚsymlinkrÏ  r   )rJ   rK   rL   rI   rÔ  r   r   r‚   r   rÁ  r=   r?   r5   r   r  rÄ  r   r   r   Útest_symlink_sizeù  s    
zWriteTest.test_symlink_sizec                 C   s¨   t j t¡}t t| j¡}z~|  |j|d¡ | 	|¡ |  | 
¡ g d¡ t t¡ | 	|¡ W d   ƒ n1 sr0    Y  |  | 
¡ g d¡ W | ¡  n
| ¡  0 d S )Nzarchive name must be absolutezadded the archive to itself)rJ   rK   rÚ   r‚   r   r   r   r=   rl   r„   r·   r   Ú
change_cwdrI   r5   )r   Údstnamer3   r   r   r   Útest_add_self  s     
ÿ
ÿ(ÿzWriteTest.test_add_selfc              	   C   s8  t j td¡}t  |¡ zdD ]}t j ||¡}t |¡ q dd„ }tjt	| j
dd}z|j|d|d W | ¡  n
| ¡  0 |  t¡" | |dd	d |¡ W d   ƒ n1 s²0    Y  t t	d
¡}zF|D ] }|  |jd¡ |  |jd¡ qÎ|  t| ¡ ƒd¡ W | ¡  n
| ¡  0 W t |¡ nt |¡ 0 d S )NÚfilter)rÄ   r|   Zbazc                 S   s&   t j | j¡dkrd S d| _d| _| S )Nr|   r°  rÄ   )rJ   rK   Úbasenamerl   rb  rý   )rB   r   r   r   rÙ  !  s
    z%WriteTest.test_filter.<locals>.filterr/   r  Z	empty_dir)ÚarcnamerÙ  TrE   r°  rÄ   ry  )rJ   rK   rL   rI   rƒ   r   Úcreate_empty_filer   r   r‚   r   r„   r5   rÀ   Ú	TypeErrorr=   rb  rý   r>   r¥   r  )r   Útempdirrl   rÙ  r3   rB   r   r   r   Útest_filter  s*    
0zWriteTest.test_filterNFc                 C   sÂ   t j td¡}|st |¡ n
t  |¡ t t	| j
¡}z|j||d W | ¡  n
| ¡  0 t t	d¡}z| ¡ }W | ¡  n
| ¡  0 |s˜t |¡ n
t |¡ |  |j|pº| t jd¡¡ d S )NrÄ   ©rÛ  rE   r€   )rJ   rK   rL   rI   r   rÜ  rƒ   r   r   r‚   r   r„   r5   rÎ   r  r…   r=   rl   r¶   Úsep)r   rK   Zcmp_pathÚdirrÄ   r3   rÏ   r   r   r   Ú_test_pathnameA  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   ƒ n1 sp0    Y  t  ||¡ t |d¡,}|j	|dd |j	|dd W d   ƒ n1 sÄ0    Y  tj|dd	@}z|j
|d
 W n ty   |  d¡ Y n0 W d   ƒ n1 s$0    Y  W t |¡ t |¡ nt |¡ t |¡ 0 d S )NZtestsymlinksztestsymlinks.tarÚsourcerÔ  r   z
something
rà  rZ   ©r  r  z&extractall failed with symlinked files)rJ   rK   rL   rI   rƒ   r   rÆ   rÔ  r   r„   r  ÚOSErrorri   r   r  r  )r   rÞ  ZtemparchiveZsource_fileZtarget_filerñ   r3   r   r   r   Útest_extractall_symlinks^  s*    
(,2
ÿ
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Ä   Ú.r|   ú..T)râ  )rã  rJ   rK   rL   rá  r   r   r   r   Útest_pathnamesx  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)r›   r  rã  r   r   r   r   Útest_abs_pathnames‰  s    
zWriteTest.test_abs_pathnamesc              	   C   s¬   t  t¡Ž t t| j¡}z| d¡ W | ¡  n
| ¡  0 t td¡}z6|D ]$}|j	dkrN|  
|j	 d¡|j	¡ qNW | ¡  n
| ¡  0 W d   ƒ n1 sž0    Y  d S )Nrè  rE   z./)r   rÖ  rI   r   r   r‚   r   r„   r5   rl   r´   rü   ©r   r3   rÏ   r   r   r   Útest_cwd  s    
zWriteTest.test_cwdc              	      s‚   t ttfD ]r‰ G ‡ fdd„dtjƒ}|ƒ }|  ˆ ¡, tjt| j	|tj
ddid}W d   ƒ n1 sf0    Y  |  |j¡ q
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   ÚBadFile£  s   ró  Znonr%  )r×   r  r¬  )ræ  ÚEOFErrorÚRuntimeErrorr   r™   rÀ   r   r   r‚   r   Ú
PAX_FORMATr­   r)  )r   ró  rñ   r3   r   rñ  r   Útest_open_nonwritable_fileobj¡  s    þ$z'WriteTest.test_open_nonwritable_fileobj)NF)r   r   r   r   r¼  rÀ  rÂ  rÅ  rÍ  rÎ  r.  r4  r5  rJ   rÓ  r   r6  rÕ  rØ  rß  rã  rç  rê  rë  rí  r÷  r   r   r   r   rº  {  s,   ÿ

(

rº  c                   @   s   e Zd ZdS )ÚGzipWriteTestNr‡   r   r   r   r   rø  ²  s   rø  c                   @   s   e Zd ZdS )ÚBz2WriteTestNr‡   r   r   r   r   rù  ¶  s   rù  c                   @   s   e Zd ZdS )ÚLzmaWriteTestNr‡   r   r   r   r   rú  º  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rp|  ¡ }ttdƒ}| ¡ }W d   ƒ n1 sL0    Y  | |¡}|  |j	d¡ n2|  t¡}| ¡ }W d   ƒ n1 s˜0    Y  |  
| d¡t jd¡ d S )NrV   zfound trailing datarÂ   zincorrect zero padding)r   r   r‚   r   r5   Údecompressorr<   Ú
decompressr­   Úunused_datar=   Úcountr·  )r   r3   ZdecrC   r
   r   r   r   Útest_stream_paddingÃ  s    &
&ÿz#StreamWriteTest.test_stream_paddingr  ÚumaskzMissing umask implementationc              	   C   st   t j t¡rt t¡ t  d¡}zBt t| j	¡}| 
¡  t  t¡jd@ }|  |dd¡ W t  |¡ nt  |¡ 0 d S )Né   r  i¤  zwrong file permissions)rJ   rK   Úexistsr‚   r   r  r  r   r   r   r5   r  r  r=   )r   Zoriginal_umaskr3   r   r   r   r   Útest_file_modeÓ  s    

zStreamWriteTest.test_file_mode)r   r   r   r   rü  r   r.  r4  r›   r  r5  rJ   r  r   r   r   r   rû  ¾  s   ÿrû  c                   @   s   e Zd Zdd„ ZdS )ÚGzipStreamWriteTestc                 C   s<   t  t| j¡ ¡  t t¡jdd}tj	 
t¡|vs8J ‚dS )zf
        Ensure the source directory is not included in the tar header
        per bpo-41316.
        zlatin-1r  N)r   r   r‚   r   r5   r¯   r°   Ú	read_textrJ   rK   Údirname)r   Úpayloadr   r   r   Ú test_source_directory_not_leakedæ  s    z4GzipStreamWriteTest.test_source_directory_not_leakedN)r   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+   Ú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 )Nr\   rW   )r>   )r   ra   Zblocksr   r   r   Ú_lengthû  s    zGNUWriteTest._lengthNc                 C   sX   d}t |ƒtjkr(|d7 }||  |¡7 }|d urTt |ƒtjkrT|d7 }||  |¡7 }|S )Nr\   )r>   r   ÚLENGTH_NAMEr  ÚLENGTH_LINK)r   rl   r  rÿ  r   r   r   Ú
_calc_sizeÿ  s    zGNUWriteTest._calc_sizec                 C   sÐ   t  |¡}|r||_t j|_t  td¡}z>t j|_| 	|¡ |  
||¡}|j}|  ||d¡ W | ¡  n
| ¡  0 t  t¡}zD| ¡ }|  |d¡ |  |j|jd¡ |  |j|jd¡ W | ¡  n
| ¡  0 d S )Nr   z%GNU longname/longlink creation failedzunable to read longname member)r   rÇ   rv  ÚLNKTYPErô   r   r‚   Ú
GNU_FORMATr  rÌ   r  rð   r=   r5   rÎ   rG  rl   )r   rl   r  rB   r3   rJ  rK  Úmemberr   r   r   Ú_test  s2    


ÿÿÿzGNUWriteTest._testc                 C   s   |   d¡ d S )Náÿ  longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam©r  r   r   r   r   Útest_longname_1023*  s    zGNUWriteTest.test_longname_1023c                 C   s   |   d¡ d S )Ná   longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamer  r   r   r   r   Útest_longname_1024-  s    zGNUWriteTest.test_longname_1024c                 C   s   |   d¡ d S )Ná  longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longname_r  r   r   r   r   Útest_longname_10250  s    zGNUWriteTest.test_longname_1025c                 C   s   |   dd¡ d S )Nrl   áÿ  longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnkr  r   r   r   r   Útest_longlink_10233  s    zGNUWriteTest.test_longlink_1023c                 C   s   |   dd¡ d S )Nrl   á   longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlinkr  r   r   r   r   Útest_longlink_10246  s    zGNUWriteTest.test_longlink_1024c                 C   s   |   dd¡ d S )Nrl   á  longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_10259  s    zGNUWriteTest.test_longlink_1025c                 C   s   |   dd¡ d S )Nr  r  r  r   r   r   r   Útest_longnamelink_1023<  s    ÿz#GNUWriteTest.test_longnamelink_1023c                 C   s   |   dd¡ d S )Nr  r   r  r   r   r   r   Útest_longnamelink_1024@  s    ÿz#GNUWriteTest.test_longnamelink_1024c                 C   s   |   dd¡ d S )Nr  r"  r  r   r   r   r   Útest_longnamelink_1025D  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                   @   s   e Zd ZdZdd„ ZdS )ÚDeviceHeaderTestrË   c              	   C   sŠ  t j td¡}t  |¡ z^t t| j¡}zHtj	dd}tj	dd}tj
|_tj|_| |¡ | |¡ W | ¡  n
| ¡  0 t td¡}z | d¡}| d¡}W | ¡  n
| ¡  0 |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ ttdƒ}| ¡ }W d   ƒ n1 s0    Y  ||j|j… }	||j|j… }
tdd	ƒ}|  |	| d
¡ |  |
| d¡ W t |¡ nt |¡ 0 d S )NZdevice_header_testZmy_block_device©rl   Zmy_regular_filerE   r   rV   iI  iY  s   0000000 0000000 s                   )rJ   rK   rL   rI   rƒ   r   r   r‚   r   rÇ   ÚBLKTYPErô   ÚREGTYPErÌ   r5   r:   r=   r{  r|  r<   rð   Zoffset_dataÚslicer   r  )r   rÞ  r3   Z	input_blkZ	input_regZ
output_blkZ
output_regZinfilerC  Zbuf_blkZbuf_regZdevice_headersr   r   r   Ú*test_headers_written_only_for_device_filesM  s:    


(
z;DeviceHeaderTest.test_headers_written_only_for_device_filesN)r   r   r   r   r,  r   r   r   r   r'  I  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 r   )r   r  r‚   r   r   r   r   r4   }  s    zCreateTest.setUpc                 C   s:   t | jdƒ}| d¡ W d   ƒ n1 s,0    Y  d S )Nr¬   r¾  )r   Ú	file_pathrÆ   )ÚclsrC   r   r   r   Ú
setUpClass€  s    zCreateTest.setUpClassc                 C   s   t  | j¡ d S r   )r   r  r/  ©r0  r   r   r   ÚtearDownClass…  s    zCreateTest.tearDownClassc                 C   s   t  t| j¡}| | j¡ W d   ƒ n1 s00    Y  |  t¡}| ¡ }W d   ƒ n1 sb0    Y  |  t	|ƒd¡ |  
d|d ¡ d S ©NrW   r.  r   )r   r   r‚   r   r„   r/  r   r·   r=   r>   rž   ©r   ÚtobjÚnamesr   r   r   Útest_create‰  s    *&zCreateTest.test_createc                 C   sÈ   t  t| j¡}| | j¡ W d   ƒ n1 s00    Y  |  t¡ t  t| j¡}W d   ƒ n1 sh0    Y  |  t¡}| 	¡ }W d   ƒ n1 sš0    Y  |  
t|ƒd¡ |  d|d ¡ d S r4  )r   r   r‚   r   r„   r/  rÀ   ÚFileExistsErrorr   r·   r=   r>   rž   r5  r   r   r   Útest_create_existing’  s    *,&zCreateTest.test_create_existingc                 C   sŽ   |   td¡}| | j¡ W d   ƒ n1 s.0    Y  |   t¡}| ¡ }W d   ƒ n1 s`0    Y  |  t|ƒd¡ |  d|d ¡ d S ©NÚxrW   r.  r   )r   r‚   r„   r/  r·   r=   r>   rž   r5  r   r   r   Útest_create_taropenž  s    *&zCreateTest.test_create_taropenc              	   C   sä   |   td¡}| | j¡ W d   ƒ n1 s.0    Y  |  t¡< |   td¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  |   t¡}| ¡ }W d   ƒ n1 s¶0    Y  |  t|ƒd¡ |  	d|d ¡ d S r;  )
r   r‚   r„   r/  rÀ   r9  r·   r=   r>   rž   r5  r   r   r   Útest_create_existing_taropen§  s    *<&z'CreateTest.test_create_existing_taropenc                 C   sè   t  t t¡| j¡N}|  |jt¡ |  	|jt
j t¡¡ | t | j¡¡ | ¡ }W d   ƒ n1 sh0    Y  |  	t|ƒd¡ |  d|d ¡ |  t¡}| ¡ }W d   ƒ n1 sº0    Y  |  	t|ƒd¡ |  d|d ¡ d S r4  )r   r   r¯   r°   r‚   r   rØ   rl   rÙ   r=   rJ   rK   rÚ   r„   r/  r·   r>   rž   r   r5  r   r   r   Útest_create_pathlike_name´  s    &&z$CreateTest.test_create_pathlike_namec                 C   sæ   |   t t¡d¡N}|  |jt¡ |  |jtj	 
t¡¡ | t | j¡¡ | ¡ }W d   ƒ n1 sf0    Y  |  t|ƒd¡ |  d|d ¡ |   t¡}| ¡ }W d   ƒ n1 s¸0    Y  |  t|ƒd¡ |  d|d ¡ d S r;  )r   r¯   r°   r‚   rØ   rl   rÙ   r=   rJ   rK   rÚ   r„   r/  r·   r>   rž   r5  r   r   r   Ú!test_create_taropen_pathlike_nameÂ  s    &&z,CreateTest.test_create_taropen_pathlike_nameN)r   r   r   r   rJ   rK   rL   rI   r/  r4   Úclassmethodr1  r3  r8  r:  r=  r>  r?  r@  r   r   r   r   r-  w  s   

		r-  c                   @   s   e Zd Zdd„ ZdS )ÚGzipCreateTestc                 C   sr   t jt| jdd}| | j¡ W d   ƒ n1 s40    Y  t jtddd}W d   ƒ n1 sd0    Y  d S )NrW   r[  zr:gz©r   r   r‚   r   r„   r/  ©r   r6  r   r   r   Útest_create_with_compresslevelÓ  s    *z-GzipCreateTest.test_create_with_compresslevelN©r   r   r   rE  r   r   r   r   rB  Ñ  s   rB  c                   @   s   e Zd Zdd„ ZdS )ÚBz2CreateTestc                 C   sr   t jt| jdd}| | j¡ W d   ƒ n1 s40    Y  t jtddd}W d   ƒ n1 sd0    Y  d S )NrW   r[  úr:bz2rC  rD  r   r   r   rE  Ü  s    *z,Bz2CreateTest.test_create_with_compresslevelNrF  r   r   r   r   rG  Ú  s   rG  c                   @   s   e Zd Zdd„ ZdS )ÚLzmaCreateTestc                 C   sB   t jt| jdd}| | j¡ W d   ƒ n1 s40    Y  d S )NrW   )ÚpresetrC  rD  r   r   r   Útest_create_with_presetç  s    z&LzmaCreateTest.test_create_with_presetN)r   r   r   rK  r   r   r   r   rI  ã  s   rI  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   rL  ì  s   rL  r  r  c                   @   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   ƒ n1 sL0    Y  zt  | j| j¡ W n2 t	yœ } z|  
d| ¡ W Y d }~n
d }~0 0 t td¡| _| j | j¡ d S )NrÄ   r|   r¬   ó   foorÐ  r   )rJ   rK   rL   rI   rÄ   r|   r   rÆ   r  rÑ  r<  r   r‚   r3   r„   )r   rC   rQ  r   r   r   r4   ø  s    ($zHardlinkTest.setUpc                 C   s&   | j  ¡  t | j¡ t | j¡ d S r   )r3   r5   r   r  rÄ   r|   r   r   r   r   r6     s    
zHardlinkTest.tearDownc                 C   s$   | j  | j¡}|  |jtjd¡ d S )Nzadd file as regular failed)r3   rÁ  rÄ   r=   rô   r   r*  rö   r   r   r   Útest_add_twice  s    ÿzHardlinkTest.test_add_twicec                 C   s$   | j  | j¡}|  |jtjd¡ d S )Nzadd file as hardlink failed)r3   rÁ  r|   r=   rô   r   r  rö   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)r3   ZdereferencerÁ  r|   r=   rô   r   r*  rö   r   r   r   Útest_dereference_hardlink  s
    ÿz&HardlinkTest.test_dereference_hardlinkN)r   r   r   r4   r6   rO  rP  rQ  r   r   r   r   rM  ô  s
   rM  c                   @   s.   e Zd Zd
dd„Z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 | 	¡  n
| 	¡  0 t  t¡}zJ|r~| 
¡ d j}|  ||d¡ n| 
¡ d j}|  ||d¡ W | 	¡  n
| 	¡  0 d S )Nr   ©r  r   zPAX longlink creation failedzPAX longname creation failed)r   rÇ   rv  r  rô   r   r‚   rö  rÌ   r5   r¥   r=   rl   )r   rl   r  rB   r3   Ú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 | ¡  n
| ¡  0 t jtd	d
}z¢|  |j|¡ |  | 	¡ d j|¡ |j 
¡ D ]f\}}|  t|ƒt¡ |  t|ƒt¡ |t jv rŠzt j| |ƒ W qŠ ttfyî   |  d¡ Y qŠ0 qŠW | ¡  n
| ¡  0 d S )Nr|   Ú0z1.23õ   Ã¤Ã¶Ã¼Útest)rÄ   rb  rû   rX  rW  r   )r  r¬  r/   r  r   z"unable to convert pax header field)r   r   r‚   rö  rÌ   rÇ   r5   r=   r¬  r¥   re  ZassertIsNotrô   rç   ÚPAX_NUMBER_FIELDSrÝ  rí   ri   )r   r¬  r3   ÚkeyÚvalr   r   r   Útest_pax_global_header9  s2    ûÿ
z#PaxWriteTest.test_pax_global_headerc                 C   sº   dddœ}t jtdt jdd}z0t  ¡ }d|_d|_||_| |¡ W | 	¡  n
| 	¡  0 t jtdd	}zB| 
¡ d
 }|  |j|¡ |  |jd¡ |  |jd¡ W | 	¡  n
| 	¡  0 d S )NrÄ   Z123)rK   rb  r   r/   ©r  r1   rW  é   r  r   r°  )r   r   r‚   rö  rÇ   rl   rb  r¬  rÌ   r5   r¥   r=   )r   r¬  r3   rÏ   r   r   r   Útest_pax_extended_headerY  s$    
ÿz%PaxWriteTest.test_pax_extended_headerc                 C   sì  t  ¡ }d|_d|_d|_d|_d|_| ¡ }|j|dd}|  	|d d¡ |  
|d	 t¡ |  	|d	 d
¡ |  	|d d¡ |  	|d d¡ |  	|d d¡ |  	|dtdƒ d tdƒ d tdƒ d tdƒ d tdƒ d tdƒ d tdƒ ¡ t  ¡ }d|_d|_d|_d|_d|_| ¡ }|j|dd}|  	|d d¡ |  	|d	 d¡ |  	|d d¡ |  	|d d¡ |  	|d d¡ |  	|dtdƒ d tdƒ d tdƒ d d d  td!ƒ d" td#ƒ d$ tdƒ d tdƒ ¡ d S )%NrÄ   gÍÌÌÌÌ@@rf   r°  é|   r/   r  rl   rû   ra  r?   rb  rc  s   ././@PaxHeaderéV   s9   0000000 0000000 0000000 00000000020 00000000000 010205  xs   ustar 00é÷   s   16 mtime=1000.1
ið  rN  éa   s9   0000644 0000173 0000174 00000000144 00000001750 006516  0u   fooã´l    d(	 r^  i  r   s9   0000000 0000000 0000000 00000000130 00000000000 010207  xs   15 path=fooã´
16 uid=16777216
s$   16 gid=16777217
20 size=10000000000
s   21 mtime=10000000000
i¨  s   foo?é`   s9   0000644 0000000 0000000 00000000000 00000000000 006540  0)r   rÇ   rl   rû   r?   rb  rc  r,  Zcreate_pax_headerr=   rØ   rã   rç   )r   rÏ   ÚinfoÚheaderr   r   r   Útest_create_pax_headerr  sª    
ÿþþþýýýýüûûûÿ	
ÿþþþýüûûûûúùùùÿz#PaxWriteTest.test_create_pax_header)N)r   r   r   r  r\  r_  rg  r   r   r   r   rR    s   
 rR  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 )Nr/   ©Ú_test_unicode_filenamer   r   r   r   Útest_iso8859_1_filename¬  s    z#UnicodeTest.test_iso8859_1_filenamec                 C   s   |   d¡ d S )NÚutf7ri  r   r   r   r   Útest_utf7_filename¯  s    zUnicodeTest.test_utf7_filenamec                 C   s   |   d¡ d S )Núutf-8ri  r   r   r   r   Útest_utf8_filename²  s    zUnicodeTest.test_utf8_filenamec                 C   s‚   t jtd| j|dd}z d}| t  |¡¡ W | ¡  n
| ¡  0 t jt|d}z"|  | ¡ d j	|¡ W | ¡  n
| ¡  0 d S )Nr   r™  ©r  r1   ÚerrorsrW  r  r   )
r   r   r‚   r  rÌ   rÇ   r5   r=   r¥   rl   )r   r1   r3   rl   r   r   r   rj  µ  s    ÿz"UnicodeTest._test_unicode_filenamec                 C   sl   t jtd| jddd}zFt  ¡ }d|_|  t|j|¡ d|_d|_	|  t|j|¡ W | 
¡  n
| 
¡  0 d S )Nr   rŒ   r™  rp  rW  rÄ   )r   r   r‚   r  rÇ   rl   rÀ   ÚUnicodeErrorrÌ   rý   r5   r®  r   r   r   Útest_unicode_filename_errorÄ  s    ÿz'UnicodeTest.test_unicode_filename_errorc                 C   s€   t jtdddd}z^|D ]L}|  t|jƒt¡ |  t|jƒt¡ |  t|jƒt¡ |  t|j	ƒt¡ qW | 
¡  n
| 
¡  0 d S )NrE   r/   r™  ©r1   rq  )r   r   r   ÚassertIsrô   rl   rÙ   rv  rý   rd  r5   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 | ¡  n
| ¡  0 t jtdd}zz| 	d¡}|  
|jd¡ |  
|jd¡ | jt jkrÊ| ¡  t jtdd}| 	d¡}|  
|jd¡ |  
|jd¡ W | ¡  n
| ¡  0 d S )	NrÄ   rW  r   r/   )r   r  r1   r  rŒ   u	   í³¤í³¶í³¼)r   rÇ   rý   rd  r   r‚   r  rÌ   r5   r:   r=   rö  )r   rÏ   r3   r   r   r   Útest_uname_unicodeß  s*    
ÿ

zUnicodeTest.test_uname_unicodeN)
r   r   r   rk  rm  ro  rj  rs  rv  rw  r   r   r   r   rh  ª  s   rh  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 ©Nr»  Úe01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567Ã¿ue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678Ã¿©Ú_test_ustar_namerí   r   r   r   r   Útest_unicode_name1  s    

z#UstarUnicodeTest.test_unicode_name1c                 C   s   |   d¡ |   dt¡ d S ©Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿ue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿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Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r{  r   r   r   r   Útest_unicode_longname1  s    

z'UstarUnicodeTest.test_unicode_longname1c                 C   s   |   dt¡ |   dt¡ d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r{  r   r   r   r   Útest_unicode_longname2  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   Útest_unicode_longname3  s    
z'UstarUnicodeTest.test_unicode_longname3c                 C   s   |   d¡ |   dt¡ d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿r{  r   r   r   r   Útest_unicode_longname4  s    
z'UstarUnicodeTest.test_unicode_longname4Nc                 C   sº   t jtd| jdd>}t  |¡}|d u r4| |¡ n|  ||j|¡ W d   ƒ n1 sX0    Y  |d u r¶t jtddd,}|D ]}|  ||j¡  q˜q€W d   ƒ n1 s¬0    Y  d S )Nr   rn  r]  rE   r  )	r   r   r‚   r  rÇ   rÌ   rÀ   r=   rl   ©r   rl   Úexcr3   rÏ   r   r   r   r|  !  s    
.z!UstarUnicodeTest._test_ustar_namec                 C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S ry  ©Ú_test_ustar_linkrí   r   r   r   r   Útest_unicode_link10  s    

z#UstarUnicodeTest.test_unicode_link1c                 C   s   |   d¡ |   dt¡ d S r~  r†  r   r   r   r   Útest_unicode_link26  s    
z#UstarUnicodeTest.test_unicode_link2c                 C   sÀ   t jtd| jddD}t  d¡}||_|d u r:| |¡ n|  ||j|¡ W d   ƒ n1 s^0    Y  |d u r¼t jtddd,}|D ]}|  ||j¡  qžq†W d   ƒ n1 s²0    Y  d S )Nr   rn  r]  rÄ   rE   r  )	r   r   r‚   r  rÇ   rv  rÌ   rÀ   r=   r„  r   r   r   r‡  :  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   rx  û  s   
rx  c                   @   s   e Zd ZejZdd„ ZdS )ÚGNUUnicodeTestc              
   C   sn   dD ]d\}}t jt|dd<}z| |¡}W n tyH   |  d¡ Y n0 W d   ƒ q1 s^0    Y  qd S )N))rn  u   pax/bad-pax-í³¤í³¶í³¼)r/   u   pax/bad-pax-Ã¤Ã¶Ã¼r•   rt  z%unable to read bad GNU tar pax header©r   r   r   r:   rø   ri   ©r   r1   rl   r3   rÏ   r   r   r   Útest_bad_pax_headerN  s    ÿz"GNUUnicodeTest.test_bad_pax_headerN)r   r   r   r   r  r  rŽ  r   r   r   r   r‹  J  s   r‹  c                   @   s   e Zd ZejZdZdd„ ZdS )ÚPAXUnicodeTestNc              
   C   sn   dD ]d\}}t jt|dd<}z| |¡}W n tyH   |  d¡ Y n0 W d   ƒ q1 s^0    Y  qd S )N))rn  u   pax/hdrcharset-í³¤í³¶í³¼)r/   u   pax/hdrcharset-Ã¤Ã¶Ã¼r•   rt  z)unable to read POSIX.1-2008 binary headerrŒ  r  r   r   r   Útest_binary_headerc  s    ÿz!PAXUnicodeTest.test_binary_header)r   r   r   r   rö  r  rs  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 r   )r‚   r   rJ   rK   r  r   r  r   r   r   r   r4   s  s    zAppendTestBase.setUprË   c              
   C   s¦   t jtdd„}| d¡}d|_| |¡J}t  | j|¡}| ||¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  W d   ƒ n1 s˜0    Y  d S )Nr/   r  r8   rÄ   )r   r   r   r:   rl   r;   rÌ   )r   r   ÚsrcrÏ   rñ   r3   r   r   r   Ú_create_testtarx  s    
zAppendTestBase._create_testtarc                 C   s(   |   d| j ¡ |  tjtjtd¡ d S )NrË   rn   )r“  r   rÀ   r   r¸   r   r‚   r   r   r   r   Útest_append_compressed€  s    z%AppendTestBase.test_append_compressedN)rË   )r   r   r   r4   r“  r”  r   r   r   r   r‘  p  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   sF   t j| jd|d }| t  d¡¡ W d   ƒ n1 s80    Y  d S )Nrn   rS  r|   )r   r   r   rÌ   rÇ   )r   r×   r3   r   r   r   Ú_add_testfile‡  s    zAppendTest._add_testfiler|   c                 C   sD   t j| j|d }|  | ¡ |¡ W d   ƒ n1 s60    Y  d S )NrS  )r   r   r   r=   r·   )r   r7  r×   r3   r   r   r   r  ‹  s    zAppendTest._testc                 C   s   |   ¡  |  ¡  d S r   )r–  r  r   r   r   r   Útest_non_existing  s    zAppendTest.test_non_existingc                 C   s&   t  | jd¡ ¡  |  ¡  |  ¡  d S )NrË   )r   r   r   r5   r–  r  r   r   r   r   Ú
test_empty“  s    zAppendTest.test_emptyc                 C   s.   t  d¡}|  |¡ | d¡ | j|d d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   rS  )r   r™   r–  r]   r  r±   r   r   r   Útest_empty_fileobj˜  s    


zAppendTest.test_empty_fileobjc                 C   sp   |   ¡  t| jdƒ}| ¡ }W d   ƒ n1 s20    Y  t |¡}|  |¡ | d¡ | jddg|d d S )NrV   r   rÄ   r|   )r7  r×   )	r“  r   r   r<   r   r™   r–  r]   r  rj   r   r   r   Útest_fileobjž  s    &


zAppendTest.test_fileobjc                 C   s$   |   ¡  |  ¡  | jddgd d S )NrÄ   r|   )r7  )r“  r–  r  r   r   r   r   Útest_existing§  s    zAppendTest.test_existingc                 C   sJ   t | jdƒ}| |¡ W d   ƒ n1 s,0    Y  |  tj| j¡ d S r¿   )r   r   rÆ   rÀ   r   r¸   r–  )r   r
   rC   r   r   r   Ú_test_error®  s    (zAppendTest._test_errorc                 C   s   |   d¡ d S )Nr[   ©rœ  r   r   r   r   Ú	test_null³  s    zAppendTest.test_nullc                 C   s   |   d¡ d S )Nó                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   Útest_premature_eof¹  s    zAppendTest.test_premature_eofc                 C   s    t  d¡ ¡ }|  |d ¡ d S )NrÄ   rŸ  r¡  rð  r   r   r   Útest_trailing_garbage½  s    z AppendTest.test_trailing_garbagec                 C   s   |   d¡ d S )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  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 )ÚGzipAppendTestNr‡   r   r   r   r   r¥  Ä  s   r¥  c                   @   s   e Zd ZdS )ÚBz2AppendTestNr‡   r   r   r   r   r¦  Ç  s   r¦  c                   @   s   e Zd ZdS )ÚLzmaAppendTestNr‡   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 )	Nr»  rz  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/longnameá   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamer–  rl   é    )r   rÇ   rÈ   rŠ  rÀ   rí   rv  rb  rö   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 ©Nr©  r–  rl   l          )r   rÇ   rÈ   r  rv  rb  rÀ   rí   rö   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 r¬  )r   rÇ   rÈ   rö  rv  rb  rö   r   r   r   Útest_pax_limitsü  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Ä   é   rŒ   r™  s   foo     Zfoobarry  rN  s   foo bar )r=   r   ÚstnÚntsr   r   r   r   Útest_char_fields	  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 )Nó   0000001 rW   ó   7777777 éÿÿ ó   €       rª  ó   €   ÿÿÿÿì   ÿÿ ó   ÿÿÿÿÿÿÿÿrÿ   ó   ÿÿÿÿÿÿÿœéœÿÿÿó   ÿ       ìüÿÿÿ       rÂ   r   s           )r=   r   Úntir   r   r   r   Útest_read_number_fields	  s&    ÿÿÿÿÿz MiscTest.test_read_number_fieldsc                 C   sî   |   t d¡d¡ |   t d¡d¡ |   tjdtjdd¡ |   tjdtjdd	¡ |   tjd
tjdd¡ |   tjdtjdd¡ |   tjdtj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 )NrW   r´  r¶  rµ  rª  rS  r·  r¹  r¸  rÿ   rº  r¼  r»  r¾  r½  g      YÀg      0Bs   €      gš™™™™™¹¿r   )r=   r   Úitnr  r¿  r   r   r   r   Útest_write_number_fields)	  s4    ÿÿÿÿ
ÿþÿÿz!MiscTest.test_write_number_fieldsc                 C   sì   |   t¡  t ddtj¡ W d   ƒ n1 s00    Y  |   t¡  t ddtj¡ W d   ƒ n1 sj0    Y  |   t¡  t ddtj¡ W d   ƒ n1 s¤0    Y  |   t¡  t ddtj¡ W d   ƒ n1 sÞ0    Y  d S )Nrÿ   r°  rª  lýÿÿÿ    é   l        )rÀ   rí   r   rÁ  rŠ  r  r   r   r   r   Útest_number_field_limits@	  s    ...z!MiscTest.test_number_field_limitsc                 C   s   h d£}t j| t|d d S )N>8   r³  ZTruncatedHeaderErrorÚLinkOutsideDestinationErrorZSubsequentHeaderErrorr  rõ   ÚFIFOTYPEÚfilemodeÚCHRTYPEZcalc_chksumsZEOFHeaderErrorÚ
tar_filterÚNULÚAbsolutePathErrorZREGULAR_TYPESZXGLTYPEZ	GNU_MAGICÚfully_trusted_filterÚpwdÚSYMTYPErÁ  ZGNUTYPE_LONGLINKr  ZCONTTYPEr¿  r²  r  r*  r¸  ZLENGTH_PREFIXr)  ZAREGTYPEÚversionÚFilterErrorÚOutsideDestinationErrorr¨  ZEmptyHeaderErrorZInvalidHeaderErrorrY  ÚmainÚcopyfileobjÚdata_filterÚSpecialFileErrorZExFileObjectÚgrpZ
PAX_FIELDSr±  Z	GNU_TYPESZSUPPORTED_TYPESr·  ZPOSIX_MAGICZSOLARIS_XHDTYPEZsymlink_exceptionÚAbsoluteLinkErrorZPAX_NAME_FIELDSZGNUTYPE_SPARSE)Ú	blacklist)r   Zcheck__all__r   )r   rØ  r   r   r   Útest__all__J	  s    zMiscTest.test__all__N)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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   s2   t jddg|¢R i |¤Ž\}}}| tj ¡ d¡S )Nú-mr   ó   
)r   Zassert_python_okr¶   rJ   Úlineseprg   )r   Úargsrg  Úrcr¢   Úerrr   r   r   Ú
tarfilecmdd	  s    ÿzCommandLineTest.tarfilecmdc                 G   s   t jddg|¢R Ž S )NrÛ  r   )r   Zassert_python_failure©r   rÞ  r   r   r   Útarfilecmd_failurei	  s    z"CommandLineTest.tarfilecmd_failurec                 C   sr   t  d¡t  d¡g}|  t j|¡ t |d¡0}|D ]}|j|tj 	|¡d q4W d   ƒ n1 sd0    Y  d S )Nútokenize_tests.txtú9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr   rà  )
r   rÑ   r  r  r   r   r„   rJ   rK   rÚ  )r   Útar_nameÚfilesÚtfZtardatar   r   r   Úmake_simple_tarfilel	  s    ÿz#CommandLineTest.make_simple_tarfilec                 C   s†   t  d¡g}|  t j|¡ t |d¡L}t d¡}|j|t 	d¡d t d¡}|j|t 	d¡d W d   ƒ n1 sx0    Y  d S )Nrä  r   Úbenignr[   rS  ú../evil)
r   rÑ   r  r  r   r   rÇ   rÌ   r   r™   )r   ræ  rç  rè  rê  Zevilr   r   r   Úmake_evil_tarfileu	  s    

z!CommandLineTest.make_evil_tarfilec                 C   s|   |   ¡ \}}}|  |d¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |   dd¡\}}}|  |d¡ |  | ¡ d¡ d S )Nr[   s   usages   errors   requiredú-lr   )rã  r=   rž   Úlowerr”  Ústrip)r   rß  r¢   rà  r   r   r   Útest_bad_use~	  s    zCommandLineTest.test_bad_usec                 C   s0   t D ]&}dD ]}|  ||¡}|  |d¡ qqd S )N)ú-tz--testr[   )Útesttarnamesrá  r=   ©r   ræ  Úoptr¢   r   r   r   Útest_test_commandˆ	  s    z!CommandLineTest.test_test_commandc                 C   s6   t D ],}dD ]"}| j|d|dd}|  d|¡ qqd S )N©ú-vz	--verboserñ  rn  ©ÚPYTHONIOENCODINGs   is a tar archive.
)rò  rá  rž   ró  r   r   r   Útest_test_command_verboseŽ	  s    
ÿz)CommandLineTest.test_test_command_verbosec                 C   s0  t  d¡}|  d|¡\}}}|  d|¡ |  |d¡ |  |d¡ tD ]æ}| j|dÄ t|dƒ}| ¡ }W d   ƒ n1 s~0    Y  zttt	dƒ"}| 
|d d	… ¡ W d   ƒ n1 s¼0    Y  |  dt	¡\}}}|  |d¡ |  |d¡ W t  t	¡ nt  t	¡ 0 W d   ƒ qD1 s 0    Y  qDd S )
Nú
zipdir.ziprñ  ó    is not a tar archive.r[   rW   )ræ  rV   r¬   r  )r   rÑ   rã  rž   r=   rò  ÚsubTestr   r<   r‚   rÆ   r  )r   Úzipnamerß  r¢   rà  ræ  rñ   r
   r   r   r   Útest_test_command_invalid_file•	  s     
&0z.CommandLineTest.test_test_command_invalid_filec              
   C   s¤   t D ]š}t ¡ H}t |d¡}|jdd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  | ¡  dd¡}dD ] }| j||dd}|  	||¡ q|qd S )NrE   Fr‘   rŒ   r–   )rí  z--listrø  ©
rò  r   Zcaptured_stdoutr   r   rT   r   rg   rá  r=   ©r   ræ  rÏ   rè  Úexpectedrô  r¢   r   r   r   Útest_list_command©	  s    
Hÿz!CommandLineTest.test_list_commandc              
   C   s¦   t D ]œ}t ¡ H}t |d¡}|jdd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  | ¡  dd¡}dD ]"}| j|d|dd}|  	||¡ q|qd S )	NrE   Tr‘   rŒ   r–   rö  rí  rø  r   r  r   r   r   Útest_list_command_verbose´	  s    
H
ÿz)CommandLineTest.test_list_command_verbosec                 C   sD   t  d¡}|  d|¡\}}}|  d|¡ |  |d¡ |  |d¡ d S )Nrû  rí  rü  r[   rW   )r   rÑ   rã  rž   r=   ©r   rþ  rß  r¢   rà  r   r   r   Útest_list_command_invalid_file¿	  s
    
z.CommandLineTest.test_list_command_invalid_filec              
   C   s   t  d¡t  d¡g}dD ]r}z`| j|tg|¢R Ž }|  |d¡ t t¡}| ¡  W d   ƒ n1 sf0    Y  W t  t¡ qt  t¡ 0 qd S )Nrä  rå  )ú-cz--creater[   )	r   rÑ   rá  r‚   r=   r   r   r¥   r  ©r   rç  rô  r¢   r3   r   r   r   Útest_create_commandÆ	  s    ÿ(z#CommandLineTest.test_create_commandc              
   C   s˜   t  d¡t  d¡g}dD ]z}zh| j|dtg|¢R ddiŽ}|  d|¡ t t¡}| ¡  W d   ƒ n1 sn0    Y  W t  t¡ qt  t¡ 0 qd S )Nrä  rå  rö  r  rù  rn  s    file created.)	r   rÑ   rá  r‚   rž   r   r   r¥   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g|¢R Ž }|  |d¡ t t¡}| ¡  W d   ƒ n1 sV0    Y  W t  t¡ nt  t¡ 0 d S )Nrä  r  r[   )	r   rÑ   rá  Údotlessnamer=   r   r   r¥   r  )r   rç  r¢   r3   r   r   r   Ú$test_create_command_dotless_filenameá	  s    (z4CommandLineTest.test_create_command_dotless_filenamec              	   C   sŒ   t j td¡}t d¡g}z`| jd|g|¢R Ž }|  |d¡ t 	|¡}| 
¡  W d   ƒ n1 sd0    Y  W t |¡ nt |¡ 0 d S )Nz.testtarrä  r  r[   )rJ   rK   rL   rI   r   rÑ   rá  r=   r   r   r¥   r  )r   ræ  rç  r¢   r3   r   r   r   Ú(test_create_command_dot_started_filenameë	  s    (z8CommandLineTest.test_create_command_dot_started_filenamec              
   C   s    t  d¡t  d¡g}tttfD ]|}|js*qzbtd |j }| jd|g|¢R Ž }| 	|¡}| 
¡  W d   ƒ n1 sv0    Y  W t  |¡ qt  |¡ 0 qd S )Nrä  rå  rè  r  )r   rÑ   r    r$   r(   r   r‚   r   rá  r   r¥   r  )r   rç  Zfiletyperæ  r¢   r3   r   r   r   Útest_create_command_compressedö	  s    ÿ(z.CommandLineTest.test_create_command_compressedc              
   C   sv   |   t¡ dD ]b}zPt t¡ |  |t¡}W d   ƒ n1 s@0    Y  |  |d¡ W t t¡ qt t¡ 0 qd S )N)ú-ez	--extractr[   ©ré  r‚   r   r   Ú	tarextdirrá  r=   r  ©r   rô  r¢   r   r   r   Útest_extract_command
  s    
*z$CommandLineTest.test_extract_commandc              
   C   s|   |   t¡ dD ]h}zVt t¡" | j|dtdd}W d   ƒ n1 sF0    Y  |  d|¡ W t t¡ qt t¡ 0 qd S )Nrö  r  rn  rø  ó    file is extracted.)ré  r‚   r   r   r  rá  rž   r  r  r   r   r   Útest_extract_command_verbose
  s    

ÿ$z,CommandLineTest.test_extract_command_verbosec              	   C   s    |   t¡ tj td¡}t t¡ zlt |¡D |  	dtddd¡ | j
dtddddd}|  d	|¡ W d   ƒ n1 sx0    Y  W t t¡ nt t¡ 0 d S )
NÚdestr  r÷  z--filterr
   Úfully_trustedrn  rø  r  )rì  r‚   rJ   rK   rL   r  rƒ   r   r   rã  rá  rž   r  )r   Údestdirr¢   r   r   r   Útest_extract_command_filter
  s     

þý,z+CommandLineTest.test_extract_command_filterc              	   C   sn   |   t¡ zRt t¡ |  dtd¡}W d   ƒ n1 s:0    Y  |  |d¡ W t t¡ nt t¡ 0 d S )Nr  Zspamdirr[   r  )r   r¢   r   r   r   Ú(test_extract_command_different_directory-
  s    
,z8CommandLineTest.test_extract_command_different_directoryc                 C   sn   t  d¡}t  t¡" |  d|¡\}}}W d   ƒ n1 s<0    Y  |  d|¡ |  |d¡ |  |d¡ d S )Nrû  r  rü  r[   rW   )r   rÑ   r   r  rã  rž   r=   r  r   r   r   Ú!test_extract_command_invalid_file6
  s    
0z1CommandLineTest.test_extract_command_invalid_fileN)r   r   r   rá  rã  ré  rì  rð  rõ  rú  rÿ  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r   r   r   r   rÚ  b	  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S )ÚContextManagerTestc                 C   sJ   t  t¡}|  |jd¡ W d   ƒ n1 s.0    Y  |  |jd¡ d S )Nzclosed inside runtime contextúcontext manager failed)r   r   r   r­   r)  r´   rº   r   r   r   Ú
test_basicA
  s    ,zContextManagerTest.test_basicc              	   C   sd   t  t¡}| ¡  |  t¡4 | W d   ƒ n1 s80    Y  W d   ƒ n1 sV0    Y  d S r   )r   r   r   r5   rÀ   ræ  rº   r   r   r   Útest_closedF
  s
    
zContextManagerTest.test_closedc              	   C   sz   |   t¡>}t t¡}t‚W d   ƒ n1 s00    Y  W d   ƒ n1 sN0    Y  |  |jtd¡ |  |j	d¡ d S )Nz)wrong exception raised in context managerr  )
rÀ   Ú	Exceptionr   r   r   ræ  rØ   Ú	exceptionr´   r)  )r   r…  r3   r   r   r   Útest_exceptionO
  s    @
ÿz!ContextManagerTest.test_exceptionc                 C   sj   z4t  td¡}t‚W d   ƒ n1 s(0    Y  W n   Y n0 |  tj t¡dd¡ |  |j	d¡ d S )Nr   r   z-context manager wrote an end-of-archive blockr  )
r   r   r‚   r   r=   rJ   rK   r¿  r´   r)  rº   r   r   r   Útest_no_eofX
  s    &ÿzContextManagerTest.test_no_eofc                 C   sF   t  td¡ W d   ƒ n1 s"0    Y  |  tj t¡dd¡ d S )Nr   r   z-context manager wrote no end-of-archive block)r   r   r‚   r”  rJ   rK   r¿  r   r   r   r   Útest_eofd
  s
    ÿzContextManagerTest.test_eofc              	   C   sŽ   t tdƒp}z6tj |dd}t‚W d   ƒ n1 s60    Y  W n   Y n0 |  |jd¡ |  |jd¡ W d   ƒ n1 s€0    Y  d S )Nr¬   r   rÖ   zexternal file object was closedr  )r   r‚   r   r   r­   r)  r´   rÛ   r   r   r   rš  l
  s    &zContextManagerTest.test_fileobjN)	r   r   r   r  r  r"  r#  r$  rš  r   r   r   r   r  ?
  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   s^   | j  |t¡ ttj t|¡dƒ}| ¡ }W d   ƒ n1 s@0    Y  |  t	|ƒt
¡ d S r³   )r3   rH   rI   r   rJ   rK   rL   r<   r=   r   r@   )r   rl   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 )Nrq   ©r&  r   r   r   r   Útest_hardlink_extraction1†
  s    z+LinkEmulationTest.test_hardlink_extraction1c                 C   s   |   d¡ d S )Nrt   r(  r   r   r   r   Útest_hardlink_extraction2‹
  s    z+LinkEmulationTest.test_hardlink_extraction2rÔ  z Skip emulation if symlink existsc                 C   s   |   d¡ d S )Nrw   r(  r   r   r   r   Útest_symlink_extraction1
  s    z*LinkEmulationTest.test_symlink_extraction1c                 C   s   |   d¡ d S )Nry   r(  r   r   r   r   Útest_symlink_extraction2•
  s    z*LinkEmulationTest.test_symlink_extraction2N)r   r   r   r&  r.  r7  r5  rJ   rK   r)  r*  r+  r,  r   r   r   r   r%  y
  s"   ÿ
ÿ
ÿ
ÿr%  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBz2PartialReadTestc              	      sx   G ‡ fdd„dt jƒ‰ t t d¡ ¡ ¡}tt|ƒd ƒD ]8}ztj	ˆ |d |… ƒ|d W q: tj
yp   Y q:0 q: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ÚAssertionErrorr^   r>   r   Úsuperr<   )r   rU  ©Ú	MyBytesIOÚ	__class__r   r   r<   ¢
  s    z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readc                    s   d| _ tˆ | ƒj|Ž S rî  )r.  r0  r]   râ  r1  r   r   r]   ¨
  s    z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)r   r   r   r.  r<   r]   Ú__classcell__r   ©r2  )r3  r   r2   
  s   r2  rÄ   rW   rÖ   )r   r™   r%   Úcompressr   rÇ   rÈ   Úranger>   r   r¸   )r   r   r
   r<  r   r5  r   Ú_test_partial_inputŸ
  s    z&Bz2PartialReadTest._test_partial_inputc                 C   s   |   d¡ d S )NrE   ©r8  r   r   r   r   Útest_partial_input³
  s    z%Bz2PartialReadTest.test_partial_inputc                 C   s   |   d¡ d S )NrH  r9  r   r   r   r   Útest_partial_input_bz2¶
  s    z)Bz2PartialReadTest.test_partial_input_bz2N)r   r   r   r8  r:  r;  r   r   r   r   r-  ›
  s   r-  c                  C   sZ   zdd l } dd l}W n ty(   Y dS 0 |  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¡X}|D ]B\}}}}	}
t |¡}||_||_	d	|_
d	|_|	|_| ||
¡ qJW d   ƒ n1 s¢0    Y  tS )
Ns   contentéc   éb   éM   éL   éX   éW   r   r<  )r   r™   r   r*  rõ   r   r‚   rÇ   rb  rc  rý   rd  rô   rÌ   )Ú
filename_1Ú	dirname_1Ú
filename_2rC   re  Útarflrl   rb  rc  ÚtypÚcontentsrÏ   r   r   r   Ú_make_test_archiveÏ
  s    
þ
,z#NumericOwnerTest._make_test_archivec                 c   sn   d| _ d}d}|}|}tj ||¡}t |||¡}t |¡}||||fV  W d   ƒ n1 s`0    Y  d S )Nr   znumeric-owner-testfilerâ  )rÈ  rJ   rK   rL   rC  rP  r   r   )Úmock_geteuidZfnamer  rJ  rK  rL  Ztar_filenamerM  r   r   r   Ú_setup_testç
  s    þzNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc           
      C   sœ   |   |¡8\}}}}|j|tdd |j|tdd W d   ƒ n1 sH0    Y  tj t|¡}tj t|¡}	|jtj 	|dd¡tj 	|	dd¡gdd d S )NT©Znumeric_ownerrD  rE  rH  rI  ©Z	any_order)
rR  rH   rI   rJ   rK   rL   Úassert_has_callsr.  r/  Úcall)
r   rQ  Ú
mock_chmodÚ
mock_chownrM  rJ  Ú_rL  Ú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   ƒ n1 s60    Y  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 )
NTrS  rD  rE  rF  rG  rH  rI  rT  )
rR  r  rI   rJ   rK   rL   rU  r.  r/  rV  )r   rQ  rW  rX  rM  rJ  rK  rL  rZ  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   sb   |   |¡(\}}}}|j|tdd W d   ƒ n1 s80    Y  tj t|¡}| |dd¡ d S )NFrS  r   )rR  rH   rI   rJ   rK   rL   Zassert_called_with)r   rQ  rW  rX  rM  rJ  rY  rZ  r   r   r   Ú"test_extract_without_numeric_owner(  s    .z3NumericOwnerTest.test_extract_without_numeric_ownerc              	   C   sL   |   |¡.\}}}}|  t|j|tdd¡ W d   ƒ n1 s>0    Y  d S )NFT)rR  rÀ   rÝ  rH   rI   )r   rQ  rM  rJ  rY  r   r   r   Útest_keyword_only7  s    ÿz"NumericOwnerTest.test_keyword_onlyN)r   r   r   r©  rP  r   rR  r.  r/  r0  r\  r]  r4  r@  r^  r_  r   r   r   r   rC  Æ
  s,   	






ÿ




rC  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚReplaceTestsc                 C   sN   | j  d¡}|jdd}|  |jd¡ |  |jd¡ |  | j  d¡jd¡ d S )Nr8   z
misc/otherr(  )r3   r:   r¶   r=   rl   ©r   r  Úreplacedr   r   r   Útest_replace_name?  s    ÿzReplaceTests.test_replace_namec                 C   sN   | j  d¡}| ¡ }d|jd< |  |jd d¡ |  | j  d¡jd d¡ d S )Nr«  únot-barrd  r|   ©r3   r:   r¶   r¬  r=   ra  r   r   r   Útest_replace_deepG  s    
ÿzReplaceTests.test_replace_deepc                 C   sR   | j  d¡}|jdd}d|jd< |  |jd d¡ |  | j  d¡jd d¡ d S )Nr«  F)Zdeeprd  rd  re  ra  r   r   r   Útest_replace_shallowO  s    
ÿz!ReplaceTests.test_replace_shallowc              	   C   s~   | j  d¡}dD ]h}| j|dH |jf i |d i¤Ž}|  t||ƒd ¡ |  t||ƒd ¡ W d   ƒ q1 sn0    Y  qd S )Nr8   )rl   rû   r   rv  rb  rc  rý   rd  ©Ú	attr_name)r3   r:   rý  r¶   r=   rÝ   r”  )r   r  ri  rb  r   r   r   Útest_replace_allW  s    zReplaceTests.test_replace_allc                 C   sF   | j  d¡}|  t¡ |jdd W d   ƒ n1 s80    Y  d S )Nr8   iÍ[)rð   )r3   r:   rÀ   rÝ  r¶   )r   r  r   r   r   Útest_replace_internal`  s    z"ReplaceTests.test_replace_internalN)r   r   r   rc  rf  rg  rj  rk  r   r   r   r   r`  >  s
   	r`  c                   @   st   e Zd ZdZedd„ ƒZedd„ ƒZ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d„ ZdS )ÚNoneInfoExtractTestsNc                    sj   t jtddd}t t¡d ˆ _d|_|jˆ jˆ j	d | 
¡  t‡ fdd„t ˆ j¡ d	¡D ƒƒˆ _d S )
NrE   r/   r0   Zextractall_ctrlr   ©rÙ  c                 3   s   | ]}|  ˆ j¡V  qd S r   )Úrelative_toÚcontrol_dir©r  Úpr2  r   r   Ú	<genexpr>v  s   ÿz2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>ú**/*)r   r   r   r¯   r°   rI   ro  r  r  Úextraction_filterr5   ÚsetÚglobÚcontrol_paths)r0  r3   r   r2  r   r1  o  s    þzNoneInfoExtractTests.setUpClassc                 C   s   t  | j¡ d S r   )Úshutilr  ro  r2  r   r   r   r3  z  s    z"NoneInfoExtractTests.tearDownClassc                    s4   t ‡ fdd„t ˆ ¡ d¡D ƒƒ}|  | j|¡ d S )Nc                 3   s   | ]}|  ˆ ¡V  qd S r   )rn  rp  ©rÃ  r   r   rr    s   ÿz;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>rs  )ru  r¯   r°   rv  r=   rw  )r   rÃ  Z	got_pathsr   ry  r   Úcheck_files_present~  s    þz(NoneInfoExtractTests.check_files_presentc                 g   sŠ   t  t¡d }d| j_| j ¡ D ]}|D ]}t||d ƒ q(q t |¡0 | jj	|dd |  
|¡ |V  W d   ƒ n1 s|0    Y  d S )NZextractall_noner   r  rm  )r¯   r°   rI   r3   r  r¥   Úsetattrr   r"  r  rz  )r   Ú
attr_namesr  r  ri  r   r   r   Úextract_with_none„  s    
z&NoneInfoExtractTests.extract_with_nonec                 C   s¾   t  t¡ ¡ j}|  d¡}t  |¡ d¡D ]n}| j|dN z| ¡ j}W n tyh   | 	¡ sd‚ Y n0 |  
| ¡ j|¡ W d   ƒ q,1 s0    Y  q,W d   ƒ n1 s°0    Y  d S )Nrû   rs  r  )r¯   r°   rI   r  Úst_mtimer}  rv  rý  ræ  Ú
is_symlinkZassertGreaterEqual)r   Znowr  rK   rû   r   r   r   Útest_extractall_none_mtime  s    z/NoneInfoExtractTests.test_extractall_none_mtimec              
   C   sØ   t  t¡ ¡ j}t  t¡d }| d¡ | ¡ j}|  d¡ˆ}t  |¡ d¡D ]f}| j|dF | 	¡ r||  
| ¡ j|¡ n| ¡ r–|  
| ¡ j|¡ W d   ƒ qN1 sª0    Y  qNW d   ƒ n1 sÊ0    Y  d S )NÚregular_filer   r   rs  r  )r¯   r°   rI   r  r  Ú
write_textr}  rv  rý  Úis_dirr=   Úis_file)r   Zdir_moder  Zregular_file_moder  rK   r   r   r   Útest_extractall_none_mode   s    

ÿz.NoneInfoExtractTests.test_extractall_none_modec                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrb  ©r}  r   r   r   r   Útest_extractall_none_uid°  s    z-NoneInfoExtractTests.test_extractall_none_uidc                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrc  r†  r   r   r   r   Útest_extractall_none_gid´  s    z-NoneInfoExtractTests.test_extractall_none_gidc                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrý   r†  r   r   r   r   Útest_extractall_none_uname¸  s    z/NoneInfoExtractTests.test_extractall_none_unamec                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrd  r†  r   r   r   r   Útest_extractall_none_gname¼  s    z/NoneInfoExtractTests.test_extractall_none_gnamec                 C   s4   |   dddd¡ W d   ƒ n1 s&0    Y  d S )Nrb  rc  rý   rd  r†  r   r   r   r   Útest_extractall_none_ownershipÀ  s    z3NoneInfoExtractTests.test_extractall_none_ownership)r   r   r   rt  rA  r1  r3  rz  r   r}  r€  r…  r‡  rˆ  r‰  rŠ  r‹  r   r   r   r   rl  f  s   



rl  c                   @   s   e Zd ZdZdS )ÚNoneInfoExtractTests_Datar
   N©r   r   r   rt  r   r   r   r   rŒ  Ä  s   rŒ  c                   @   s   e Zd ZdZdS )Ú!NoneInfoExtractTests_FullyTrustedr  Nr  r   r   r   r   rŽ  Ç  s   rŽ  c                   @   s   e Zd ZdZdS )ÚNoneInfoExtractTests_Tarr3   Nr  r   r   r   r   r  Ë  s   r  c                   @   s   e Zd ZdZdS )ÚNoneInfoExtractTests_DefaultNr  r   r   r   r   r  Î  s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNoneInfoTests_Miscc                 C   s  t  ¡ }tjtjtjfD ]þ}| j|dÜ tj|d|d}| t	¡}z| 
|¡ W n  tyr   |tjkrln‚ Y n„0 dD ]|}| j|d\ |jf i |d i¤Ž}|  t|› ¡ | 
|¡ W d   ƒ n1 sÌ0    Y  W d   ƒ qx1 sê0    Y  qxW d   ƒ q1 s0    Y  qd S )N)Ú	tarformatr   )r×   r   r  )rû   r   rb  rc  rý   rd  rh  )r   r™   r   rŠ  r  rö  rý  r   rÁ  r   rÌ   r   r¶   r¼   rí   )r   Úbior’  r3   rB   ri  rb  r   r   r   Útest_addÓ  s(    ÿ

ÿzNoneInfoTests_Misc.test_addc                 C   sä  dhdhdhdhdhdhddhddhfD ]´}| j |d tjtdd	^}tjt ¡ d
dd}t t	d|¡ | 
¡  W d   ƒ n1 s0    Y  | ¡ D ]}|D ]}t||d ƒ qªq¢tjt ¡ d
dd}t t	d|¡ | 
¡  W d   ƒ n1 sþ0    Y  t| ¡  ¡  ¡ | ¡  ¡  ¡ ƒD ]p\}}|dhkr^t d|¡r^|  |d¡ q*|dhkrˆt d|¡rˆ|  |d¡ q*|dhkr²t d|¡r²|  |d¡ q*|dhkr| d¡r| d¡\}	}
| d¡\}}|  ||
¡ |  |d¡ q*|dhkrR| d¡rR| d¡\}	}
| d¡\}}|  ||	¡ |  |d¡ q*|dhkr | d¡r | d¡\}	}
| d¡\}}|  ||
¡ |  |d¡ nú|dhkrî| d¡rî| d¡\}	}
| d¡\}}|  ||	¡ |  |d¡ n¬|ddhkr>| d¡r>| d¡\}	}
| d¡\}}|  ||
¡ |  |d¡ n\|ddhkrŽ| d¡rŽ| d¡\}	}
| d¡\}}|  ||	¡ |  |d¡ n|  ||¡ q*W d   ƒ n1 s´0    Y  W d   ƒ q(1 sÔ0    Y  q(d S )Nrû   r   rb  rc  rý   rd  )r|  r/   r  rŒ   r   rŽ   r   s   2003-01-\d\ds
   ????-??-??s   \d\d:\d\d:\d\ds   ??:??:??s   .([r-][w-][x-]){3}s
   ??????????)ó   tarfile/ó   lars/ó   foo/ó   /s   [0-9]+)ó   /tarfileó   /usersó   /baró   1000/s   Noneó   /100)r•  r–  r—  rœ  )r™  rš  r›  r  )rý  r   r   r   r   rN   r™   r   rš   r›   rT   r¥   r{  r+  rœ   r   rÊ  ÚreÚmatchr=   rü   rŸ   Úendswith)r   r|  r3   Ztio_prevr  ri  Ztio_newr  ÚgotZexp_userZ	exp_groupZgot_userZ	got_groupr   r   r   r£   í  sŠ    þ
ÿ&&ÿÿÿÿÿÿÿzNoneInfoTests_Misc.test_listN)r   r   r   r”  r£   r   r   r   r   r‘  Ò  s   r‘  c                 C   s  | dd… }t jddœ|d  t jddœ|d  B t jdt jt jB t jdœ|d  B t jddœ|d  B t jddœ|d	  B t jdt jt jB t jdœ|d
  B t j	ddœ|d  B t j
ddœ|d  B t jdt jt jB t jdœ|d  B }t  |¡dd… | dd… ksJ ‚|S )z†Inverse of `stat.filemode` (for permission bits)

    Using mode strings rather than numbers makes the later tests more readable.
    rW   Nr   )rE   ú-)r   r¢  )r<  r¢  ra   ÚSrZ   ry  é   é   rÃ  é   )r<  r¢  rÏ   ÚTr°  )r  ÚS_IRUSRÚS_IWUSRÚS_IXUSRÚS_ISUIDÚS_IRGRPÚS_IWGRPÚS_IXGRPÚS_ISGIDÚS_IROTHÚS_IWOTHÚS_IXOTHÚS_ISVTXrÇ  )r   Zstr_modeÚresultr   r   r   Ú_filemode_to_int0  sH    ÿ
þþþûú
þþù
öõ
þþôÿ$rµ  c                   @   sF   e Zd ZdZdd„ Zdd„ Zdd„ Zdddddd	œd
d„Zdd„ ZdS )ÚArchiveMakerzèHelper to create a tar file with specific contents

    Usage:

        with ArchiveMaker() as t:
            t.add('filename', ...)

        with t.open() as tar:
            ... # `tar` is now a TarFile with 'filename' in it!
    c                 C   s   t  ¡ | _d S r   )r   r™   r“  r   r   r   r   r(  W  s    zArchiveMaker.__init__c                 C   s   t jd| jd| _| S )Nr   rï   )r   r   r“  Útar_wr   r   r   r   Ú	__enter__Z  s    zArchiveMaker.__enter__c                 G   s    | j  ¡  | j ¡ | _d | _d S r   )r·  r5   r“  r   rO  )r   r…  r   r   r   Ú__exit__^  s    
zArchiveMaker.__exit__N)rô   Ú
symlink_toÚhardlink_tor   r?   c          
      K   sÀ   t |ƒ}t |¡jf i |¤Ž}|dur,||_|r:t|ƒ|_|durRtj}t |ƒ|_|durjtj	}t |ƒ|_| 
d¡r‚|du r‚tj}|dur||_| ¡ rªt t|jƒ¡}	nd}	| j ||	¡ dS )z5Add a member to the test archive. Call within `with`.Nr€   )rÙ   r   rÇ   r¶   r?   rµ  r   rÎ  rv  r  r   rõ   rô   rA  r   r™   rç   r·  rÌ   )
r   rl   rô   rº  r»  r   r?   rg  rB   r×   r   r   r   r„   c  s(    


zArchiveMaker.addc                 K   s    t  | j¡}tjf d|i|¤ŽS )z9Open the resulting archive as TarFile. Call after `with`.r×   )r   r™   rO  r   r   )r   rg  r“  r   r   r   r   |  s    zArchiveMaker.open)	r   r   r   Ú__doc__r(  r¸  r¹  r„   r   r   r   r   r   r¶  L  s   
ÿr¶  c                   @   s
  e Zd Ze e¡d Zed Ze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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/d0„ Zd1d2„ Zd3d4„ Z d5d6„ Z!d7d8„ Z"d9d:„ Z#d;d<„ Z$dS )?ÚTestExtractionFiltersÚouterdirr  c                 c   sØ   t  | j¡¸ z|j| j|d W n2 tyT } z|| _tƒ | _W Y d}~n0d}~0 0 d| _t| j 	d¡ƒ| _| j 
| j¡ zdV  W | ¡  n
| ¡  0 | jr¦| j‚|  | jtƒ ¡ W d  ƒ n1 sÊ0    Y  dS )a}  Extracts `tar` to `self.destdir` and allows checking the result

        If an error occurs, it must be checked using `expect_exception`

        Otherwise, all resulting files must be checked using `expect_file`,
        except the destination directory itself and parent directories of
        other files.
        When checking directories, do so before their contents.
        rm  Nrs  )r   r"  r¾  r  r  r   Úraised_exceptionru  Úexpected_pathsrv  Údiscardr5   r=   )r   r3   rÙ  r…  r   r   r   Úcheck_contextŒ  s    z#TestExtractionFilters.check_contextNc           
      C   sj  | j r| j ‚t tj | j| ¡¡}|  || j¡ | j 	|¡ |durrt
jdkrrt t | ¡ j¡¡}|  ||¡ |du r”t|tƒr”| d¡r”tj}|durÎ| j|  ¡ }t |¡}||krÌ|  | |¡¡ nb|tjksà|du rð|  | ¡ ¡ n@|tjkr|  | ¡ ¡ n$|tjkr(|  | ¡ ¡ nt|ƒ‚|durL|  | ¡ j|¡ |j D ]}	| j !|	¡ qRdS )z'Check a single file. See check_context.Nr  r€   )"r¿  r¯   r°   rJ   rK   Únormpathr  rž   rÀ  Úremover›   r  r  rÇ  ÚS_IMODEr  r=   r  rÙ   r   r   rõ   Úreadlinkr´   Úsamefiler*  r„  rƒ  rÆ  Úis_fifoÚNotImplementedErrorrŸ  ÚparentsrÁ  )
r   rl   rô   rº  r   r?   rK   r¡  r  Úparentr   r   r   Úexpect_file©  s4    


z!TestExtractionFilters.expect_filerè  c                 C   sF   |   ||¡  | jd ur| j‚W d   ƒ n1 s20    Y  d | _d S r   )r¼   r¿  )r   Úexc_typeZ
message_rer   r   r   Úexpect_exceptionÑ  s    
$z&TestExtractionFilters.expect_exceptionc              	   C   sx   t ƒ }| d¡ W d   ƒ n1 s&0    Y  dD ]>}|  | ¡ |¡ |  d¡ W d   ƒ q41 sh0    Y  q4d S )Nz
benign.txt)r  r3   r
   ©r¶  r„   rÂ  r   rÌ  ©r   ÚarcrÙ  r   r   r   Útest_benign_file×  s
    (z&TestExtractionFilters.test_benign_filec              	   C   sî   t ƒ  }| | jd ¡ W d   ƒ n1 s,0    Y  |  | ¡ d¡ |  d¡ W d   ƒ n1 sf0    Y  dD ]t}|  | ¡ |¡P t| jƒ d¡r¼t| jƒ d¡}|  |› d¡ n|  	t
jd¡ W d   ƒ qt1 sÞ0    Y  qtd S )Nzescaped.evilr  z../escaped.evil©r3   r
   r€   z/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r¶  r„   r¾  rÂ  r   rÌ  rÙ   rü   ÚlstriprÎ  r   rË  )r   rÑ  rÙ  Zouterdir_strippedr   r   r   Útest_absoluteÞ  s    .(þz#TestExtractionFilters.test_absolutec                 C   s
  t ƒ 6}|jddd |jddd | d¡ W d   ƒ n1 sB0    Y  t ¡ rR|  | ¡ d¡Z | jd urŒ|  t¡ W d   ƒ d S | j	ddd | j	ddd |  	d¡ W d   ƒ n1 sÆ0    Y  |  | ¡ d	¡ |  t
jd
¡ W d   ƒ n1 s0    Y  |  | ¡ d¡ |  t
jd¡ W d   ƒ n1 sF0    Y  n´|  | ¡ d¡ |  	d¡ W d   ƒ n1 s„0    Y  |  | ¡ d	¡ |  	d¡ W d   ƒ n1 sÀ0    Y  |  | ¡ d¡ |  	d¡ W d   ƒ n1 sü0    Y  d S )NÚcurrentrè  ©rº  rË  z
current/..úparent/evilr  rë  r3   úT'parent/evil' would be extracted to ['"].*evil['"], which is outside the destinationr
   zK'parent' would link to ['"].*outerdir['"], which is outside the destination)r¶  r„   r   Úcan_symlinkrÂ  r   r¿  rÎ  r9  rÌ  r   rÑ  rÅ  ©r   rÑ  r   r   r   Útest_parent_symlink÷  s8    (


(þ$þ&**z)TestExtractionFilters.test_parent_symlinkc                 C   sN  t  ¡ r°tj td¡}t |¡ t dtj |d¡¡ ttj |ddd¡dƒ W d   ƒ n1 sd0    Y  tj 	tj |d¡¡rŠd}n&tj 	tj |dd¡¡r¨d}nt
d	ƒ‚tƒ 6}|jddd
 |jddd
 | d¡ W d   ƒ n1 sò0    Y  |  | ¡ d¡V t  ¡ r@| jddd
 | jddd
 |  d¡ n|  d¡ |  d¡ W d   ƒ n1 sj0    Y  |  | ¡ d¡> t  ¡ r |  tjd¡ n|  d¡ |  d¡ W d   ƒ n1 sÊ0    Y  |  | ¡ d¡T t  ¡ r|r|  tjd¡ n|  tjd¡ n|  d¡ |  d¡ W d   ƒ n1 s@0    Y  d S )NZresolution_testrè  rÖ  ré  r½  r   TFz#Could not determine link resolutionr×  zcurrent/parentrØ  r  rË  rë  zcurrent/r3   rÙ  r
   zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)r   rÚ  rJ   rK   rL   rI   rƒ   rÔ  r   r  r/  r¶  r„   rÂ  rÌ  rÎ  r   rÑ  rÅ  )r   ZtestpathZdotdot_resolves_earlyrÑ  r   r   r   Útest_parent_symlink2)  sV    
(

*
þ
*
þþ
z*TestExtractionFilters.test_parent_symlink2c                 C   s4  t ƒ *}|jd| jd | d¡ W d   ƒ n1 s60    Y  |  | ¡ d¡> t ¡ rv| jd| jd |  d¡ n
|  d¡ W d   ƒ n1 s”0    Y  |  | ¡ d¡2 t ¡ rÈ|  t	j
d¡ n
|  d¡ W d   ƒ n1 sæ0    Y  |  | ¡ d¡ |  t	jd	¡ W d   ƒ n1 s&0    Y  d S )
NrË  r×  rØ  r  rë  r3   rÙ  r
   ú&'parent' is a link to an absolute path)r¶  r„   r¾  rÂ  r   r   rÚ  rÌ  rÎ  r   rÑ  r×  rÛ  r   r   r   Útest_absolute_symlink  s(    ((þ(þz+TestExtractionFilters.test_absolute_symlinkc                 C   sô   t ƒ $}|jd| jd d W d   ƒ n1 s00    Y  |  | ¡ d¡ |  td¡ W d   ƒ n1 sl0    Y  |  | ¡ d¡ |  td¡ W d   ƒ n1 s¨0    Y  |  | ¡ d¡ |  tjd¡ W d   ƒ n1 sæ0    Y  d S )	NrË  rÄ   ©r»  r  z.*foo. not foundr3   r
   rÞ  )	r¶  r„   r¾  rÂ  r   rÎ  rø   r   r×  rÛ  r   r   r   Útest_absolute_hardlinkœ  s    2**þz,TestExtractionFilters.test_absolute_hardlinkc              	   C   sú   t ƒ }|jddd W d   ƒ n1 s*0    Y  zf| j| ¡ dd@ t ¡ rzt| jtƒrj|  	t¡ qz| j
ddd n W d   ƒ n1 sŽ0    Y  W n ty¬   Y n0 dD ]B}|  | ¡ |¡ |  	tjd¡ W d   ƒ q²1 sê0    Y  q²d S )Nú../mooz..//tmp/moor×  r  rm  rÓ  zH'../moo' would be extracted to '.*moo', which is outside the destination)r¶  r„   rÂ  r   r   rÚ  r  r¿  r9  rÎ  rÌ  r   rÑ  rÐ  r   r   r   Útest_sly_relative0­  s"    ,"þz(TestExtractionFilters.test_sly_relative0c              	   C   sà   t ƒ (}| d¡ |jddd W d   ƒ n1 s40    Y  |  | ¡ d¡6 | jdtjd t ¡ rv| jdd	d W d   ƒ n1 sŠ0    Y  d
D ]B}|  | ¡ |¡ |  	tj
d¡ W d   ƒ q˜1 sÐ0    Y  q˜d S )Nztmp/ztmp/../../mooztmp/../..//tmp/moor×  r  Útmp©rô   râ  ztmp/../../tmp/moorÓ  zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r¶  r„   rÂ  r   rÌ  r   rõ   r   rÚ  rÎ  rÑ  rÐ  r   r   r   Útest_sly_relative2Ï  s    
,,þz(TestExtractionFilters.test_sly_relative2c              	   C   sè   t ƒ P}|jddd |jdtj dd¡d |jdtj d	dd¡d
 W d   ƒ n1 s\0    Y  dD ]x}|  | ¡ |¡T | jddd | jddd t 	¡ r¶| jdddd n| jddd W d   ƒ qj1 sØ0    Y  qjd S )Nútargetdir/targetry  rp  úlinkdir/hardlinkZ	targetdirrÒ  rà  úlinkdir/symlinkré  r×  ©r3   r
   r  z../targetdir/target©r?   rº  ©
r¶  r„   rJ   rK   rL   rÂ  r   rÌ  r   rÚ  rÐ  r   r   r   Útest_deep_symlinkâ  s"    ÿÿ&ÿz'TestExtractionFilters.test_deep_symlinkc              	   C   s&  t ƒ `}|jddd |jdtj dd¡d |jddd	 |jd
dd |jddd W d   ƒ n1 sl0    Y  dD ]¦}|  | ¡ |¡€ | jddd	 | jd
dd	 | jddd	 t 	¡ rä| jdddd | jdddd n| jddd	 | jddd	 W d   ƒ qz1 s0    Y  qzd S )Nré  Zhardlinkr×  Zsymlink2ZlinkdirZ	hardlink2rç  ry  rp  rè  rà  zlinkdir/hardlink2rê  rë  rì  rÐ  r   r   r   Útest_chainsù  s,    ÿ,ÿÿz!TestExtractionFilters.test_chainsc                 C   s  t ƒ d}|jddd |jddd |jddd |jdd	d |jd
dd |jddd W d   ƒ n1 sp0    Y  tj td¡}t|dƒ W d   ƒ n1 s¨0    Y  t |t |¡j	tj
B ¡ t |¡j	tj
@ }t |¡ t |¡ t |t |¡j	tj
B ¡ t |¡j	tj
@ }t |¡ |  | ¡ d¡ |rP| jddd n| jddd | jddd | jddd | jdd	d | jd
dd |r¬| jddd n| jddd W d   ƒ n1 sÐ0    Y  |  | ¡ d¡d | jddd | jddd | jddd | jdd	d | jd
dd | jddd W d   ƒ n1 sV0    Y  |  | ¡ d¡| t t | j ¡ j	¡¡}| jddd | jddd | jddd | jddd | jd
dd | jd|d W d   ƒ n1 sô0    Y  d S )NZall_bitsz
?rwsrwsrwtr‹   Z	perm_bitsz
?rwxrwxrwxZexec_group_otherz
?rw-rwxrwxZread_group_onlyz
?---r-----Zno_bitsz
?---------zdir/z
?---rwsrwtztmp.filer   r  z
?rwsrwsrwxz
?---rwsrwxr3   z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr
   z
?rw-r--r--z
?rw-r-----z
?rw-------)r¶  r„   rJ   rK   rL   rI   r   Úchmodr  r  r³  r  rƒ   r…   rÂ  rÌ  rÇ  rÅ  r¾  )r   rÑ  Ztmp_filenameZhave_sticky_filesZhave_sticky_dirsZnormal_dir_moder   r   r   Ú
test_modes  sZ    ,


..
ÿz TestExtractionFilters.test_modesc              	   C   sÎ   t ƒ  }|jdtjd W d   ƒ n1 s,0    Y  dD ]P}|  | ¡ |¡, ttdƒrl| jdtjd n W d   ƒ q:1 s€0    Y  q:|  | ¡ d¡ |  	tj
d¡ W d   ƒ n1 sÀ0    Y  d S )NrÄ   rå  )r  r3   Úmkfifor
   z'foo' is a special file)r¶  r„   r   rÆ  rÂ  r   r5  rJ   rÌ  rÎ  rÕ  rÐ  r   r   r   Ú	test_pipeK  s    .
 þzTestExtractionFilters.test_pipec              	   C   s¸   t jt jt jfD ]¢}t  d¡}||_t  |d¡}|  ||¡ t  |d¡}|  	|j|¡ |  
t j¡}t  |d¡ W d   ƒ n1 s„0    Y  |  |jjt j¡ |  	|jjjd¡ qd S )NrÄ   r   )r   rÆ  rÈ  r)  rÇ   rô   rÌ  ru  rÉ  r=   rÀ   rÕ  rÔ  rØ   r!  rB   rl   )r   Zspecial_typerB   Ztrustedr3   Úcmr   r   r   Útest_special_files]  s    
*z(TestExtractionFilters.test_special_filesc                 C   sV   t j t¡6}| ¡ D ]}t  |d¡}|  ||¡ qW d   ƒ n1 sH0    Y  d S ©Nr   )r   r   r   r   r¥   rÌ  ru  ©r   r3   rB   Zfilteredr   r   r   Útest_fully_trusted_filterl  s    z/TestExtractionFilters.test_fully_trusted_filterc                 C   sj   t j t¡J}| ¡ D ]0}t  |d¡}|  |j|j¡ |  |j|j¡ qW d   ƒ n1 s\0    Y  d S rõ  )	r   r   r   r   r¥   rÉ  ru  rl   rô   rö  r   r   r   Útest_tar_filters  s
    z%TestExtractionFilters.test_tar_filterc              
   C   sˆ   t j t¡h}| ¡ D ]N}zt  |d¡}W n t jyB   Y qY n0 |  |j|j¡ |  |j	|j	¡ qW d   ƒ n1 sz0    Y  d S rõ  )
r   r   r   r   r¥   rÔ  rÐ  ru  rl   rô   rö  r   r   r   Útest_data_filter}  s    
z&TestExtractionFilters.test_data_filterc              	   C   s˜   t ƒ }| d¡ W d  ƒ n1 s&0    Y  t | ¡J |  | ¡ d¡ |  d¡ W d  ƒ n1 sl0    Y  W d  ƒ n1 sŠ0    Y  dS )z6Ensure the default filter does not warn (like in 3.12)rÄ   N)r¶  r„   r   Zcheck_no_warningsrÂ  r   rÌ  rÛ  r   r   r   Útest_default_filter_warns_not‰  s
    (z3TestExtractionFilters.test_default_filter_warns_notc                 C   sT   t  td¡}dd„ }||_|  |d ¡ |  d¡ W d   ƒ n1 sF0    Y  d S )NrE   c                 S   s   | j dkr| S d S d S ©Nr8   r(  ©rB   rK   r   r   r   Ústrict_filter“  s    
zSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filterr8   )r   r   r   rt  rÂ  rÌ  )r   r3   rý  r   r   r   Ú&test_change_default_filter_on_instance‘  s
    z<TestExtractionFilters.test_change_default_filter_on_instancec              	   C   s‚   dd„ }t  td¡}t t jdt|ƒ¡F |  |d ¡ |  d¡ W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d S )Nc                 S   s   | j dkr| S d S d S rû  r(  rü  r   r   r   rý    s    
zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filterrE   rt  r8   )r   r   r   r   rš   r©  rÂ  rÌ  )r   rý  r3   r   r   r   Ú#test_change_default_filter_on_classœ  s    
ÿz9TestExtractionFilters.test_change_default_filter_on_classc                 C   sV   G dd„ dt jƒ}|tdƒ}|  |d ¡ |  d¡ W d   ƒ n1 sH0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zQTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclassc                 S   s   |j dkr|S d S d S rû  r(  ©r   rB   rK   r   r   r   rt  ª  s    
zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filterNr  r   r   r   r   ÚTarSubclass©  s   r  rE   r8   )r   r   r   rÂ  rÌ  )r   r  r3   r   r   r   Ú&test_change_default_filter_on_subclass¨  s    
z<TestExtractionFilters.test_change_default_filter_on_subclassc                 C   sL   t  td¡}d|_|  |d ¡ |  t¡ W d   ƒ n1 s>0    Y  d S )NrE   r
   )r   r   r   rt  rÂ  rÎ  rÝ  rº   r   r   r   Ú$test_change_default_filter_to_string´  s    z:TestExtractionFilters.test_change_default_filter_to_stringc                    s˜   ‡ fdd„}t ƒ .}| d¡ | d¡ | d¡ W d   ƒ n1 sF0    Y  ˆ  | ¡ |¡$ ˆ  d¡ ˆ  d¡ W d   ƒ n1 sŠ0    Y  d S )Nc                    s6   ˆ   |ˆ j¡ | jdkr$| jddS | jdkr2d S | S )NÚ	move_thisÚmovedr(  Úignore_this)ru  r  rl   r¶   rü  r   r   r   Úcustom_filter»  s    

z?TestExtractionFilters.test_custom_filter.<locals>.custom_filterr  r  Zkeepr  rÏ  )r   r  rÑ  r   r   r   Útest_custom_filterº  s    

(
z(TestExtractionFilters.test_custom_filterc                 C   sn   t ƒ }| d¡ W d   ƒ n1 s&0    Y  |  | ¡ d¡ |  t¡ W d   ƒ n1 s`0    Y  d S )NrÄ   zbad filter name)r¶  r„   rÂ  r   rÎ  rí   rÛ  r   r   r   Útest_bad_filter_nameË  s    (z*TestExtractionFilters.test_bad_filter_namec              	   C   sÖ   G dd„ dƒ}t ƒ 2}| d¡ |jddd | d¡ W d   ƒ n1 sL0    Y  |ƒ J}|  | ¡ |¡ |  d¡ W d   ƒ n1 sŽ0    Y  W d   ƒ n1 s¬0    Y  |  |jd¡ |  |jd¡ d S )	Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zBTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilterc                 S   s
   d| _ | S rE  )Únum_files_processedr   r   r   r   r¸  Ö  s    zLTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__enter__c                 S   s:   zt  ||¡}W n t jy&   Y d S 0 |  jd7  _|S )NrW   )r   rÔ  rÐ  r
  r   r   r   r   Ú__call__Ú  s    zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__c                 W   s
   d| _ d S )NT)Údone)r   Úexc_infor   r   r   r¹  â  s    zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__N)r   r   r   r¸  r  r¹  r   r   r   r   ÚStatefulFilterÕ  s   r  ZgoodZbadr€   r×  rZ   T)r¶  r„   rÂ  r   rÌ  r=   r
  r  )r   r  rÑ  r  r   r   r   Útest_stateful_filterÑ  s    
(Fz*TestExtractionFilters.test_stateful_filterc                 C   sd  dd„ }dd„ }dd„ }dd„ }d	d
„ }t ƒ }| d¡ W d   ƒ n1 sN0    Y  |  |jdd|¡ |  d¡ W d   ƒ n1 sŒ0    Y  |  |jdd|¡ |  d¡ W d   ƒ n1 sÊ0    Y  |  |jdd|¡ |  d¡ W d   ƒ n1 s
0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 sL0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 sŒ0    Y  |  |jdd|¡ |  d¡ W d   ƒ n1 sÌ0    Y  |  |jdd|¡ |  tj	¡ W d   ƒ n1 s0    Y  |  |jdd|¡ |  t
¡ W d   ƒ n1 sN0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 s0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 sÐ0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 s0    Y  |  |jdd|¡ |  tj	¡ W d   ƒ n1 sT0    Y  |  |jdd|¡ |  t
¡ W d   ƒ n1 s”0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 sÖ0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 s0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 sV0    Y  d S )Nc                 S   s   t  d¡‚d S )Nzfailed with ExtractError)r   ÚExtractErrorrü  r   r   r   Úextracterror_filterð  s    zBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filterc                 S   s   t  d¡‚d S )Nzfailed with FilterError)r   rÐ  rü  r   r   r   Úfiltererror_filterò  s    zATestExtractionFilters.test_errorlevel.<locals>.filtererror_filterc                 S   s   t dƒ‚d S )Nzfailed with OSError)ræ  rü  r   r   r   Úoserror_filterô  s    z=TestExtractionFilters.test_errorlevel.<locals>.oserror_filterc                 S   s   t  d¡‚d S )Nzfailed with base TarError)r   ÚTarErrorrü  r   r   r   Útarerror_filterö  s    z>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filterc                 S   s   t dƒ‚d S )Nzfailed with ValueError)rí   rü  r   r   r   Úvalueerror_filterø  s    z@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filterr½  r   rå  rW   rZ   zboo!)r¶  r„   rÂ  r   rÌ  rÎ  r   r  rí   rÐ  ræ  r  rÝ  )r   r  r  r  r  r  rÑ  r   r   r   Útest_errorlevelï  sN    (((*,**,*,*,,*,*z%TestExtractionFilters.test_errorlevel)NNNN)rè  )%r   r   r   r¯   r°   rI   r¾  r  r   rÂ  rÌ  rÎ  rÒ  rÕ  rÜ  rÝ  rß  rá  rã  ræ  rí  rî  rð  rò  rô  r÷  rø  rù  rú  rþ  rÿ  r  r  r  r	  r  r  r   r   r   r   r½  ‚  sB   
  ÿ
(
2V"9
r½  c               	   C   s¶   t  t¡ t t¡ tgattdƒ} |  ¡ }W d   ƒ n1 sB0    Y  t	t
tfD ]Z}|jrVt  |j¡ t |j¡ | |jd¡}| |¡ W d   ƒ qV1 s¦0    Y  qVd S )NrV   r¬   )r   r  rI   rJ   Úmakedirsr   rò  r   r<   r    r$   r(   rÉ  rÆ   )rC   r
   Úcr3   r   r   r   ÚsetUpModule7  s    

&r  c                   C   s   t j t¡rt t¡ d S r   )rJ   rK   r  rI   r   r  r   r   r   r   ÚtearDownModuleH  s    r  Ú__main__)‚r›   rJ   r   Zhashlibr   Ú
contextlibr   Úrandomr   r¯   rx  rž  Úwarningsr  r.  Zunittest.mockr   rX  r   Ztest.supportr   r   r#   r=  r1  r%   r+   r   rK   rÚ   ZTESTFNrI   r  rÑ   r   rL   r"   r&   r*   r‚   r  r@   r‚  r   Zrequires_gzipr    Zrequires_bz2r$   Zrequires_lzmar(   r-   ZTestCaser7   r†   rˆ   r‰   rŠ   r¨   r©   rª   r«   rÓ   r8  r9  r:  r>  r?  rM  rN  rO  rP  rY  rZ  r^  r_  r  rœ  rª  r´  rº  rø  rù  rú  rû  r  r
  r  r  r'  r-  rB  rG  rI  rL  r4  r5  rM  rR  rh  rx  r‹  r  r‘  r•  r¥  r¦  r§  r¨  r¯  rÚ  r  r7  r%  r-  r@  rC  r`  rl  rŒ  rŽ  r  r  r‘  rµ  r¶  r½  r  r  r   rÒ  r   r   r   r   Ú<module>   s(  




ÿÿ
 Pw  =(a*;,  9'R.Z			* QO@;Y ^:!v(^ÿÿ^6     :
