o
    gК                    @   s  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
Z
d dlZ
d dlZd dlmZ d dlmZ d dlmZ zd dlZW n eyQ   dZY nw zd dlZW n eyc   dZY nw zd dlZW n eyu   dZY nw 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+ G dd dZ,G dd de&Z-G dd de-e
j.Z/G d d! d!e(e/Z0G d"d# d#e*e/Z1G d$d% d%e,e/Z2G d&d' d'e-e
j.Z3G d(d) d)e(e3Z4G d*d+ d+e*e3Z5G d,d- d-e,e3Z6G d.d/ d/e-Z7G d0d1 d1e7Z8G d2d3 d3e8e
j.Z9G d4d5 d5e(e8e
j.Z:G d6d7 d7e*e8e
j.Z;G d8d9 d9e,e8e
j.Z<G d:d; d;e7e
j.Z=G d<d= d=e(e=Z>G d>d? d?e*e=Z?G d@dA dAe,e=Z@G dBdC dCe&e
j.ZAG dDdE dEe(eAZBG dFdG dGe*eAZCG dHdI dIe,eAZDG dJdK dKe-e
j.ZEG dLdM dMZFG dNdO dOeFe-e
j.ZGG dPdQ dQeFe-e
j.ZHG dRdS dSe&ZIG dTdU dUeIe
j.ZJG dVdW dWe(eJZKG dXdY dYe*eJZLG dZd[ d[e,eJZMG d\d] d]eIe
j.ZNG d^d_ d_e(eNZOG d`da dae*eNZPG dbdc dce,eNZQG ddde dee
j.ZRG dfdg dgeIe
j.ZSG dhdi dieIe
j.ZTG djdk dke(eTZUG dldm dme*eTZVG dndo doe,eTZWG dpdq dqeTZXe
YeZedrdsG dtdu due
j.Z[G dvdw dweRZ\G dxdy dyZ]G dzd{ d{e]e
j.Z^G d|d} d}e]e
j.Z_G d~d de]e
j.Z`G dd dZaG dd deae
j.ZbG dd de(eae
j.ZcG dd de*eae
j.ZdG dd de,eae
j.ZeG dd de
j.ZfG dd de
j.ZgG dd de
j.ZhG dd de
j.Zie
jeZedrdG dd de-e
j.ZkG dd de*e
j.Zldd Zme
YeZedde
YeZeddG dd de
j.Zndd Zodd ZpeqdkrOe
r  dS dS )    N)sha256)contextmanager)Random)support)	os_helper)script_helperc                 C   s   t |  S N)r   	hexdigest)data r   G/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_tarfile.py	sha256sum   s   r   z-tardirz-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2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   mode9   s   zTarTest.modeN)__name__
__module____qualname__tarnamer   ioFileIOopentarfileTarFiletaropenpropertyr   r   r   r   r   r   3   s    r   c                   @   *   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"   =   
    r"   c                   @   r!   )Bz2Testbz2N)r   r   r   bz2namer   r   r(   BZ2Filer   r   r   Zbz2openr   r   r   r   r   r'   D   r&   r'   c                   @   r!   )LzmaTestxzN)r   r   r   xznamer   r   lzmaLZMAFiler   r   r   xzopenr   r   r   r   r   r+   K   r&   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   setUpW   s   zReadTest.setUpc                 C   s   | j   d S r   )r7   closer   r   r   r   tearDown[      zReadTest.tearDownN)r   r   r   r   r8   r:   r   r   r   r   r1   S   s    r1   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )UstarReadTestc                 C   sl   | j d}| j | }| }| t||jd | t|td W d    d S 1 s/w   Y  d S )Nustar/regtyperegular file extraction failed)	r7   	getmemberextractfilereadassertEquallensizer   sha256_regtyper   tarinfofobjr
   r   r   r   test_fileobj_regular_filea   s   "z'UstarReadTest.test_fileobj_regular_filec                 C   s   | j dt | j d}ttjtdd}| }W d    n1 s&w   Y  | j 	|+}t
|}| }| ||d | t|dd | |d dd W d    d S 1 s_w   Y  d S )Nr=   rzfileobj.readlines() failedr   S   zOI will gladly admit that Python is not the fastest running scripting language.
)r7   extractTEMPDIRr?   r   ospathjoin	readlinesr@   r   TextIOWrapperrB   rC   )r   rG   fobj1lines1rH   fobj2lines2r   r   r   test_fileobj_readlinesj   s&   


"z$UstarReadTest.test_fileobj_readlinesc                 C   s   | j dt | j d}ttjtdd}| }W d    n1 s&w   Y  | j 	|}t
t|}| ||d W d    d S 1 sKw   Y  d S )Nr=   rJ   zfileobj.__iter__() failed)r7   rM   rN   r?   r   rO   rP   rQ   rR   r@   listr   rS   rB   )r   rG   rT   rU   rV   rW   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 w   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    d S 1 sw   Y  d S )Nr=   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)r7   rM   rN   r   rO   rP   rQ   rA   r?   r@   seekrB   tellrD   rR   rC   readline)	r   rH   r
   rG   textss1s2liner   r   r   test_fileobj_seek   sv   







$zUstarReadTest.test_fileobj_seekc              	   C   s   | j d;}t|}| d}| t|t z|	d W n t
y0   | d Y n	w W d    d S W d    d S 1 sDw   Y  d S )Nr=   r3   d   zseeking failed in text mode)r7   r@   r   rS   rA   encoderB   r   rE   rb   AttributeErrorfailr   rH   r
   r   r   r   test_fileobj_text   s   
	"zUstarReadTest.test_fileobj_textc              	   C   s~   | j |/}| j |}| |j|j W d    n1 s w   Y  W d    d S W d    d S 1 s8w   Y  d S r   )r7   r@   rB   name)r   Zlnktyperegtypeabr   r   r   _test_fileobj_link   s   
Pz UstarReadTest._test_fileobj_linkc                 C      |  dd d S )Nustar/lnktyper=   ru   r   r   r   r   test_fileobj_link1      z UstarReadTest.test_fileobj_link1c                 C   rv   )N./ustar/linktest2/lnktypeustar/linktest1/regtyperx   r   r   r   r   test_fileobj_link2      z UstarReadTest.test_fileobj_link2c                 C   rv   )Nustar/symtyper=   rx   r   r   r   r   test_fileobj_symlink1   rz   z#UstarReadTest.test_fileobj_symlink1c                 C   rv   )N./ustar/linktest2/symtyper|   rx   r   r   r   r   test_fileobj_symlink2   r~   z#UstarReadTest.test_fileobj_symlink2c                 C   rv   )NZsymtype2r=   rx   r   r   r   r   test_issue14160   rz   zUstarReadTest.test_issue14160N)r   r   r   rI   rX   rZ   rj   rp   ru   ry   r}   r   r   r   r   r   r   r   r<   _   s    	
0r<   c                   @      e Zd ZdS )GzipUstarReadTestNr   r   r   r   r   r   r   r          r   c                   @   r   )Bz2UstarReadTestNr   r   r   r   r   r      r   r   c                   @   r   )LzmaUstarReadTestNr   r   r   r   r   r      r   r   c                   @   ,   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   r6   r   r   r   r   r8      s   zListTest.setUpc                    s@  t jt  ddd}ttd|  jjdd W d    n1 s#w   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)decoder7   r5   rl   )rt   rf   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   rS   BytesIOr   	swap_attrsysr7   rY   detachgetvalueassertInassertRegexassertNotIn)r   tiooutr   r   r   r   	test_list   s4   

zListTest.test_listc                 C   s   t jt  ddd}ttd| | jjdd W d    n1 s#w   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   rS   r   r   r   r   r7   rY   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 s+w   Y  | 	 }| 
d	| | d
| d S )Nr   r   r   c                 s   s$    |   D ]
}d|jv r|V  qd S )NZreg)
getmembersrq   )r7   rG   r   r   r   members*  s   
z+ListTest.test_list_members.<locals>.membersr   F)r   r   r   r   )r   rS   r   r   r   r   r7   rY   r   r   r   r   )r   r   r   r   r   r   r   test_list_members(  s   zListTest.test_list_membersN)r   r   r   r8   r   r   r   r   r   r   r   r      s
    %r   c                   @   r   )GzipListTestNr   r   r   r   r   r   5  r   r   c                   @   r   )Bz2ListTestNr   r   r   r   r   r   9  r   r   c                   @   r   )LzmaListTestNr   r   r   r   r   r   =  r   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w   Y  | tt | ttt t td}| t| W d    n1 s@w   Y  | ttd d S )Nwbr[   s   invalid)	r   tmpnameassertFalser   
is_tarfilepathlibPathr   r   r   rH   r   r   r   test_is_tarfile_erroneousC  s   z(CommonReadTest.test_is_tarfile_erroneousc              	   C   s   |  t| j |  tt| j t| jd}|  t| W d    n1 s.w   Y  t| jd}|  tt|	  W d    d S 1 sRw   Y  d S Nr[   )

assertTruer   r   r   r   r   r   r   r   rA   r   r   r   r   test_is_tarfile_validT  s   "z$CommonReadTest.test_is_tarfile_validc                 C   s   t t| jdd W d    n1 sw   Y  z3zt t| j}|  W n t jy8   | d Y nw | |	 g  W |
  d S W |
  d S |
  w )NrJ   wz&tarfile.open() failed on empty archive)r   r   r   r   replacegetnames	ReadErrorrn   assertListEqualr   r9   r   r7   r   r   r   test_empty_tarfilec  s   z!CommonReadTest.test_empty_tarfilec                 C   s@   |  td td| j W d    d S 1 sw   Y  d S )NZxxx)assertRaisesRegexFileNotFoundErrorr   r   r   r   r   r   r   test_non_existent_tarfilet  s   "z(CommonReadTest.test_non_existent_tarfilec                 C   sV   t td W d    n1 sw   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_tarfilez  s
   z CommonReadTest.test_null_tarfilec              	   C   s   t dd}dD ]T}| td%}||d  td}t||_||	  || W d    n1 s9w   Y  tjtddd	}z| 
| dgd
|  W |  q	|  w d S )Nr   ra   )       ar   r]   foorJ   T)r   Zignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   	randbytesr   r   writer   TarInforC   rD   tobufr   r   r9   )r   r
   charrH   rG   r7   r   r   r   test_ignore_zeros  s$   

z CommonReadTest.test_ignore_zerosc              
   C   s  dD ]}t td}t d}d|_||td W d    n1 s&w   Y  ttd}|| W d    n1 s@w   Y  t t$}| 	t j
d |D ]}qUW d    n1 sbw   Y  W d    n1 sqw   Y  t tG}| }| 	t j
d ||t W d    n1 sw   Y  | 	t j
d ||  W d    n1 sw   Y  W d    q1 sw   Y  qd S )N)ra   iX  r]   i  w:r   r]   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)r   r   r   r   rD   addfiler   r   truncater   r   nextrM   rN   r@   rA   )r   rD   r7   trH   r   r   r   test_premature_end_of_archive  s8   
z,CommonReadTest.test_premature_end_of_archivec              	   C   st   |  tjd) ttd}W d    n1 sw   Y  W d    d S W d    d S 1 s3w   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   A  s    	r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zeeeddejdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).MiscReadTestBasec                 C   s   d S r   r   r   r   r   r   requires_name_attribute  s   z(MiscReadTestBase.requires_name_attributec              	   C   s   |    t| jdC}| |jt tj|| jd}| |jt | |jt	j
|j W d    n1 s8w   Y  W d    d S W d    d S 1 sPw   Y  d S Nr[   fileobjr   )r   r   r   assertIsInstancerq   strr   r   rB   rO   rP   abspathr   rH   r7   r   r   r   test_no_name_argument  s   "z&MiscReadTestBase.test_no_name_argumentc                 C   sn   t | jd}| }W d    n1 sw   Y  t|}| tt|d tj || j	d}| 
|j d S )Nr[   rq   r   )r   r   rA   r   r   r   rm   getattrr   r   assertIsNonerq   r   rH   r
   r7   r   r   r   test_no_name_attribute  s   

z'MiscReadTestBase.test_no_name_attributec                 C   s   t | jd}| }W d    n1 sw   Y  t|}d|_tj || jd}| |j W d    d S 1 s<w   Y  d S )Nr[   r   r   )	r   r   rA   r   r   rq   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6}| |jt tj|| jd}| 	|j W d    n1 s.w   Y  W d    d S W d    d S 1 sFw   Y  d S r   )
rO   r   r   O_RDONLYr   rq   intr   r   r   )r   fdrH   r7   r   r   r   test_int_name_attribute  s   "z(MiscReadTestBase.test_int_name_attributec              	   C   s   |    t| j}t|dC}| |jt tj|| j	d}| |jt | 
|jtj|j W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   Y  d S r   )r   rO   fsencoder   r   r   rq   bytesr   r   rB   rP   r   )r   r   rH   r7   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.w   Y  | |}| |jt | 	|jt
jt
| W d    n1 sXw   Y  tjj|| jd}| |jt | 	|jt
jt
| W d    n1 sw   Y  | jdkrtj|dd}| |jt | 	|jt
jt
| W d    d S 1 sw   Y  d S d S )Nr   r   rJ   )r   r   r   r   r   r   r   rq   r   rB   rO   rP   r   fspathr   r   r   )r   r   r7   r   r   r   test_pathlike_name  s&   
"z#MiscReadTestBase.test_pathlike_namec                 C   s   t td W d    n1 sw   Y  | td | td}W d    n1 s,w   Y  | td | td}W d    n1 sHw   Y  | td | td}W d    d S 1 sew   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}z-|  | }|j}|j}||}| }W d    n1 s,w   Y  W |	  n|	  w | | jJ}|
| |j| jd|d#}| }| |j| |  | || |d W d    n1 sww   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r2   )r   r   zseek back did not work)r   r   r   r   r   rq   offsetr@   rA   r9   rb   rB   r   )r   r7   r   rq   r   fr
   rH   r   r   r   test_fileobj_with_offset   s0   

"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    d S 1 s(w   Y  d S r   )r   r   r   r   r   r   r   r   r   r   test_fail_comp  s   "zMiscReadTestBase.test_fail_compc                 C   s"   | j d}| |jtjd d S )Nzmisc/dirtype-old-v7zv7 dirtype failed)r7   r?   rB   typer   DIRTYPEr   rG   r   r   r   test_v7_dirtype#  s   z MiscReadTestBase.test_v7_dirtypec                 C   s2   z	| j d W d S  ty   | d Y d S w )Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r7   r?   KeyErrorrn   r   r   r   r   test_xstar_type+  s
   z MiscReadTestBase.test_xstar_typec                 C   sN   | j D ]!}| t|jdd|j  |jdsq| |jdd|j  qd S )N鏽>zwrong mtime for %szustar/r   zwrong uname for %s)r7   rB   r   mtimerq   
startswithunamer   r   r   r   test_check_members4  s   

z#MiscReadTestBase.test_check_membersc                 C   s   |  | j d jdd d S )Nzmisc/eofzcould not find all members)rB   r7   r   rq   r   r   r   r   test_find_members=  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 sFw   Y  | t|t |dt | tjtj	
td ttj	
tdd}| }W d    n1 s~w   Y  | t|t W d    d S 1 sw   Y  d S )Nr\   r3   )
errorlevelr5   r=   rw   r[   r   )r   r   r   rM   rN   
addCleanupr   unlinkrO   rP   rQ   rA   rB   r   rE   )r   r7   r   r
   r   r   r   test_extract_hardlinkA  s    

"z&MiscReadTestBase.test_extract_hardlinkc           	   	   C   s   t jtdd}tjtd}t| zXdd |D }||| |D ]<}tj||j	}t
jdkrA| |jd@ t|jd@  dd	 }tj|}d
||j|||}| |j|| q#W |  t| d S |  t| w )Nr3   r5   
extractallc                 S      g | ]}|  r|qS r   isdir.0r   r   r   r   
<listcomp>]      z4MiscReadTestBase.test_extractall.<locals>.<listcomp>win32  c                 S   s$   t | trd| |  S d| S )Nz{} ({})z
{!r} (int))
isinstancefloatformathex)r   r   r   r   format_mtimee  s   

z6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})r   r   r   rO   rP   rQ   rN   mkdirr
  rq   r   platformrB   r   statst_modegetmtimer  r   r9   r   rmtree)	r   r7   DIRdirectoriesrG   rP   r  Z
file_mtimeerrmsgr   r   r   test_extractallV  s2   

z MiscReadTestBase.test_extractallc              	   C   s   d}t jtd}t | zVtjtdd7}||}|j	||d t j||}| 
t j||j tjdkrF| 
t |jd@ d W d    n1 sPw   Y  W t| d S W t| d S t| w )	Nustar/dirtypeZ
extractdirr3   r	  rP   r  r  i  )rO   rP   rQ   rN   r  r   r   r   r?   rM   rB   r  r   r   r  r  r  r   r  r   Zdirtyper  r7   rG   Z	extractedr   r   r   test_extract_directoryt  s    


z'MiscReadTestBase.test_extract_directoryc              	   C   s   t td }t|J tjtdd*}dd |D }||| |D ]}||j	 }| 
tj||j q$W d    n1 sAw   Y  W d    d S W d    d S 1 sYw   Y  d S )Nr
  r3   r	  c                 S   r  r   r  r  r   r   r   r    r  zBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r   r   rN   r   temp_dirr   r   r   r
  rq   rB   rO   rP   r  r   )r   r  r7   r   rG   rP   r   r   r   test_extractall_pathlike_name  s   
Pz.MiscReadTestBase.test_extractall_pathlike_namec              	   C   s   d}t td }t|C tjtdd#}||}|j	||d || }| 
tj||j W d    n1 s<w   Y  W d    d S W d    d S 1 sTw   Y  d S )Nr#  r
  r3   r	  r$  )r   r   rN   r   r'  r   r   r   r?   rM   rB   rO   rP   r  r   r%  r   r   r   test_extract_pathlike_name  s   
Pz+MiscReadTestBase.test_extract_pathlike_namec              	   C   s   t jtd}t|d}|d W d    n1 sw   Y  z4ttj	}z|
| W n tjy@   | |jj Y nw | d W t| d S W t| d S t| w )Nemptyr   r`   zReadError not raised)rO   rP   rQ   rN   r   r   object__new__r   r   __init__r   r   r   closedrn   r   r  )r   r*  rH   r7   r   r   r   test_init_close_fobj  s   z%MiscReadTestBase.test_init_close_fobjc                 C   sj   t | j%}t||D ]\}}| |j|j | | |  qW d    d S 1 s.w   Y  d S r   )r   r   r   ziprB   r   Zget_info)r   r7   Zm1Zm2r   r   r   test_parallel_iteration  s   "z(MiscReadTestBase.test_parallel_iterationN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  unittest
skipUnlesshasattrrO   r   skip_unless_symlinkr  r"  r&  r(  r)  r/  r1  r   r   r   r   r     s4    		
		

r   c                   @   s   e Zd ZdZdS )MiscReadTestN)r   r   r   r   r   r   r   r   r6    s    r6  c                   @   r   )GzipMiscReadTestNr   r   r   r   r   r7    r   r7  c                   @      e Zd Zdd ZdS )Bz2MiscReadTestc                 C      |  d d S )NzBZ2File have no name attributeskipTestr   r   r   r   r     r;   z'Bz2MiscReadTest.requires_name_attributeNr   r   r   r   r   r   r   r   r9        r9  c                   @   r8  )LzmaMiscReadTestc                 C   r:  )NzLZMAFile have no name attributer;  r   r   r   r   r     r;   z(LzmaMiscReadTest.requires_name_attributeNr=  r   r   r   r   r?    r>  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 ]9}| s
q| j |$}	 z|d}W n tjy(   | d Y nw |s,q-qW d    q1 s7w   Y  qd S )NTra   z6simple read-through using TarFile.extractfile() failed)r7   Zisregr@   rA   r   StreamErrorrn   )r   rG   rH   bufr   r   r   test_read_through  s    
z StreamReadTest.test_read_throughc                 C   sh   | j  }| j |}| }W d    n1 sw   Y  | t||jd | t|td d S )Nr>   )	r7   r   r@   rA   rB   rC   rD   r   rE   rF   r   r   r   rI     s   

z(StreamReadTest.test_fileobj_regular_filec                 C   sP   | j  }| j |d }| tj|j W d    d S 1 s!w   Y  d S )Nr   )r7   r   r@   r   r   rB  rA   )r   Ztarinfosr   r   r   r   test_provoke_stream_error  s   
"z(StreamReadTest.test_provoke_stream_errorc                 C   s   t jtdd}zc| j}	 | }| }|d u rqd| |d | s'| rC| t j	 |
| W d    n1 s=w   Y  q|
|}|
|}|d u rRq| |d | | | d qW |  d S |  w )Nr3   r	  Tzstream.next() failed.zstream.extractfile() failedzstream extraction failed)r   r   r   r7   r   assertIsNotNoneZislnkZissymr   rB  r@   rB   rA   r9   )r   Ztar1Ztar2t1t2v1v2r   r   r   test_compare_members  s2   

z#StreamReadTest.test_compare_membersN)r   r   r   r   rD  rI   rE  rK  r   r   r   r   r@    s    	r@  c                   @   r   )GzipStreamReadTestNr   r   r   r   r   rL    r   rL  c                   @   r   )Bz2StreamReadTestNr   r   r   r   r   rM    r   rM  c                   @   r   )LzmaStreamReadTestNr   r   r   r   r   rN    r   rN  c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DetectReadTestc              
   C   sN   zt ||}W n t jy  } z|   W Y d }~d S d }~ww |  d S r   )r   r   r   rn   r9   )r   rq   r   r7   er   r   r   _testfunc_file	  s   zDetectReadTest._testfunc_filec              
   C   s|   zt |d}tj |||d}W d    n1 sw   Y  W n tjy7 } z|   W Y d }~d S d }~ww |  d S )Nr[   r   )r   r   r   rn   r9   )r   rq   r   r   r7   rQ  r   r   r   _testfunc_fileobj  s   z DetectReadTest._testfunc_fileobjc                 C   sJ  | j r| tj tjtd| j  d W d    n1 sw   Y  | tj tjtd| j  d W d    n1 s>w   Y  | tj tj| jdd W d    n1 s\w   Y  | tj tj| jdd W d    n1 szw   Y  || jd || jd| j   || jd || jd| j   || jd d S )Nr2   r   rA  rJ   zr:*r|*)r   r   r   r   r   r   )r   Ztestfuncr   r   r   _test_modes  s$   zDetectReadTest._test_modesc                 C      |  | j d S r   )rV  rR  r   r   r   r   test_detect_file*  rz   zDetectReadTest.test_detect_filec                 C   rW  r   )rV  rT  r   r   r   r   test_detect_fileobj-  rz   z"DetectReadTest.test_detect_fileobjN)r   r   r   rR  rT  rV  rX  rY  r   r   r   r   rP    s    	rP  c                   @   r   )GzipDetectReadTestNr   r   r   r   r   rZ  0  r   rZ  c                   @   r8  )Bz2DetectReadTestc                 C   s|   t td}| }W d    n1 sw   Y  tjtddd}|| W d    n1 s1w   Y  | td d S )Nr[   r   r\   compresslevelrU  )r   r   rA   r(   r*   r   r   rR  ro   r   r   r   test_detect_stream_bz24  s   
z(Bz2DetectReadTest.test_detect_stream_bz2N)r   r   r   r^  r   r   r   r   r[  3  r>  r[  c                   @   r   )LzmaDetectReadTestNr   r   r   r   r   r_  B  r   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r(| j |}| t| |d|j  W d    n1 s#w   Y  d|d< d|d< d|d< d|jvrAd	|d
< d	|d< | D ]\}}| t|||d||jf  qEd S )Nwrong sha256sum for %sr   r   i  uidrk   gidzold-v7r   r   gnamezwrong value in %s field of %s)r7   r@   rB   r   rA   rq   itemsr   )r   rG   chksumkwargsr   kvr   r   r   _test_memberH  s"   
zMemberReadTest._test_memberc                 C       | j d}| j|dtd d S )Nr=   c  rD   rf  r7   r?   rj  rE   r   r   r   r   test_find_regtypeY     z MemberReadTest.test_find_regtypec                 C   rk  )Nzustar/conttyperl  rm  rn  r   r   r   r   test_find_conttype]  rp  z!MemberReadTest.test_find_conttypec                 C      | j d}| j|dd d S )Nr#  r   rD   r7   r?   rj  r   r   r   r   test_find_dirtypea     z MemberReadTest.test_find_dirtypec                 C   rr  )Nzustar/dirtype-with-size   rs  rt  r   r   r   r   test_find_dirtype_with_sizee  rv  z*MemberReadTest.test_find_dirtype_with_sizec                 C       | j d}| j|ddd d S )Nrw   r   r=   rD   linknamert  r   r   r   r   test_find_lnktypei  rp  z MemberReadTest.test_find_lnktypec                 C   ry  )Nr   r   rr   rz  rt  r   r   r   r   test_find_symtypem  rp  z MemberReadTest.test_find_symtypec                 C   s"   | j d}| j|dddd d S )Nzustar/blktyper      rD   devmajordevminorrt  r   r   r   r   test_find_blktypeq     z MemberReadTest.test_find_blktypec                 C   s"   | j d}| j|dddd d S )Nzustar/chrtyper   r\   r~  r  rt  r   r   r   r   test_find_chrtypeu  r  z MemberReadTest.test_find_chrtypec                 C   rr  )Nzustar/fifotyper   rs  rt  r   r   r   r   test_find_fifotypey  rv  z!MemberReadTest.test_find_fifotypec                 C   rk  )Nzustar/sparse P rm  r7   r?   rj  sha256_sparser   r   r   r   test_find_sparse}  rp  zMemberReadTest.test_find_sparsec                 C   rk  )N
gnu/sparser  rm  r  r   r   r   r   test_find_gnusparse  rp  z"MemberReadTest.test_find_gnusparsec                 C   rk  )Ngnu/sparse-0.0r  rm  r  r   r   r   r   test_find_gnusparse_00  rp  z%MemberReadTest.test_find_gnusparse_00c                 C   rk  )Ngnu/sparse-0.1r  rm  r  r   r   r   r   test_find_gnusparse_01  rp  z%MemberReadTest.test_find_gnusparse_01c                 C   rk  )Ngnu/sparse-1.0r  rm  r  r   r   r   r   test_find_gnusparse_10  rp  z%MemberReadTest.test_find_gnusparse_10c                 C   rk  )Nu   ustar/umlauts-ÄÖÜäöüßrl  rm  rn  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   r7   r   )r   rq   r   r   r   test_find_ustar_longname  s   z'MemberReadTest.test_find_ustar_longnamec                 C   rk  )Nzmisc/regtype-old-v7rl  rm  rn  r   r   r   r   test_find_regtype_oldv7  rp  z&MemberReadTest.test_find_regtype_oldv7c                 C   s@   | j   tj| j| jdd| _ | j d}| j|dtd d S )Nr3   r4   u   pax/umlauts-ÄÖÜäöüßrl  rm  )	r7   r9   r   r   r   r   r?   rj  rE   r   r   r   r   test_find_pax_umlauts  s   
z$MemberReadTest.test_find_pax_umlautsr   )r   r   r   rj  ro  rq  ru  rx  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r`  F  s(    
r`  c                   @   r   )
LongnameTestc                 C   sV   | j d d d }z| j|}W n ty   | d Y nw | |jtjd d S )N/  123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/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)	subdirr7   r?   r   rn   assertNotEqualr   r   r   )r   r  rG   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y(   | d Y nw | |j|d d S )Nr  r  r  longlinkzlonglink not foundzlinkname wrong)r  r7   r?   r   rn   rB   r{  )r   r  r  rG   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    d S 1 s<w   Y  d S )Nr  r  r  i   zfoo.tar)rq   r   )r  r7   r?   r   r   rb   r   r   rA   r   r   r   r   )r   r  rG   r   rH   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    d S 1 s9w   Y  d S )Nr  r  r  r[   ra   r3   strict)r  r7   r?   r   r   r   rb   r   r   ZfrombufrA   rB   r   longnametype)r   r  r   rH   rG   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 s"w   Y  | t	|t
d|  |  rGt|}| |jd |j d S d S )Nr[   ra  ra   )r7   rM   rN   rO   rP   rQ   r   rA   rB   r   r  _fs_supports_holesr  Z
assertLess	st_blocksst_size)r   rq   filenamerH   r
   rf   r   r   r   _test_sparse_file  s   

zGNUReadTest._test_sparse_filec                 C   r:  )Nr  r  r   r   r   r   test_sparse_file_old  r;   z GNUReadTest.test_sparse_file_oldc                 C   r:  )Nr  r  r   r   r   r   test_sparse_file_00  r;   zGNUReadTest.test_sparse_file_00c                 C   r:  )Nr  r  r   r   r   r   test_sparse_file_01  r;   zGNUReadTest.test_sparse_file_01c                 C   r:  )Nr  r  r   r   r   r   test_sparse_file_10  r;   zGNUReadTest.test_sparse_file_10c                  C   s   t jdrBtjtd} t| d}|d |	d |
  W d    n1 s+w   Y  t| }t|  |jd |jk S dS )Nlinuxzsparse-testr   i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxra   F)r   r  r   rO   rP   rQ   rN   r   rb   r   r   r  r   r  r  r  )rq   rH   rf   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 |	  d S |	  w )Nr3   r	  zpax/regtype1r   barzVENDOR.umlautsu   ÄÖÜäöüßzpax/regtype2r   zpax/regtype3r   )
r   r   r   r?   rB   r   rd  pax_headersgetr9   r   r7   rG   r   r   r   test_pax_global_headers  s*   


z#PaxReadTest.test_pax_global_headersc                 C   s   t jtdd}zG|d}| |jd | |jd | |jd | |jd | t	|jt
 | t
|jd d | t
|jd d W |  d S |  w )	Nr3   r	  zpax/regtype4rl  {   g  ^AZatimectime)r   r   r   r?   rB   rD   rb  rc  r   r   r  r  r9   r  r   r   r   test_pax_number_fields(  s   
z"PaxReadTest.test_pax_number_fieldsN)	r   r   r   r  r   XHDTYPEr  r  r  r   r   r   r   r    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w   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_collectrB   )r   rH   r7   r
   r   r   r   test_fileobj_no_close<  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 s*w   Y  | td}| t| t jd  W d    d S 1 sNw   Y  d S )Nr   r   r[   r_   )r   r   r   r   r   
RECORDSIZE	BLOCKSIZErD   r   r   r   rB   rC   rA   )r   r7   r   rH   r   r   r   test_eof_markerH  s   
"zWriteTestBase.test_eof_markerN)r   r   r   r  r  r   r   r   r   r  8  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   sx   d}t t| j}zt |}|| W |  n|  w t t}z| | d |d W |  d S |  w )Nd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r   r   r   r   r   r   r9   rB   r   )r   rq   r7   r   r   r   r   test_100_char_nameZ  s   

zWriteTest.test_100_char_namec                 C   s   t t| j}z,tjtd}t|d}|d W d    n1 s$w   Y  |	| W |
  n|
  w | tjtdd d S )Nfiler      aaar   ztarfile is empty)r   r   r   r   rO   rP   rQ   rN   r   addr9   ZassertGreatergetsize)r   r7   rP   rH   r   r   r   test_tar_sizen  s   zWriteTest.test_tar_sizec                 C   s   t t| j}zUtjtd}t|d W d    n1 sw   Y  ||}| 	|j
d t|d}|d W d    n1 sEw   Y  ||}| 	|j
d W |  d S |  w )Nr  r   r   r  r~  )r   r   r   r   rO   rP   rQ   rN   
gettarinforB   rD   r   r9   )r   r7   rP   rG   rH   r   r   r   test_file_size|  s   

zWriteTest.test_file_sizec              	   C   st   t jtd}t | z'tt| j}z|	|}| 
|jd W |  n|  w W t| d S t| w )N	directoryr   )rO   rP   rQ   rN   r  r   r   r   r   r  rB   rD   r9   r   rmdirr   rP   r7   rG   r   r   r   test_directory_size  s   

zWriteTest.test_directory_sizec                 C   sV  t jtd}t | tt j|dd  tt j|dd  zltt| j	}zCt
jd}ddg|_|| W d    n1 sHw   Y  g }| D ]}|t j|jd  qS| |g d W |  n|  w W tt j|d tt j|d t| d S tt j|d tt j|d t| w )Nr  1rs   2z
os.listdirr  )r  r  r  )rO   rP   rQ   rN   r  r   r9   r   r   r   r2  mockpatchreturn_valuer  r   appendsplitrq   rB   r   r  r  )r   rP   r7   Zmock_listdirpathsmr   r   r   test_ordered_recursion  s,   

z WriteTest.test_ordered_recursionc              	   C   s   t t| jM}ttd }t|d}|d W d    n1 s$w   Y  ||}|t	
|}| |jt | |j|j | |jd W d    d S 1 sWw   Y  d S )Nr  r   r  r~  )r   r   r   r   r   r   rN   r   r  rO   r   r   rq   r   rB   rD   )r   r7   rP   rH   rG   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 s#w   Y  zt || W n tyI } z| d|  W Y d }~nd }~ww z1t	t
| j}z|| ||}| |jd W |  n|  w W t| t| d S t| t| w )Nr  link_targetr   r  os.link(): %sr   )rO   rP   rQ   rN   r   r   r  PermissionErrorr<  r   r   r   r  rB   rD   r9   r   r  )r   r  targetrH   rQ  r7   rG   r   r   r   test_link_size  s,   



zWriteTest.test_link_sizec              	   C   sv   t jtd}t d| z'tt| j}z|	|}| 
|jd W |  n|  w W t| d S t| w )Nsymlinkr  r   )rO   rP   rQ   rN   r  r   r   r   r   r  rB   rD   r9   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 s9w   Y  | |
 g d W |  d S |  w )Nzarchive name must be absolutezadded the archive to itself)rO   rP   r   r   r   r   r   rB   rq   r  r   r   
change_cwdrN   r9   )r   dstnamer7   r   r   r   test_add_self  s"   

zWriteTest.test_add_selfc              	   C   s4  t jtd}t | zdD ]}t j||}t| qdd }tjt	| j
dd}z|j|d|d W |  n|  w | t ||dd	d | W d    n1 sXw   Y  tt	d
}z#|D ]}| |jd | |jd qf| t| d W |  n|  w W t| d S t| w )Nfilter)r   r  Zbazc                 S   s&   t j| jdkrd S d| _d| _| S )Nr  r  r   )rO   rP   basenamerq   rb  r   )rG   r   r   r   r    s
   z%WriteTest.test_filter.<locals>.filterr3   r	  Z	empty_dir)arcnamer  TrJ   r  r   r~  )rO   rP   rQ   rN   r  r   create_empty_filer   r   r   r   r  r9   r   	TypeErrorrB   rb  r   rC   r   r  )r   tempdirrq   r  r7   rG   r   r   r   test_filter  s,   
zWriteTest.test_filterNFc                 C   s   t jtd}|st| nt | tt	| j
}z|j||d W |  n|  w tt	d}z
| }W |  n|  w |sLt| nt| | |j|p]|t jd d S )Nr   r  rJ   r  )rO   rP   rQ   rN   r   r  r  r   r   r   r   r  r9   r   r  r  rB   rq   r   sep)r   rP   Zcmp_pathdirr   r7   r   r   r   r   _test_pathname  s    


 zWriteTest._test_pathnamec              	   C   sr  t jtd}t jtd}t | zt j|d}t j|d}t|d}|d W d    n1 s7w   Y  t || t|d}|j	|dd |j	|dd W d    n1 saw   Y  tj|dd	}z|j
|d
 W n ty   | d Y nw W d    n1 sw   Y  W t| t| d S W t| t| d S t| t| w )NZtestsymlinksztestsymlinks.tarsourcer  r   z
something
r  r_   )r  r$  z&extractall failed with symlinked files)rO   rP   rQ   rN   r  r   r   r  r   r  r
  OSErrorrn   r   r  r  )r   r  ZtemparchiveZsource_fileZtarget_filer   r7   r   r   r   test_extractall_symlinks9  s:   



z"WriteTest.test_extractall_symlinksc                 C   s<  |  d |  tjddd |  tjddd |  tjdd |  tjddd |  tjdddd |  tjdddd |  tjdddd |  tjdd |  tjddd |  tjdddd |  tjdddd |  dtj tj d  | j dtj tj ddd d S )Nr   .r  z..T)r  )r  rO   rP   rQ   r  r   r   r   r   test_pathnamesS  s   
 zWriteTest.test_pathnamesc                 C   s6   t jdkr| dd d S | dd | dd d S )Nr  zC:\foor   z/fooz///foo)r   r  r  r   r   r   r   test_abs_pathnamesd  s   
zWriteTest.test_abs_pathnamesc              	   C   s   t tH tt| j}z|d W |  n|  w ttd}z|D ]}|j	dkr9| 
|j	d|j	 q'W |  n|  w W d    d S 1 sPw   Y  d S )Nr  rJ   z./)r   r  rN   r   r   r   r   r  r9   rq   r   r   r   r7   r   r   r   r   test_cwdk  s   
"zWriteTest.test_cwdc              	      s   t ttfD ]9 G  fdddtj}| }|   tjt| j	|tj
ddid}W d    n1 s3w   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   r7   r   r  r   test_open_nonwritable_fileobj|  s   z'WriteTest.test_open_nonwritable_fileobjr  )r   r   r   r   r  r  r  r  r  r  r2  r3  r4  rO   r  r   r5  r  r  r  r  r  r  r  r  r   r   r   r   r   r  V  s.    


(
r  c                   @   r   )GzipWriteTestNr   r   r   r   r   r    r   r  c                   @   r   )Bz2WriteTestNr   r   r   r   r   r    r   r  c                   @   r   )LzmaWriteTestNr   r   r   r   r   r    r   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r8|  }ttd}| }W d    n1 s&w   Y  ||}| |j	d n| t}| }W d    n1 sLw   Y  | 
|dt jd d S )Nr[   zfound trailing datar   zincorrect zero padding)r   r   r   r   r9   decompressorrA   
decompressr   unused_datarB   countr  )r   r7   ZdecrH   r
   r   r   r   test_stream_padding  s   


z#StreamWriteTest.test_stream_paddingr  umaskzMissing umask implementationc              	   C   sr   t jtrtt t d}z"tt| j	}|
  t tjd@ }| |dd W t | d S t | w )N   r  i  zwrong file permissions)rO   rP   existsr   r   r  r
  r   r   r   r9   r  r  rB   )r   Zoriginal_umaskr7   r   r   r   r   test_file_mode  s   

zStreamWriteTest.test_file_mode)r   r   r   r   r  r	  r2  r3  r   r  r4  rO   r  r   r   r   r   r    s    r  c                   @   r8  )GzipStreamWriteTestc                 C   s<   t t| j  ttjdd}tj	
t|vsJ 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   r9   r   r   	read_textrO   rP   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    r>  r  c                   @      e Zd ZerejZdS dZdS )Bz2StreamWriteTestN)r   r   r   r(   BZ2Decompressorr  r   r   r   r   r        r  c                   @   r  )LzmaStreamWriteTestN)r   r   r   r.   LZMADecompressorr  r   r   r   r   r    r  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 )Nra   r\   )rC   )r   rf   Zblocksr   r   r   _length  s   zGNUWriteTest._lengthNc                 C   sX   d}t |tjkr|d7 }|| |7 }|d ur*t |tjkr*|d7 }|| |7 }|S )Nra   )rC   r   LENGTH_NAMEr  LENGTH_LINK)r   rq   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|  w t t}z#| }| |d | |j|jd | |j|jd W |  d S |  w )Nr   z%GNU longname/longlink creation failedzunable to read longname member)r   r   r{  LNKTYPEr   r   r   
GNU_FORMATr  r   r  r   rB   r9   r   rF  rq   )r   rq   r  rG   r7   rI  rJ  memberr   r   r   _test  s2   


zGNUWriteTest._testc                 C   r:  )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  r;   zGNUWriteTest.test_longname_1023c                 C   r:  )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  r;   zGNUWriteTest.test_longname_1024c                 C   r:  )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_1025  r;   zGNUWriteTest.test_longname_1025c                 C   rv   )Nrq     longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1023  rz   zGNUWriteTest.test_longlink_1023c                 C   rv   )Nrq      longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1024  rz   zGNUWriteTest.test_longlink_1024c                 C   rv   )Nrq     longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlink_r#  r   r   r   r   test_longlink_1025  rz   zGNUWriteTest.test_longlink_1025c                 C   rv   )Nr"  r)  r#  r   r   r   r   test_longnamelink_1023  r~   z#GNUWriteTest.test_longnamelink_1023c                 C   rv   )Nr%  r+  r#  r   r   r   r   test_longnamelink_1024  r~   z#GNUWriteTest.test_longnamelink_1024c                 C   rv   )Nr'  r-  r#  r   r   r   r   test_longnamelink_1025  r~   z#GNUWriteTest.test_longnamelink_1025r   )r   r   r   r  r  r!  r$  r&  r(  r*  r,  r.  r/  r0  r1  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 | ztt| j}z$tj	dd}tj	dd}tj
|_tj|_|| || W |  n|  w ttd}z|d}|d}W |  n|  w | |jd | |jd | |jd | |jd ttd}| }W d    n1 sw   Y  ||j|j }	||j|j }
tdd	}| |	| d
 | |
| d W t| d S t| w )NZdevice_header_testZmy_block_device)rq   Zmy_regular_filerJ   r   r[   iI  iY  s   0000000 0000000 s                   )rO   rP   rQ   rN   r  r   r   r   r   r   BLKTYPEr   REGTYPEr   r9   r?   rB   r  r  rA   r   Zoffset_dataslicer   r  )r   r  r7   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_files(  s<   




z;DeviceHeaderTest.test_headers_written_only_for_device_filesN)r   r   r   r   r6  r   r   r   r   r2  $  s    r2  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   r8   X  r;   zCreateTest.setUpc                 C   s<   t | jd}|d W d    d S 1 sw   Y  d S )Nr   r  )r   	file_pathr   )clsrH   r   r   r   
setUpClass[  s   "zCreateTest.setUpClassc                 C   s   t | j d S r   )r   r  r9  )r:  r   r   r   tearDownClass`  s   zCreateTest.tearDownClassc                 C   s   t t| j}|| j W d    n1 sw   Y  | t}| }W d    n1 s1w   Y  | t	|d | 
d|d  d S Nr\   r8  r   )r   r   r   r   r  r9  r   r   rB   rC   r   r   tobjnamesr   r   r   test_created  s   
zCreateTest.test_createc                 C   s   t t| j}|| j W d    n1 sw   Y  | t t t| j}W d    n1 s4w   Y  | t}|	 }W d    n1 sMw   Y  | 
t|d | d|d  d S r=  )r   r   r   r   r  r9  r   FileExistsErrorr   r   rB   rC   r   r>  r   r   r   test_create_existingm  s   
zCreateTest.test_create_existingc                 C   s   |  td}|| j W d    n1 sw   Y  |  t}| }W d    n1 s0w   Y  | t|d | d|d  d S Nxr\   r8  r   )r   r   r  r9  r   rB   rC   r   r>  r   r   r   test_create_taropeny  s   
zCreateTest.test_create_taropenc              	   C   s   |  td}|| j W d    n1 sw   Y  | t |  td W d    n1 s3w   Y  W d    n1 sBw   Y  |  t}| }W d    n1 s[w   Y  | t|d | 	d|d  d S rD  )
r   r   r  r9  r   rB  r   rB   rC   r   r>  r   r   r   test_create_existing_taropen  s   
z'CreateTest.test_create_existing_taropenc                 C   s   t tt| j'}| |jt | 	|jt
jt |t| j | }W d    n1 s4w   Y  | 	t|d | d|d  | t}| }W d    n1 s]w   Y  | 	t|d | d|d  d S r=  )r   r   r   r   r   r   r   rq   r   rB   rO   rP   r   r  r9  r   rC   r   r   r>  r   r   r   test_create_pathlike_name  s   

z$CreateTest.test_create_pathlike_namec                 C   s   |  ttd'}| |jt | |jtj	
t |t| j | }W d    n1 s3w   Y  | t|d | d|d  |  t}| }W d    n1 s\w   Y  | t|d | d|d  d S rD  )r   r   r   r   r   rq   r   rB   rO   rP   r   r  r9  r   rC   r   r>  r   r   r   !test_create_taropen_pathlike_name  s   

z,CreateTest.test_create_taropen_pathlike_nameN)r   r   r   r   rO   rP   rQ   rN   r9  r8   classmethodr;  r<  rA  rC  rF  rG  rH  rI  r   r   r   r   r7  R  s    

		r7  c                   @   r8  )GzipCreateTestc                 C   t   t jt| jdd}|| j W d    n1 sw   Y  t jtddd	}W d    d S 1 s3w   Y  d S )Nr\   r\  zr:gzr   r   r   r   r  r9  r   r?  r   r   r   test_create_with_compresslevel     "z-GzipCreateTest.test_create_with_compresslevelNr   r   r   rO  r   r   r   r   rK        rK  c                   @   r8  )Bz2CreateTestc                 C   rL  )Nr\   r\  r:bz2rM  rN  r   r   r   rO    rP  z,Bz2CreateTest.test_create_with_compresslevelNrQ  r   r   r   r   rS    rR  rS  c                   @   r8  )LzmaCreateTestc                 C   sD   t jt| jdd}|| j W d    d S 1 sw   Y  d S )Nr\   )presetrM  rN  r   r   r   test_create_with_preset  s   "z&LzmaCreateTest.test_create_with_presetN)r   r   r   rW  r   r   r   r   rU    s    rU  c                   @   s   e Zd ZdZdZdZdS )CreateWithXModeTestrE  N)r   r   r   r   rF  rG  r   r   r   r   rX    s    rX  r  r  c                   @   rO  )HardlinkTestc              
   C   s   t jtd| _t jtd| _t| jd}|d W d    n1 s&w   Y  z
t | j| j W n t	yN } z| 
d|  W Y d }~nd }~ww ttd| _| j| j d S )Nr   r  r      foor  r   )rO   rP   rQ   rN   r   r  r   r   r  r  r<  r   r   r7   r  )r   rH   rQ  r   r   r   r8     s   zHardlinkTest.setUpc                 C   s&   | j   t| j t| j d S r   )r7   r9   r   r  r   r  r   r   r   r   r:     s   
zHardlinkTest.tearDownc                 C   $   | j | j}| |jtjd d S )Nzadd file as regular failed)r7   r  r   rB   r   r   r4  r   r   r   r   test_add_twice  s   zHardlinkTest.test_add_twicec                 C   r[  )Nzadd file as hardlink failed)r7   r  r  rB   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)r7   Zdereferencer  r  rB   r   r   r4  r   r   r   r   test_dereference_hardlink  s
   z&HardlinkTest.test_dereference_hardlinkN)r   r   r   r8   r:   r\  r]  r^  r   r   r   r   rY    s    rY  c                   @   s&   e Zd ZdddZdd Zdd ZdS )	PaxWriteTestNc                 C   s   t |}|r||_t j|_t jtdt jd}z|| W |	  n|	  w t t}z-|r?|
 d j}| ||d n|
 d j}| ||d W |	  d S W |	  d S |	  w )Nr   r  r   zPAX longlink creation failedzPAX longname creation failed)r   r   r{  r  r   r   r   r  r   r9   r   rB   rq   )r   rq   r  rG   r7   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|  w t jtd	d
}zR| |j| | |	 d j| |j
 D ]3\}}| t|t | t|t |t jv rxz	t j| | W qE ttfyw   | d Y qEw qEW |  d S |  w )Nr  0z1.23   äöütest)r   rb  r   re  rd  r   )r  r  r3   r	  r   z"unable to convert pax header field)r   r   r   r  r   r   r9   rB   r  r   re  ZassertIsNotr   r   PAX_NUMBER_FIELDSr  r   rn   )r   r  r7   keyvalr   r   r   test_pax_global_header  s8   
	z#PaxWriteTest.test_pax_global_headerc                 C   s   ddd}t jtdt jdd}zt  }d|_d|_||_|| W |	  n|	  w t jtdd	}z"|
 d
 }| |j| | |jd | |jd W |	  d S |	  w )Nr   Z123)rP   rb  r   r3   r  r5   rd  i   r	  r   r  )r   r   r   r  r   rq   rb  r  r   r9   r   rB   )r   r  r7   r   r   r   r   test_pax_extended_header4  s$   
z%PaxWriteTest.test_pax_extended_headerr   )r   r   r   r!  ri  rk  r   r   r   r   r_    s    
 r_  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )UnicodeTestc                 C   r:  )Nr3   _test_unicode_filenamer   r   r   r   test_iso8859_1_filenameP  r;   z#UnicodeTest.test_iso8859_1_filenamec                 C   r:  )Nutf7rm  r   r   r   r   test_utf7_filenameS  r;   zUnicodeTest.test_utf7_filenamec                 C   r:  )Nutf-8rm  r   r   r   r   test_utf8_filenameV  r;   zUnicodeTest.test_utf8_filenamec                 C   s   t jtd| j|dd}zd}|t | W |  n|  w t jt|d}z| | d j	| W |  d S |  w )Nr   r  r  r5   errorsrd  r	  r   )
r   r   r   r  r   r   r9   rB   r   rq   )r   r5   r7   rq   r   r   r   rn  Y  s   z"UnicodeTest._test_unicode_filenamec                 C   sj   t jtd| jddd}z$t  }d|_| t|j| d|_d|_	| t|j| W |
  d S |
  w )Nr   r   r  rt  rd  r   )r   r   r   r  r   rq   r   UnicodeErrorr   r   r9   r  r   r   r   test_unicode_filename_errorh  s   z'UnicodeTest.test_unicode_filename_errorc                 C   s~   t jtdddd}z0|D ]&}| t|jt | t|jt | t|jt | t|j	t qW |
  d S |
  w )NrJ   r3   r  r5   ru  )r   r   r   ZassertIsr   rq   r   r{  r   rd  r9   r  r   r   r   test_unicode_argumentw  s   z!UnicodeTest.test_unicode_argumentc                 C   s   t d}d|_d|_t jtd| jdd}z|| W |  n|  w t jtdd}zE|	d}| 
|jd | 
|jd | jt jkrl|  t jtdd}|	d}| 
|jd | 
|jd W |  d S W |  d S |  w )	Nr   rd  r   r3   )r   r  r5   r	  r   u	   )r   r   r   rd  r   r   r  r   r9   r?   rB   r  )r   r   r7   r   r   r   test_uname_unicode  s.   


zUnicodeTest.test_uname_unicodeN)
r   r   r   ro  rq  rs  rn  rw  ry  rz  r   r   r   r   rl  N  s    rl  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   0   |  d |  dt |  d |  dt d S Nr  e01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567ÿue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678ÿ_test_ustar_namer   r   r   r   r   test_unicode_name1     

z#UstarUnicodeTest.test_unicode_name1c                 C      |  d |  dt d S Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r   r   r   r   test_unicode_name2     
z#UstarUnicodeTest.test_unicode_name2c                 C   r|  )Na   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123ÿ/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r  r   r   r   r   test_unicode_longname1  r  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   r  )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345ÿÿu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456ÿÿr  r   r   r   r   test_unicode_longname4  r  z'UstarUnicodeTest.test_unicode_longname4Nc                 C   s   t jtd| jdd}t |}|d u r|| n| ||j| W d    n1 s,w   Y  |d u rdt jtddd}|D ]}| ||j  W d    d S W d    d S 1 s]w   Y  d S d S )Nr   rr  rj  rJ   r	  )	r   r   r   r  r   r   r   rB   rq   r   rq   excr7   r   r   r   r   r    s    
"z!UstarUnicodeTest._test_ustar_namec                 C   r|  r}  _test_ustar_linkr   r   r   r   r   test_unicode_link1  r  z#UstarUnicodeTest.test_unicode_link1c                 C   r  r  r  r   r   r   r   test_unicode_link2  r  z#UstarUnicodeTest.test_unicode_link2c                 C   s   t jtd| jdd"}t d}||_|d u r|| n| ||j| W d    n1 s/w   Y  |d u rgt jtddd}|D ]}| ||j  W d    d S W d    d S 1 s`w   Y  d S d S )Nr   rr  rj  r   rJ   r	  )	r   r   r   r  r   r{  r   r   rB   r  r   r   r   r    s"   
"z!UstarUnicodeTest._test_ustar_linkr   )r   r   r   r   USTAR_FORMATr  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r{    s    
r{  c                   @   s   e Zd ZejZdd ZdS )GNUUnicodeTestc              
   C   n   dD ]2\}}t jt|dd}z||}W n ty$   | d Y nw W d    q1 s/w   Y  qd S )N))rr  u   pax/bad-pax-)r3   u   pax/bad-pax-äöür   rx  z%unable to read bad GNU tar pax headerr   r   r   r?   r   rn   r   r5   rq   r7   r   r   r   r   test_bad_pax_header  s   z"GNUUnicodeTest.test_bad_pax_headerN)r   r   r   r   r  r  r  r   r   r   r   r    s    r  c                   @   s   e Zd ZejZdZdd ZdS )PAXUnicodeTestNc              
   C   r  )N))rr  u   pax/hdrcharset-)r3   u   pax/hdrcharset-äöür   rx  z)unable to read POSIX.1-2008 binary headerr  r  r   r   r   test_binary_header  s   z!PAXUnicodeTest.test_binary_header)r   r   r   r   r  r  rw  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 d S r   )r   r   rO   rP   r  r   r  r   r   r   r   r8     s   zAppendTestBase.setUpr   c              
   C   s   t jtddK}|d}d|_||%}t | j|}||| W d    n1 s.w   Y  W d    n1 s=w   Y  W d    d S W d    d S 1 sUw   Y  d S )Nr3   r	  r=   r   )r   r   r   r?   rq   r@   r   )r   r   srcr   r   r7   r   r   r   _create_testtar  s   
"zAppendTestBase._create_testtarc                 C   s(   |  d| j  | tjtjtd d S )Nr   rs   )r  r   r   r   r   r   r   r   r   r   r   test_append_compressed$  s   z%AppendTestBase.test_append_compressedN)r   )r   r   r   r8   r  r  r   r   r   r   r    s    
r  c                   @   s   e Zd ZdZdddZdgdfddZdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )
AppendTestNc                 C   sH   t j| jd|d}|t d W d    d S 1 sw   Y  d S )Nrs   rS  r  )r   r   r   r   r   )r   r   r7   r   r   r   _add_testfile+  s   "zAppendTest._add_testfiler  c                 C   sF   t j| j|d}| | | W d    d S 1 sw   Y  d S )NrS  )r   r   r   rB   r   )r   r@  r   r7   r   r   r   r!  /  s   "zAppendTest._testc                 C   s   |    |   d S r   )r  r!  r   r   r   r   test_non_existing3  s   zAppendTest.test_non_existingc                 C   s&   t | jd  |   |   d S )Nr   )r   r   r   r9   r  r!  r   r   r   r   
test_empty7  s   zAppendTest.test_emptyc                 C   s.   t d}| | |d | j|d d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   rS  )r   r   r  rb   r!  r   r   r   r   test_empty_fileobj<  s   


zAppendTest.test_empty_fileobjc                 C   sp   |    t| jd}| }W d    n1 sw   Y  t|}| | |d | jddg|d d S )Nr[   r   r   r  )r@  r   )	r  r   r   rA   r   r   r  rb   r!  ro   r   r   r   test_fileobjB  s   



zAppendTest.test_fileobjc                 C   s$   |    |   | jddgd d S )Nr   r  )r@  )r  r  r!  r   r   r   r   test_existingK  s   zAppendTest.test_existingc                 C   sJ   t | jd}|| W d    n1 sw   Y  | tj| j d S r   )r   r   r   r   r   r   r  )r   r
   rH   r   r   r   _test_errorR  s   zAppendTest._test_errorc                 C   r:  )Nr`   r  r   r   r   r   	test_nullW  r;   zAppendTest.test_nullc                 C   r:  )N                r  r   r   r   r   test_incompleteZ  r;   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_garbagea  s   z AppendTest.test_trailing_garbagec                 C   r:  )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar  r   r   r   r   test_invalide  r;   zAppendTest.test_invalidr   )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                   @   r   )GzipAppendTestNr   r   r   r   r   r  h  r   r  c                   @   r   )Bz2AppendTestNr   r   r   r   r   r  k  r   r  c                   @   r   )LzmaAppendTestNr   r   r   r   r   r  n  r   r  c                   @   $   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  r~  a   123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnamea   1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/1234567/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  rq       )r   r   r   r  r   r   r{  rb  r   r   r   r   test_ustar_limitst  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  rq   l          )r   r   r   r  r{  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  r{  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  r  s    r  c                   @   <   e Zd Zd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foobarr~  rZ  s   foo bar )rB   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 r\      7777777            r               r                      r   r   s           )rB   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 )Nr\   r  r  r  r  r`  r  r  r  r  r  r  r  r  r  g      Yg      0Bs         gr   )rB   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 sw   Y  |  t tddtj W d    n1 s5w   Y  |  t tddtj W d    n1 sRw   Y  |  t tddtj W d    d S 1 spw   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>/   NULZSubsequentHeaderErrorZInvalidHeaderErrorr  ZPAX_NAME_FIELDSrf  ZPOSIX_MAGICr  r  ZSOLARIS_XHDTYPEZcalc_chksumsversionZCONTTYPEfilemoder  ZSUPPORTED_TYPESZCHRTYPEr  ZGNUTYPE_LONGLINKr3  mainr  ZEOFHeaderErrorr  r  ZExFileObjectZ	GNU_TYPESZEmptyHeaderErrorZ
PAX_FIELDSZLENGTH_PREFIXZGNUTYPE_SPARSEZREGULAR_TYPESZTruncatedHeaderErrorZ	GNU_MAGICpwdZXGLTYPEZFIFOTYPEgrpcopyfileobjZAREGTYPEr   r  Zsymlink_exceptionr  r4  ZSYMTYPEr  )not_exported)r   Zcheck__all__r   )r   r  r   r   r   test__all__  s   zMiscTest.test__all__c              	   C   s   t jt jtd}| tj.}tdf}t	j
jjtjd|d t| W d    n1 s3w   Y  W d    n1 sBw   Y  | dt|j d S )Nr   zlzma module is not availabler0   )Zside_effectz?
- method xz: CompressionError('lzma module is not available')
)rO   rP   rQ   r  __file__r   r   r   ZCompressionErrorr2  r  r  r+  r   r   r   r   	exception)r   fnameexcinfoerrorr   r   r   .test_useful_error_message_when_modules_missing  s   z7MiscTest.test_useful_error_message_when_modules_missingN)	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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   rO   lineseprl   )r   argsrg  rcr   errr   r   r   
tarfilecmd	  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_failure	  s   z"CommandLineTest.tarfilecmd_failurec                 C   st   t dt dg}| tj| t|d}|D ]}|j|tj	
|d qW d    d S 1 s3w   Y  d S )Ntokenize_tests.txt9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr   r  )r   r   r  r   r  r   r   r  rO   rP   r  )r   tar_namefilestfZtardatar   r   r   make_simple_tarfile	  s   "z#CommandLineTest.make_simple_tarfilec                 C   s|   |   \}}}| |d | d|  | d|  | d|  |  dd\}}}| |d | | d d S )Nr`   s   usages   errors   required-lr   )r  rB   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  rB   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z-vz	--verboser  rr  PYTHONIOENCODINGs   is a tar archive.
)r  r  r   r  r   r   r   test_test_command_verbose-	  s   
z)CommandLineTest.test_test_command_verbosec                 C   s.  t d}| d|\}}}| d| | |d | |d tD ]r}| j|db t|d}| }W d    n1 s?w   Y  z:tt	d}|
|d d	  W d    n1 s^w   Y  | dt	\}}}| |d | |d W tt	 ntt	 w W d    q"1 sw   Y  q"d S )
N
zipdir.zipr      is not a tar archive.r`   r\   )r  r[   r   r  )r   r   r  r   rB   r  ZsubTestr   rA   r   r   r   r  )r   zipnamer  r   r  r  r   r
   r   r   r   test_test_command_invalid_file4	  s(   

z.CommandLineTest.test_test_command_invalid_filec              
   C   s   t D ]M}t $}t|d}|jdd W d    n1 s w   Y  W d    n1 s/w   Y  | dd}dD ]}| j||dd}| 	|| q>qd S )NrJ   Fr   r   r   )r  z--listr  
r  r   Zcaptured_stdoutr   r   rY   r   rl   r  rB   r   r  r   r  Zexpectedr  r   r   r   r   test_list_commandH	  s   
z!CommandLineTest.test_list_commandc              
   C   s   t D ]N}t $}t|d}|jdd W d    n1 s w   Y  W d    n1 s/w   Y  | dd}dD ]}| j|d|dd}| 	|| q>qd S )	NrJ   Tr   r   r   r  r  r  r  r   r   r   r   test_list_command_verboseS	  s   

z)CommandLineTest.test_list_command_verbosec                 C   sD   t d}| d|\}}}| d| | |d | |d d S )Nr  r  r  r`   r\   )r   r   r  r   rB   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 ]8}z0| j|tg|R  }| |d tt}|  W d    n1 s3w   Y  W t	t qt	t w d S )Nr  r  )-cz--creater`   )
r   r   r  r   rB   r   r   r   r   r  r   r  r  r   r7   r   r   r   test_create_commande	  s   
z#CommandLineTest.test_create_commandc              
   C   s   t dt dg}dD ]<}z4| j|dtg|R ddi}| d| tt}|  W d    n1 s7w   Y  W t	t qt	t w d S )Nr  r  r  r  r  rr  s    file created.)
r   r   r  r   r   r   r   r   r   r  r  r   r   r   test_create_command_verboser	  s   
z+CommandLineTest.test_create_command_verbosec              	   C   s   t dg}z9| jdtg|R  }| |d tt}|  W d    n1 s+w   Y  W t	t d S W t	t d S t	t w )Nr  r  r`   )
r   r   r  dotlessnamerB   r   r   r   r   r  )r   r  r   r7   r   r   r   $test_create_command_dotless_filename	  s   
z4CommandLineTest.test_create_command_dotless_filenamec              	   C   s   t jtd}tdg}z9| jd|g|R  }| |d t	|}|
  W d    n1 s2w   Y  W t| d S W t| d S t| w )Nz.testtarr  r  r`   )rO   rP   rQ   rN   r   r   r  rB   r   r   r   r   r  )r   r  r  r   r7   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z1td |j }| jd|g|R  }|	|}|
  W d    n1 s;w   Y  W t| qt| w d S )Nr  r  r  r  )r   r   r"   r'   r+   r   r   r   r  r   r   r   r  )r   r  Zfiletyper  r   r7   r   r   r   test_create_command_compressed	  s   
z.CommandLineTest.test_create_command_compressedc              
   C   st   |  t dD ]0}z(tt | |t}W d    n1 s w   Y  | |d W tt qtt w d S )N)-ez	--extractr`   r  r   r   temp_cwd	tarextdirr  rB   r  r   r  r   r   r   r   test_extract_command	  s   
z$CommandLineTest.test_extract_commandc              
   C   sz   |  t dD ]3}z+tt | j|dtdd}W d    n1 s#w   Y  | d| W tt qtt w d S )Nr  r  rr  r  s    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   sl   |  t z*tt | dtd}W d    n1 sw   Y  | |d W tt d S tt w )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w   Y  | d| | |d | |d d S )Nr  r  r  r`   r\   )r   r   r   r  r  r  r   rB   r  r   r   r   !test_extract_command_invalid_file	  s   
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  
	  s(    	


	r  c                   @   r  )ContextManagerTestc                 C   sJ   t t}| |jd W d    n1 sw   Y  | |jd d S )Nzclosed inside runtime contextcontext manager failed)r   r   r   r   r.  r   r   r   r   r   
test_basic	  s   zContextManagerTest.test_basicc              	   C   sv   t t}|  | t# | W d    n1 sw   Y  W d    d S W d    d S 1 s4w   Y  d S r   )r   r   r   r9   r   r  r   r   r   r   test_closed	  s   
"zContextManagerTest.test_closedc              	   C   sl   |  t}tt}t1 sw   Y  W d    n1 s w   Y  | |jtd | |j	d d S )Nz)wrong exception raised in context managerr  )
r   	Exceptionr   r   r   r  r   r  r   r.  )r   r  r7   r   r   r   test_exception	  s   
z!ContextManagerTest.test_exceptionc                 C   sX   zt td}t1 sw   Y  W n   Y | tjtdd | |j	d d S )Nr   r   z-context manager wrote an end-of-archive blockr  )
r   r   r   r  rB   rO   rP   r  r   r.  r   r   r   r   test_no_eof	  s   zContextManagerTest.test_no_eofc                 C   sF   t td W d    n1 sw   Y  | tjtdd d S )Nr   r   z-context manager wrote no end-of-archive block)r   r   r   r  rO   rP   r  r   r   r   r   test_eof	  s   zContextManagerTest.test_eofc              	   C   s~   t td0}ztj |dd}t1 sw   Y  W n   Y | |jd | |jd W d    d S 1 s8w   Y  d S )Nr   r   r   zexternal file object was closedr  )r   r   r   r  r   r.  r   r   r   r   r   r  	  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 w   Y  | t	|t
 d S r   )r7   rM   rN   r   rO   rP   rQ   rA   rB   r   rE   )r   rq   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   r:  )Nrw   r  r   r   r   r   test_hardlink_extraction1
     z+LinkEmulationTest.test_hardlink_extraction1c                 C   r:  )Nr{   r!  r   r   r   r   test_hardlink_extraction2
  r#  z+LinkEmulationTest.test_hardlink_extraction2r  z Skip emulation if symlink existsc                 C   r:  )Nr   r!  r   r   r   r   test_symlink_extraction1
  r#  z*LinkEmulationTest.test_symlink_extraction1c                 C   r:  )Nr   r!  r   r   r   r   test_symlink_extraction2!
  r#  z*LinkEmulationTest.test_symlink_extraction2N)r   r   r   r  r2  skipIfr4  rO   rP   r"  r$  r%  r&  r   r   r   r   r  
  s$    


r  c                   @   r  )Bz2PartialReadTestc              	      sv   G  fdddt j ttd }tt|d D ]}ztj	 |d | |d W q tj
y8   Y qw d S )Nc                       s0   e Zd ZdZ fddZ fddZ  ZS )z9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOFc                    s4   | j rtd|  t|  k| _ t | |S )Nz(infinite loop detected in tarfile.open())hit_eofAssertionErrorrc   rC   r   superrA   )r   rb  	MyBytesIO	__class__r   r   rA   .
  s   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readc                    s   d| _ t | j| S r  )r)  r+  rb   r  r,  r   r   rb   4
  s   z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)r   r   r   r)  rA   rb   __classcell__r   r-  )r.  r   r-  ,
  s    r-  r   r\   r   )r   r   r(   compressr   r   r   rangerC   r   r   )r   r   r
   rE  r   r0  r   _test_partial_input+
  s   z&Bz2PartialReadTest._test_partial_inputc                 C   r:  )NrJ   r3  r   r   r   r   test_partial_input?
  r;   z%Bz2PartialReadTest.test_partial_inputc                 C   r:  )NrT  r4  r   r   r   r   test_partial_input_bz2B
  r;   z)Bz2PartialReadTest.test_partial_input_bz2N)r   r   r   r3  r5  r6  r   r   r   r   r(  '
  s    r(  c                  C   sZ   z
dd l } dd l}W n
 ty   Y dS w | dd dkr dS |dd dkr+dS dS )Nr   FrootT)r  r  ImportErrorgetpwuidgetgrgid)r  r  r   r   r   root_is_uid_gid_0F
  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-}|D ]!\}}}}	}
t|}||_||_	d	|_
d	|_|	|_|||
 q%W d    tS 1 sRw   Y  tS )
Ns   contentc   b   M   L   X   W   r   r7  )r   r   r   r4  r   r   r   r   rb  rc  r   rd  r   r   )
filename_1	dirname_1
filename_2rH   re  tarflrq   rb  rc  typcontentsr   r   r   r   _make_test_archive[
  s&   


z#NumericOwnerTest._make_test_archivec                 c   sr    d| _ d}d}|}|}tj||}t|||}t|}||||fV  W d    d S 1 s2w   Y  d S )Nr   znumeric-owner-testfiler  )r  rO   rP   rQ   r>  rK  r   r   )mock_geteuidr  r  rE  rF  rG  Ztar_filenamerH  r   r   r   _setup_tests
  s   "zNumericOwnerTest._setup_testzos.chownzos.chmodz
os.geteuidc           
      C   s   |  |\}}}}|j|tdd |j|tdd W d    n1 s$w   Y  tjt|}tjt|}	|jtj	|ddtj	|	ddgdd d S )NTZnumeric_ownerr?  r@  rC  rD  Z	any_order)
rM  rM   rN   rO   rP   rQ   assert_has_callsr2  r  call)
r   rL  
mock_chmod
mock_chownrH  rE  _rG  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 sw   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 )
NTrN  r?  r@  rA  rB  rC  rD  rO  )
rM  r
  rN   rO   rP   rQ   rP  r2  r  rQ  )r   rL  rR  rS  rH  rE  rF  rG  rU  Zf_dirname_1rV  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 sw   Y  tjt|}||dd d S )NFrN  r   )rM  rM   rN   rO   rP   rQ   Zassert_called_with)r   rL  rR  rS  rH  rE  rT  rU  r   r   r   "test_extract_without_numeric_owner
  s
   z3NumericOwnerTest.test_extract_without_numeric_ownerc              	   C   sN   |  |\}}}}| t|j|tdd W d    d S 1 s w   Y  d S )NFT)rM  r   r  rM   rN   )r   rL  rH  rE  rT  r   r   r   test_keyword_only
  s
   "z"NumericOwnerTest.test_keyword_onlyN)r   r   r   r  rK  r   rM  r2  r  r  rW  rX  r3  r;  rY  rZ  r   r   r   r   r>  R
  s.    	











r>  c               	   C   s   t t tt tgattd} |  }W d    n1 s!w   Y  t	t
tfD ]-}|jrXt |j t|j ||jd}|| W d    q+1 sSw   Y  q+d S )Nr[   r   )r   r  rN   rO   makedirsr   r  r   rA   r"   r'   r+   r  r   )rH   r
   cr7   r   r   r   setUpModule
  s   


r]  c                   C   s   t jtrtt d S d S r   )rO   rP   r  rN   r   r  r   r   r   r   tearDownModule
  s   r^  __main__)sr   rO   r   Zhashlibr   
contextlibr   randomr   r   r2  Zunittest.mockr   re  r   Ztest.supportr   r   r%   r8  r(   r.   r   rP   r   ZTESTFNrN   r  r   r   rQ   r$   r)   r-   r   r	  rE   r  r   Zrequires_gzipr"   Zrequires_bz2r'   Zrequires_lzmar+   r1   ZTestCaser<   r   r   r   r   r   r   r   r   r   r6  r7  r9  r?  r@  rL  rM  rN  rP  rZ  r[  r_  r`  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r7  rK  rS  rU  rX  r3  r4  rY  r_  rl  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   <module>   s    

|Pw {=(a*;,  9'R.Z			*TQO@;] B:!v
