a
     RîhC¬ ã                   @   s²  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	 d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ zd dlZW n eyÊ   dZY n0 zd dlZW n eyî   dZY n0 zd dlZW n ey   dZY n0 zd dlZW n ey:   dZY n0 dd	„ Zej ej¡d
 Z e d Z!e "d¡Z#ej $e d¡Z%ej $e d¡Z&ej $e d¡Z'ej $e d¡Z(ej $e d¡Z)dZ*dZ+dZ,G dd„ dƒZ-e .¡ G dd„ dƒƒZ/e 0¡ G dd„ dƒƒZ1e 2¡ G dd„ dƒƒZ3G dd„ de-ƒZ4G dd „ d e4ej5ƒZ6G d!d"„ d"e/e6ƒZ7G d#d$„ d$e1e6ƒZ8G d%d&„ d&e3e6ƒZ9G d'd(„ d(e4ej5ƒZ:G d)d*„ d*e/e:ƒZ;G d+d,„ d,e1e:ƒZ<G d-d.„ d.e3e:ƒZ=G d/d0„ d0e4ƒZ>G d1d2„ d2e>ƒZ?G d3d4„ d4e?ej5ƒZ@G d5d6„ d6e/e?ej5ƒZAG d7d8„ d8e1e?ej5ƒZBG d9d:„ d:e3e?ej5ƒZCG d;d<„ d<e>ej5ƒZDG d=d>„ d>e/eDƒZEG d?d@„ d@e1eDƒZFG dAdB„ dBe3eDƒZGG dCdD„ dDe-ej5ƒZHG dEdF„ dFe/eHƒZIG dGdH„ dHe1eHƒZJG dIdJ„ dJe3eHƒZKG dKdL„ dLe4ej5ƒZLG dMdN„ dNƒZMG dOdP„ dPeMe4ej5ƒZNG dQdR„ dReMe4ej5ƒZOG dSdT„ dTe-ƒZPG dUdV„ dVePej5ƒZQG dWdX„ dXe/eQƒZRG dYdZ„ dZe1eQƒZSG d[d\„ d\e3eQƒZTG d]d^„ d^ePej5ƒZUG d_d`„ d`e/eUƒZVG dadb„ dbe1eUƒZWG dcdd„ dde3eUƒZXG dedf„ dfej5ƒZYG dgdh„ dhePej5ƒZZG didj„ djePej5ƒZ[G dkdl„ dle/e[ƒZ\G dmdn„ dne1e[ƒZ]G dodp„ dpe3e[ƒZ^G dqdr„ dre[ƒZ_e `eaedsƒdt¡G dudv„ dvej5ƒƒZbG dwdx„ dxeYƒZcG dydz„ dzƒZdG d{d|„ d|edej5ƒZeG d}d~„ d~edej5ƒZfG dd€„ d€edej5ƒZgG dd‚„ d‚ƒZhG dƒd„„ d„ehej5ƒZiG d…d†„ d†e/ehej5ƒZjG d‡dˆ„ dˆe1ehej5ƒZkG d‰dŠ„ dŠe3ehej5ƒZlG d‹dŒ„ dŒej5ƒZmG ddŽ„ dŽej5ƒZnG dd„ dej5ƒZoG d‘d’„ d’ej5ƒZpe qeaedsƒd“¡G d”d•„ d•e4ej5ƒƒZrG d–d—„ d—e1ej5ƒZsd˜d™„ Zte `eaedšƒd›¡e `eaedœƒd¡G dždŸ„ dŸej5ƒƒƒZuG d d¡„ d¡e4ej5ƒZvG d¢d£„ d£e4ƒZwG d¤d¥„ d¥ewej5ƒZxG d¦d§„ d§ewej5ƒZyG d¨d©„ d©ewej5ƒZzG dªd«„ d«ewej5ƒZ{G d¬d­„ d­ej5ƒZ|d®d¯„ Z}G d°d±„ d±ƒZ~G d²d³„ d³ej5ƒZG d´dµ„ dµej5ƒZ€d¶d·„ Zd¸d¹„ Z‚eƒdºkr®e „¡  dS )»é    N)Úsha256)Úcontextmanager)ÚRandom)Úsupport)Úscript_helper)Úwarnings_helperc                 C   s   t | ƒ ¡ S ©N)r   Ú	hexdigest)Údata© r   ú9/opt/python-3.9.24/usr/lib/python3.9/test/test_tarfile.pyÚ	sha256sum(   s    r   z-tardirz-extract-testztesttar.tarztesttar.tar.gzztesttar.tar.bz2ztesttar.tar.xzztmp.tarZtesttaró    Z@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   ÚmodeC   s    zTarTest.modeN)Ú__name__Ú
__module__Ú__qualname__Útarnamer   ÚioÚFileIOÚopenÚtarfileÚTarFileÚtaropenÚpropertyr   r   r   r   r   r   =   s   r   c                   @   s*   e Zd ZeZdZerejndZe	j
jZdS )ÚGzipTestÚgzN)r   r   r   Úgzipnamer   r   ÚgzipZGzipFiler   r   r   Zgzopenr   r   r   r   r   r!   G   s   r!   c                   @   s*   e Zd ZeZdZerejndZe	j
jZdS )ÚBz2TestÚbz2N)r   r   r   Úbz2namer   r   r&   ÚBZ2Filer   r   r   Zbz2openr   r   r   r   r   r%   N   s   r%   c                   @   s*   e Zd ZeZdZerejndZe	j
jZdS )ÚLzmaTestÚxzN)r   r   r   Úxznamer   r   ÚlzmaÚLZMAFiler   r   r   Zxzopenr   r   r   r   r   r)   U   s   r)   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚReadTestúr:c                 C   s   t j| j| jdd| _d S )Nú	iso8859-1©r   Úencoding©r   r   r   r   Útarr   r   r   r   ÚsetUpa   s    ÿzReadTest.setUpc                 C   s   | j  ¡  d S r   )r4   Úcloser   r   r   r   ÚtearDowne   s    zReadTest.tearDownN)r   r   r   r   r5   r7   r   r   r   r   r.   ]   s   r.   c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚUstarReadTestc                 C   sj   | j  d¡}| j  |¡>}| ¡ }|  t|ƒ|jd¡ |  t|ƒtd¡ W d   ƒ n1 s\0    Y  d S )Núustar/regtypeúregular file extraction failed)	r4   Ú	getmemberÚextractfileÚreadÚassertEqualÚlenÚsizer   Úsha256_regtype©r   ÚtarinfoÚfobjr
   r   r   r   Útest_fileobj_regular_filek   s    ÿÿz'UstarReadTest.test_fileobj_regular_filec                 C   sÊ   | j  dt¡ | j  d¡}ttj td¡dƒ}| ¡ }W d   ƒ n1 sL0    Y  | j  	|¡T}t
 |¡}| ¡ }|  ||d¡ |  t|ƒdd¡ |  |d dd¡ W d   ƒ n1 s¼0    Y  d S )Nr9   Úrzfileobj.readlines() failedér   éS   zOI will gladly admit that Python is not the fastest running scripting language.
)r4   ÚextractÚTEMPDIRr;   r   ÚosÚpathÚjoinÚ	readlinesr<   r   ÚTextIOWrapperr>   r?   )r   rC   Úfobj1Úlines1rD   Úfobj2Úlines2r   r   r   Útest_fileobj_readlinest   s"    &
ÿÿ
ýz$UstarReadTest.test_fileobj_readlinesc                 C   s¢   | j  dt¡ | j  d¡}ttj td¡dƒ}| ¡ }W d   ƒ n1 sL0    Y  | j  	|¡,}t
t |¡ƒ}|  ||d¡ W d   ƒ n1 s”0    Y  d S )Nr9   rF   zfileobj.__iter__() failed)r4   rI   rJ   r;   r   rK   rL   rM   rN   r<   Úlistr   rO   r>   )r   rC   rP   rQ   rR   rS   r   r   r   Útest_fileobj_iter†   s    &ÿzUstarReadTest.test_fileobj_iterc           	      C   s*  | j  dt¡ ttj td¡dƒ}| ¡ }W d   ƒ n1 s@0    Y  | j  d¡}| j  	|¡°}| ¡ }| 
d¡ |  d| ¡ d¡ | 
dd¡ |  d| ¡ d¡ | 
dd¡ |  d	| ¡ d
¡ | 
d	d¡ |  d| ¡ d¡ | d¡}|  ||dd… d¡ | 
dd¡ |  |j| ¡ d¡ |  | ¡ dd¡ | 
|j d¡ |  d| ¡ d¡ | 
d¡ | ¡ }| 
d¡ | ¡ }|  ||d¡ | 
d¡ |  t| ¡ ƒ| ¡ d¡ | 
d¡ |  t| ¡ ƒd | ¡ d¡ | 
d¡ | ¡ }|  | ¡ |t|ƒd … d¡ W d   ƒ n1 s0    Y  d S )Nr9   Ú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)r4   rI   rJ   r   rK   rL   rM   r=   r;   r<   Úseekr>   Útellr@   rN   r?   Úreadline)	r   rD   r
   rC   ÚtextÚsÚs1Ús2Úliner   r   r   Útest_fileobj_seek   sr    &
ÿÿÿÿ
ÿÿÿÿ

ÿ
ÿ
ÿ
ÿzUstarReadTest.test_fileobj_seekc              	   C   s„   | j  d¡d}t |¡}| ¡  d¡}|  t|ƒt¡ z| 	d¡ W n t
y`   |  d¡ Y n0 W d   ƒ n1 sv0    Y  d S )Nr9   r0   éd   zseeking failed in text mode)r4   r<   r   rO   r=   Úencoder>   r   rA   r^   ÚAttributeErrorÚfail©r   rD   r
   r   r   r   Útest_fileobj_textÀ   s    
zUstarReadTest.test_fileobj_textc              	   C   sl   | j  |¡L}| j  |¡ }|  |j|j¡ W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  d S r   )r4   r<   r>   Úname)r   ZlnktypeÚregtypeÚaÚbr   r   r   Ú_test_fileobj_linkÏ   s
    
ÿz UstarReadTest._test_fileobj_linkc                 C   s   |   dd¡ d S )Núustar/lnktyper9   ©rq   r   r   r   r   Útest_fileobj_link1Ô   s    z UstarReadTest.test_fileobj_link1c                 C   s   |   dd¡ d S )Nú./ustar/linktest2/lnktypeúustar/linktest1/regtypers   r   r   r   r   Útest_fileobj_link2×   s    ÿz UstarReadTest.test_fileobj_link2c                 C   s   |   dd¡ d S )Núustar/symtyper9   rs   r   r   r   r   Útest_fileobj_symlink1Û   s    z#UstarReadTest.test_fileobj_symlink1c                 C   s   |   dd¡ d S )Nú./ustar/linktest2/symtyperv   rs   r   r   r   r   Útest_fileobj_symlink2Þ   s    ÿz#UstarReadTest.test_fileobj_symlink2c                 C   s   |   dd¡ d S )NZsymtype2r9   rs   r   r   r   r   Útest_issue14160â   s    zUstarReadTest.test_issue14160c                 C   s   |   d¡ |   d¡ d S )NÚbarZeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)Úadd_dir_and_getmemberr   r   r   r   Útest_add_dir_getmemberå   s    
z$UstarReadTest.test_add_dir_getmemberc                 C   sÎ   t  ¡ ² t td¡@}z"t |¡ | |¡ W t |¡ nt |¡ 0 W d   ƒ n1 s\0    Y  t t¡,}|  	| 
|¡| 
|d ¡¡ W d   ƒ n1 s¢0    Y  W d   ƒ n1 sÀ0    Y  d S )NÚwú/)r   Útemp_cwdr   r   ÚtmpnamerK   ÚmkdirÚaddÚrmdirr>   r;   )r   rm   r4   r   r   r   r~   ê   s    

6þz#UstarReadTest.add_dir_and_getmemberN)r   r   r   rE   rT   rV   rf   rl   rq   rt   rw   ry   r{   r|   r   r~   r   r   r   r   r8   i   s   	
0r8   c                   @   s   e Zd ZdS )ÚGzipUstarReadTestN©r   r   r   r   r   r   r   r‡   ø   s   r‡   c                   @   s   e Zd ZdS )ÚBz2UstarReadTestNrˆ   r   r   r   r   r‰   û   s   r‰   c                   @   s   e Zd ZdS )ÚLzmaUstarReadTestNrˆ   r   r   r   r   rŠ   þ   s   rŠ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚListTestc                 C   s   t j| j| jd| _d S )N©r   r3   r   r   r   r   r5     s    zListTest.setUpc                    s@  t jt  ¡ ddd}t td|¡ ˆ jjdd W d   ƒ n1 sF0    Y  | ¡  	¡ }ˆ  
d|¡ ˆ  
d|¡ ˆ  
d	|¡ ˆ  
d
|¡ ˆ  
d|¡ ˆ  
d|¡ ˆ  
d|¡ ˆ  
d|¡ ‡ fdd„}ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  
|dƒ|¡ ˆ  |d¡ ˆ  d|¡ ˆ  d|¡ d S )NÚasciiÚ
©ÚnewlineÚstdoutF©Úverboseó   ustar/conttypeó   ustar/regtypes   ustar/lnktypes   ustar/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/12345/1234567/longnames   ./ustar/linktest2/symtypes   ./ustar/linktest2/lnktypes   ustar/dirtype/s   ustar/dirtype-with-size/c                    s   |   ˆ jjd¡}| dd¡S )NÚsurrogateescaper   Úbackslashreplace)Údecoder4   r2   rh   )rp   rb   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   rO   ÚBytesIOr   Ú	swap_attrÚsysr4   rU   ÚdetachÚgetvalueÚassertInÚassertRegexÚassertNotIn)r   ÚtioÚoutr™   r   r   r   Ú	test_list  s2    ,
ÿ
ÿzListTest.test_listc                 C   s¨   t jt  ¡ ddd}t td|¡ | jjdd W d   ƒ n1 sF0    Y  | ¡  	¡ }|  
|d¡ |  d|¡ |  d	|¡ |  d
|¡ |  d|¡ |  d|¡ d S )Nr   rŽ   r   r‘   Tr’   s°   \?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\n\?rw-r--r-- tarfile/tarfile\s+7011 \d{4}-\d\d-\d\d\s+\d\d:\d\d:\d\d ustar/\w+type ?\r?\ns   ustar/symtype -> regtypes1   ./ustar/linktest2/symtype -> ../linktest1/regtypes;   ./ustar/linktest2/lnktype link to ./ustar/linktest1/regtypes	  gnu/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longlink link to gnu/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longnames	  pax/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longlink link to pax/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/longname)r   rO   rš   r   r›   rœ   r4   rU   r   rž   r    rŸ   )r   r¢   r£   r   r   r   Útest_list_verbose-  s     ,ÿÿÿzListTest.test_list_verbosec                 C   sˆ   t jt  ¡ ddd}dd„ }t td|¡& | jjd|| jƒd W d   ƒ n1 sV0    Y  | ¡  	¡ }|  
d	|¡ |  d
|¡ d S )Nr   rŽ   r   c                 s   s"   |   ¡ D ]}d|jv r|V  qd S )NZreg)Ú
getmembersrm   )r4   rC   r   r   r   ÚmembersG  s    
z+ListTest.test_list_members.<locals>.membersr‘   F)r“   r§   r•   r”   )r   rO   rš   r   r›   rœ   r4   rU   r   rž   rŸ   r¡   )r   r¢   r§   r£   r   r   r   Útest_list_membersE  s    4zListTest.test_list_membersN)r   r   r   r5   r¤   r¥   r¨   r   r   r   r   r‹     s   %r‹   c                   @   s   e Zd ZdS )ÚGzipListTestNrˆ   r   r   r   r   r©   R  s   r©   c                   @   s   e Zd ZdS )ÚBz2ListTestNrˆ   r   r   r   r   rª   V  s   rª   c                   @   s   e Zd ZdS )ÚLzmaListTestNrˆ   r   r   r   r   r«   Z  s   r«   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚCommonReadTestc                 C   s¤   t tdƒ W d   ƒ n1 s 0    Y  |  t t¡¡ |  t t t¡¡¡ t tdƒ }|  t |¡¡ W d   ƒ n1 s€0    Y  |  t t d¡¡¡ d S )NÚwbrW   s   invalid)	r   rƒ   ÚassertFalser   Ú
is_tarfileÚpathlibÚPathr   rš   ©r   rD   r   r   r   Útest_is_tarfile_erroneous`  s    .z(CommonReadTest.test_is_tarfile_erroneousc              	   C   s°   |   t | j¡¡ |   t t | j¡¡¡ t| jdƒ }|   t |¡¡ W d   ƒ n1 s\0    Y  t| jdƒ*}|   t t | 	¡ ¡¡¡ W d   ƒ n1 s¢0    Y  d S ©NrW   )
Ú
assertTruer   r¯   r   r°   r±   r   r   rš   r=   r²   r   r   r   Útest_is_tarfile_validq  s    .z$CommonReadTest.test_is_tarfile_validc                 C   sœ   t  t| j dd¡¡ W d   ƒ n1 s,0    Y  zVzt  t| j¡}| ¡  W n t jyp   |  d¡ Y n0 |  | 	¡ g ¡ W | 
¡  n
| 
¡  0 d S )NrF   r€   z&tarfile.open() failed on empty archive)r   r   rƒ   r   ÚreplaceÚgetnamesÚ	ReadErrorrj   ÚassertListEqualr¦   r6   ©r   r4   r   r   r   Útest_empty_tarfile€  s    z!CommonReadTest.test_empty_tarfilec                 C   s>   |   td¡ t d| j¡ W d   ƒ n1 s00    Y  d S )NZxxx)ÚassertRaisesRegexÚFileNotFoundErrorr   r   r   r   r   r   r   Útest_non_existent_tarfile‘  s    z(CommonReadTest.test_non_existent_tarfilec                 C   sV   t tdƒ W d   ƒ n1 s 0    Y  |  tjtj t| j¡ |  tjtj t¡ d S ©Nr­   )r   rƒ   ÚassertRaisesr   r¹   r   r   r   r   r   Útest_null_tarfile—  s    z CommonReadTest.test_null_tarfilec              	   C   sÂ   t dƒ d¡}dD ]ª}|  td¡J}| |d ¡ t d¡}t|ƒ|_| | 	¡ ¡ | |¡ W d   ƒ n1 sr0    Y  tjtddd	}z$|  
| ¡ dgd
| ¡ W | ¡  q| ¡  0 qd S )Nr   r]   )ó    ó   ar€   rY   ÚfoorF   T)r   Úignore_zerosz3ignore_zeros=True should have skipped the %r-blocks)r   Ú	randbytesr   rƒ   Úwriter   ÚTarInfor?   r@   Útobufrº   r¸   r6   )r   r
   ÚcharrD   rC   r4   r   r   r   Útest_ignore_zeros   s     

(ÿÿz CommonReadTest.test_ignore_zerosc              
   C   s¢  dD ]–}t  td¡2}t  d¡}d|_| |t d¡¡ W d   ƒ n1 sN0    Y  ttdƒ}| |¡ W d   ƒ n1 s‚0    Y  t  t¡H}|  	t j
d¡ |D ]}q¬W d   ƒ n1 sÆ0    Y  W d   ƒ n1 sä0    Y  t  t¡’}| ¡ }|  	t j
d¡ | |t¡ W d   ƒ n1 s40    Y  |  	t j
d¡ | |¡ ¡  W d   ƒ n1 sr0    Y  W d   ƒ q1 s’0    Y  qd S )N)r]   iX  rY   i°  úw:rÅ   rY   s   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazr+bzunexpected end of data)r   r   rƒ   rÉ   r@   Úaddfiler   rš   Útruncater½   r¹   ÚnextrI   rJ   r<   r=   )r   r@   r4   ÚtrD   r   r   r   Útest_premature_end_of_archive¶  s"    

0(>,z,CommonReadTest.test_premature_end_of_archivec              	   C   sb   |   tjd¡@ t t d¡¡}W d   ƒ n1 s60    Y  W d   ƒ n1 sT0    Y  d S )Nú%file could not be opened successfullyzrecursion.tar)r½   r   r¹   r   r   Úfindfiler»   r   r   r   Útest_length_zero_headerÎ  s    z&CommonReadTest.test_length_zero_headerN)r   r   r   r³   r¶   r¼   r¿   rÂ   rÌ   rÒ   rÕ   r   r   r   r   r¬   ^  s   	r¬   c                   @   sä   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze eedƒd¡ejdd „ ƒƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Ze ed-u d.¡d/d0„ ƒZ d-S )1ÚMiscReadTestBasec                 C   s   d S r   r   r   r   r   r   Úrequires_name_attributeÖ  s    z(MiscReadTestBase.requires_name_attributec              	   C   sœ   |   ¡  t| jdƒt}|  |jt¡ tj|| jd6}|  |jt¡ |  |jt	j
 |j¡¡ W d   ƒ n1 sp0    Y  W d   ƒ n1 sŽ0    Y  d S ©NrW   ©Úfileobjr   )r×   r   r   ÚassertIsInstancerm   Ústrr   r   r>   rK   rL   Úabspath©r   rD   r4   r   r   r   Útest_no_name_argumentÙ  s    z&MiscReadTestBase.test_no_name_argumentc                 C   sn   t | jdƒ}| ¡ }W d   ƒ n1 s*0    Y  t |¡}|  tt|d¡ tj || j	d}|  
|j¡ d S )NrW   rm   rÙ   )r   r   r=   r   rš   rÁ   ri   Úgetattrr   r   ÚassertIsNonerm   ©r   rD   r
   r4   r   r   r   Útest_no_name_attributeá  s    &
z'MiscReadTestBase.test_no_name_attributec                 C   s„   t | jdƒ}| ¡ }W d   ƒ n1 s*0    Y  t |¡}d|_tj || jd}|  |j¡ W d   ƒ n1 sv0    Y  d S )NrW   r   rÙ   )	r   r   r=   r   rš   rm   r   r   rá   râ   r   r   r   Útest_empty_name_attributeé  s    &
z*MiscReadTestBase.test_empty_name_attributec              	   C   sˆ   t  | jt j¡}t|dƒZ}|  |jt¡ tj|| jd}|  	|j¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  d S rØ   )
rK   r   r   ÚO_RDONLYrÛ   rm   Úintr   r   rá   )r   ÚfdrD   r4   r   r   r   Útest_int_name_attributeñ  s
    z(MiscReadTestBase.test_int_name_attributec              	   C   s¦   |   ¡  t | j¡}t|dƒt}|  |jt¡ tj|| j	d6}|  |jt¡ |  
|jtj |j¡¡ W d   ƒ n1 sz0    Y  W d   ƒ n1 s˜0    Y  d S rØ   )r×   rK   Úfsencoder   r   rÛ   rm   Úbytesr   r   r>   rL   rÝ   )r   r   rD   r4   r   r   r   Útest_bytes_name_attributeú  s    z*MiscReadTestBase.test_bytes_name_attributec              	   C   s‚  t  | j¡}tj|| jd:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 s\0    Y  |  |¡:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 s°0    Y  tjj|| jd:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 s0    Y  | jdkr~tj|dd:}|  |jt¡ |  	|jt
j t
 |¡¡¡ W d   ƒ n1 st0    Y  d S )NrŒ   r   rF   )r°   r±   r   r   r   r   rÛ   rm   rÜ   r>   rK   rL   rÝ   Úfspathr   r   r   )r   r   r4   r   r   r   Útest_pathlike_name  s    ::<z#MiscReadTestBase.test_pathlike_namec                 C   sÖ   t tdƒ W d   ƒ n1 s 0    Y  |  td¡ |  td¡}W d   ƒ n1 sX0    Y  |  td¡ |  td¡}W d   ƒ n1 s0    Y  |  td¡ |  td¡}W d   ƒ n1 sÈ0    Y  d S )Nr­   zmode must be ÚqÚrwr   )r   rƒ   r½   Ú
ValueErrorr   r»   r   r   r   Útest_illegal_mode_arg  s    **z&MiscReadTestBase.test_illegal_mode_argc              	   C   s  t j| j| jd}zZ| ¡  | ¡ }|j}|j}| |¡}| ¡ }W d   ƒ n1 sX0    Y  W | 	¡  n
| 	¡  0 |  | j¡‚}| 
|¡ |j| jd|dF}| ¡ }|  |j|¡ | ¡  |  | |¡ ¡ |d¡ W d   ƒ n1 sî0    Y  W d   ƒ n1 s0    Y  d S )NrŒ   r/   ©r   rÚ   zseek back did not work)r   r   r   r   rÐ   rm   Úoffsetr<   r=   r6   r^   r>   r¦   )r   r4   rÑ   rm   ró   Úfr
   rD   r   r   r   Útest_fileobj_with_offset  s$    (
ÿz)MiscReadTestBase.test_fileobj_with_offsetc                 C   s\   |   tjtjt| j¡ ttdƒ(}| j tjtj|| jd W d   ƒ n1 sN0    Y  d S rØ   )rÁ   r   r¹   r   r   r   r²   r   r   r   Útest_fail_comp9  s
    ÿzMiscReadTestBase.test_fail_compc                 C   s"   | j  d¡}|  |jtjd¡ d S )Nzmisc/dirtype-old-v7zv7 dirtype failed)r4   r;   r>   Útyper   ÚDIRTYPE©r   rC   r   r   r   Útest_v7_dirtype@  s    ÿz MiscReadTestBase.test_v7_dirtypec                 C   s2   z| j  d¡ W n ty,   |  d¡ Y n0 d S )Nzmisc/regtype-xstarz3failed to find misc/regtype-xstar (mangled prefix?))r4   r;   ÚKeyErrorrj   r   r   r   r   Útest_xstar_typeH  s    z MiscReadTestBase.test_xstar_typec                 C   sN   | j D ]B}|  t|jƒdd|j ¡ |j d¡s2q|  |jdd|j ¡ qd S )Né½>zwrong mtime for %szustar/r   zwrong uname for %s)r4   r>   ræ   Úmtimerm   Ú
startswithÚunamerù   r   r   r   Útest_check_membersQ  s    
ÿ
ÿz#MiscReadTestBase.test_check_membersc                 C   s   |   | j ¡ d jdd¡ d S )Néÿÿÿÿzmisc/eofzcould not find all members)r>   r4   r¦   rm   r   r   r   r   Útest_find_membersZ  s    ÿz"MiscReadTestBase.test_find_membersÚlinkúMissing hardlink implementationc              	   C   s<  t jtddd}| dt¡ |  tjtj	 
td¡¡ | dt¡ |  tjtj	 
td¡¡ ttj	 
td¡dƒ}| ¡ }W d   ƒ n1 sŽ0    Y  |  t|ƒt¡ | dt¡ |  tjtj	 
td¡¡ ttj	 
td¡dƒ}| ¡ }W d   ƒ n1 sþ0    Y  |  t|ƒt¡ W d   ƒ n1 s.0    Y  d S )NrX   r0   )Ú
errorlevelr2   r9   rr   rW   rx   )r   r   r   rI   rJ   Ú
addCleanupr   ÚunlinkrK   rL   rM   r=   r>   r   rA   )r   r4   rô   r
   r   r   r   Útest_extract_hardlink^  s    &&z&MiscReadTestBase.test_extract_hardlinkc           	   	   C   sî   t jtdd}tj td¡}t |¡ z®dd„ |D ƒ}| ||¡ |D ]x}tj ||j	¡}t
jdkr‚|  |jd@ t |¡jd@ ¡ dd	„ }tj |¡}d
 ||jƒ||ƒ|¡}|  |j||¡ qFW | ¡  t |¡ n| ¡  t |¡ 0 d S )Nr0   ©r2   Ú
extractallc                 S   s   g | ]}|  ¡ r|‘qS r   ©Úisdir©Ú.0rÑ   r   r   r   Ú
<listcomp>z  r\   z4MiscReadTestBase.test_extractall.<locals>.<listcomp>Úwin32éÿ  c                 S   s(   t | tƒrd | |  ¡ ¡S d | ¡S d S )Nz{} ({})z
{!r} (int))Ú
isinstanceÚfloatÚformatÚhex)rþ   r   r   r   Úformat_mtime‚  s    
z6MiscReadTestBase.test_extractall.<locals>.format_mtimez,tar mtime {0} != file time {1} of path {2!a})r   r   r   rK   rL   rM   rJ   r„   r  rm   rœ   Úplatformr>   r   ÚstatÚst_modeÚgetmtimer  rþ   r6   r   Úrmtree)	r   r4   ÚDIRÚdirectoriesrC   rL   r  Z
file_mtimeÚerrmsgr   r   r   Útest_extractalls  s0    

ÿýÿz MiscReadTestBase.test_extractallc              	   C   sÈ   d}t j td¡}t  |¡ zštjtddn}| |¡}|j	||d t j ||¡}|  
t j |¡|j¡ tjdkrŒ|  
t  |¡jd@ d¡ W d   ƒ n1 s 0    Y  W t |¡ nt |¡ 0 d S )	Núustar/dirtypeZ
extractdirr0   r
  ©rL   r  r  ií  )rK   rL   rM   rJ   r„   r   r   r   r;   rI   r>   r  rþ   rœ   r  r  r  r   r  ©r   Zdirtyper  r4   rC   Z	extractedr   r   r   Útest_extract_directory‘  s    


8z'MiscReadTestBase.test_extract_directoryc              	   C   s®   t  t¡d }t |¡‚ tjtddT}dd„ |D ƒ}| ||¡ |D ]$}||j	 }|  
tj |¡|j¡ qHW d   ƒ n1 s‚0    Y  W d   ƒ n1 s 0    Y  d S )Nr  r0   r
  c                 S   s   g | ]}|  ¡ r|‘qS r   r  r  r   r   r   r  ¤  r\   zBMiscReadTestBase.test_extractall_pathlike_name.<locals>.<listcomp>)r°   r±   rJ   r   Útemp_dirr   r   r   r  rm   r>   rK   rL   r  rþ   )r   r  r4   r  rC   rL   r   r   r   Útest_extractall_pathlike_name   s    ÿ
z.MiscReadTestBase.test_extractall_pathlike_namec              	   C   s¤   d}t  t¡d }t |¡t tjtddF}| |¡}|j	||d || }|  
tj |¡|j¡ W d   ƒ n1 sx0    Y  W d   ƒ n1 s–0    Y  d S )Nr!  r  r0   r
  r"  )r°   r±   rJ   r   r%  r   r   r   r;   rI   r>   rK   rL   r  rþ   r#  r   r   r   Útest_extract_pathlike_nameª  s    ÿ
z+MiscReadTestBase.test_extract_pathlike_namec              	   C   sª   t j td¡}t|dƒ}| d¡ W d   ƒ n1 s80    Y  zVt tj	¡}z| 
|¡ W n" tjy€   |  |jj¡ Y n0 |  d¡ W t |¡ nt |¡ 0 d S )NÚemptyr­   r\   zReadError not raised)rK   rL   rM   rJ   r   rÈ   ÚobjectÚ__new__r   r   Ú__init__r¹   rµ   rÚ   Úclosedrj   r   r  )r   r(  rD   r4   r   r   r   Útest_init_close_fobj´  s    (z%MiscReadTestBase.test_init_close_fobjc                 C   sh   t  | j¡H}t||ƒD ],\}}|  |j|j¡ |  | ¡ | ¡ ¡ qW d   ƒ n1 sZ0    Y  d S r   )r   r   r   Úzipr>   ró   Úget_info)r   r4   Zm1Zm2r   r   r   Útest_parallel_iterationÇ  s    z(MiscReadTestBase.test_parallel_iterationNzrequires zlibc              	   C   sp   t j d¡P}tj|_|  tj¡ t 	| j
¡ W d   ƒ n1 sD0    Y  W d   ƒ n1 sb0    Y  d S )Nztarfile.TarInfo.fromtarfile)ÚunittestÚmockÚpatchÚzlibÚerrorÚside_effectrÁ   r   r¹   r   r   )r   r2  r   r   r   Útest_zlib_error_does_not_leakÏ  s    z.MiscReadTestBase.test_zlib_error_does_not_leak)!r   r   r   r×   rß   rã   rä   rè   rë   rí   rñ   rõ   rö   rú   rü   r  r  r1  Ú
skipUnlessÚhasattrrK   r   Úskip_unless_symlinkr	  r   r$  r&  r'  r-  r0  ÚskipIfr4  r7  r   r   r   r   rÖ   Õ  s6   		
		ÿ

rÖ   c                   @   s   e Zd ZdZdS )ÚMiscReadTestN)r   r   r   rö   r   r   r   r   r<  Ù  s   r<  c                   @   s   e Zd ZdS )ÚGzipMiscReadTestNrˆ   r   r   r   r   r=  Ü  s   r=  c                   @   s   e Zd Zdd„ ZdS )ÚBz2MiscReadTestc                 C   s   |   d¡ d S )NzBZ2File have no name attribute©ÚskipTestr   r   r   r   r×   à  s    z'Bz2MiscReadTest.requires_name_attributeN©r   r   r   r×   r   r   r   r   r>  ß  s   r>  c                   @   s   e Zd Zdd„ ZdS )ÚLzmaMiscReadTestc                 C   s   |   d¡ d S )NzLZMAFile have no name attributer?  r   r   r   r   r×   ä  s    z(LzmaMiscReadTest.requires_name_attributeNrA  r   r   r   r   rB  ã  s   rB  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚStreamReadTestúr|c              
   C   s|   | j D ]p}| ¡ sq| j  |¡F}z| d¡}W n tjyN   |  d¡ Y n0 |s"qXq"W d   ƒ q1 sl0    Y  qd S )Nr]   z6simple read-through using TarFile.extractfile() failed)r4   Úisregr<   r=   r   ÚStreamErrorrj   )r   rC   rD   Úbufr   r   r   Útest_read_throughì  s    
z StreamReadTest.test_read_throughc                 C   sh   | j  ¡ }| j  |¡}| ¡ }W d   ƒ n1 s40    Y  |  t|ƒ|jd¡ |  t|ƒtd¡ d S )Nr:   )	r4   rÐ   r<   r=   r>   r?   r@   r   rA   rB   r   r   r   rE   ü  s    
&ÿÿz(StreamReadTest.test_fileobj_regular_filec                 C   sN   | j  ¡ }| j  |d ¡ }|  tj|j¡ W d   ƒ n1 s@0    Y  d S ©Nr   )r4   r¦   r<   rÁ   r   rF  r=   )r   Ztarinfosrô   r   r   r   Útest_provoke_stream_error  s    
z(StreamReadTest.test_provoke_stream_errorc                 C   sà   t jtdd}zÂ| j}| ¡ }| ¡ }|d u r0qÆ|  |d¡ | ¡ sL| ¡ r„|  t j	¡ | 
|¡ W d   ƒ q1 sx0    Y  q| 
|¡}| 
|¡}|d u r¢q|  |d¡ |  | ¡ | ¡ d¡ qW | ¡  n
| ¡  0 d S )Nr0   r
  zstream.next() failed.zstream.extractfile() failedzstream extraction failed)r   r   r   r4   rÐ   ÚassertIsNotNoneZislnkZissymrÁ   rF  r<   r>   r=   r6   )r   Ztar1Ztar2Út1Út2Úv1Úv2r   r   r   Útest_compare_members
  s*    (

ÿz#StreamReadTest.test_compare_membersN)r   r   r   r   rH  rE   rJ  rP  r   r   r   r   rC  è  s
   	rC  c                   @   s   e Zd ZdS )ÚGzipStreamReadTestNrˆ   r   r   r   r   rQ  %  s   rQ  c                   @   s   e Zd ZdS )ÚBz2StreamReadTestNrˆ   r   r   r   r   rR  (  s   rR  c                   @   s   e Zd ZdS )ÚLzmaStreamReadTestNrˆ   r   r   r   r   rS  +  s   rS  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚDetectReadTestc              
   C   sL   zt  ||¡}W n. t jy> } z|  ¡  W Y d }~nd }~0 0 | ¡  d S r   )r   r   r¹   rj   r6   )r   rm   r   r4   Úer   r   r   Ú_testfunc_file0  s
    zDetectReadTest._testfunc_filec              
   C   sz   z>t |dƒ }tj |||d}W d   ƒ n1 s20    Y  W n. tjyl } z|  ¡  W Y d }~nd }~0 0 | ¡  d S )NrW   ©rÚ   )r   r   r¹   rj   r6   )r   rm   r   rô   r4   rU  r   r   r   Ú_testfunc_fileobj8  s    2z DetectReadTest._testfunc_fileobjc                 C   sJ  | j rþ|  tj¡$ tjtd| j  d W d   ƒ n1 s<0    Y  |  tj¡$ tjtd| j  d W d   ƒ n1 s|0    Y  |  tj¡  tj| jdd W d   ƒ n1 s¸0    Y  |  tj¡  tj| jdd W d   ƒ n1 sô0    Y  || jdƒ || jd| j  ƒ || jdƒ || jd| j  ƒ || jdƒ d S )Nr/   rŒ   rD  rF   zr:*úr|*)r   rÁ   r   r¹   r   r   )r   Ztestfuncr   r   r   Ú_test_modesA  s    22..zDetectReadTest._test_modesc                 C   s   |   | j¡ d S r   )rZ  rV  r   r   r   r   Útest_detect_fileQ  s    zDetectReadTest.test_detect_filec                 C   s   |   | j¡ d S r   )rZ  rX  r   r   r   r   Útest_detect_fileobjT  s    z"DetectReadTest.test_detect_fileobjN)r   r   r   rV  rX  rZ  r[  r\  r   r   r   r   rT  /  s
   	rT  c                   @   s   e Zd ZdS )ÚGzipDetectReadTestNrˆ   r   r   r   r   r]  W  s   r]  c                   @   s   e Zd Zdd„ ZdS )ÚBz2DetectReadTestc                 C   s|   t tdƒ}| ¡ }W d   ƒ n1 s(0    Y  tjtddd}| |¡ W d   ƒ n1 sb0    Y  |  td¡ d S )NrW   r­   rX   ©ÚcompresslevelrY  )r   r   r=   r&   r(   rƒ   rÈ   rV  rk   r   r   r   Útest_detect_stream_bz2[  s
    &(z(Bz2DetectReadTest.test_detect_stream_bz2N)r   r   r   ra  r   r   r   r   r^  Z  s   r^  c                   @   s   e Zd ZdS )ÚLzmaDetectReadTestNrˆ   r   r   r   r   rb  i  s   rb  c                   @   s¦   e Zd Zd(dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdS ))ÚMemberReadTestNc                 K   s¶   |d urP| j  |¡,}|  t| ¡ ƒ|d|j ¡ W d   ƒ n1 sF0    Y  d|d< d|d< d|d< d|jvr‚d	|d
< d	|d< | ¡ D ]&\}}|  t||ƒ|d||jf ¡ qŠd S )Núwrong sha256sum for %srý   rþ   éè  Úuidrg   Úgidzold-v7r   r   Úgnamezwrong value in %s field of %s)r4   r<   r>   r   r=   rm   Úitemsrà   )r   rC   ÚchksumÚkwargsrô   ÚkÚvr   r   r   Ú_test_membero  s    ÿ"
ÿzMemberReadTest._test_memberc                 C   s    | j  d¡}| j|dtd d S )Nr9   éc  ©r@   rj  ©r4   r;   rn  rA   rù   r   r   r   Útest_find_regtype€  s    z MemberReadTest.test_find_regtypec                 C   s    | j  d¡}| j|dtd d S )Nzustar/conttypero  rp  rq  rù   r   r   r   Útest_find_conttype„  s    z!MemberReadTest.test_find_conttypec                 C   s   | j  d¡}| j|dd d S )Nr!  r   ©r@   ©r4   r;   rn  rù   r   r   r   Útest_find_dirtypeˆ  s    z MemberReadTest.test_find_dirtypec                 C   s   | j  d¡}| j|dd d S )Nzustar/dirtype-with-sizeéÿ   rt  ru  rù   r   r   r   Útest_find_dirtype_with_sizeŒ  s    z*MemberReadTest.test_find_dirtype_with_sizec                 C   s    | j  d¡}| j|ddd d S )Nrr   r   r9   ©r@   Úlinknameru  rù   r   r   r   Útest_find_lnktype  s    z MemberReadTest.test_find_lnktypec                 C   s    | j  d¡}| j|ddd d S )Nrx   r   rn   ry  ru  rù   r   r   r   Útest_find_symtype”  s    z MemberReadTest.test_find_symtypec                 C   s"   | j  d¡}| j|dddd d S )Núustar/blktyper   é   ©r@   ÚdevmajorÚdevminorru  rù   r   r   r   Útest_find_blktype˜  s    z MemberReadTest.test_find_blktypec                 C   s"   | j  d¡}| j|dddd d S )Núustar/chrtyper   rX   r~  r  ru  rù   r   r   r   Útest_find_chrtypeœ  s    z MemberReadTest.test_find_chrtypec                 C   s   | j  d¡}| j|dd d S )Núustar/fifotyper   rt  ru  rù   r   r   r   Útest_find_fifotype   s    z!MemberReadTest.test_find_fifotypec                 C   s    | j  d¡}| j|dtd d S )Nzustar/sparseé P rp  ©r4   r;   rn  Úsha256_sparserù   r   r   r   Útest_find_sparse¤  s    zMemberReadTest.test_find_sparsec                 C   s    | j  d¡}| j|dtd d S )Nú
gnu/sparser‡  rp  rˆ  rù   r   r   r   Útest_find_gnusparse¨  s    z"MemberReadTest.test_find_gnusparsec                 C   s    | j  d¡}| j|dtd d S )Núgnu/sparse-0.0r‡  rp  rˆ  rù   r   r   r   Útest_find_gnusparse_00¬  s    z%MemberReadTest.test_find_gnusparse_00c                 C   s    | j  d¡}| j|dtd d S )Núgnu/sparse-0.1r‡  rp  rˆ  rù   r   r   r   Útest_find_gnusparse_01°  s    z%MemberReadTest.test_find_gnusparse_01c                 C   s    | j  d¡}| j|dtd d S )Núgnu/sparse-1.0r‡  rp  rˆ  rù   r   r   r   Útest_find_gnusparse_10´  s    z%MemberReadTest.test_find_gnusparse_10c                 C   s    | j  d¡}| j|dtd d S )Nu   ustar/umlauts-Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸro  rp  rq  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Ÿ   r4   r¸   ©r   rm   r   r   r   Útest_find_ustar_longname½  s    z'MemberReadTest.test_find_ustar_longnamec                 C   s    | j  d¡}| j|dtd d S )Nzmisc/regtype-old-v7ro  rp  rq  rù   r   r   r   Útest_find_regtype_oldv7Á  s    z&MemberReadTest.test_find_regtype_oldv7c                 C   s@   | j  ¡  tj| j| jdd| _ | j  d¡}| j|dtd d S )Nr0   r1   u   pax/umlauts-Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸro  rp  )	r4   r6   r   r   r   r   r;   rn  rA   rù   r   r   r   Útest_find_pax_umlautsÅ  s    
ÿz$MemberReadTest.test_find_pax_umlauts)N)r   r   r   rn  rr  rs  rv  rx  r{  r|  r‚  r„  r†  rŠ  rŒ  rŽ  r  r’  r“  r•  r–  r—  r   r   r   r   rc  m  s&   
rc  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚLongnameTestc                 C   sV   | j d d d }z| j |¡}W n ty>   |  d¡ Y n0 |  |jtjd¡ d S )Nr   áô  123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/123/Úlongnamezlongname not foundzread longname as dirtype)	Úsubdirr4   r;   rû   rj   ÚassertNotEqualr÷   r   rø   )r   rš  rC   r   r   r   Útest_read_longnameÐ  s    ÿzLongnameTest.test_read_longnamec                 C   sf   | j d d d }| j d d d }z| j |¡}W n tyP   |  d¡ Y n0 |  |j|d¡ d S )Nr   r™  rš  Úlonglinkzlonglink not foundzlinkname wrong)r›  r4   r;   rû   rj   r>   rz  )r   rš  rž  rC   r   r   r   Útest_read_longlinkÚ  s    zLongnameTest.test_read_longlinkc                 C   s„   | j d d d }| j |¡}|j}| jj |¡ t | jj d¡¡}|  	t
j¡ t
jd|d W d   ƒ n1 sv0    Y  d S )Nr   r™  rš  i   zfoo.tar)rm   rÚ   )r›  r4   r;   ró   rÚ   r^   r   rš   r=   rÁ   r   r¹   r   )r   rš  rC   ró   rD   r   r   r   Útest_truncated_longnameã  s    z$LongnameTest.test_truncated_longnamec                 C   s~   | j d d d }| j |¡j}ttdƒ@}| |¡ tj 	| 
d¡dd¡}|  |j| j¡ W d   ƒ n1 sp0    Y  d S )Nr   r™  rš  rW   r]   r0   Ústrict)r›  r4   r;   ró   r   r   r^   r   rÉ   Zfrombufr=   r>   r÷   Úlongnametype)r   rš  ró   rD   rC   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 )ÚGNUReadTestÚgnuc                 C   sŽ   | j  |t¡ tj t|¡}t|dƒ}| ¡ }W d   ƒ n1 sD0    Y  |  t	|ƒt
d| ¡ |  ¡ rŠt |¡}|  |jd |j¡ d S )NrW   rd  r]   )r4   rI   rJ   rK   rL   rM   r   r=   r>   r   r‰  Ú_fs_supports_holesr  Z
assertLessÚ	st_blocksÚst_size)r   rm   ÚfilenamerD   r
   rb   r   r   r   Ú_test_sparse_file  s    &ÿ
zGNUReadTest._test_sparse_filec                 C   s   |   d¡ d S )Nr‹  ©rª  r   r   r   r   Útest_sparse_file_old  s    z GNUReadTest.test_sparse_file_oldc                 C   s   |   d¡ d S )Nr  r«  r   r   r   r   Útest_sparse_file_00  s    zGNUReadTest.test_sparse_file_00c                 C   s   |   d¡ d S )Nr  r«  r   r   r   r   Útest_sparse_file_01  s    zGNUReadTest.test_sparse_file_01c                 C   s   |   d¡ d S )Nr‘  r«  r   r   r   r   Útest_sparse_file_10  s    zGNUReadTest.test_sparse_file_10c                  C   sŒ   t j d¡r„tj td¡} t| dƒ,}| d¡ | 	d¡ | 
¡  W d   ƒ n1 sV0    Y  t | ¡}t | ¡ |jd |jk S dS d S )NÚlinuxzsparse-testr­   i   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr]   F)rœ   r  rÿ   rK   rL   rM   rJ   r   r^   rÈ   rÏ   r  r   r  r§  r¨  )rm   rD   rb   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d„ Z	dS )	ÚPaxReadTestÚpaxc                 C   sØ   t jtdd}zº| d¡}|  |jd¡ |  |jd¡ |  |j d¡d¡ | d¡}|  |jd	¡ |  |jd¡ |  |j d¡d¡ | d
¡}|  |jd¡ |  |jd¡ |  |j d¡d¡ W | 	¡  n
| 	¡  0 d S )Nr0   r
  úpax/regtype1rÅ   r}   zVENDOR.umlautsu   Ã„Ã–ÃœÃ¤Ã¶Ã¼ÃŸzpax/regtype2r   zpax/regtype3r   )
r   r   r   r;   r>   r   rh  Úpax_headersÚgetr6   ©r   r4   rC   r   r   r   Útest_pax_global_headers8  s*    
ÿ
ÿ
ÿz#PaxReadTest.test_pax_global_headersc                 C   sª   t jtdd}zŒ| d¡}|  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  t	|jƒt
¡ |  t
|jd ƒd¡ |  t
|jd ƒd¡ W | ¡  n
| ¡  0 d S )	Nr0   r
  zpax/regtype4ro  é{   g  €Ç^ÏAZatimeÚctime)r   r   r   r;   r>   r@   rf  rg  rþ   r÷   r  r¶  r6   r¸  r   r   r   Útest_pax_number_fieldsO  s    
z"PaxReadTest.test_pax_number_fieldsc              
   C   s`  d}ddi}|D ]H}| j |d$ tjtdtjdd}z0t ¡ }d|_d	|_||_| 	|¡ W | 
¡  n
| 
¡  0 ttd
ƒ0}| ¡ }|  d|¡ | d|¡}W d   ƒ n1 s¶0    Y  ttdƒ"}| ¡  | |¡ W d   ƒ n1 sò0    Y  |  tjd¡ tjtdd W d   ƒ n1 s00    Y  W d   ƒ q1 sP0    Y  qd S )N)
s	    foo=bar
s   0 
s   1 
s   2 
s   3 =
s   4 =a
s   1000000 foo=bar
s
   0 foo=bar
s   -12 foo=bar
s$   000000000000000000000000036 foo=bar
rÅ   r}   )Úheaderr€   r0   ©r  r2   r´  rX   rW   s   11 foo=bar
r­   rÓ   r
  )ÚsubTestr   r   rƒ   Ú
PAX_FORMATrÉ   rm   rf  r¶  rÎ   r6   r=   rŸ   r·   rÏ   rÈ   r½   r¹   )r   Zpax_header_replacementsr¶  Zreplacementr4   rÑ   rô   r
   r   r   r   Útest_pax_header_bad_formats^  s.    
ÿ*(z'PaxReadTest.test_pax_header_bad_formatsN)
r   r   r   r›  r   ÚXHDTYPEr¢  r¹  r¼  rÁ  r   r   r   r   r³  3  s
   r³  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚWriteTestBasec                 C   sˆ   t  ¡ }tj|| jd }| t d¡¡ W d   ƒ n1 s>0    Y  |  |jd¡ | 	¡ }~t
 ¡  |  |j¡ |  || 	¡ ¡ d S )NrÙ   rÅ   z#external fileobjs must never closed)r   rš   r   r   r   rÎ   rÉ   r®   r,  rž   r   Ú
gc_collectr>   )r   rD   r4   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 sT0    Y  |  td¡*}|  t| ¡ ƒt jd ¡ W d   ƒ n1 sš0    Y  d S )NrÅ   rÄ   rW   r[   )r   r   rƒ   r   rÉ   Ú
RECORDSIZEÚ	BLOCKSIZEr@   rÎ   r   rš   r>   r?   r=   )r   r4   rÑ   rD   r   r   r   Útest_eof_marker™  s    
6zWriteTestBase.test_eof_markerN)r   r   r   rÅ  rÈ  r   r   r   r   rÃ  ‰  s   rÃ  c                   @   s°   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
 eedƒd¡dd„ ƒZejdd„ ƒZdd„ Zdd„ Zd&dd„Zejdd„ ƒZdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )'Ú	WriteTestrÍ   c                 C   sz   d}t  t| j¡}z t  |¡}| |¡ W | ¡  n
| ¡  0 t  t¡}z"|  | ¡ d |d¡ W | ¡  n
| ¡  0 d S )NÚd0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789r   z!failed to store 100 char filename)	r   r   rƒ   r   rÉ   rÎ   r6   r>   r¸   )r   rm   r4   rÑ   r   r   r   Útest_100_char_name«  s    

ÿzWriteTest.test_100_char_namec                 C   sŒ   t  t| j¡}zXtj td¡}t|dƒ}| d¡ W d   ƒ n1 sH0    Y  | 	|¡ W | 
¡  n
| 
¡  0 |  tj t¡dd¡ d S )NÚfiler­   ó   aaar   ztarfile is empty)r   r   rƒ   r   rK   rL   rM   rJ   rÈ   r…   r6   ZassertGreaterÚgetsize)r   r4   rL   rD   r   r   r   Útest_tar_size¿  s    (ÿzWriteTest.test_tar_sizec                 C   sÆ   t  t| j¡}z¨tj td¡}t|dƒ W d   ƒ n1 s>0    Y  | |¡}|  	|j
d¡ t|dƒ}| d¡ W d   ƒ n1 sŠ0    Y  | |¡}|  	|j
d¡ W | ¡  n
| ¡  0 d S )NrÌ  r­   r   rÍ  r~  )r   r   rƒ   r   rK   rL   rM   rJ   Ú
gettarinfor>   r@   rÈ   r6   )r   r4   rL   rC   rD   r   r   r   Útest_file_sizeÍ  s    
(
zWriteTest.test_file_sizec              	   C   sv   t j td¡}t  |¡ zLt t| j¡}z$| 	|¡}|  
|jd¡ W | ¡  n
| ¡  0 W t |¡ nt |¡ 0 d S )NÚ	directoryr   )rK   rL   rM   rJ   r„   r   r   rƒ   r   rÐ  r>   r@   r6   r   r†   ©r   rL   r4   rC   r   r   r   Útest_directory_sizeÝ  s    

zWriteTest.test_directory_sizec                 C   sX  t j td¡}t  |¡ tt j |d¡dƒ ¡  tt j |d¡dƒ ¡  zÖt t| j	¡}z†t
j d¡$}ddg|_| |¡ W d   ƒ n1 s0    Y  g }| ¡ D ]}| t j |j¡d ¡ q¦|  |g d¢¡ W | ¡  n
| ¡  0 W t t j |d¡¡ t t j |d¡¡ t |¡ n4t t j |d¡¡ t t j |d¡¡ t |¡ 0 d S )NrÒ  Ú1ro   Ú2z
os.listdirr  )rÒ  rÕ  rÖ  )rK   rL   rM   rJ   r„   r   r6   r   rƒ   r   r1  r2  r3  Úreturn_valuer…   r¦   ÚappendÚsplitrm   r>   r   r  r†   )r   rL   r4   Zmock_listdirÚpathsÚmr   r   r   Útest_ordered_recursionì  s*    

(þz WriteTest.test_ordered_recursionc              	   C   sº   t  t| j¡˜}t t¡d }t|dƒ}| d¡ W d   ƒ n1 sH0    Y  | |¡}| t	 
|¡¡}|  |jt¡ |  |j|j¡ |  |jd¡ W d   ƒ n1 s¬0    Y  d S )NrÌ  r­   rÍ  r~  )r   r   rƒ   r   r°   r±   rJ   rÈ   rÐ  rK   rì   rÛ   rm   rÜ   r>   r@   )r   r4   rL   rD   rC   Ztarinfo2r   r   r   Útest_gettarinfo_pathlike_name  s    (
z'WriteTest.test_gettarinfo_pathlike_namer  r  c              
   C   s  t j td¡}t j td¡}t|dƒ}| d¡ W d   ƒ n1 sF0    Y  zt  ||¡ W n2 ty’ } z|  d| ¡ W Y d }~n
d }~0 0 z`t	 t
| j¡}z.| |¡ | |¡}|  |jd¡ W | ¡  n
| ¡  0 W t |¡ t |¡ nt |¡ t |¡ 0 d S )Nr  Úlink_targetr­   rÍ  úos.link(): %sr   )rK   rL   rM   rJ   r   rÈ   r  ÚPermissionErrorr@  r   rƒ   r   rÐ  r>   r@   r6   r   r  )r   r  ÚtargetrD   rU  r4   rC   r   r   r   Útest_link_size  s&    ($


ÿ
zWriteTest.test_link_sizec              	   C   sx   t j td¡}t  d|¡ zLt t| j¡}z$| 	|¡}|  
|jd¡ W | ¡  n
| ¡  0 W t |¡ nt |¡ 0 d S )NÚsymlinkrÞ  r   )rK   rL   rM   rJ   rã  r   r   rƒ   r   rÐ  r>   r@   r6   r   r  rÓ  r   r   r   Útest_symlink_size%  s    
zWriteTest.test_symlink_sizec                 C   s¨   t j t¡}t t| j¡}z~|  |j|d¡ | 	|¡ |  | 
¡ g d¡ t t¡ | 	|¡ W d   ƒ n1 sr0    Y  |  | 
¡ g d¡ W | ¡  n
| ¡  0 d S )Nzarchive name must be absolutezadded the archive to itself)rK   rL   rÝ   rƒ   r   r   r   r>   rm   r…   r¸   r   Ú
change_cwdrJ   r6   )r   Údstnamer4   r   r   r   Útest_add_self3  s     
ÿ
ÿ(ÿzWriteTest.test_add_selfc              	   C   s8  t j td¡}t  |¡ zdD ]}t j ||¡}t |¡ q dd„ }tjt	| j
dd}z|j|d|d W | ¡  n
| ¡  0 |  t¡" | |dd	d |¡ W d   ƒ n1 s²0    Y  t t	d
¡}zF|D ] }|  |jd¡ |  |jd¡ qÎ|  t| ¡ ƒd¡ W | ¡  n
| ¡  0 W t |¡ nt |¡ 0 d S )NÚfilter)rÅ   r}   Zbazc                 S   s&   t j | j¡dkrd S d| _d| _| S )Nr}   rº  rÅ   )rK   rL   Úbasenamerm   rf  r   )rC   r   r   r   rè  M  s
    z%WriteTest.test_filter.<locals>.filterr0   r
  Z	empty_dir)Úarcnamerè  TrF   rº  rÅ   r~  )rK   rL   rM   rJ   r„   r   Úcreate_empty_filer   r   rƒ   r   r…   r6   rÁ   Ú	TypeErrorr>   rf  r   r?   r¦   r  )r   Útempdirrm   rè  r4   rC   r   r   r   Útest_filterE  s*    
0zWriteTest.test_filterNFc                 C   sÂ   t j td¡}|st |¡ n
t  |¡ t t	| j
¡}z|j||d W | ¡  n
| ¡  0 t t	d¡}z| ¡ }W | ¡  n
| ¡  0 |s˜t |¡ n
t |¡ |  |j|pº| t jd¡¡ d S )NrÅ   ©rê  rF   r   )rK   rL   rM   rJ   r   rë  r„   r   r   rƒ   r   r…   r6   rÐ   r  r†   r>   rm   r·   Úsep)r   rL   Zcmp_pathÚdirrÅ   r4   rÑ   r   r   r   Ú_test_pathnamem  s     


zWriteTest._test_pathnamec              	   C   s`  t j td¡}t j td¡}t  |¡ zt j |d¡}t j |d¡}t|dƒ}| d¡ W d   ƒ n1 sp0    Y  t  ||¡ t |d¡,}|j	|dd |j	|dd W d   ƒ n1 sÄ0    Y  tj|dd	@}z|j
|d
 W n ty   |  d¡ Y n0 W d   ƒ n1 s$0    Y  W t |¡ t |¡ nt |¡ t |¡ 0 d S )NZtestsymlinksztestsymlinks.tarÚsourcerã  r€   z
something
rï  r[   ©r  r"  z&extractall failed with symlinked files)rK   rL   rM   rJ   r„   r   rÈ   rã  r   r…   r  ÚOSErrorrj   r   r  r  )r   rí  ZtemparchiveZsource_fileZtarget_filerô   r4   r   r   r   Útest_extractall_symlinksŠ  s*    
(,2
ÿ
z"WriteTest.test_extractall_symlinksc                 C   s<  |   d¡ |   tj ddd¡¡ |   tj ddd¡¡ |   tj dd¡¡ |   tj ddd¡¡ |   tj dddd¡¡ |   tj dddd¡¡ |   tj dddd¡¡ |   tj dd¡¡ |   tj ddd¡¡ |   tj dddd¡¡ |   tj dddd¡¡ |   dtj tj d ¡ | j dtj tj ddd d S )NrÅ   Ú.r}   ú..T)rñ  )rò  rK   rL   rM   rð  r   r   r   r   Útest_pathnames¤  s    
zWriteTest.test_pathnamesc                 C   s4   t jdkr|  dd¡ n|  dd¡ |  dd¡ d S )Nr  zC:\foorÅ   z/fooz///foo)rœ   r  rò  r   r   r   r   Útest_abs_pathnamesµ  s    
zWriteTest.test_abs_pathnamesc              	   C   s¬   t  t¡Ž t t| j¡}z| d¡ W | ¡  n
| ¡  0 t td¡}z6|D ]$}|j	dkrN|  
|j	 d¡|j	¡ qNW | ¡  n
| ¡  0 W d   ƒ n1 sž0    Y  d S )Nr÷  rF   ú./)r   rå  rJ   r   r   rƒ   r   r…   r6   rm   rµ   rÿ   ©r   r4   rÑ   r   r   r   Útest_cwd¼  s    
zWriteTest.test_cwdc              	      s‚   t ttfD ]r‰ G ‡ fdd„dtjƒ}|ƒ }|  ˆ ¡, tjt| j	|tj
ddid}W d   ƒ n1 sf0    Y  |  |j¡ q
d S )Nc                       s   e Zd ZdZ‡ fdd„ZdS )z8WriteTest.test_open_nonwritable_fileobj.<locals>.BadFileTc                    s   | j rd| _ ˆ ‚d S ©NF)Úfirst©r   r
   ©Úexctyper   r   rÈ   Ñ  s    z>WriteTest.test_open_nonwritable_fileobj.<locals>.BadFile.writeN)r   r   r   rÿ  rÈ   r   r  r   r   ÚBadFileÏ  s   r  Znonr(  )rÚ   r  r¶  )rõ  ÚEOFErrorÚRuntimeErrorr   rš   rÁ   r   r   rƒ   r   rÀ  r®   r,  )r   r  rô   r4   r   r  r   Útest_open_nonwritable_fileobjÍ  s    þ$z'WriteTest.test_open_nonwritable_fileobj)NF)r   r   r   r   rË  rÏ  rÑ  rÔ  rÜ  rÝ  r1  r8  r9  rK   râ  r   r:  rä  rç  rî  rò  rö  rù  rú  rý  r  r   r   r   r   rÉ  §  s,   ÿ

(

rÉ  c                   @   s   e Zd ZdS )ÚGzipWriteTestNrˆ   r   r   r   r   r  Þ  s   r  c                   @   s   e Zd ZdS )ÚBz2WriteTestNrˆ   r   r   r   r   r  â  s   r  c                   @   s   e Zd ZdS )ÚLzmaWriteTestNrˆ   r   r   r   r   r	  æ  s   r	  c                   @   s@   e Zd ZdZdZdd„ Ze ej	dko.e
edƒd¡dd	„ ƒZdS )
ÚStreamWriteTestzw|Nc                 C   s¼   t  t| j¡}| ¡  | jrp|  ¡ }ttdƒ}| ¡ }W d   ƒ n1 sL0    Y  | |¡}|  |j	d¡ n2|  t¡}| ¡ }W d   ƒ n1 s˜0    Y  |  
| d¡t jd¡ d S )NrW   zfound trailing datarÃ   zincorrect zero padding)r   r   rƒ   r   r6   Údecompressorr=   Ú
decompressr®   Úunused_datar>   ÚcountrÆ  )r   r4   ZdecrD   r
   r   r   r   Útest_stream_paddingï  s    &
&ÿz#StreamWriteTest.test_stream_paddingr  ÚumaskzMissing umask implementationc              	   C   st   t j t¡rt t¡ t  d¡}zBt t| j	¡}| 
¡  t  t¡jd@ }|  |dd¡ W t  |¡ nt  |¡ 0 d S )Né   r  i¤  zwrong file permissions)rK   rL   Úexistsrƒ   r   r  r  r   r   r   r6   r  r  r>   )r   Zoriginal_umaskr4   r   r   r   r   Útest_file_modeÿ  s    

zStreamWriteTest.test_file_mode)r   r   r   r   r  r  r1  r8  rœ   r  r9  rK   r  r   r   r   r   r
  ê  s   ÿr
  c                   @   s   e Zd Zdd„ ZdS )ÚGzipStreamWriteTestc                 C   s<   t  t| j¡ ¡  t t¡jdd}tj	 
t¡|vs8J ‚dS )zf
        Ensure the source directory is not included in the tar header
        per bpo-41316.
        zlatin-1r
  N)r   r   rƒ   r   r6   r°   r±   Ú	read_textrK   rL   Údirname)r   Úpayloadr   r   r   Ú test_source_directory_not_leaked  s    z4GzipStreamWriteTest.test_source_directory_not_leakedN)r   r   r   r  r   r   r   r   r    s   r  c                   @   s   e Zd ZerejndZdS )ÚBz2StreamWriteTestN)r   r   r   r&   ÚBZ2Decompressorr  r   r   r   r   r    s   r  c                   @   s   e Zd ZerejndZdS )ÚLzmaStreamWriteTestN)r   r   r   r,   ÚLZMADecompressorr  r   r   r   r   r    s   r  c                   @   sp   e Zd Zdd„ Zddd„Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚGNUWriteTestc                 C   s   t |ƒd d }|d S )Nr]   rX   )r?   )r   rb   Zblocksr   r   r   Ú_length'  s    zGNUWriteTest._lengthNc                 C   sX   d}t |ƒtjkr(|d7 }||  |¡7 }|d urTt |ƒtjkrT|d7 }||  |¡7 }|S )Nr]   )r?   r   ÚLENGTH_NAMEr  ÚLENGTH_LINK)r   rm   r  r  r   r   r   Ú
_calc_size+  s    zGNUWriteTest._calc_sizec                 C   sÐ   t  |¡}|r||_t j|_t  td¡}z>t j|_| 	|¡ |  
||¡}|j}|  ||d¡ W | ¡  n
| ¡  0 t  t¡}zD| ¡ }|  |d¡ |  |j|jd¡ |  |j|jd¡ W | ¡  n
| ¡  0 d S )Nr€   z%GNU longname/longlink creation failedzunable to read longname member)r   rÉ   rz  ÚLNKTYPEr÷   r   rƒ   Ú
GNU_FORMATr  rÎ   r!  ró   r>   r6   rÐ   rK  rm   )r   rm   r  rC   r4   rN  rO  Úmemberr   r   r   Ú_test9  s2    


ÿÿÿzGNUWriteTest._testc                 C   s   |   d¡ d S )Náÿ  longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam©r%  r   r   r   r   Útest_longname_1023V  s    zGNUWriteTest.test_longname_1023c                 C   s   |   d¡ d S )Ná   longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnamer'  r   r   r   r   Útest_longname_1024Y  s    zGNUWriteTest.test_longname_1024c                 C   s   |   d¡ d S )Ná  longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longnam/longname_r'  r   r   r   r   Útest_longname_1025\  s    zGNUWriteTest.test_longname_1025c                 C   s   |   dd¡ d S )Nrm   áÿ  longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_  s    zGNUWriteTest.test_longlink_1023c                 C   s   |   dd¡ d S )Nrm   á   longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1024b  s    zGNUWriteTest.test_longlink_1024c                 C   s   |   dd¡ d S )Nrm   á  longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/longlnk/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_1025e  s    zGNUWriteTest.test_longlink_1025c                 C   s   |   dd¡ d S )Nr&  r-  r'  r   r   r   r   Útest_longnamelink_1023h  s    ÿz#GNUWriteTest.test_longnamelink_1023c                 C   s   |   dd¡ d S )Nr)  r/  r'  r   r   r   r   Útest_longnamelink_1024l  s    ÿz#GNUWriteTest.test_longnamelink_1024c                 C   s   |   dd¡ d S )Nr+  r1  r'  r   r   r   r   Útest_longnamelink_1025p  s    ÿz#GNUWriteTest.test_longnamelink_1025)N)N)r   r   r   r  r!  r%  r(  r*  r,  r.  r0  r2  r3  r4  r5  r   r   r   r   r  #  s   

r  c                   @   s   e Zd ZdZdd„ ZdS )ÚDeviceHeaderTestrÍ   c              	   C   sŠ  t j td¡}t  |¡ z^t t| j¡}zHtj	dd}tj	dd}tj
|_tj|_| |¡ | |¡ W | ¡  n
| ¡  0 t td¡}z | d¡}| d¡}W | ¡  n
| ¡  0 |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ ttdƒ}| ¡ }W d   ƒ n1 s0    Y  ||j|j… }	||j|j… }
tdd	ƒ}|  |	| d
¡ |  |
| d¡ W t |¡ nt |¡ 0 d S )NZdevice_header_testZmy_block_device©rm   Zmy_regular_filerF   r   rW   iI  iY  s   0000000 0000000 s                   )rK   rL   rM   rJ   r„   r   r   rƒ   r   rÉ   ÚBLKTYPEr÷   ÚREGTYPErÎ   r6   r;   r>   r€  r  r=   ró   Zoffset_dataÚslicer   r  )r   rí  r4   Z	input_blkZ	input_regZ
output_blkZ
output_regZinfilerG  Zbuf_blkZbuf_regZdevice_headersr   r   r   Ú*test_headers_written_only_for_device_filesy  s:    


(
z;DeviceHeaderTest.test_headers_written_only_for_device_filesN)r   r   r   r   r;  r   r   r   r   r6  u  s   r6  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   r5   ©  s    zCreateTest.setUpc                 C   s:   t | jdƒ}| d¡ W d   ƒ n1 s,0    Y  d S )Nr­   rÍ  )r   Ú	file_pathrÈ   )ÚclsrD   r   r   r   Ú
setUpClass¬  s    zCreateTest.setUpClassc                 C   s   t  | j¡ d S r   )r   r  r>  ©r?  r   r   r   ÚtearDownClass±  s    zCreateTest.tearDownClassc                 C   s   t  t| j¡}| | j¡ W d   ƒ n1 s00    Y  |  t¡}| ¡ }W d   ƒ n1 sb0    Y  |  t	|ƒd¡ |  
d|d ¡ d S ©NrX   r=  r   )r   r   rƒ   r   r…   r>  r   r¸   r>   r?   rŸ   ©r   ÚtobjÚnamesr   r   r   Útest_createµ  s    *&zCreateTest.test_createc                 C   sÈ   t  t| j¡}| | j¡ W d   ƒ n1 s00    Y  |  t¡ t  t| j¡}W d   ƒ n1 sh0    Y  |  t¡}| 	¡ }W d   ƒ n1 sš0    Y  |  
t|ƒd¡ |  d|d ¡ d S rC  )r   r   rƒ   r   r…   r>  rÁ   ÚFileExistsErrorr   r¸   r>   r?   rŸ   rD  r   r   r   Útest_create_existing¾  s    *,&zCreateTest.test_create_existingc                 C   sŽ   |   td¡}| | j¡ W d   ƒ n1 s.0    Y  |   t¡}| ¡ }W d   ƒ n1 s`0    Y  |  t|ƒd¡ |  d|d ¡ d S ©NÚxrX   r=  r   )r   rƒ   r…   r>  r¸   r>   r?   rŸ   rD  r   r   r   Útest_create_taropenÊ  s    *&zCreateTest.test_create_taropenc              	   C   sä   |   td¡}| | j¡ W d   ƒ n1 s.0    Y  |  t¡< |   td¡ W d   ƒ n1 sf0    Y  W d   ƒ n1 s„0    Y  |   t¡}| ¡ }W d   ƒ n1 s¶0    Y  |  t|ƒd¡ |  	d|d ¡ d S rJ  )
r   rƒ   r…   r>  rÁ   rH  r¸   r>   r?   rŸ   rD  r   r   r   Útest_create_existing_taropenÓ  s    *<&z'CreateTest.test_create_existing_taropenc                 C   sè   t  t t¡| j¡N}|  |jt¡ |  	|jt
j t¡¡ | t | j¡¡ | ¡ }W d   ƒ n1 sh0    Y  |  	t|ƒd¡ |  d|d ¡ |  t¡}| ¡ }W d   ƒ n1 sº0    Y  |  	t|ƒd¡ |  d|d ¡ d S rC  )r   r   r°   r±   rƒ   r   rÛ   rm   rÜ   r>   rK   rL   rÝ   r…   r>  r¸   r?   rŸ   r   rD  r   r   r   Útest_create_pathlike_nameà  s    &&z$CreateTest.test_create_pathlike_namec                 C   sæ   |   t t¡d¡N}|  |jt¡ |  |jtj	 
t¡¡ | t | j¡¡ | ¡ }W d   ƒ n1 sf0    Y  |  t|ƒd¡ |  d|d ¡ |   t¡}| ¡ }W d   ƒ n1 s¸0    Y  |  t|ƒd¡ |  d|d ¡ d S rJ  )r   r°   r±   rƒ   rÛ   rm   rÜ   r>   rK   rL   rÝ   r…   r>  r¸   r?   rŸ   rD  r   r   r   Ú!test_create_taropen_pathlike_nameî  s    &&z,CreateTest.test_create_taropen_pathlike_nameN)r   r   r   r   rK   rL   rM   rJ   r>  r5   Úclassmethodr@  rB  rG  rI  rL  rM  rN  rO  r   r   r   r   r<  £  s   

		r<  c                   @   s   e Zd Zdd„ ZdS )ÚGzipCreateTestc                 C   sr   t jt| jdd}| | j¡ W d   ƒ n1 s40    Y  t jtddd}W d   ƒ n1 sd0    Y  d S )NrX   r_  zr:gz©r   r   rƒ   r   r…   r>  ©r   rE  r   r   r   Útest_create_with_compresslevelÿ  s    *z-GzipCreateTest.test_create_with_compresslevelN©r   r   r   rT  r   r   r   r   rQ  ý  s   rQ  c                   @   s   e Zd Zdd„ ZdS )ÚBz2CreateTestc                 C   sr   t jt| jdd}| | j¡ W d   ƒ n1 s40    Y  t jtddd}W d   ƒ n1 sd0    Y  d S )NrX   r_  úr:bz2rR  rS  r   r   r   rT    s    *z,Bz2CreateTest.test_create_with_compresslevelNrU  r   r   r   r   rV    s   rV  c                   @   s   e Zd Zdd„ ZdS )ÚLzmaCreateTestc                 C   sB   t jt| jdd}| | j¡ W d   ƒ n1 s40    Y  d S )NrX   )ÚpresetrR  rS  r   r   r   Útest_create_with_preset  s    z&LzmaCreateTest.test_create_with_presetN)r   r   r   rZ  r   r   r   r   rX    s   rX  c                   @   s   e Zd ZdZdZdZdS )ÚCreateWithXModeTestrK  N)r   r   r   r   rL  rM  r   r   r   r   r[    s   r[  r  r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚHardlinkTestc              
   C   s¾   t j td¡| _t j td¡| _t| jdƒ}| d¡ W d   ƒ n1 sL0    Y  zt  | j| j¡ W n2 t	yœ } z|  
d| ¡ W Y d }~n
d }~0 0 t td¡| _| j | j¡ d S )NrÅ   r}   r­   ó   foorß  r€   )rK   rL   rM   rJ   rÅ   r}   r   rÈ   r  rà  r@  r   rƒ   r4   r…   )r   rD   rU  r   r   r   r5   $  s    ($zHardlinkTest.setUpc                 C   s&   | j  ¡  t | j¡ t | j¡ d S r   )r4   r6   r   r  rÅ   r}   r   r   r   r   r7   3  s    
zHardlinkTest.tearDownc                 C   s$   | j  | j¡}|  |jtjd¡ d S )Nzadd file as regular failed)r4   rÐ  rÅ   r>   r÷   r   r9  rù   r   r   r   Útest_add_twice8  s    ÿzHardlinkTest.test_add_twicec                 C   s$   | j  | j¡}|  |jtjd¡ d S )Nzadd file as hardlink failed)r4   rÐ  r}   r>   r÷   r   r"  rù   r   r   r   Útest_add_hardlink?  s    ÿzHardlinkTest.test_add_hardlinkc                 C   s,   d| j _| j  | j¡}|  |jtjd¡ d S )NTzdereferencing hardlink failed)r4   ZdereferencerÐ  r}   r>   r÷   r   r9  rù   r   r   r   Útest_dereference_hardlinkD  s
    ÿz&HardlinkTest.test_dereference_hardlinkN)r   r   r   r5   r7   r^  r_  r`  r   r   r   r   r\     s
   r\  c                   @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )ÚPaxWriteTestNc                 C   s´   t  |¡}|r||_t j|_t jtdt jd}z| |¡ W | 	¡  n
| 	¡  0 t  t¡}zJ|r~| 
¡ d j}|  ||d¡ n| 
¡ d j}|  ||d¡ W | 	¡  n
| 	¡  0 d S )Nr€   ©r  r   zPAX longlink creation failedzPAX longname creation failed)r   rÉ   rz  r"  r÷   r   rƒ   rÀ  rÎ   r6   r¦   r>   rm   )r   rm   r  rC   r4   ÚlÚnr   r   r   r%  M  s     

zPaxWriteTest._testc              
   C   s  ddddddœ}t jtdt j|d}z| t  d¡¡ W | ¡  n
| ¡  0 t jtd	d
}z¢|  |j|¡ |  | 	¡ d j|¡ |j 
¡ D ]f\}}|  t|ƒt¡ |  t|ƒt¡ |t jv rŠzt j| |ƒ W qŠ ttfyî   |  d¡ Y qŠ0 qŠW | ¡  n
| ¡  0 d S )Nr}   Ú0z1.23õ   Ã¤Ã¶Ã¼Útest)rÅ   rf  rþ   rg  rf  r€   )r  r¶  r0   r
  r   z"unable to convert pax header field)r   r   rƒ   rÀ  rÎ   rÉ   r6   r>   r¶  r¦   ri  ZassertIsNotr÷   rê   ÚPAX_NUMBER_FIELDSrì  rð   rj   )r   r¶  r4   ÚkeyÚvalr   r   r   Útest_pax_global_headere  s2    ûÿ
z#PaxWriteTest.test_pax_global_headerc                 C   sº   dddœ}t jtdt jdd}z0t  ¡ }d|_d|_||_| |¡ W | 	¡  n
| 	¡  0 t jtdd	}zB| 
¡ d
 }|  |j|¡ |  |jd¡ |  |jd¡ W | 	¡  n
| 	¡  0 d S )NrÅ   Z123)rL   rf  r€   r0   r¾  rf  é   r
  r   rº  )r   r   rƒ   rÀ  rÉ   rm   rf  r¶  rÎ   r6   r¦   r>   )r   r¶  r4   rÑ   r   r   r   Útest_pax_extended_header…  s$    
ÿz%PaxWriteTest.test_pax_extended_headerc                 C   sì  t  ¡ }d|_d|_d|_d|_d|_| ¡ }|j|dd}|  	|d d¡ |  
|d	 t¡ |  	|d	 d
¡ |  	|d d¡ |  	|d d¡ |  	|d d¡ |  	|dtdƒ d tdƒ d tdƒ d tdƒ d tdƒ d tdƒ d tdƒ ¡ t  ¡ }d|_d|_d|_d|_d|_| ¡ }|j|dd}|  	|d d¡ |  	|d	 d¡ |  	|d d¡ |  	|d d¡ |  	|d d¡ |  	|dtdƒ d tdƒ d tdƒ d d d  td!ƒ d" td#ƒ d$ tdƒ d tdƒ ¡ d S )%NrÅ   gÍÌÌÌÌ@@rg   rº  é|   r0   r
  rm   rþ   re  r@   rf  rg  s   ././@PaxHeaderéV   s9   0000000 0000000 0000000 00000000020 00000000000 010205  xs   ustar 00é÷   s   16 mtime=1000.1
ið  r]  éa   s9   0000644 0000173 0000174 00000000144 00000001750 006516  0u   fooã´l    d(	 rl  i  r   s9   0000000 0000000 0000000 00000000130 00000000000 010207  xs   15 path=fooã´
16 uid=16777216
s$   16 gid=16777217
20 size=10000000000
s   21 mtime=10000000000
i¨  s   foo?é`   s9   0000644 0000000 0000000 00000000000 00000000000 006540  0)r   rÉ   rm   rþ   r@   rf  rg  r/  Zcreate_pax_headerr>   rÛ   ræ   rê   )r   rÑ   Úinfor½  r   r   r   Útest_create_pax_headerž  sª    
ÿþþþýýýýüûûûÿ	
ÿþþþýüûûûûúùùùÿz#PaxWriteTest.test_create_pax_header)N)r   r   r   r%  rk  rm  rt  r   r   r   r   ra  K  s   
 ra  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚUnicodeTestc                 C   s   |   d¡ d S )Nr0   ©Ú_test_unicode_filenamer   r   r   r   Útest_iso8859_1_filenameØ  s    z#UnicodeTest.test_iso8859_1_filenamec                 C   s   |   d¡ d S )NÚutf7rv  r   r   r   r   Útest_utf7_filenameÛ  s    zUnicodeTest.test_utf7_filenamec                 C   s   |   d¡ d S )Núutf-8rv  r   r   r   r   Útest_utf8_filenameÞ  s    zUnicodeTest.test_utf8_filenamec                 C   s‚   t jtd| j|dd}z d}| t  |¡¡ W | ¡  n
| ¡  0 t jt|d}z"|  | ¡ d j	|¡ W | ¡  n
| ¡  0 d S )Nr€   r¡  ©r  r2   Úerrorsrf  r
  r   )
r   r   rƒ   r  rÎ   rÉ   r6   r>   r¦   rm   )r   r2   r4   rm   r   r   r   rw  á  s    ÿz"UnicodeTest._test_unicode_filenamec                 C   sl   t jtd| jddd}zFt  ¡ }d|_|  t|j|¡ d|_d|_	|  t|j|¡ W | 
¡  n
| 
¡  0 d S )Nr€   r   r¡  r}  rf  rÅ   )r   r   rƒ   r  rÉ   rm   rÁ   ÚUnicodeErrorrÎ   r   r6   r¸  r   r   r   Útest_unicode_filename_errorð  s    ÿz'UnicodeTest.test_unicode_filename_errorc                 C   s€   t jtdddd}z^|D ]L}|  t|jƒt¡ |  t|jƒt¡ |  t|jƒt¡ |  t|j	ƒt¡ qW | 
¡  n
| 
¡  0 d S )NrF   r0   r¡  ©r2   r~  )r   r   r   ÚassertIsr÷   rm   rÜ   rz  r   rh  r6   rü  r   r   r   Útest_unicode_argumentÿ  s    ÿz!UnicodeTest.test_unicode_argumentc                 C   sä   t  d¡}d|_d|_t jtd| jdd}z| |¡ W | ¡  n
| ¡  0 t jtdd}zz| 	d¡}|  
|jd¡ |  
|jd¡ | jt jkrÊ| ¡  t jtdd}| 	d¡}|  
|jd¡ |  
|jd¡ W | ¡  n
| ¡  0 d S )	NrÅ   rf  r€   r0   )r   r  r2   r
  r   u	   í³¤í³¶í³¼)r   rÉ   r   rh  r   rƒ   r  rÎ   r6   r;   r>   rÀ  )r   rÑ   r4   r   r   r   Útest_uname_unicode  s*    
ÿ

zUnicodeTest.test_uname_unicodeN)
r   r   r   rx  rz  r|  rw  r€  rƒ  r„  r   r   r   r   ru  Ö  s   ru  c                   @   sf   e Zd ZejZdd„ Zdd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zddd„Zdd„ Zdd„ Zddd„ZdS )ÚUstarUnicodeTestc                 C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S ©NrÊ  Úe01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890ud   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567Ã¿ue   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678Ã¿©Ú_test_ustar_namerð   r   r   r   r   Útest_unicode_name1.  s    

z#UstarUnicodeTest.test_unicode_name1c                 C   s   |   d¡ |   dt¡ d S ©Nud   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿ue   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿rˆ  r   r   r   r   Útest_unicode_name24  s    
z#UstarUnicodeTest.test_unicode_name2c                 C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S )Na   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789a   0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123/40123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rˆ  r   r   r   r   Útest_unicode_longname1:  s    

z'UstarUnicodeTest.test_unicode_longname1c                 C   s   |   dt¡ |   dt¡ d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿Ã¿/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789rˆ  r   r   r   r   Útest_unicode_longname2@  s    z'UstarUnicodeTest.test_unicode_longname2c                 C   s&   |   dt¡ |   d¡ |   dt¡ d S )Nu  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901Ã¿Ã¿/20123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789u   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567Ã¿u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678Ã¿rˆ  r   r   r   r   Útest_unicode_longname3D  s    
z'UstarUnicodeTest.test_unicode_longname3c                 C   s   |   d¡ |   dt¡ d S )Nu   01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345Ã¿Ã¿u  01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456Ã¿Ã¿rˆ  r   r   r   r   Útest_unicode_longname4I  s    
z'UstarUnicodeTest.test_unicode_longname4Nc                 C   sº   t jtd| jdd>}t  |¡}|d u r4| |¡ n|  ||j|¡ W d   ƒ n1 sX0    Y  |d u r¶t jtddd,}|D ]}|  ||j¡  q˜q€W d   ƒ n1 s¬0    Y  d S )Nr€   r{  r¾  rF   r
  )	r   r   rƒ   r  rÉ   rÎ   rÁ   r>   rm   ©r   rm   Úexcr4   rÑ   r   r   r   r‰  M  s    
.z!UstarUnicodeTest._test_ustar_namec                 C   s0   |   d¡ |   dt¡ |   d¡ |   dt¡ d S r†  ©Ú_test_ustar_linkrð   r   r   r   r   Útest_unicode_link1\  s    

z#UstarUnicodeTest.test_unicode_link1c                 C   s   |   d¡ |   dt¡ d S r‹  r“  r   r   r   r   Útest_unicode_link2b  s    
z#UstarUnicodeTest.test_unicode_link2c                 C   sÀ   t jtd| jddD}t  d¡}||_|d u r:| |¡ n|  ||j|¡ W d   ƒ n1 s^0    Y  |d u r¼t jtddd,}|D ]}|  ||j¡  qžq†W d   ƒ n1 s²0    Y  d S )Nr€   r{  r¾  rÅ   rF   r
  )	r   r   rƒ   r  rÉ   rz  rÎ   rÁ   r>   r‘  r   r   r   r”  f  s    
.z!UstarUnicodeTest._test_ustar_link)N)N)r   r   r   r   ÚUSTAR_FORMATr  rŠ  rŒ  r  rŽ  r  r  r‰  r•  r–  r”  r   r   r   r   r…  '  s   
r…  c                   @   s   e Zd ZejZdd„ ZdS )ÚGNUUnicodeTestc              
   C   sn   dD ]d\}}t jt|dd<}z| |¡}W n tyH   |  d¡ Y n0 W d   ƒ q1 s^0    Y  qd S )N))r{  u   pax/bad-pax-í³¤í³¶í³¼)r0   u   pax/bad-pax-Ã¤Ã¶Ã¼r–   r  z%unable to read bad GNU tar pax header©r   r   r   r;   rû   rj   ©r   r2   rm   r4   rÑ   r   r   r   Útest_bad_pax_headerz  s    ÿz"GNUUnicodeTest.test_bad_pax_headerN)r   r   r   r   r#  r  r›  r   r   r   r   r˜  v  s   r˜  c                   @   s   e Zd ZejZdZdd„ ZdS )ÚPAXUnicodeTestNc              
   C   sn   dD ]d\}}t jt|dd<}z| |¡}W n tyH   |  d¡ Y n0 W d   ƒ q1 s^0    Y  qd S )N))r{  u   pax/hdrcharset-í³¤í³¶í³¼)r0   u   pax/hdrcharset-Ã¤Ã¶Ã¼r–   r  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  r€  r  r   r   r   r   rœ  ˆ  s   rœ  c                   @   s&   e Zd Zdd„ Zd	dd„Zdd„ ZdS )
ÚAppendTestBasec                 C   s$   t | _tj | j¡r t | j¡ d S r   )rƒ   r   rK   rL   r  r   r  r   r   r   r   r5   Ÿ  s    zAppendTestBase.setUprÍ   c              
   C   s¦   t jtdd„}| d¡}d|_| |¡J}t  | j|¡}| ||¡ W d   ƒ n1 s\0    Y  W d   ƒ n1 sz0    Y  W d   ƒ n1 s˜0    Y  d S )Nr0   r
  r9   rÅ   )r   r   r   r;   rm   r<   rÎ   )r   r   ÚsrcrÑ   rô   r4   r   r   r   Ú_create_testtar¤  s    
zAppendTestBase._create_testtarc                 C   s(   |   d| j ¡ |  tjtjtd¡ d S )NrÍ   ro   )r   r   rÁ   r   r¹   r   rƒ   r   r   r   r   Útest_append_compressed¬  s    z%AppendTestBase.test_append_compressedN)rÍ   )r   r   r   r5   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   sF   t j| jd|d }| t  d¡¡ W d   ƒ n1 s80    Y  d S )Nro   rW  r}   )r   r   r   rÎ   rÉ   )r   rÚ   r4   r   r   r   Ú_add_testfile³  s    zAppendTest._add_testfiler}   c                 C   sD   t j| j|d }|  | ¡ |¡ W d   ƒ n1 s60    Y  d S )NrW  )r   r   r   r>   r¸   )r   rF  rÚ   r4   r   r   r   r%  ·  s    zAppendTest._testc                 C   s   |   ¡  |  ¡  d S r   )r£  r%  r   r   r   r   Útest_non_existing»  s    zAppendTest.test_non_existingc                 C   s&   t  | jd¡ ¡  |  ¡  |  ¡  d S )NrÍ   )r   r   r   r6   r£  r%  r   r   r   r   Ú
test_empty¿  s    zAppendTest.test_emptyc                 C   s.   t  d¡}|  |¡ | d¡ | j|d d S )Ns                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   rW  )r   rš   r£  r^   r%  r²   r   r   r   Útest_empty_fileobjÄ  s    


zAppendTest.test_empty_fileobjc                 C   sp   |   ¡  t| jdƒ}| ¡ }W d   ƒ n1 s20    Y  t |¡}|  |¡ | d¡ | jddg|d d S )NrW   r   rÅ   r}   )rF  rÚ   )	r   r   r   r=   r   rš   r£  r^   r%  rk   r   r   r   Útest_fileobjÊ  s    &


zAppendTest.test_fileobjc                 C   s$   |   ¡  |  ¡  | jddgd d S )NrÅ   r}   )rF  )r   r£  r%  r   r   r   r   Útest_existingÓ  s    zAppendTest.test_existingc                 C   sJ   t | jdƒ}| |¡ W d   ƒ n1 s,0    Y  |  tj| j¡ d S rÀ   )r   r   rÈ   rÁ   r   r¹   r£  )r   r
   rD   r   r   r   Ú_test_errorÚ  s    (zAppendTest._test_errorc                 C   s   |   d¡ d S )Nr\   ©r©  r   r   r   r   Ú	test_nullß  s    zAppendTest.test_nullc                 C   s   |   d¡ d S )Nó                rª  r   r   r   r   Útest_incompleteâ  s    zAppendTest.test_incompletec                 C   s   t  d¡ ¡ }|  |¡ d S )NrÅ   ©r   rÉ   rÊ   r©  r   r   r   r   Útest_premature_eofå  s    zAppendTest.test_premature_eofc                 C   s    t  d¡ ¡ }|  |d ¡ d S )NrÅ   r¬  r®  r   r   r   r   Útest_trailing_garbageé  s    z AppendTest.test_trailing_garbagec                 C   s   |   d¡ d S )Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarª  r   r   r   r   Útest_invalidí  s    zAppendTest.test_invalid)N)r   r   r   r¡  r£  r%  r¤  r¥  r¦  r§  r¨  r©  r«  r­  r¯  r°  r±  r   r   r   r   r¢  °  s   
	r¢  c                   @   s   e Zd ZdS )ÚGzipAppendTestNrˆ   r   r   r   r   r²  ð  s   r²  c                   @   s   e Zd ZdS )ÚBz2AppendTestNrˆ   r   r   r   r   r³  ó  s   r³  c                   @   s   e Zd ZdS )ÚLzmaAppendTestNrˆ   r   r   r   r   r´  ö  s   r´  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
LimitsTestc                 C   sÈ   t  d¡}| t j¡ t  d¡}|  t|jt j¡ t  d¡}| t j¡ t  d¡}|  t|jt j¡ t  d¡}|  t|jt j¡ t  d¡}d|_|  t|jt j¡ t  d¡}d|_|  t|jt j¡ d S )	NrÊ  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ž  rm   é    )r   rÉ   rÊ   r—  rÁ   rð   rz  rf  rù   r   r   r   Útest_ustar_limitsü  s     






zLimitsTest.test_ustar_limitsc                 C   sX   t  d¡}| t j¡ t  d¡}d|_| t j¡ t  d¡}d|_|  t|jt j¡ d S ©Nr¶  rž  rm   l          )r   rÉ   rÊ   r#  rz  rf  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À  rz  rf  rù   r   r   r   Útest_pax_limits(	  s    


zLimitsTest.test_pax_limitsN)r   r   r   r¸  rº  r»  r   r   r   r   rµ  ú  s   rµ  c                   @   sj   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Ze 	e
 ¡ d¡e 	eedƒd¡ej d¡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~  r]  s   foo bar )r>   r   ÚstnÚntsr   r   r   r   Útest_char_fields7	  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 rX   ó   7777777 éÿÿ ó   €       r·  ó   €   ÿÿÿÿì   ÿÿ ó   ÿÿÿÿÿÿÿÿr  ó   ÿÿÿÿÿÿÿœéœÿÿÿó   ÿ       ìüÿÿÿ       rÃ   r   s           )r>   r   Úntir   r   r   r   Útest_read_number_fieldsA	  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 )NrX   rÁ  rÃ  rÂ  r·  rb  rÄ  rÆ  rÅ  r  rÇ  rÉ  rÈ  rË  rÊ  g      YÀg      0Bs   €      gš™™™™™¹¿r   )r>   r   Úitnr#  rÌ  r   r   r   r   Útest_write_number_fieldsU	  s4    ÿÿÿÿ
ÿþÿÿz!MiscTest.test_write_number_fieldsc                 C   sì   |   t¡  t ddtj¡ W d   ƒ n1 s00    Y  |   t¡  t ddtj¡ W d   ƒ n1 sj0    Y  |   t¡  t ddtj¡ W d   ƒ n1 s¤0    Y  |   t¡  t ddtj¡ W d   ƒ n1 sÞ0    Y  d S )Nr  r½  r·  lýÿÿÿ    é   l        )rÁ   rð   r   rÎ  r—  r#  r   r   r   r   Útest_number_field_limitsl	  s    ...z!MiscTest.test_number_field_limitsc                 C   s   h d£}t j| t|d d S )N>9   ZGNUTYPE_LONGLINKÚdata_filterÚversionZREGULAR_TYPESÚ	GNU_MAGICr  ZSUPPORTED_TYPESÚLinkOutsideDestinationErrorr¿  Úfully_trusted_filterÚ
tar_filterrÎ  ÚSpecialFileErrorÚSYMTYPEÚLinkFallbackErrorÚCHRTYPEZEOFHeaderErrorÚAbsolutePathErrorZsymlink_exceptionZAREGTYPErÌ  rÂ  rÆ  Z	GNU_TYPESZSOLARIS_XHDTYPEÚAbsoluteLinkErrorr9  ÚpwdZcalc_chksumsZ
PAX_FIELDSr¾  Úgrpr"  ÚLENGTH_PREFIXZCONTTYPEr±  ÚOutsideDestinationErrorrh  ÚcopyfileobjZXGLTYPEÚPOSIX_MAGICZSubsequentHeaderErrorÚFIFOTYPEr8  ZPAX_NAME_FIELDSÚmainrÇ  Úfilemoder   rø   ZEmptyHeaderErrorZInvalidHeaderErrorZExFileObjectÚFilterErrorZTruncatedHeaderErrorÚNULZGNUTYPE_SPARSE)Ú	blacklist)r   Zcheck__all__r   )r   ré  r   r   r   Útest__all__v	  s    zMiscTest.test__all__zrequires symlink supportÚchmodzmissing os.chmodúos.chmodc              	      sÒ   t j td¡‰ ‡ fdd„}||_t j td¡}tƒ >}|jddd |jdtjdd	 |jd|d W d   ƒ n1 sx0    Y  t  	|¡ z*| 
¡ jˆ d
d W t |¡ t ˆ ¡ nt |¡ t ˆ ¡ 0 d S )NZ
test127987c                    s.   t j | ¡}t j |ˆ g¡ˆ kr*td|ƒ‚d S )Nz8should not try to chmod anything outside the destination)rK   rL   ÚrealpathÚ
commonpathÚ	Exception)rL   r   rk  Ztarget_path©rí  r   r   Úmock_chmod_side_effect”	  s    zRMiscTest.test_deferred_directory_attributes_update.<locals>.mock_chmod_side_effectÚoutside_tree_dirrK  r÷  ©Ú
symlink_toú
?rwsrwsrwt©r÷   r   r4   )rL   rè  )rK   rL   rM   rJ   r6  ÚArchiveMakerr…   r   rø   Úmakedirsr   r  r   r  )r   Ú
mock_chmodrñ  rò  Úarcr   rð  r   Ú)test_deferred_directory_attributes_updateŽ	  s    ,

ÿ
z2MiscTest.test_deferred_directory_attributes_updateN)r   r   r   rÀ  rÍ  rÏ  rÑ  rê  r1  r8  r   Úcan_symlinkr9  rK   r2  r3  rû  r   r   r   r   r¼  5	  s   


r¼  c                   @   s´   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+S ),ÚCommandLineTestc                 O   s2   t jddg|¢R i |¤Ž\}}}| tj ¡ d¡S )Nú-mr   ó   
)r   Zassert_python_okr·   rK   Úlineseprh   )r   Úargsrk  Ú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   sr   t  d¡t  d¡g}|  t j|¡ t |d¡0}|D ]}|j|tj 	|¡d q4W d   ƒ n1 sd0    Y  d S )Nútokenize_tests.txtú9tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txtr€   rï  )
r   rÔ   r  r  r   r   r…   rK   rL   ré  )r   Útar_nameÚfilesÚtfZtardatar   r   r   Úmake_simple_tarfile²	  s    ÿz#CommandLineTest.make_simple_tarfilec                 C   s†   t  d¡g}|  t j|¡ t |d¡L}t d¡}|j|t 	d¡d t d¡}|j|t 	d¡d W d   ƒ n1 sx0    Y  d S )Nr  r€   Úbenignr\   rW  ú../evil)
r   rÔ   r  r  r   r   rÉ   rÎ   r   rš   )r   r	  r
  r  r  Zevilr   r   r   Úmake_evil_tarfile»	  s    

z!CommandLineTest.make_evil_tarfilec                 C   s|   |   ¡ \}}}|  |d¡ |  d| ¡ ¡ |  d| ¡ ¡ |  d| ¡ ¡ |   dd¡\}}}|  |d¡ |  | ¡ d¡ d S )Nr\   s   usages   errors   requiredú-lr   )r  r>   rŸ   Úlowerrœ  Ústrip)r   r  r£   r  r   r   r   Útest_bad_useÄ	  s    zCommandLineTest.test_bad_usec                 C   s0   t D ]&}dD ]}|  ||¡}|  |d¡ qqd S )N)ú-tz--testr\   )Útesttarnamesr  r>   ©r   r	  Úoptr£   r   r   r   Útest_test_commandÎ	  s    z!CommandLineTest.test_test_commandc                 C   s6   t D ],}dD ]"}| j|d|dd}|  d|¡ qqd S )N©ú-vz	--verboser  r{  ©ÚPYTHONIOENCODINGs   is a tar archive.
)r  r  rŸ   r  r   r   r   Útest_test_command_verboseÔ	  s    
ÿz)CommandLineTest.test_test_command_verbosec                 C   s0  t  d¡}|  d|¡\}}}|  d|¡ |  |d¡ |  |d¡ tD ]æ}| j|dÄ t|dƒ}| ¡ }W d   ƒ n1 s~0    Y  zttt	dƒ"}| 
|d d	… ¡ W d   ƒ n1 s¼0    Y  |  dt	¡\}}}|  |d¡ |  |d¡ W t  t	¡ nt  t	¡ 0 W d   ƒ qD1 s 0    Y  qDd S )
Nú
zipdir.zipr  ó    is not a tar archive.r\   rX   )r	  rW   r­   r  )r   rÔ   r  rŸ   r>   r  r¿  r   r=   rƒ   rÈ   r  )r   Úzipnamer  r£   r  r	  rô   r
   r   r   r   Útest_test_command_invalid_fileÛ	  s     
&0z.CommandLineTest.test_test_command_invalid_filec              
   C   s¤   t D ]š}t ¡ H}t |d¡}|jdd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  | ¡  dd¡}dD ] }| j||dd}|  	||¡ q|qd S )NrF   Fr’   r   r—   )r  z--listr  ©
r  r   Zcaptured_stdoutr   r   rU   rž   rh   r  r>   ©r   r	  rÑ   r  Úexpectedr  r£   r   r   r   Útest_list_commandï	  s    
Hÿz!CommandLineTest.test_list_commandc              
   C   s¦   t D ]œ}t ¡ H}t |d¡}|jdd W d   ƒ n1 s@0    Y  W d   ƒ n1 s^0    Y  | ¡  dd¡}dD ]"}| j|d|dd}|  	||¡ q|qd S )	NrF   Tr’   r   r—   r  r  r  r"  r#  r   r   r   Útest_list_command_verboseú	  s    
H
ÿz)CommandLineTest.test_list_command_verbosec                 C   sD   t  d¡}|  d|¡\}}}|  d|¡ |  |d¡ |  |d¡ d S )Nr  r  r  r\   rX   )r   rÔ   r  rŸ   r>   ©r   r   r  r£   r  r   r   r   Útest_list_command_invalid_file
  s
    
z.CommandLineTest.test_list_command_invalid_filec              
   C   s   t  d¡t  d¡g}dD ]r}z`| j|tg|¢R Ž }|  |d¡ t t¡}| ¡  W d   ƒ n1 sf0    Y  W t  t¡ qt  t¡ 0 qd S )Nr  r  )ú-cz--creater\   )	r   rÔ   r  rƒ   r>   r   r   r¦   r  ©r   r
  r  r£   r4   r   r   r   Útest_create_command
  s    ÿ(z#CommandLineTest.test_create_commandc              
   C   s˜   t  d¡t  d¡g}dD ]z}zh| j|dtg|¢R ddiŽ}|  d|¡ t t¡}| ¡  W d   ƒ n1 sn0    Y  W t  t¡ qt  t¡ 0 qd S )Nr  r  r  r)  r  r{  s    file created.)	r   rÔ   r  rƒ   rŸ   r   r   r¦   r  r*  r   r   r   Útest_create_command_verbose
  s    ÿÿ(z+CommandLineTest.test_create_command_verbosec              	   C   s~   t  d¡g}z`| jdtg|¢R Ž }|  |d¡ t t¡}| ¡  W d   ƒ n1 sV0    Y  W t  t¡ nt  t¡ 0 d S )Nr  r)  r\   )	r   rÔ   r  Údotlessnamer>   r   r   r¦   r  )r   r
  r£   r4   r   r   r   Ú$test_create_command_dotless_filename'
  s    (z4CommandLineTest.test_create_command_dotless_filenamec              	   C   sŒ   t j td¡}t d¡g}z`| jd|g|¢R Ž }|  |d¡ t 	|¡}| 
¡  W d   ƒ n1 sd0    Y  W t |¡ nt |¡ 0 d S )Nz.testtarr  r)  r\   )rK   rL   rM   rJ   r   rÔ   r  r>   r   r   r¦   r  )r   r	  r
  r£   r4   r   r   r   Ú(test_create_command_dot_started_filename1
  s    (z8CommandLineTest.test_create_command_dot_started_filenamec              
   C   s    t  d¡t  d¡g}tttfD ]|}|js*qzbtd |j }| jd|g|¢R Ž }| 	|¡}| 
¡  W d   ƒ n1 sv0    Y  W t  |¡ qt  |¡ 0 qd S )Nr  r  r÷  r)  )r   rÔ   r!   r%   r)   r   rƒ   r   r  r   r¦   r  )r   r
  Zfiletyper	  r£   r4   r   r   r   Útest_create_command_compressed<
  s    ÿ(z.CommandLineTest.test_create_command_compressedc              
   C   sv   |   t¡ dD ]b}zPt t¡ |  |t¡}W d   ƒ n1 s@0    Y  |  |d¡ W t t¡ qt t¡ 0 qd S )N)ú-ez	--extractr\   ©r  rƒ   r   r‚   Ú	tarextdirr  r>   r  ©r   r  r£   r   r   r   Útest_extract_commandK
  s    
*z$CommandLineTest.test_extract_commandc              
   C   s|   |   t¡ dD ]h}zVt t¡" | j|dtdd}W d   ƒ n1 sF0    Y  |  d|¡ W t t¡ qt t¡ 0 qd S )Nr  r1  r{  r  ó    file is extracted.)r  rƒ   r   r‚   r3  r  rŸ   r  r4  r   r   r   Útest_extract_command_verboseU
  s    

ÿ$z,CommandLineTest.test_extract_command_verbosec              	   C   s    |   t¡ tj td¡}t t¡ zlt |¡D |  	dtddd¡ | j
dtddddd}|  d	|¡ W d   ƒ n1 sx0    Y  W t t¡ nt t¡ 0 d S )
NÚdestr1  r  z--filterr
   Úfully_trustedr{  r  r6  )r  rƒ   rK   rL   rM   r3  r„   r   r‚   r  r  rŸ   r  )r   Údestdirr£   r   r   r   Útest_extract_command_filter`
  s     

þý,z+CommandLineTest.test_extract_command_filterc              	   C   sn   |   t¡ zRt t¡ |  dtd¡}W d   ƒ n1 s:0    Y  |  |d¡ W t t¡ nt t¡ 0 d S )Nr1  Zspamdirr\   r2  )r   r£   r   r   r   Ú(test_extract_command_different_directorys
  s    
,z8CommandLineTest.test_extract_command_different_directoryc                 C   sn   t  d¡}t  t¡" |  d|¡\}}}W d   ƒ n1 s<0    Y  |  d|¡ |  |d¡ |  |d¡ d S )Nr  r1  r  r\   rX   )r   rÔ   r‚   r3  r  rŸ   r>   r'  r   r   r   Ú!test_extract_command_invalid_file|
  s    
0z1CommandLineTest.test_extract_command_invalid_fileN)r   r   r   r  r  r  r  r  r  r  r!  r%  r&  r(  r+  r,  r.  r/  r0  r5  r7  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S )ÚContextManagerTestc                 C   sJ   t  t¡}|  |jd¡ W d   ƒ n1 s.0    Y  |  |jd¡ d S )Nzclosed inside runtime contextúcontext manager failed)r   r   r   r®   r,  rµ   r»   r   r   r   Ú
test_basic‡
  s    ,zContextManagerTest.test_basicc              	   C   sd   t  t¡}| ¡  |  t¡4 | W d   ƒ n1 s80    Y  W d   ƒ n1 sV0    Y  d S r   )r   r   r   r6   rÁ   rõ  r»   r   r   r   Útest_closedŒ
  s
    
zContextManagerTest.test_closedc              	   C   sz   |   t¡>}t t¡}t‚W d   ƒ n1 s00    Y  W d   ƒ n1 sN0    Y  |  |jtd¡ |  |j	d¡ d S )Nz)wrong exception raised in context managerr?  )
rÁ   rï  r   r   r   rõ  rÛ   Ú	exceptionrµ   r,  )r   r’  r4   r   r   r   Útest_exception•
  s    @
ÿz!ContextManagerTest.test_exceptionc                 C   sj   z4t  td¡}t‚W d   ƒ n1 s(0    Y  W n   Y n0 |  tj t¡dd¡ |  |j	d¡ d S )Nr€   r   z-context manager wrote an end-of-archive blockr?  )
r   r   rƒ   rï  r>   rK   rL   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"0    Y  |  tj t¡dd¡ d S )Nr€   r   z-context manager wrote no end-of-archive block)r   r   rƒ   rœ  rK   rL   rÎ  r   r   r   r   Útest_eofª
  s
    ÿzContextManagerTest.test_eofc              	   C   sŽ   t tdƒp}z6tj |dd}t‚W d   ƒ n1 s60    Y  W n   Y n0 |  |jd¡ |  |jd¡ W d   ƒ n1 s€0    Y  d S )Nr­   r€   rÙ   zexternal file object was closedr?  )r   rƒ   r   rï  r®   r,  rµ   rÞ   r   r   r   r§  ²
  s    &zContextManagerTest.test_fileobjN)	r   r   r   r@  rA  rC  rD  rE  r§  r   r   r   r   r>  …
  s   		r>  zrequires os.link to be missingc                   @   s€   e Zd Zdd„ Ze eejdƒd¡dd„ ƒZ	e eejdƒd¡dd„ ƒZ
e eed	ƒd
¡dd„ ƒZe eed	ƒd
¡dd„ ƒZdS )ÚLinkEmulationTestc                 C   s^   | j  |t¡ ttj t|¡dƒ}| ¡ }W d   ƒ n1 s@0    Y  |  t	|ƒt
¡ d S r´   )r4   rI   rJ   r   rK   rL   rM   r=   r>   r   rA   )r   rm   rô   r
   r   r   r   Ú_test_link_extractionÅ
  s    &z'LinkEmulationTest._test_link_extractionÚislinkz3Skip emulation - has os.path.islink but not os.linkc                 C   s   |   d¡ d S )Nrr   ©rG  r   r   r   r   Útest_hardlink_extraction1Ì
  s    z+LinkEmulationTest.test_hardlink_extraction1c                 C   s   |   d¡ d S )Nru   rI  r   r   r   r   Útest_hardlink_extraction2Ñ
  s    z+LinkEmulationTest.test_hardlink_extraction2rã  z Skip emulation if symlink existsc                 C   s   |   d¡ d S )Nrx   rI  r   r   r   r   Útest_symlink_extraction1Ö
  s    z*LinkEmulationTest.test_symlink_extraction1c                 C   s   |   d¡ d S )Nrz   rI  r   r   r   r   Útest_symlink_extraction2Û
  s    z*LinkEmulationTest.test_symlink_extraction2N)r   r   r   rG  r1  r;  r9  rK   rL   rJ  rK  rL  rM  r   r   r   r   rF  ¿
  s"   ÿ
ÿ
ÿ
ÿrF  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBz2PartialReadTestc              	      sx   G ‡ fdd„dt jƒ‰ t t d¡ ¡ ¡}tt|ƒd ƒD ]8}ztj	ˆ |d |… ƒ|d W q: tj
yp   Y q:0 q:d S )Nc                       s0   e Zd ZdZ‡‡ fdd„Z‡‡ fdd„Z‡  ZS )z9Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIOFc                    s4   | j rtdƒ‚|  ¡ t|  ¡ ƒk| _ tˆ | ƒ |¡S )Nz(infinite loop detected in tarfile.open())Úhit_eofÚAssertionErrorr_   r?   rž   Úsuperr=   )r   rd  ©Ú	MyBytesIOÚ	__class__r   r   r=   è
  s    z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.readc                    s   d| _ tˆ | ƒj|Ž S rþ  )rO  rQ  r^   r  rR  r   r   r^   î
  s    z>Bz2PartialReadTest._test_partial_input.<locals>.MyBytesIO.seek)r   r   r   rO  r=   r^   Ú__classcell__r   ©rS  )rT  r   rS  æ
  s   rS  rÅ   rX   rÙ   )r   rš   r&   Úcompressr   rÉ   rÊ   Úranger?   r   r¹   )r   r   r
   rK  r   rV  r   Ú_test_partial_inputå
  s    z&Bz2PartialReadTest._test_partial_inputc                 C   s   |   d¡ d S )NrF   ©rY  r   r   r   r   Útest_partial_inputù
  s    z%Bz2PartialReadTest.test_partial_inputc                 C   s   |   d¡ d S )NrW  rZ  r   r   r   r   Útest_partial_input_bz2ü
  s    z)Bz2PartialReadTest.test_partial_input_bz2N)r   r   r   rY  r[  r\  r   r   r   r   rN  á
  s   rN  c                  C   sZ   zdd l } dd l}W n ty(   Y dS 0 |  d¡d dkr@dS | d¡d dkrVdS dS )Nr   FÚrootT)rÞ  rß  ÚImportErrorÚgetpwuidÚgetgrgid)rÞ  rß  r   r   r   Úroot_is_uid_gid_0   s    ra  Úchownzmissing os.chownÚgeteuidzmissing os.geteuidc                   @   sÎ   e Zd Zedd„ ƒZeedd„ ƒƒZej 	d¡ej 	d¡ej 	d¡dd	„ ƒƒƒZ
ej 	d¡ej 	d¡ej 	d¡d
d„ ƒƒƒZe eƒ d¡ej 	d¡ej 	d¡ej 	d¡dd„ ƒƒƒƒZej 	d¡dd„ ƒZdS )ÚNumericOwnerTestc                 C   s°   t  d¡}| ddtj|f|ddtjd f|ddtj|fg}t td¡X}|D ]B\}}}}	}
t |¡}||_||_	d	|_
d	|_|	|_| ||
¡ qJW d   ƒ n1 s¢0    Y  tS )
Ns   contentéc   éb   éM   éL   éX   éW   r€   r]  )r   rš   r   r9  rø   r   rƒ   rÉ   rf  rg  r   rh  r÷   rÎ   )Ú
filename_1Ú	dirname_1Ú
filename_2rD   ri  Útarflrm   rf  rg  ÚtypÚcontentsrÑ   r   r   r   Ú_make_test_archive  s    
þ
,z#NumericOwnerTest._make_test_archivec                 c   sn   d| _ d}d}|}|}tj ||¡}t |||¡}t |¡}||||fV  W d   ƒ n1 s`0    Y  d S )Nr   znumeric-owner-testfilerñ  )r×  rK   rL   rM   rd  rq  r   r   )Úmock_geteuidZfnamer  rk  rl  rm  Ztar_filenamern  r   r   r   Ú_setup_test-  s    þzNumericOwnerTest._setup_testzos.chownrì  z
os.geteuidc           
      C   sœ   |   |¡8\}}}}|j|tdd |j|tdd W d   ƒ n1 sH0    Y  tj t|¡}tj t|¡}	|jtj 	|dd¡tj 	|	dd¡gdd d S )NT©Znumeric_ownerre  rf  ri  rj  ©Z	any_order)
rs  rI   rJ   rK   rL   rM   Úassert_has_callsr1  r2  Úcall)
r   rr  rù  Ú
mock_chownrn  rk  Ú_rm  Úf_filename_1Úf_filename_2r   r   r   Útest_extract_with_numeric_ownerC  s    .ÿýz0NumericOwnerTest.test_extract_with_numeric_ownerc                 C   s¦   |   |¡&\}}}}|jtdd W d   ƒ n1 s60    Y  tj t|¡}tj t|¡}	tj t|¡}
|jtj 	|dd¡tj 	|	dd¡tj 	|
dd¡gdd	 d S )
NTrt  re  rf  rg  rh  ri  rj  ru  )
rs  r  rJ   rK   rL   rM   rv  r1  r2  rw  )r   rr  rù  rx  rn  rk  rl  rm  rz  Zf_dirname_1r{  r   r   r   Ú"test_extractall_with_numeric_ownerV  s    ,þüz3NumericOwnerTest.test_extractall_with_numeric_ownerz uid=0,gid=0 must be named "root"c                 C   sb   |   |¡(\}}}}|j|tdd W d   ƒ n1 s80    Y  tj t|¡}| |dd¡ d S )NFrt  r   )rs  rI   rJ   rK   rL   rM   Zassert_called_with)r   rr  rù  rx  rn  rk  ry  rz  r   r   r   Ú"test_extract_without_numeric_ownern  s    .z3NumericOwnerTest.test_extract_without_numeric_ownerc              	   C   sL   |   |¡.\}}}}|  t|j|tdd¡ W d   ƒ n1 s>0    Y  d S )NFT)rs  rÁ   rì  rI   rJ   )r   rr  rn  rk  ry  r   r   r   Útest_keyword_only}  s    ÿz"NumericOwnerTest.test_keyword_onlyN)r   r   r   r²  rq  r   rs  r1  r2  r3  r|  r}  r8  ra  r~  r  r   r   r   r   rd    s,   	






ÿ




rd  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚReplaceTestsc                 C   sN   | j  d¡}|jdd}|  |jd¡ |  |jd¡ |  | j  d¡jd¡ d S )Nr9   z
misc/otherr7  )r4   r;   r·   r>   rm   ©r   r$  Úreplacedr   r   r   Útest_replace_name…  s    ÿzReplaceTests.test_replace_namec                 C   sN   | j  d¡}| ¡ }d|jd< |  |jd d¡ |  | j  d¡jd d¡ d S )Nrµ  únot-barrh  r}   ©r4   r;   r·   r¶  r>   r  r   r   r   Útest_replace_deep  s    
ÿzReplaceTests.test_replace_deepc                 C   sR   | j  d¡}|jdd}d|jd< |  |jd d¡ |  | j  d¡jd d¡ d S )Nrµ  F)Zdeepr„  rh  r…  r  r   r   r   Útest_replace_shallow•  s    
ÿz!ReplaceTests.test_replace_shallowc              	   C   s~   | j  d¡}dD ]h}| j|dH |jf i |d i¤Ž}|  t||ƒd ¡ |  t||ƒd ¡ W d   ƒ q1 sn0    Y  qd S )Nr9   )rm   rþ   r   rz  rf  rg  r   rh  ©Ú	attr_name)r4   r;   r¿  r·   r>   rà   rœ  )r   r$  r‰  r‚  r   r   r   Útest_replace_all  s    zReplaceTests.test_replace_allc                 C   sF   | j  d¡}|  t¡ |jdd W d   ƒ n1 s80    Y  d S )Nr9   iÍ[)ró   )r4   r;   rÁ   rì  r·   )r   r$  r   r   r   Útest_replace_internal¦  s    z"ReplaceTests.test_replace_internalN)r   r   r   rƒ  r†  r‡  rŠ  r‹  r   r   r   r   r€  „  s
   	r€  c                   @   st   e Zd ZdZedd„ ƒZedd„ ƒZdd„ Zedd	„ ƒZ	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚNoneInfoExtractTestsNc                    sj   t jtddd}t t¡d ˆ _d|_|jˆ jˆ j	d | 
¡  t‡ fdd„t ˆ j¡ d	¡D ƒƒˆ _d S )
NrF   r0   r1   Zextractall_ctrlr   ©rè  c                 3   s   | ]}|  ˆ j¡V  qd S r   )Úrelative_toÚcontrol_dir©r  ÚprA  r   r   Ú	<genexpr>¼  s   ÿz2NoneInfoExtractTests.setUpClass.<locals>.<genexpr>ú**/*)r   r   r   r°   r±   rJ   r  r  r  Úextraction_filterr6   ÚsetÚglobÚcontrol_paths)r?  r4   r   rA  r   r@  µ  s    þzNoneInfoExtractTests.setUpClassc                 C   s   t  | j¡ d S r   )Úshutilr  r  rA  r   r   r   rB  À  s    z"NoneInfoExtractTests.tearDownClassc                    sX   t ‡ fdd„t ˆ ¡ d¡D ƒƒ}| jdkrFdD ]}| t |¡¡ q0|  | j|¡ d S )Nc                 3   s   | ]}|  ˆ ¡V  qd S r   )rŽ  r  ©rÒ  r   r   r’  Å  s   ÿz;NoneInfoExtractTests.check_files_present.<locals>.<genexpr>r“  r
   )r…  r}  rƒ  )r•  r°   r±   r–  r”  Údiscardr>   r—  )r   rÒ  Z	got_pathsrL   r   r™  r   Úcheck_files_presentÄ  s    þ
z(NoneInfoExtractTests.check_files_presentc                 g   sŠ   t  t¡d }d| j_| j ¡ D ]}|D ]}t||d ƒ q(q t |¡0 | jj	|dd |  
|¡ |V  W d   ƒ n1 s|0    Y  d S )NZextractall_noner   r9  r  )r°   r±   rJ   r4   r  r¦   Úsetattrr   r%  r  r›  )r   Ú
attr_namesr  r$  r‰  r   r   r   Úextract_with_noneÎ  s    
z&NoneInfoExtractTests.extract_with_nonec                 C   s¾   t  t¡ ¡ j}|  d¡}t  |¡ d¡D ]n}| j|dN z| ¡ j}W n tyh   | 	¡ sd‚ Y n0 |  
| ¡ j|¡ W d   ƒ q,1 s0    Y  q,W d   ƒ n1 s°0    Y  d S )Nrþ   r“  r"  )r°   r±   rJ   r  Úst_mtimerž  r–  r¿  rõ  Ú
is_symlinkZassertGreaterEqual)r   Znowr  rL   rþ   r   r   r   Útest_extractall_none_mtimeÚ  s    z/NoneInfoExtractTests.test_extractall_none_mtimec              
   C   sØ   t  t¡ ¡ j}t  t¡d }| d¡ | ¡ j}|  d¡ˆ}t  |¡ d¡D ]f}| j|dF | 	¡ r||  
| ¡ j|¡ n| ¡ r–|  
| ¡ j|¡ W d   ƒ qN1 sª0    Y  qNW d   ƒ n1 sÊ0    Y  d S )NÚregular_filer   r   r“  r"  )r°   r±   rJ   r  r  Ú
write_textrž  r–  r¿  Úis_dirr>   Úis_file)r   Zdir_moder¢  Zregular_file_moder  rL   r   r   r   Útest_extractall_none_modeê  s    

ÿz.NoneInfoExtractTests.test_extractall_none_modec                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrf  ©rž  r   r   r   r   Útest_extractall_none_uidú  s    z-NoneInfoExtractTests.test_extractall_none_uidc                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrg  r§  r   r   r   r   Útest_extractall_none_gidþ  s    z-NoneInfoExtractTests.test_extractall_none_gidc                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nr   r§  r   r   r   r   Útest_extractall_none_uname  s    z/NoneInfoExtractTests.test_extractall_none_unamec                 C   s.   |   d¡ W d   ƒ n1 s 0    Y  d S )Nrh  r§  r   r   r   r   Útest_extractall_none_gname  s    z/NoneInfoExtractTests.test_extractall_none_gnamec                 C   s4   |   dddd¡ W d   ƒ n1 s&0    Y  d S )Nrf  rg  r   rh  r§  r   r   r   r   Útest_extractall_none_ownership
  s    z3NoneInfoExtractTests.test_extractall_none_ownership)r   r   r   r”  rP  r@  rB  r›  r   rž  r¡  r¦  r¨  r©  rª  r«  r¬  r   r   r   r   rŒ  ¬  s   




rŒ  c                   @   s   e Zd ZdZdS )ÚNoneInfoExtractTests_Datar
   N©r   r   r   r”  r   r   r   r   r­    s   r­  c                   @   s   e Zd ZdZdS )Ú!NoneInfoExtractTests_FullyTrustedr9  Nr®  r   r   r   r   r¯    s   r¯  c                   @   s   e Zd ZdZdS )ÚNoneInfoExtractTests_Tarr4   Nr®  r   r   r   r   r°    s   r°  c                   @   s   e Zd ZdZdS )ÚNoneInfoExtractTests_DefaultNr®  r   r   r   r   r±    s   r±  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNoneInfoTests_Miscc                 C   s  t  ¡ }tjtjtjfD ]þ}| j|dÜ tj|d|d}| t	¡}z| 
|¡ W n  tyr   |tjkrln‚ Y n„0 dD ]|}| j|d\ |jf i |d i¤Ž}|  t|› ¡ | 
|¡ W d   ƒ n1 sÌ0    Y  W d   ƒ qx1 sê0    Y  qxW d   ƒ q1 s0    Y  qd S )N)Ú	tarformatr€   )rÚ   r   r  )rþ   r   rf  rg  r   rh  rˆ  )r   rš   r   r—  r#  rÀ  r¿  r   rÐ  r   rÎ   rï  r·   r½   rð   )r   Úbior³  r4   rC   r‰  r‚  r   r   r   Útest_add  s(    ÿ

ÿzNoneInfoTests_Misc.test_addc                 C   sä  dhdhdhdhdhdhddhddhfD ]´}| j |d tjtdd	^}tjt ¡ d
dd}t t	d|¡ | 
¡  W d   ƒ n1 s0    Y  | ¡ D ]}|D ]}t||d ƒ qªq¢tjt ¡ d
dd}t t	d|¡ | 
¡  W d   ƒ n1 sþ0    Y  t| ¡  ¡  ¡ | ¡  ¡  ¡ ƒD ]p\}}|dhkr^t d|¡r^|  |d¡ q*|dhkrˆt d|¡rˆ|  |d¡ q*|dhkr²t d|¡r²|  |d¡ q*|dhkr| d¡r| d¡\}	}
| d¡\}}|  ||
¡ |  |d¡ q*|dhkrR| d¡rR| d¡\}	}
| d¡\}}|  ||	¡ |  |d¡ q*|dhkr | d¡r | d¡\}	}
| d¡\}}|  ||
¡ |  |d¡ nú|dhkrî| d¡rî| d¡\}	}
| d¡\}}|  ||	¡ |  |d¡ n¬|ddhkr>| d¡r>| d¡\}	}
| d¡\}}|  ||
¡ |  |d¡ n\|ddhkrŽ| d¡rŽ| d¡\}	}
| d¡\}}|  ||	¡ |  |d¡ n|  ||¡ q*W d   ƒ n1 s´0    Y  W d   ƒ q(1 sÔ0    Y  q(d S )Nrþ   r   rf  rg  r   rh  )r  r0   r
  r   rŽ   r   r‘   s   2003-01-\d\ds
   ????-??-??s   \d\d:\d\d:\d\ds   ??:??:??s   .([r-][w-][x-]){3}s
   ??????????)ó   tarfile/ó   lars/ó   foo/ó   /s   [0-9]+)ó   /tarfileó   /usersó   /baró   1000/s   Noneó   /100)r¶  r·  r¸  r½  )rº  r»  r¼  r¾  )r¿  r   r   r   r   rO   rš   r   r›   rœ   rU   r¦   rœ  r.  r   rž   rÙ  ÚreÚmatchr>   rÿ   r    Úendswith)r   r  r4   Ztio_prevr$  r‰  Ztio_newr$  ÚgotZexp_userZ	exp_groupZgot_userZ	got_groupr   r   r   r¤   7  sŠ    þ
ÿ&&ÿÿÿÿÿÿÿzNoneInfoTests_Misc.test_listN)r   r   r   rµ  r¤   r   r   r   r   r²    s   r²  c                 C   s  | dd… }t jddœ|d  t jddœ|d  B t jdt jt jB t jdœ|d  B t jddœ|d  B t jddœ|d	  B t jdt jt jB t jdœ|d
  B t j	ddœ|d  B t j
ddœ|d  B t jdt jt jB t jdœ|d  B }t  |¡dd… | dd… ksJ ‚|S )z†Inverse of `stat.filemode` (for permission bits)

    Using mode strings rather than numbers makes the later tests more readable.
    rX   Nr   )rF   ú-)r€   rÃ  )rK  rÃ  rb   ÚSr[   r~  é   é   rÐ  é   )rK  rÃ  rÑ   ÚTr½  )r  ÚS_IRUSRÚS_IWUSRÚS_IXUSRÚS_ISUIDÚS_IRGRPÚS_IWGRPÚS_IXGRPÚS_ISGIDÚS_IROTHÚS_IWOTHÚS_IXOTHÚS_ISVTXræ  )r   Zstr_modeÚresultr   r   r   Ú_filemode_to_intz  sH    ÿ
þþþûú
þþù
öõ
þþôÿ$rÖ  c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zddddddd	œd
d„Zdd„ ZdS )r÷  zèHelper to create a tar file with specific contents

    Usage:

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

        with t.open() as tar:
            ... # `tar` is now a TarFile with 'filename' in it!
    c                 C   s   t  ¡ | _d S r   )r   rš   r´  r   r   r   r   r+  ¡  s    zArchiveMaker.__init__c                 C   s   t jd| jd| _| S )Nr€   rò   )r   r   r´  Útar_wr   r   r   r   Ú	__enter__¤  s    zArchiveMaker.__enter__c                 G   s    | j  ¡  | j ¡ | _d | _d S r   )r×  r6   r´  rž   rp  )r   r’  r   r   r   Ú__exit__¨  s    
zArchiveMaker.__exit__N)r÷   rô  Úhardlink_tor   r@   Úcontentc                K   sî   t |ƒ}t |¡jf i |¤Ž}	|dur@t|t ƒr8| ¡ }t|ƒ}|dur`||	_|du r`t|	jƒ}|rnt	|ƒ|	_
|dur†tj}t |ƒ|	_|duržtj}t |ƒ|	_| d¡r¶|du r¶tj}|durÄ||	_|	 ¡ rØt |¡}
nd}
| j |	|
¡ dS )a¢  Add a member to the test archive. Call within `with`.

        Provides many shortcuts:
        - default `type` is based on symlink_to, hardlink_to, and trailing `/`
          in name (which is stripped)
        - size & content defaults are based on each other
        - content can be str or bytes
        - mode should be textual ('-rwxrwxrwx')

        (add more! this is unstable internal test-only API)
        Nr   )rÜ   r   rÉ   r·   r  rh   r?   r@   rê   rÖ  r   rÙ  rz  r"  rÁ  rø   r÷   rE  r   rš   r×  rÎ   )r   rm   r÷   rô  rÚ  r   r@   rÛ  rk  rC   rÚ   r   r   r   r…   ­  s4    




zArchiveMaker.addc                 K   s    t  | j¡}tjf d|i|¤ŽS )z9Open the resulting archive as TarFile. Call after `with`.rÚ   )r   rš   rp  r   r   )r   rk  r´  r   r   r   r   Ö  s    zArchiveMaker.open)	r   r   r   Ú__doc__r+  rØ  rÙ  r…   r   r   r   r   r   r÷  –  s   
ÿ)r÷  c                   @   sH  e Zd Ze e¡d Zed Zedddœdd„ƒZ	dLd	d
„Z
dd„ ZdMdd„Zdd„ Zdd„ Zdd„ Zej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d0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(dDdE„ Z)dFdG„ Z*dHdI„ Z+dJdK„ Z,dS )NÚTestExtractionFiltersÚouterdirr8  Tr   )Ú
check_flagÚignored_treesc                c   sL  t  | j¡( | jd }| d¡ z|j| j|d W n8 typ } z || _d| _t	ƒ | _
W Y d}~n`d}~0 0 |D ]}t  | j|  ¡ ¡ qvd| _d| _t	| j d¡ƒ| _
| j
 | j¡ | j
 |¡ z| V  W | ¡  n
| ¡  0 | jrò| j‚|  | j
t	ƒ ¡ |r|  | ¡ d¡ n|dks(J ‚W d  ƒ n1 s>0    Y  dS )	a  Extracts `tar` to `self.destdir` and allows checking the result

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

        Otherwise, all resulting files must be checked using `expect_file`,
        except the destination directory itself and parent directories of
        other files.
        When checking directories, do so before their contents.

        A file called 'flag' is made in outerdir (i.e. outside destdir)
        before extraction; it should not be altered nor should its contents
        be read/copied.

        *ignored_trees* is a set of directories to remove (including their
        contents) right after the archive is extracted. It is a workaround
        for Path.glob() failing to get all files in Python 3.10 and below.
        Úflagz
capture mer  TNFr“  r9  )r   r%  rÞ  r£  r  r:  rï  Úraised_exceptionÚreraise_exceptionr•  Úexpected_pathsr  Úresolver–  rš  r6   r>   r  )r   r4   rè  rß  rà  Z	flag_pathr’  Zignored_treer   r   r   Úcheck_contextæ  s2    

z#TestExtractionFilters.check_contextNc              
   C   sê  | j r| j ‚t tj | j| ¡¡}|  || j¡ | j 	|¡ |durrt
jdkrrt t | ¡ j¡¡}|  ||¡ |du r”t|tƒr”| d¡r”tj}|dur| j|  ¡ }t |¡}	z|	|krÐ|  | |	¡¡ W n> ty }
 z$|
 d|	›d|›¡ ‚ W Y d}
~
n
d}
~
0 0 n‚|tjks*|du r:|  | ¡ ¡ n\|tjkrV|  | ¡ ¡ n@|tjkrr|  | ¡ ¡ n$|tj krŽ|  | !¡ ¡ nt"|ƒ‚|dur²|  | ¡ j#|¡ |durÌ|  | $¡ |¡ |j%D ]}| j &|¡ qÒdS )z'Check a single file. See check_context.Nr  r   z	expected=z, got=)'râ  r°   r±   rK   rL   Únormpathr:  rŸ   rä  Úremoverœ   r  r  ræ  ÚS_IMODEr  r>   r  rÜ   rÁ  r   rø   Úreadlinkrµ   Úsamefilerï  Zadd_noter9  r¥  r¤  rä  Úis_fiforÙ  r   ÚNotImplementedErrorr¨  r  Úparentsrš  )r   rm   r÷   rô  r   r@   rÛ  rL   rÂ  r$  rU  Úparentr   r   r   Úexpect_file  sD    




z!TestExtractionFilters.expect_filec                    s8   | j |  ¡ ‰ | jˆ tjd ‡ fdd„| jD ƒ| _dS )z-Check a directory; forget about its contents.©r÷   c                    s   h | ]}ˆ |j vr|’qS r   )rî  r  ©Z	tree_pathr   r   Ú	<setcomp>K  s   
ÿz8TestExtractionFilters.expect_any_tree.<locals>.<setcomp>N)r:  rå  rð  r   rø   rä  r”  r   rò  r   Úexpect_any_treeG  s
    
ÿz%TestExtractionFilters.expect_any_treer÷  c                 C   sH   |   ||¡  | jd ur| j‚W d   ƒ n1 s20    Y  d| _| jS rþ  )r½   râ  rã  )r   Úexc_typeZ
message_rer   r   r   Úexpect_exceptionP  s
    
$z&TestExtractionFilters.expect_exceptionc              	   C   sx   t ƒ }| d¡ W d   ƒ n1 s&0    Y  dD ]>}|  | ¡ |¡ |  d¡ W d   ƒ q41 sh0    Y  q4d S )Nz
benign.txt)r9  r4   r
   ©r÷  r…   ræ  r   rð  ©r   rú  rè  r   r   r   Útest_benign_fileW  s
    (z&TestExtractionFilters.test_benign_filec              	   C   sî   t ƒ  }| | jd ¡ W d   ƒ n1 s,0    Y  |  | ¡ d¡ |  d¡ W d   ƒ n1 sf0    Y  dD ]t}|  | ¡ |¡P t| jƒ d¡r¼t| jƒ d¡}|  |› d¡ n|  	t
jd¡ W d   ƒ qt1 sÞ0    Y  qtd S )Nzescaped.evilr9  z../escaped.evil©r4   r
   r   z/escaped.evilz+['"].*escaped.evil['"] has an absolute path)r÷  r…   rÞ  ræ  r   rð  rÜ   rÿ   Úlstriprö  r   rÜ  )r   rú  rè  Zouterdir_strippedr   r   r   Útest_absolute^  s    .(þz#TestExtractionFilters.test_absolutec                 C   s
  t ƒ 6}|jddd |jddd | d¡ W d   ƒ n1 sB0    Y  t ¡ rR|  | ¡ d¡Z | jd urŒ|  t¡ W d   ƒ d S | j	ddd | j	ddd |  	d¡ W d   ƒ n1 sÆ0    Y  |  | ¡ d	¡ |  t
jd
¡ W d   ƒ n1 s0    Y  |  | ¡ d¡ |  t
jd¡ W d   ƒ n1 sF0    Y  n´|  | ¡ d¡ |  	d¡ W d   ƒ n1 s„0    Y  |  | ¡ d	¡ |  	d¡ W d   ƒ n1 sÀ0    Y  |  | ¡ d¡ |  	d¡ W d   ƒ n1 sü0    Y  d S )NÚcurrentr÷  ró  rï  z
current/..úparent/evilr9  r  r4   úT'parent/evil' would be extracted to ['"].*evil['"], which is outside the destinationr
   zK'parent' would link to ['"].*outerdir['"], which is outside the destination)r÷  r…   r   rü  ræ  r   râ  rö  rH  rð  r   rá  rÕ  ©r   rú  r   r   r   Útest_parent_symlinkw  s8    (


(þ$þ&**z)TestExtractionFilters.test_parent_symlinkc              
   C   s  t ƒ b}d}tjdkrd}nVdtjv rlt | jjd¡}d}tt	| j
ƒƒ| }|| t|ƒ|  }d| }ntdƒ‚d}d}	|D ]T}
|jtj ||¡tjd	d
 |jtj ||
¡|d tj ||¡}tj |	|
¡}	q€tjjg |¢d‘R Ž }dgt|ƒ }|j|tjj|Ž d |jdtj |d¡d |jdtj dd¡d |jddd |jddd W d   ƒ n1 sr0    Y  |  d¡´ | j| ¡ dd|hdz tjdkr¾|  ttf¡ nN| jrÒ|  t¡ n:| jddd | jddd | jdtjd | jd|d W d   ƒ n1 s"0    Y  W d   ƒ n1 sB0    Y  dD ]¬}|  |¡Š | j| ¡ |dV |  ttf¡}t|tƒrºtjdkrª|  |jd¡ n|  |j t j!¡ W d   ƒ n1 sÐ0    Y  W d   ƒ n1 sð0    Y  qPd S )NZabcdefghijklmnopr  ZdddddddddddddddddddddddddÚPC_PATH_MAXrX   Údz1Need to guess component length for {sys.platform}r   Ú
drwxrwxrwxrö  ró  Zþllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllrø  ÚescapeZflaglinkrá  ©rÚ  Z	overwrite)rÛ  zescape/newfileÚnewr9  F)rè  rß  rà  z
../newfilerñ  ro   rú  r  )r~  rÆ  éÎ   )"r÷  rœ   r  rK   Úpathconf_namesÚpathconfrÞ  rï  r?   rÜ   r:  rí  r…   rL   rM   r   rø   r¿  ræ  r   rö  r¾   rH  râ  rû   rð  rÙ  rõ  r  rŸ   Úwinerrorr>   ÚerrnoZENAMETOOLONG)r   rú  ZstepsZ	componentZmax_path_lenZpath_sep_lenZdest_lenZcomponent_lenrL   Z	step_pathÚiZlinkpathZparent_segmentsrè  r’  r   r   r   Útest_realpath_limit_attack©  s^    



ÿ.ÿÿN z0TestExtractionFilters.test_realpath_limit_attackc                 C   sN  t  ¡ r°tj td¡}t |¡ t dtj |d¡¡ ttj |ddd¡dƒ W d   ƒ n1 sd0    Y  tj 	tj |d¡¡rŠd}n&tj 	tj |dd¡¡r¨d}nt
d	ƒ‚tƒ 6}|jddd
 |jddd
 | d¡ W d   ƒ n1 sò0    Y  |  | ¡ d¡V t  ¡ r@| jddd
 | jddd
 |  d¡ n|  d¡ |  d¡ W d   ƒ n1 sj0    Y  |  | ¡ d¡> t  ¡ r |  tjd¡ n|  d¡ |  d¡ W d   ƒ n1 sÊ0    Y  |  | ¡ d¡T t  ¡ r|r|  tjd¡ n|  tjd¡ n|  d¡ |  d¡ W d   ƒ n1 s@0    Y  d S )NZresolution_testr÷  rý  rø  rÌ  r€   TFz#Could not determine link resolutionró  zcurrent/parentrþ  r9  rï  r  zcurrent/r4   rÿ  r
   zS'current/parent' would link to ['"].*outerdir['"], which is outside the destination)r   rü  rK   rL   rM   rJ   r„   rã  r   r  rP  r÷  r…   ræ  rð  rö  r   rá  rÕ  )r   ZtestpathZdotdot_resolves_earlyrú  r   r   r   Útest_parent_symlink2ñ  sV    
(

*
þ
*
þþ
z*TestExtractionFilters.test_parent_symlink2c                 C   s4  t ƒ *}|jd| jd | d¡ W d   ƒ n1 s60    Y  |  | ¡ d¡> t ¡ rv| jd| jd |  d¡ n
|  d¡ W d   ƒ n1 s”0    Y  |  | ¡ d¡2 t ¡ rÈ|  t	j
d¡ n
|  d¡ W d   ƒ n1 sæ0    Y  |  | ¡ d¡ |  t	jd	¡ W d   ƒ n1 s&0    Y  d S )
Nrï  ró  rþ  r9  r  r4   rÿ  r
   ú&'parent' is a link to an absolute path)r÷  r…   rÞ  ræ  r   r   rü  rð  rö  r   rá  rÝ  r   r   r   r   Útest_absolute_symlinkG  s(    ((þ(þz+TestExtractionFilters.test_absolute_symlinkc                 C   sô   t ƒ $}|jd| jd d W d   ƒ n1 s00    Y  |  | ¡ d¡ |  td¡ W d   ƒ n1 sl0    Y  |  | ¡ d¡ |  td¡ W d   ƒ n1 s¨0    Y  |  | ¡ d¡ |  tjd¡ W d   ƒ n1 sæ0    Y  d S )	Nrï  rÅ   r  r9  z.*foo. not foundr4   r
   r  )	r÷  r…   rÞ  ræ  r   rö  rû   r   rÝ  r   r   r   r   Útest_absolute_hardlinkd  s    2**þz,TestExtractionFilters.test_absolute_hardlinkc              	   C   sú   t ƒ }|jddd W d   ƒ n1 s*0    Y  zf| j| ¡ dd@ t ¡ rzt| jtƒrj|  	t¡ qz| j
ddd n W d   ƒ n1 sŽ0    Y  W n ty¬   Y n0 dD ]B}|  | ¡ |¡ |  	tjd¡ W d   ƒ q²1 sê0    Y  q²d S )Nú../mooz..//tmp/mooró  r9  r  rú  zH'../moo' would be extracted to '.*moo', which is outside the destination)r÷  r…   ræ  r   r   rü  r  râ  rH  rö  rð  r   rá  rø  r   r   r   Útest_sly_relative0u  s"    ,"þz(TestExtractionFilters.test_sly_relative0c              	   C   sà   t ƒ (}| d¡ |jddd W d   ƒ n1 s40    Y  |  | ¡ d¡6 | jdtjd t ¡ rv| jdd	d W d   ƒ n1 sŠ0    Y  d
D ]B}|  | ¡ |¡ |  	tj
d¡ W d   ƒ q˜1 sÐ0    Y  q˜d S )Nztmp/ztmp/../../mooztmp/../..//tmp/mooró  r9  Útmprñ  r  ztmp/../../tmp/moorú  zU'tmp/../../moo' would be extracted to ['"].*moo['"], which is outside the destination)r÷  r…   ræ  r   rð  r   rø   r   rü  rö  rá  rø  r   r   r   Útest_sly_relative2—  s    
,,þz(TestExtractionFilters.test_sly_relative2c              	   C   sè   t ƒ P}|jddd |jdtj dd¡d |jdtj d	dd¡d
 W d   ƒ n1 s\0    Y  dD ]x}|  | ¡ |¡T | jddd | jddd t 	¡ r¶| jdddd n| jddd W d   ƒ qj1 sØ0    Y  qjd S )Nútargetdir/targetr~  rt  úlinkdir/hardlinkÚ	targetdirrá  r  úlinkdir/symlinkrø  ró  ©r4   r
   r9  z../targetdir/target©r@   rô  ©
r÷  r…   rK   rL   rM   ræ  r   rð  r   rü  rø  r   r   r   Útest_deep_symlinkª  s"    ÿÿ&ÿz'TestExtractionFilters.test_deep_symlinkc              	   C   s:  t ƒ t}|jddd |jdtj dd¡d |jddd	 |jd
tj dd¡d |jdtj dd¡d W d   ƒ n1 s€0    Y  dD ]¦}|  | ¡ |¡€ | jddd	 | jd
dd	 | jddd	 t 	¡ rø| jdddd | jdddd n| jddd	 | jddd	 W d   ƒ qŽ1 s*0    Y  qŽd S )Nr  Zhardlinkró  Zsymlink2ZlinkdirZ	hardlink2r  r~  rt  r  r  rá  r  zlinkdir/hardlink2rã  r  r  r  rø  r   r   r   Útest_chainsÁ  s,    ÿ6ÿÿz!TestExtractionFilters.test_chainsc              
   C   sæ  t ƒ |}| d¡ | d¡ |jdtj dd¡d |jdtj ddd	¡d |jdd
d |jdtj dd¡d W d   ƒ n1 sˆ0    Y  |  | ¡ d¡\ t ¡ sº|  	t
j¡ n6tjdkrÒ|  	t
j¡ n|  	t
jd¡}|  |jt
j¡ W d   ƒ n1 s0    Y  dD ]Ì}|  |¡ª |  | ¡ |¡x t ¡ s`|  d¡ |  d¡ |  d¡ n>|  d¡ |  d¡ | jddd | jddd | jdd
d W d   ƒ n1 s´0    Y  W d   ƒ n1 sÔ0    Y  qd S )Nz	a/t/dummyzb/Úcro   rÑ   ró  zc/escaperø  Z	link_hererp   Zboomr  r  r
   r  zJlink 'boom' would be extracted as a copy of 'c/escape', which was rejected)r4   r9  zc/z
a/t/escapez../../link_here)r÷  r…   rK   rL   rM   ræ  r   r   rü  rö  r   rÕ  rœ   r  rÚ  rÛ   Ú	__cause__r¿  rð  )r   rú  rU  rè  r   r   r   Útest_sneaky_hardlink_fallbackÚ  sD    

ÿ6ÿ
þÿ$




z3TestExtractionFilters.test_sneaky_hardlink_fallbackc              
   C   sÎ   t ƒ <}|jdtj ddddd¡d |jddd W d   ƒ n1 sH0    Y  dD ]r}|  | ¡ |¡N t ¡ rª| j	ddd |dkrš| j	ddd qª| j	dd	d n W d   ƒ qV1 s¾0    Y  qVd S )
Nr  r  rø  z	link-hereró  rû  r  r
   zlink/link/../../link-here)
r÷  r…   rK   rL   rM   ræ  r   r   rü  rð  rø  r   r   r   Útest_exfiltration_via_symlink  s    ,ÿz3TestExtractionFilters.test_exfiltration_via_symlinkc              	   C   s  t ƒ H}|jddd |jddd |jddd |jdd	d W d   ƒ n1 sT0    Y  d
D ]²}|  | ¡ |¡Œ}t ¡ sŒ|  d¡ nB|dkr²| jdd	d | jddd n| jdd	d | jddd tjdkrô|j	 
¡ j}|  |d@ d¡ W d   ƒ qb1 s
0    Y  qbd S )Nza/pwnr÷  ró  za/pwn/r  rŒ   zx/../za/xz../r  r
   r  r  )r÷  r…   ræ  r   r   rü  rð  rœ   r  rÞ  r  r  rœ  )r   rú  rè  Úccr  r   r   r   Útest_chmod_outside_dir#  s"    ,
z,TestExtractionFilters.test_chmod_outside_dirc              	   C   s¼   t ƒ @}| d¡ | d¡ |jddd |jddd W d   ƒ n1 sL0    Y  dD ]\}|  | ¡ |¡8}|  d¡ |  d¡ |  d¡ |  d¡ W d   ƒ qZ1 s¬0    Y  qZd S )	Núdir/zdir/../afileZlink1r  Zlink2zdir/../dir/../afiler  Zafiler÷  )r   rú  rè  r$  r   r   r   Útest_link_fallback_normalizesB  s    

,


z3TestExtractionFilters.test_link_fallback_normalizesc              
   C   s*  t ƒ r}|jddd |jddd |jddd |jdd	d |jd
dd |jddd |jddd W d   ƒ n1 s~0    Y  tj td¡}t|dƒ W d   ƒ n1 s¶0    Y  zÎt |¡jtj	B tj
B tjB }zt ||¡ W nH ty8 } z.|jttddƒkr"|  d¡ n‚ W Y d }~n
d }~0 0 t |¡j}|tj	@ rVdnd}|tj@ rjdnd}|tj
@ r~dnd}W t |¡ nt |¡ 0 t |¡ t |¡jtj	B tj
B tjB }t ||¡ t |¡j}|tj	@ rìdnd}	|tj@ r dnd}
|tj
@ rdnd}t |¡ |  | ¡ d¡¢ | jdd|› d|› d|› d | jddd | jddd | jdd	d | jd
dd | jdd|› d|	› d | jdd|
› d|› d|	› d W d   ƒ n1 sÜ0    Y  |  | ¡ d¡r | jddd | jddd | jddd | jdd	d | jd
dd | jddd | jddd W d   ƒ n1 sp0    Y  |  | ¡ d¡Š t t | j ¡ j¡¡}| jddd | jddd | jdd d | jdd!d | jd
d"d | jd|d | jd|d W d   ƒ n1 s0    Y  d S )#NZall_bitsrõ  rŒ   Z	perm_bitsz
?rwxrwxrwxZexec_group_otherz
?rw-rwxrwxZread_group_onlyz
?---r-----Zno_bitsz
?---------r&  z
?---rwsrwtzdir_all_bits/ztmp.filer€   ZEFTYPEr   z?chmod() failed with EFTYPE: regular users cannot set sticky bitrÑ   rK  rb   r9  z?rwrï   z?---rwr4   z
?rwxr-xr-xz
?rw-r-xr-xz
?---r-xr-xr
   z
?rw-r--r--z
?rw-r-----z
?rw-------)r÷  r…   rK   rL   rM   rJ   r   r  r  rÔ  rÐ  rÌ  rë  rõ  r  rà   r@  r  r„   r†   ræ  rð  ræ  ré  rÞ  )r   rú  Ztmp_filenameZnew_moder’  Zgot_modeZ_t_fileZ
_suid_fileZ
_sgid_fileZ_t_dirZ	_suid_dirZ	_sgid_dirZnormal_dir_moder   r   r   Ú
test_modesR  s–    ,
ÿÿÿ

ÿÿÿ
ÿÿ&.
ÿz TestExtractionFilters.test_modesc              	   C   sÎ   t ƒ  }|jdtjd W d   ƒ n1 s,0    Y  dD ]P}|  | ¡ |¡, ttdƒrl| jdtjd n W d   ƒ q:1 s€0    Y  q:|  | ¡ d¡ |  	tj
d¡ W d   ƒ n1 sÀ0    Y  d S )NrÅ   rñ  )r9  r4   Úmkfifor
   z'foo' is a special file)r÷  r…   r   rä  ræ  r   r9  rK   rð  rö  rØ  rø  r   r   r   Ú	test_pipe¢  s    .
 þzTestExtractionFilters.test_pipec              	   C   s¸   t jt jt jfD ]¢}t  d¡}||_t  |d¡}|  ||¡ t  |d¡}|  	|j|¡ |  
t j¡}t  |d¡ W d   ƒ n1 s„0    Y  |  |jjt j¡ |  	|jjjd¡ qd S )NrÅ   r   )r   rä  rÛ  r8  rÉ   r÷   rÖ  r‚  r×  r>   rÁ   rØ  rÒ  rÛ   rB  rC   rm   )r   Zspecial_typerC   Ztrustedr4   Úcmr   r   r   Útest_special_files´  s    
*z(TestExtractionFilters.test_special_filesc                 C   sV   t j t¡6}| ¡ D ]}t  |d¡}|  ||¡ qW d   ƒ n1 sH0    Y  d S )Nr   )r   r   r   r   r¦   rÖ  r‚  ©r   r4   rC   Zfilteredr   r   r   Útest_fully_trusted_filterÃ  s    z/TestExtractionFilters.test_fully_trusted_filterc                 C   sn   t jjtddJ}| ¡ D ]0}t  |d¡}|  |j|j¡ |  |j|j¡ qW d   ƒ n1 s`0    Y  d S ©Nr0   r
  r   )	r   r   r   r   r¦   r×  r‚  rm   r÷   r-  r   r   r   Útest_tar_filterÊ  s
    z%TestExtractionFilters.test_tar_filterc              
   C   sŒ   t jjtddh}| ¡ D ]N}zt  |d¡}W n t jyF   Y qY n0 |  |j|j¡ |  |j	|j	¡ qW d   ƒ n1 s~0    Y  d S r/  )
r   r   r   r   r¦   rÒ  rç  r‚  rm   r÷   r-  r   r   r   Útest_data_filterÔ  s    
z&TestExtractionFilters.test_data_filterc              	   C   s˜   t ƒ }| d¡ W d  ƒ n1 s&0    Y  t | ¡J |  | ¡ d¡ |  d¡ W d  ƒ n1 sl0    Y  W d  ƒ n1 sŠ0    Y  dS )z6Ensure the default filter does not warn (like in 3.12)rÅ   N)r÷  r…   r   Zcheck_no_warningsræ  r   rð  r   r   r   r   Útest_default_filter_warns_notà  s
    (z3TestExtractionFilters.test_default_filter_warns_notc                 C   sT   t  td¡}dd„ }||_|  |d ¡ |  d¡ W d   ƒ n1 sF0    Y  d S )NrF   c                 S   s   | j dkr| S d S d S ©Nr9   r7  ©rC   rL   r   r   r   Ústrict_filterê  s    
zSTestExtractionFilters.test_change_default_filter_on_instance.<locals>.strict_filterr9   )r   r   r   r”  ræ  rð  )r   r4   r5  r   r   r   Ú&test_change_default_filter_on_instanceè  s
    z<TestExtractionFilters.test_change_default_filter_on_instancec              	   C   s‚   dd„ }t  td¡}t t jdt|ƒ¡F |  |d ¡ |  d¡ W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  d S )Nc                 S   s   | j dkr| S d S d S r3  r7  r4  r   r   r   r5  ô  s    
zPTestExtractionFilters.test_change_default_filter_on_class.<locals>.strict_filterrF   r”  r9   )r   r   r   r   r›   r²  ræ  rð  )r   r5  r4   r   r   r   Ú#test_change_default_filter_on_classó  s    
ÿz9TestExtractionFilters.test_change_default_filter_on_classc                 C   sV   G dd„ dt jƒ}|tdƒ}|  |d ¡ |  d¡ W d   ƒ n1 sH0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zQTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclassc                 S   s   |j dkr|S d S d S r3  r7  ©r   rC   rL   r   r   r   r”    s    
zcTestExtractionFilters.test_change_default_filter_on_subclass.<locals>.TarSubclass.extraction_filterNr®  r   r   r   r   ÚTarSubclass   s   r9  rF   r9   )r   r   r   ræ  rð  )r   r9  r4   r   r   r   Ú&test_change_default_filter_on_subclassÿ  s    
z<TestExtractionFilters.test_change_default_filter_on_subclassc                 C   sL   t  td¡}d|_|  |d ¡ |  t¡ W d   ƒ n1 s>0    Y  d S )NrF   r
   )r   r   r   r”  ræ  rö  rì  r»   r   r   r   Ú$test_change_default_filter_to_string  s    z:TestExtractionFilters.test_change_default_filter_to_stringc                    s˜   ‡ fdd„}t ƒ .}| d¡ | d¡ | d¡ W d   ƒ n1 sF0    Y  ˆ  | ¡ |¡$ ˆ  d¡ ˆ  d¡ W d   ƒ n1 sŠ0    Y  d S )Nc                    s6   ˆ   |ˆ j¡ | jdkr$| jddS | jdkr2d S | S )NÚ	move_thisÚmovedr7  Úignore_this)r‚  r:  rm   r·   r4  r   r   r   Úcustom_filter  s    

z?TestExtractionFilters.test_custom_filter.<locals>.custom_filterr<  r>  Zkeepr=  r÷  )r   r?  rú  r   r   r   Útest_custom_filter  s    

(
z(TestExtractionFilters.test_custom_filterc                 C   sn   t ƒ }| d¡ W d   ƒ n1 s&0    Y  |  | ¡ d¡ |  t¡ W d   ƒ n1 s`0    Y  d S )NrÅ   zbad filter name)r÷  r…   ræ  r   rö  rð   r   r   r   r   Útest_bad_filter_name"  s    (z*TestExtractionFilters.test_bad_filter_namec              	   C   sÖ   G dd„ dƒ}t ƒ 2}| d¡ |jddd | d¡ W d   ƒ n1 sL0    Y  |ƒ J}|  | ¡ |¡ |  d¡ W d   ƒ n1 sŽ0    Y  W d   ƒ n1 s¬0    Y  |  |jd¡ |  |jd¡ d S )	Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zBTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilterc                 S   s
   d| _ | S rI  )Únum_files_processedr   r   r   r   rØ  -  s    zLTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__enter__c                 S   s:   zt  ||¡}W n t jy&   Y d S 0 |  jd7  _|S )NrX   )r   rÒ  rç  rB  r8  r   r   r   Ú__call__1  s    zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__call__c                 W   s
   d| _ d S )NT)Údone)r   Úexc_infor   r   r   rÙ  9  s    zKTestExtractionFilters.test_stateful_filter.<locals>.StatefulFilter.__exit__N)r   r   r   rØ  rC  rÙ  r   r   r   r   ÚStatefulFilter,  s   rF  ZgoodZbadr   ró  r[   T)r÷  r…   ræ  r   rð  r>   rB  rD  )r   rF  rú  r?  r   r   r   Útest_stateful_filter(  s    
(Fz*TestExtractionFilters.test_stateful_filterc                 C   s:  dd„ }dd„ }dd„ }dd„ }d	d
„ }t ƒ }| d¡ W d   ƒ n1 sN0    Y  |  |jdd|¡ W d   ƒ n1 s‚0    Y  |  |jdd|¡ W d   ƒ n1 s¶0    Y  |  |jdd|¡ W d   ƒ n1 sê0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 s,0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 sl0    Y  |  |jdd|¡ W d   ƒ n1 s¢0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 sä0    Y  |  |jdd|¡ |  t	¡ W d   ƒ n1 s$0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 sf0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 s¦0    Y  |  |jdd|¡ |  tj
¡ W d   ƒ n1 sè0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 s*0    Y  |  |jdd|¡ |  t	¡ W d   ƒ n1 sj0    Y  |  |jdd|¡ |  tj¡ W d   ƒ n1 s¬0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 sì0    Y  |  |jdd|¡ |  t¡ W d   ƒ n1 s,0    Y  d S )Nc                 S   s   t  d¡‚d S )Nzfailed with ExtractError)r   ÚExtractErrorr4  r   r   r   Úextracterror_filterG  s    zBTestExtractionFilters.test_errorlevel.<locals>.extracterror_filterc                 S   s   t  d¡‚d S )Nzfailed with FilterError)r   rç  r4  r   r   r   Úfiltererror_filterI  s    zATestExtractionFilters.test_errorlevel.<locals>.filtererror_filterc                 S   s   t dƒ‚d S )Nzfailed with OSError)rõ  r4  r   r   r   Úoserror_filterK  s    z=TestExtractionFilters.test_errorlevel.<locals>.oserror_filterc                 S   s   t  d¡‚d S )Nzfailed with base TarError)r   ÚTarErrorr4  r   r   r   Útarerror_filterM  s    z>TestExtractionFilters.test_errorlevel.<locals>.tarerror_filterc                 S   s   t dƒ‚d S )Nzfailed with ValueError)rð   r4  r   r   r   Úvalueerror_filterO  s    z@TestExtractionFilters.test_errorlevel.<locals>.valueerror_filterrÌ  r   rô  rX   r[   zboo!)r÷  r…   ræ  r   rö  r   rL  rð   rç  rõ  rH  rì  )r   rI  rJ  rK  rM  rN  rú  r   r   r   Útest_errorlevelF  sN    (,* ,*,*,,*,*z%TestExtractionFilters.test_errorlevel)NNNNN)r÷  )-r   r   r   r°   r±   rJ   rÞ  r:  r   ræ  rð  rô  rö  rù  rü  r  r   r:  r  r  r  r  r  r  r  r  r"  r#  r%  r'  r(  r*  r,  r.  r0  r1  r2  r6  r7  r:  r;  r@  rA  rG  rO  r   r   r   r   rÝ  Ü  sP   /  ÿ
1	
2
GV"3P
rÝ  c                   @   s,  e Zd ZeZejej d e ej d e ej d e ej d e ejd  e d ej ej	 ejej
  ej ejd  ejd  ejd  e ej ejd  e ej ejej  ejd  Zejej d	 ej d
 ej d
 ej d e ejd  e d ej ej	 ejej
  ej ejd  ejd  ejd  ejd  ejd  Zejej d e ej d e ej d e ej d e ejd  e d ej ej	 ejej
  ejd  Ze d¡ ej¡Zdej Zdd„ Zd!dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ ZdS )"ÚOffsetValidationTestss   000755s   000001s   ÿÿÿÿÿÿÿÿÿÿÿé   s   0011407é    rÐ  é   s   0000755s   0000001s   0011327r½  é§   s   0010070rw  r©  ó   ÿc                 C   s:   t | jdƒ}| |¡ W d   ƒ n1 s,0    Y  d S rÀ   )r   r   rÈ   )r   Úbufferrô   r   r   r   Ú_write_bufferë  s    z#OffsetValidationTests._write_bufferNc              	   C   sv   t | jdƒV}tj d||d&}| ¡ W  d   ƒ W  d   ƒ S 1 sJ0    Y  W d   ƒ n1 sh0    Y  d S )NrW   rF   )r   rÚ   rÆ   )r   r   r   r¦   )r   rÆ   rô   r4   r   r   r   Ú_get_membersï  s    ÿz"OffsetValidationTests._get_membersc                 C   s:   |   tjd¡ |  ¡  W d   ƒ n1 s,0    Y  d S )NrÓ   )r½   r   r¹   rX  r   r   r   r   Ú#_assert_raises_read_error_exceptionö  s    ÿz9OffsetValidationTests._assert_raises_read_error_exceptionc              	   C   sh   d| j fd| jfd| jffD ]F\}}| j|d" |  |¡ |  ¡  W d   ƒ q1 sX0    Y  qd S )NÚposixr¥  Zv7rb  )Úinvalid_posix_headerÚinvalid_gnu_headerÚinvalid_v7_headerr¿  rW  rY  )r   Z
tar_formatZinvalid_headerr   r   r   Ú&test_invalid_offset_header_validationsü  s    ý
z<OffsetValidationTests.test_invalid_offset_header_validationsc                 C   s\   | j | j | j  }|  |¡ |  ¡ }|  t|ƒd¡ |  |d jd¡ |  |d jd¡ d S )NrX   r   r©  )Úvalid_gnu_headerr\  rW  rX  r>   r?   rm   ró   ©r   rV  r§   r   r   r   Ú(test_early_stop_at_invalid_offset_header  s    
z>OffsetValidationTests.test_early_stop_at_invalid_offset_headerc                 C   s:   | j | j d }|  |¡ | jdd}|  t|ƒd¡ d S )Nr~  T©rÆ   r   )r\  Ú
data_blockrW  rX  r>   r?   r`  r   r   r   Útest_ignore_invalid_archive  s    
z1OffsetValidationTests.test_ignore_invalid_archivec                 C   s†   | j | j| j df| j| j | j dffD ]X\}}}|  || ¡ | jdd}|  t|ƒd¡ |  |d jd¡ |  |d j|¡ q(d S )Nr   rY   Trb  rX   r©  )	r_  r\  rc  rW  rX  r>   r?   rm   ró   )r   Zfirst_blockZsecond_blockZexpected_offsetr§   r   r   r   Ú"test_ignore_invalid_offset_headers  s    
ý
ýúz8OffsetValidationTests.test_ignore_invalid_offset_headers)N)r   r   r   rƒ   r   r   rè  r  ÚSPACEr9  r   rã  rà  r[  rÔ  r\  r]  rÉ   rÊ   r#  r_  rÇ  rc  rW  rX  rY  r^  ra  rd  re  r   r   r   r   rP  Ž  s(  
þþþüüüúúúøø
ö
öôôò
ðîìêèèèæææ
äâþ$
þþüüúúøø
ö
öôôò
ðîìêèæäþ"
þþþüüüúúúøø
ö
öôôò
ðîþ


rP  c               	   C   s¶   t  t¡ t t¡ tgattdƒ} |  ¡ }W d   ƒ n1 sB0    Y  t	t
tfD ]Z}|jrVt  |j¡ t |j¡ | |jd¡}| |¡ W d   ƒ qV1 s¦0    Y  qVd S )NrW   r­   )r   r  rJ   rK   rø  r   r  r   r=   r!   r%   r)   rØ  rÈ   )rD   r
   r   r4   r   r   r   ÚsetUpModule)  s    

&rg  c                   C   s   t j t¡rt t¡ d S r   )rK   rL   r  rJ   r   r  r   r   r   r   ÚtearDownModule:  s    rh  Ú__main__)…r  rœ   rK   r   Zhashlibr   Ú
contextlibr   Úrandomr   r°   r˜  r¿  Úwarningsr  r1  Zunittest.mockr   rg  r   Ztest.supportr   r   r$   r^  r4  r&   r,   r   rL   rÝ   ZTESTFNrJ   r3  rÔ   r   rM   r#   r'   r+   rƒ   r-  rf  rA   r‰  r   Zrequires_gzipr!   Zrequires_bz2r%   Zrequires_lzmar)   r.   ZTestCaser8   r‡   r‰   rŠ   r‹   r©   rª   r«   r¬   rÖ   r<  r=  r>  rB  rC  rQ  rR  rS  rT  r]  r^  rb  rc  r˜  r¤  r³  rÃ  rÉ  r  r  r	  r
  r  r  r  r  r6  r<  rQ  rV  rX  r[  r8  r9  r\  ra  ru  r…  r˜  rœ  rž  r¢  r²  r³  r´  rµ  r¼  rý  r>  r;  rF  rN  ra  rd  r€  rŒ  r­  r¯  r°  r±  r²  rÖ  r÷  rÝ  rP  rg  rh  r   rå  r   r   r   r   Ú<module>   s4  




ÿÿ
 Pw  =(a*;V  9'R.Z			* QO@;s ^:!v(bÿÿ^F       9 
